Merge
diff --git a/.hgtags b/.hgtags
index 76e1bad..d105faf 100644
--- a/.hgtags
+++ b/.hgtags
@@ -1,3 +1,8 @@
+e2d470750e539380af7f7482d9823d1d86886901 jdk8-b130
+3f0065f1d70b21ca2dd7ff7910571c0d09b0bc33 jdk8-b129
+b8dea6f27db47b608bddc7a9c60dfabc958be23e jdk8-b125
+369bf27a9abbf5c0bc259dba8899a6252469f3d5 jdk8u20-b01
+e741d4831bdcf6441d108e4cb0aa8954a3858fbf jdk8u20-b02
1cc8dd79fd1cd13d36b385196271a29632c67c3b jdk7-b24
bf2517e15f0c0f950e5b3143c4ca11e2df73dcc1 jdk7-b25
5ae7db536e3fcf6be78e45b240a9058095e0ed38 jdk7-b26
@@ -246,4 +251,5 @@
c83fd4f03003445667690cfd53ea526bf38cf15b jdk8-b124
c71ff72825bdd997d67c0e0e56adba76d6e3e16e jdk8-b126
4e258524ac24919d443a4c37d25bb9962de8bf60 jdk8-b127
-e2d470750e539380af7f7482d9823d1d86886901 jdk8-b130
+41177d357635a717f5e0e24947145ba5816db41f jdk8u20-b03
+e33cb36ecbadb4b6ae8d69d4da2ddf15077610e1 jdk8u20-b04
diff --git a/.hgtags-top-repo b/.hgtags-top-repo
index b0d9e6b..537bff1 100644
--- a/.hgtags-top-repo
+++ b/.hgtags-top-repo
@@ -245,9 +245,14 @@
1e1f86d5d4e22c15a9bf9f1581acddb8c59abae2 jdk8-b121
347009c5881668b1e44f64d56d4a96cb20a183fa jdk8-b122
ff1478785e43718146ffbce97e007f39c3bcaa32 jdk8-b123
+c330fa67c4daffdc86527f1a24941aa5a3500098 jdk8u20-b00
790bbd46b2015e69ce301dae194c2b4141011f2d jdk8-b124
+78abb27c27d988a86e6c82b2cce03cdc04211127 jdk8u20-b01
790bbd46b2015e69ce301dae194c2b4141011f2d jdk8-b125
9ccce5bf1b0ea0d3f3fb871be069f305f9cea530 jdk8-b126
2e2ffb9e4b690c63b32142861177390e0f2c40e9 jdk8-b127
101e42de46869e6604fbf095e1666fbf07fcb93c jdk8-b128
1e5fe865491300cd0c63261ecf8d34e621e1345c jdk8-b129
+cc868070f1959b849c8c3b867771fbdb07b9ba05 jdk8u20-b02
+6a3d3b7feab4d4a8252c63b4ce7d0fab106cf2f7 jdk8u20-b03
+7e1b01df280fb065c5953c48f54ac9d619ecbf1c jdk8u20-b04
diff --git a/.jcheck/conf b/.jcheck/conf
index 6d0dbe4..5bd24b1 100644
--- a/.jcheck/conf
+++ b/.jcheck/conf
@@ -1 +1,2 @@
project=jdk8
+bugids=dup
diff --git a/corba/.hgtags b/corba/.hgtags
index 090d0fd..319f258 100644
--- a/corba/.hgtags
+++ b/corba/.hgtags
@@ -245,9 +245,14 @@
a7d3638deb2f4e33217b1ecf889479e90f9e5b50 jdk8-b121
0cd687347540b1d14e9cc653ba6af5f6807eb379 jdk8-b122
1ecd4619f60c2432120821e805e64bdb45de66cc jdk8-b123
+afecd2878aee29c2d0282d2c6b3ba56e91b0b2de jdk8u20-b00
7b45151c7a05764b87ca088ba70448d39de6d41f jdk8-b124
+7547c6a90a9e06b11ec1dca943b30c09c1665aa8 jdk8u20-b01
7b45151c7a05764b87ca088ba70448d39de6d41f jdk8-b125
8ceb68fd9e107767edf949c6b3ac9d425ca93cac jdk8-b126
b8c71dae05574f8eca7ca6d703b16b450850b033 jdk8-b127
113e7569b49bca18846e5e5b74e644580b805902 jdk8-b128
5c72d74c6805d1b4f6192f7a3550d126acf37005 jdk8-b129
+bfafb13aac1c8b2d9184d59ec510b45d965b7667 jdk8u20-b02
+9059a1c857044ad5ce7564ddb71a064364f8fcf5 jdk8u20-b03
+abe5b0157c367a72f9059269ca633ecfe15732d2 jdk8u20-b04
diff --git a/corba/.jcheck/conf b/corba/.jcheck/conf
index 6d0dbe4..5bd24b1 100644
--- a/corba/.jcheck/conf
+++ b/corba/.jcheck/conf
@@ -1 +1,2 @@
project=jdk8
+bugids=dup
diff --git a/hotspot/.hgtags b/hotspot/.hgtags
index 324f1d1..7308ed1 100644
--- a/hotspot/.hgtags
+++ b/hotspot/.hgtags
@@ -408,6 +408,8 @@
55fb97c4c58d6ed4db8ec02a382ba518d9265815 hs25-b65
d3521d8e562a782f66fc0dfdebeffba2c7e3471d jdk8-b122
591135a7d6f96c0ef281d078cee9a8d8c342d45c jdk8-b123
+c89630a122b43d0eabd78b74f6498a1c3cf04ca3 jdk8u20-b00
+c89630a122b43d0eabd78b74f6498a1c3cf04ca3 hs25.20-b00
9b9816164447214f21b06ccf646893c281c76a42 hs25-b66
df333ee12bba67e2e928f8ce1da37afd9bf95b48 jdk8-b124
3585183c191aa6b4d0375ea659515335e1804417 hs25-b67
@@ -418,3 +420,12 @@
35038da7bb9ddd367a0a6bf926dfb281aee1d554 jdk8-b127
874c0b4a946c362bbf20d37c2a564b39093152e6 jdk8-b128
cb39165c4a65bbff8db356df411e762f9e5423b8 jdk8-b129
+412d3b5fe90e54c0ff9d9ac7374b98607c561d5a hs25.20-b01
+4638c4d7ff106db0f29ef7f18b128dd7e69bc470 hs25.20-b02
+e56d11f8cc2158d4280f80e56d196193349c150a hs25.20-b03
+757fe22ae90681e2b6cff50699c5abbe2563dd2c jdk8u20-b01
+9c2ddd17626e375554044a3082a6dc5e68184ed9 jdk8u20-b02
+ecf3678d5736a645aea893b525a9eb5fa1a8e072 hs25.20-b04
+51e1bb81df8680bd237630323de5e0704fb25607 jdk8u20-b03
+54436d3b2a915ff50a8d6b34f61d5afb45be7bb6 hs25.20-b05
+d4e18f0633c662588cc0875be7759721c7d85af4 jdk8u20-b04
diff --git a/hotspot/.jcheck/conf b/hotspot/.jcheck/conf
index 6d0dbe4..5bd24b1 100644
--- a/hotspot/.jcheck/conf
+++ b/hotspot/.jcheck/conf
@@ -1 +1,2 @@
project=jdk8
+bugids=dup
diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/ci/ciEnv.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/ci/ciEnv.java
index 8a9df1b..c0db13d 100644
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/ci/ciEnv.java
+++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/ci/ciEnv.java
@@ -95,9 +95,15 @@
int entryBci = task.osrBci();
int compLevel = task.compLevel();
Klass holder = method.getMethodHolder();
- out.println("compile " + holder.getName().asString() + " " +
- OopUtilities.escapeString(method.getName().asString()) + " " +
- method.getSignature().asString() + " " +
- entryBci + " " + compLevel);
+ out.print("compile " + holder.getName().asString() + " " +
+ OopUtilities.escapeString(method.getName().asString()) + " " +
+ method.getSignature().asString() + " " +
+ entryBci + " " + compLevel);
+ Compile compiler = compilerData();
+ if (compiler != null) {
+ // Dump inlining data.
+ compiler.dumpInlineData(out);
+ }
+ out.println();
}
}
diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/opto/Compile.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/opto/Compile.java
index 9e4cfa7..6e06fb5 100644
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/opto/Compile.java
+++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/opto/Compile.java
@@ -25,6 +25,7 @@
package sun.jvm.hotspot.opto;
import java.util.*;
+import java.io.PrintStream;
import sun.jvm.hotspot.ci.*;
import sun.jvm.hotspot.debugger.*;
import sun.jvm.hotspot.runtime.*;
@@ -92,4 +93,13 @@
}
return null;
}
+
+ public void dumpInlineData(PrintStream out) {
+ InlineTree inlTree = ilt();
+ if (inlTree != null) {
+ out.print(" inline " + inlTree.count());
+ inlTree.dumpReplayData(out);
+ }
+ }
+
}
diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/opto/InlineTree.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/opto/InlineTree.java
index 4021e70..53f0241 100644
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/opto/InlineTree.java
+++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/opto/InlineTree.java
@@ -87,6 +87,11 @@
return GrowableArray.create(addr, inlineTreeConstructor);
}
+ public int inlineLevel() {
+ JVMState jvms = callerJvms();
+ return (jvms != null) ? jvms.depth() : 0;
+ }
+
public void printImpl(PrintStream st, int indent) {
for (int i = 0; i < indent; i++) st.print(" ");
st.printf(" @ %d ", callerBci());
@@ -101,4 +106,28 @@
public void print(PrintStream st) {
printImpl(st, 2);
}
+
+ // Count number of nodes in this subtree
+ public int count() {
+ int result = 1;
+ GrowableArray<InlineTree> subt = subtrees();
+ for (int i = 0 ; i < subt.length(); i++) {
+ result += subt.at(i).count();
+ }
+ return result;
+ }
+
+ public void dumpReplayData(PrintStream out) {
+ out.printf(" %d %d ", inlineLevel(), callerBci());
+ Method method = (Method)method().getMetadata();
+ Klass holder = method.getMethodHolder();
+ out.print(holder.getName().asString() + " " +
+ OopUtilities.escapeString(method.getName().asString()) + " " +
+ method.getSignature().asString());
+
+ GrowableArray<InlineTree> subt = subtrees();
+ for (int i = 0 ; i < subt.length(); i++) {
+ subt.at(i).dumpReplayData(out);
+ }
+ }
}
diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/opto/JVMState.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/opto/JVMState.java
index 52996ee..65e0d7a 100644
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/opto/JVMState.java
+++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/opto/JVMState.java
@@ -88,6 +88,10 @@
return (int)bciField.getValue(getAddress());
}
+ public int depth() {
+ return (int)depthField.getValue(getAddress());
+ }
+
public JVMState caller() {
return create(callerField.getValue(getAddress()));
}
diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/Hashtable.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/Hashtable.java
index e9248e7..e2281e7 100644
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/Hashtable.java
+++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/Hashtable.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -61,8 +61,9 @@
long h = 0;
int s = 0;
int len = buf.length;
+ // Emulate the unsigned int in java_lang_String::hash_code
while (len-- > 0) {
- h = 31*h + (0xFFL & buf[s]);
+ h = 31*h + (0xFFFFFFFFL & buf[s]);
s++;
}
return h & 0xFFFFFFFFL;
diff --git a/hotspot/make/excludeSrc.make b/hotspot/make/excludeSrc.make
index a95dc1b..24f1fa2 100644
--- a/hotspot/make/excludeSrc.make
+++ b/hotspot/make/excludeSrc.make
@@ -86,7 +86,7 @@
concurrentMark.cpp concurrentMarkThread.cpp dirtyCardQueue.cpp g1AllocRegion.cpp \
g1BlockOffsetTable.cpp g1CardCounts.cpp g1CollectedHeap.cpp g1CollectorPolicy.cpp \
g1ErgoVerbose.cpp g1GCPhaseTimes.cpp g1HRPrinter.cpp g1HotCardCache.cpp g1Log.cpp \
- g1MMUTracker.cpp g1MarkSweep.cpp g1MemoryPool.cpp g1MonitoringSupport.cpp \
+ g1MMUTracker.cpp g1MarkSweep.cpp g1MemoryPool.cpp g1MonitoringSupport.cpp g1OopClosures.cpp \
g1RemSet.cpp g1RemSetSummary.cpp g1SATBCardTableModRefBS.cpp g1_globals.cpp heapRegion.cpp \
g1BiasedArray.cpp heapRegionRemSet.cpp heapRegionSeq.cpp heapRegionSet.cpp heapRegionSets.cpp \
ptrQueue.cpp satbQueue.cpp sparsePRT.cpp survRateGroup.cpp vm_operations_g1.cpp \
diff --git a/hotspot/make/hotspot_version b/hotspot/make/hotspot_version
index c250e0f..b6fe797 100644
--- a/hotspot/make/hotspot_version
+++ b/hotspot/make/hotspot_version
@@ -34,8 +34,8 @@
HOTSPOT_VM_COPYRIGHT=Copyright 2014
HS_MAJOR_VER=25
-HS_MINOR_VER=0
-HS_BUILD_NUMBER=69
+HS_MINOR_VER=20
+HS_BUILD_NUMBER=05
JDK_MAJOR_VER=1
JDK_MINOR_VER=8
diff --git a/hotspot/src/cpu/sparc/vm/assembler_sparc.hpp b/hotspot/src/cpu/sparc/vm/assembler_sparc.hpp
index ccbc43e..11547cde 100644
--- a/hotspot/src/cpu/sparc/vm/assembler_sparc.hpp
+++ b/hotspot/src/cpu/sparc/vm/assembler_sparc.hpp
@@ -88,6 +88,7 @@
orncc_op3 = 0x16,
xnorcc_op3 = 0x17,
addccc_op3 = 0x18,
+ aes4_op3 = 0x19,
umulcc_op3 = 0x1a,
smulcc_op3 = 0x1b,
subccc_op3 = 0x1c,
@@ -121,6 +122,8 @@
fpop1_op3 = 0x34,
fpop2_op3 = 0x35,
impdep1_op3 = 0x36,
+ aes3_op3 = 0x36,
+ flog3_op3 = 0x36,
impdep2_op3 = 0x37,
jmpl_op3 = 0x38,
rett_op3 = 0x39,
@@ -172,41 +175,56 @@
enum opfs {
// selected opfs
- fmovs_opf = 0x01,
- fmovd_opf = 0x02,
+ fmovs_opf = 0x01,
+ fmovd_opf = 0x02,
- fnegs_opf = 0x05,
- fnegd_opf = 0x06,
+ fnegs_opf = 0x05,
+ fnegd_opf = 0x06,
- fadds_opf = 0x41,
- faddd_opf = 0x42,
- fsubs_opf = 0x45,
- fsubd_opf = 0x46,
+ fadds_opf = 0x41,
+ faddd_opf = 0x42,
+ fsubs_opf = 0x45,
+ fsubd_opf = 0x46,
- fmuls_opf = 0x49,
- fmuld_opf = 0x4a,
- fdivs_opf = 0x4d,
- fdivd_opf = 0x4e,
+ fmuls_opf = 0x49,
+ fmuld_opf = 0x4a,
+ fdivs_opf = 0x4d,
+ fdivd_opf = 0x4e,
- fcmps_opf = 0x51,
- fcmpd_opf = 0x52,
+ fcmps_opf = 0x51,
+ fcmpd_opf = 0x52,
- fstox_opf = 0x81,
- fdtox_opf = 0x82,
- fxtos_opf = 0x84,
- fxtod_opf = 0x88,
- fitos_opf = 0xc4,
- fdtos_opf = 0xc6,
- fitod_opf = 0xc8,
- fstod_opf = 0xc9,
- fstoi_opf = 0xd1,
- fdtoi_opf = 0xd2,
+ fstox_opf = 0x81,
+ fdtox_opf = 0x82,
+ fxtos_opf = 0x84,
+ fxtod_opf = 0x88,
+ fitos_opf = 0xc4,
+ fdtos_opf = 0xc6,
+ fitod_opf = 0xc8,
+ fstod_opf = 0xc9,
+ fstoi_opf = 0xd1,
+ fdtoi_opf = 0xd2,
- mdtox_opf = 0x110,
- mstouw_opf = 0x111,
- mstosw_opf = 0x113,
- mxtod_opf = 0x118,
- mwtos_opf = 0x119
+ mdtox_opf = 0x110,
+ mstouw_opf = 0x111,
+ mstosw_opf = 0x113,
+ mxtod_opf = 0x118,
+ mwtos_opf = 0x119,
+
+ aes_kexpand0_opf = 0x130,
+ aes_kexpand2_opf = 0x131
+ };
+
+ enum op5s {
+ aes_eround01_op5 = 0x00,
+ aes_eround23_op5 = 0x01,
+ aes_dround01_op5 = 0x02,
+ aes_dround23_op5 = 0x03,
+ aes_eround01_l_op5 = 0x04,
+ aes_eround23_l_op5 = 0x05,
+ aes_dround01_l_op5 = 0x06,
+ aes_dround23_l_op5 = 0x07,
+ aes_kexpand1_op5 = 0x08
};
enum RCondition { rc_z = 1, rc_lez = 2, rc_lz = 3, rc_nz = 5, rc_gz = 6, rc_gez = 7, rc_last = rc_gez };
@@ -427,6 +445,7 @@
static int immed( bool i) { return u_field(i ? 1 : 0, 13, 13); }
static int opf_low6( int w) { return u_field(w, 10, 5); }
static int opf_low5( int w) { return u_field(w, 9, 5); }
+ static int op5( int x) { return u_field(x, 8, 5); }
static int trapcc( CC cc) { return u_field(cc, 12, 11); }
static int sx( int i) { return u_field(i, 12, 12); } // shift x=1 means 64-bit
static int opf( int x) { return u_field(x, 13, 5); }
@@ -451,6 +470,7 @@
static int fd( FloatRegister r, FloatRegisterImpl::Width fwa) { return u_field(r->encoding(fwa), 29, 25); };
static int fs1(FloatRegister r, FloatRegisterImpl::Width fwa) { return u_field(r->encoding(fwa), 18, 14); };
static int fs2(FloatRegister r, FloatRegisterImpl::Width fwa) { return u_field(r->encoding(fwa), 4, 0); };
+ static int fs3(FloatRegister r, FloatRegisterImpl::Width fwa) { return u_field(r->encoding(fwa), 13, 9); };
// some float instructions use this encoding on the op3 field
static int alt_op3(int op, FloatRegisterImpl::Width w) {
@@ -559,6 +579,12 @@
return x & ((1 << 10) - 1);
}
+ // AES crypto instructions supported only on certain processors
+ static void aes_only() { assert( VM_Version::has_aes(), "This instruction only works on SPARC with AES instructions support"); }
+
+ // instruction only in VIS1
+ static void vis1_only() { assert( VM_Version::has_vis1(), "This instruction only works on SPARC with VIS1"); }
+
// instruction only in VIS3
static void vis3_only() { assert( VM_Version::has_vis3(), "This instruction only works on SPARC with VIS3"); }
@@ -682,6 +708,24 @@
void addccc( Register s1, int simm13a, Register d ) { emit_int32( op(arith_op) | rd(d) | op3(addc_op3 | cc_bit_op3) | rs1(s1) | immed(true) | simm(simm13a, 13) ); }
+ // 4-operand AES instructions
+
+ void aes_eround01( FloatRegister s1, FloatRegister s2, FloatRegister s3, FloatRegister d ) { aes_only(); emit_int32( op(arith_op) | fd(d, FloatRegisterImpl::D) | op3(aes4_op3) | fs1(s1, FloatRegisterImpl::D) | fs3(s3, FloatRegisterImpl::D) | op5(aes_eround01_op5) | fs2(s2, FloatRegisterImpl::D) ); }
+ void aes_eround23( FloatRegister s1, FloatRegister s2, FloatRegister s3, FloatRegister d ) { aes_only(); emit_int32( op(arith_op) | fd(d, FloatRegisterImpl::D) | op3(aes4_op3) | fs1(s1, FloatRegisterImpl::D) | fs3(s3, FloatRegisterImpl::D) | op5(aes_eround23_op5) | fs2(s2, FloatRegisterImpl::D) ); }
+ void aes_dround01( FloatRegister s1, FloatRegister s2, FloatRegister s3, FloatRegister d ) { aes_only(); emit_int32( op(arith_op) | fd(d, FloatRegisterImpl::D) | op3(aes4_op3) | fs1(s1, FloatRegisterImpl::D) | fs3(s3, FloatRegisterImpl::D) | op5(aes_dround01_op5) | fs2(s2, FloatRegisterImpl::D) ); }
+ void aes_dround23( FloatRegister s1, FloatRegister s2, FloatRegister s3, FloatRegister d ) { aes_only(); emit_int32( op(arith_op) | fd(d, FloatRegisterImpl::D) | op3(aes4_op3) | fs1(s1, FloatRegisterImpl::D) | fs3(s3, FloatRegisterImpl::D) | op5(aes_dround23_op5) | fs2(s2, FloatRegisterImpl::D) ); }
+ void aes_eround01_l( FloatRegister s1, FloatRegister s2, FloatRegister s3, FloatRegister d ) { aes_only(); emit_int32( op(arith_op) | fd(d, FloatRegisterImpl::D) | op3(aes4_op3) | fs1(s1, FloatRegisterImpl::D) | fs3(s3, FloatRegisterImpl::D) | op5(aes_eround01_l_op5) | fs2(s2, FloatRegisterImpl::D) ); }
+ void aes_eround23_l( FloatRegister s1, FloatRegister s2, FloatRegister s3, FloatRegister d ) { aes_only(); emit_int32( op(arith_op) | fd(d, FloatRegisterImpl::D) | op3(aes4_op3) | fs1(s1, FloatRegisterImpl::D) | fs3(s3, FloatRegisterImpl::D) | op5(aes_eround23_l_op5) | fs2(s2, FloatRegisterImpl::D) ); }
+ void aes_dround01_l( FloatRegister s1, FloatRegister s2, FloatRegister s3, FloatRegister d ) { aes_only(); emit_int32( op(arith_op) | fd(d, FloatRegisterImpl::D) | op3(aes4_op3) | fs1(s1, FloatRegisterImpl::D) | fs3(s3, FloatRegisterImpl::D) | op5(aes_dround01_l_op5) | fs2(s2, FloatRegisterImpl::D) ); }
+ void aes_dround23_l( FloatRegister s1, FloatRegister s2, FloatRegister s3, FloatRegister d ) { aes_only(); emit_int32( op(arith_op) | fd(d, FloatRegisterImpl::D) | op3(aes4_op3) | fs1(s1, FloatRegisterImpl::D) | fs3(s3, FloatRegisterImpl::D) | op5(aes_dround23_l_op5) | fs2(s2, FloatRegisterImpl::D) ); }
+ void aes_kexpand1( FloatRegister s1, FloatRegister s2, int imm5a, FloatRegister d ) { aes_only(); emit_int32( op(arith_op) | fd(d, FloatRegisterImpl::D) | op3(aes4_op3) | fs1(s1, FloatRegisterImpl::D) | u_field(imm5a, 13, 9) | op5(aes_kexpand1_op5) | fs2(s2, FloatRegisterImpl::D) ); }
+
+
+ // 3-operand AES instructions
+
+ void aes_kexpand0( FloatRegister s1, FloatRegister s2, FloatRegister d ) { aes_only(); emit_int32( op(arith_op) | fd(d, FloatRegisterImpl::D) | op3(aes3_op3) | fs1(s1, FloatRegisterImpl::D) | opf(aes_kexpand0_opf) | fs2(s2, FloatRegisterImpl::D) ); }
+ void aes_kexpand2( FloatRegister s1, FloatRegister s2, FloatRegister d ) { aes_only(); emit_int32( op(arith_op) | fd(d, FloatRegisterImpl::D) | op3(aes3_op3) | fs1(s1, FloatRegisterImpl::D) | opf(aes_kexpand2_opf) | fs2(s2, FloatRegisterImpl::D) ); }
+
// pp 136
inline void bpr(RCondition c, bool a, Predict p, Register s1, address d, relocInfo::relocType rt = relocInfo::none);
@@ -784,6 +828,10 @@
void fmul( FloatRegisterImpl::Width sw, FloatRegisterImpl::Width dw, FloatRegister s1, FloatRegister s2, FloatRegister d ) { emit_int32( op(arith_op) | fd(d, dw) | op3(fpop1_op3) | fs1(s1, sw) | opf(0x60 + sw + dw*4) | fs2(s2, sw)); }
void fdiv( FloatRegisterImpl::Width w, FloatRegister s1, FloatRegister s2, FloatRegister d ) { emit_int32( op(arith_op) | fd(d, w) | op3(fpop1_op3) | fs1(s1, w) | opf(0x4c + w) | fs2(s2, w)); }
+ // FXORs/FXORd instructions
+
+ void fxor( FloatRegisterImpl::Width w, FloatRegister s1, FloatRegister s2, FloatRegister d ) { vis1_only(); emit_int32( op(arith_op) | fd(d, w) | op3(flog3_op3) | fs1(s1, w) | opf(0x6E - w) | fs2(s2, w)); }
+
// pp 164
void fsqrt( FloatRegisterImpl::Width w, FloatRegister s, FloatRegister d ) { emit_int32( op(arith_op) | fd(d, w) | op3(fpop1_op3) | opf(0x28 + w) | fs2(s, w)); }
diff --git a/hotspot/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp b/hotspot/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp
index 22ab05f..488a53d 100644
--- a/hotspot/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp
+++ b/hotspot/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp
@@ -1315,7 +1315,7 @@
}
Address LIR_Assembler::as_Address(LIR_Address* addr) {
- Register reg = addr->base()->as_register();
+ Register reg = addr->base()->as_pointer_register();
LIR_Opr index = addr->index();
if (index->is_illegal()) {
return Address(reg, addr->disp());
@@ -3101,7 +3101,145 @@
}
void LIR_Assembler::emit_profile_type(LIR_OpProfileType* op) {
- fatal("Type profiling not implemented on this platform");
+ Register obj = op->obj()->as_register();
+ Register tmp1 = op->tmp()->as_pointer_register();
+ Register tmp2 = G1;
+ Address mdo_addr = as_Address(op->mdp()->as_address_ptr());
+ ciKlass* exact_klass = op->exact_klass();
+ intptr_t current_klass = op->current_klass();
+ bool not_null = op->not_null();
+ bool no_conflict = op->no_conflict();
+
+ Label update, next, none;
+
+ bool do_null = !not_null;
+ bool exact_klass_set = exact_klass != NULL && ciTypeEntries::valid_ciklass(current_klass) == exact_klass;
+ bool do_update = !TypeEntries::is_type_unknown(current_klass) && !exact_klass_set;
+
+ assert(do_null || do_update, "why are we here?");
+ assert(!TypeEntries::was_null_seen(current_klass) || do_update, "why are we here?");
+
+ __ verify_oop(obj);
+
+ if (tmp1 != obj) {
+ __ mov(obj, tmp1);
+ }
+ if (do_null) {
+ __ br_notnull_short(tmp1, Assembler::pt, update);
+ if (!TypeEntries::was_null_seen(current_klass)) {
+ __ ld_ptr(mdo_addr, tmp1);
+ __ or3(tmp1, TypeEntries::null_seen, tmp1);
+ __ st_ptr(tmp1, mdo_addr);
+ }
+ if (do_update) {
+ __ ba(next);
+ __ delayed()->nop();
+ }
+#ifdef ASSERT
+ } else {
+ __ br_notnull_short(tmp1, Assembler::pt, update);
+ __ stop("unexpect null obj");
+#endif
+ }
+
+ __ bind(update);
+
+ if (do_update) {
+#ifdef ASSERT
+ if (exact_klass != NULL) {
+ Label ok;
+ __ load_klass(tmp1, tmp1);
+ metadata2reg(exact_klass->constant_encoding(), tmp2);
+ __ cmp_and_br_short(tmp1, tmp2, Assembler::equal, Assembler::pt, ok);
+ __ stop("exact klass and actual klass differ");
+ __ bind(ok);
+ }
+#endif
+
+ Label do_update;
+ __ ld_ptr(mdo_addr, tmp2);
+
+ if (!no_conflict) {
+ if (exact_klass == NULL || TypeEntries::is_type_none(current_klass)) {
+ if (exact_klass != NULL) {
+ metadata2reg(exact_klass->constant_encoding(), tmp1);
+ } else {
+ __ load_klass(tmp1, tmp1);
+ }
+
+ __ xor3(tmp1, tmp2, tmp1);
+ __ btst(TypeEntries::type_klass_mask, tmp1);
+ // klass seen before, nothing to do. The unknown bit may have been
+ // set already but no need to check.
+ __ brx(Assembler::zero, false, Assembler::pt, next);
+ __ delayed()->
+
+ btst(TypeEntries::type_unknown, tmp1);
+ // already unknown. Nothing to do anymore.
+ __ brx(Assembler::notZero, false, Assembler::pt, next);
+
+ if (TypeEntries::is_type_none(current_klass)) {
+ __ delayed()->btst(TypeEntries::type_mask, tmp2);
+ __ brx(Assembler::zero, true, Assembler::pt, do_update);
+ // first time here. Set profile type.
+ __ delayed()->or3(tmp2, tmp1, tmp2);
+ } else {
+ __ delayed()->nop();
+ }
+ } else {
+ assert(ciTypeEntries::valid_ciklass(current_klass) != NULL &&
+ ciTypeEntries::valid_ciklass(current_klass) != exact_klass, "conflict only");
+
+ __ btst(TypeEntries::type_unknown, tmp2);
+ // already unknown. Nothing to do anymore.
+ __ brx(Assembler::notZero, false, Assembler::pt, next);
+ __ delayed()->nop();
+ }
+
+ // different than before. Cannot keep accurate profile.
+ __ or3(tmp2, TypeEntries::type_unknown, tmp2);
+ } else {
+ // There's a single possible klass at this profile point
+ assert(exact_klass != NULL, "should be");
+ if (TypeEntries::is_type_none(current_klass)) {
+ metadata2reg(exact_klass->constant_encoding(), tmp1);
+ __ xor3(tmp1, tmp2, tmp1);
+ __ btst(TypeEntries::type_klass_mask, tmp1);
+ __ brx(Assembler::zero, false, Assembler::pt, next);
+#ifdef ASSERT
+
+ {
+ Label ok;
+ __ delayed()->btst(TypeEntries::type_mask, tmp2);
+ __ brx(Assembler::zero, true, Assembler::pt, ok);
+ __ delayed()->nop();
+
+ __ stop("unexpected profiling mismatch");
+ __ bind(ok);
+ }
+ // first time here. Set profile type.
+ __ or3(tmp2, tmp1, tmp2);
+#else
+ // first time here. Set profile type.
+ __ delayed()->or3(tmp2, tmp1, tmp2);
+#endif
+
+ } else {
+ assert(ciTypeEntries::valid_ciklass(current_klass) != NULL &&
+ ciTypeEntries::valid_ciklass(current_klass) != exact_klass, "inconsistent");
+
+ // already unknown. Nothing to do anymore.
+ __ btst(TypeEntries::type_unknown, tmp2);
+ __ brx(Assembler::notZero, false, Assembler::pt, next);
+ __ delayed()->or3(tmp2, TypeEntries::type_unknown, tmp2);
+ }
+ }
+
+ __ bind(do_update);
+ __ st_ptr(tmp2, mdo_addr);
+
+ __ bind(next);
+ }
}
void LIR_Assembler::align_backward_branch_target() {
@@ -3321,9 +3459,14 @@
void LIR_Assembler::leal(LIR_Opr addr_opr, LIR_Opr dest) {
LIR_Address* addr = addr_opr->as_address_ptr();
- assert(addr->index()->is_illegal() && addr->scale() == LIR_Address::times_1 && Assembler::is_simm13(addr->disp()), "can't handle complex addresses yet");
+ assert(addr->index()->is_illegal() && addr->scale() == LIR_Address::times_1, "can't handle complex addresses yet");
- __ add(addr->base()->as_pointer_register(), addr->disp(), dest->as_pointer_register());
+ if (Assembler::is_simm13(addr->disp())) {
+ __ add(addr->base()->as_pointer_register(), addr->disp(), dest->as_pointer_register());
+ } else {
+ __ set(addr->disp(), G3_scratch);
+ __ add(addr->base()->as_pointer_register(), G3_scratch, dest->as_pointer_register());
+ }
}
diff --git a/hotspot/src/cpu/sparc/vm/interp_masm_sparc.cpp b/hotspot/src/cpu/sparc/vm/interp_masm_sparc.cpp
index 454b23c..c22f20a 100644
--- a/hotspot/src/cpu/sparc/vm/interp_masm_sparc.cpp
+++ b/hotspot/src/cpu/sparc/vm/interp_masm_sparc.cpp
@@ -1892,6 +1892,220 @@
}
}
+void InterpreterMacroAssembler::profile_obj_type(Register obj, const Address& mdo_addr, Register tmp) {
+ Label not_null, do_nothing, do_update;
+
+ assert_different_registers(obj, mdo_addr.base(), tmp);
+
+ verify_oop(obj);
+
+ ld_ptr(mdo_addr, tmp);
+
+ br_notnull_short(obj, pt, not_null);
+ or3(tmp, TypeEntries::null_seen, tmp);
+ ba_short(do_update);
+
+ bind(not_null);
+ load_klass(obj, obj);
+
+ xor3(obj, tmp, obj);
+ btst(TypeEntries::type_klass_mask, obj);
+ // klass seen before, nothing to do. The unknown bit may have been
+ // set already but no need to check.
+ brx(zero, false, pt, do_nothing);
+ delayed()->
+
+ btst(TypeEntries::type_unknown, obj);
+ // already unknown. Nothing to do anymore.
+ brx(notZero, false, pt, do_nothing);
+ delayed()->
+
+ btst(TypeEntries::type_mask, tmp);
+ brx(zero, true, pt, do_update);
+ // first time here. Set profile type.
+ delayed()->or3(tmp, obj, tmp);
+
+ // different than before. Cannot keep accurate profile.
+ or3(tmp, TypeEntries::type_unknown, tmp);
+
+ bind(do_update);
+ // update profile
+ st_ptr(tmp, mdo_addr);
+
+ bind(do_nothing);
+}
+
+void InterpreterMacroAssembler::profile_arguments_type(Register callee, Register tmp1, Register tmp2, bool is_virtual) {
+ if (!ProfileInterpreter) {
+ return;
+ }
+
+ assert_different_registers(callee, tmp1, tmp2, ImethodDataPtr);
+
+ if (MethodData::profile_arguments() || MethodData::profile_return()) {
+ Label profile_continue;
+
+ test_method_data_pointer(profile_continue);
+
+ int off_to_start = is_virtual ? in_bytes(VirtualCallData::virtual_call_data_size()) : in_bytes(CounterData::counter_data_size());
+
+ ldub(ImethodDataPtr, in_bytes(DataLayout::tag_offset()) - off_to_start, tmp1);
+ cmp_and_br_short(tmp1, is_virtual ? DataLayout::virtual_call_type_data_tag : DataLayout::call_type_data_tag, notEqual, pn, profile_continue);
+
+ if (MethodData::profile_arguments()) {
+ Label done;
+ int off_to_args = in_bytes(TypeEntriesAtCall::args_data_offset());
+ add(ImethodDataPtr, off_to_args, ImethodDataPtr);
+
+ for (int i = 0; i < TypeProfileArgsLimit; i++) {
+ if (i > 0 || MethodData::profile_return()) {
+ // If return value type is profiled we may have no argument to profile
+ ld_ptr(ImethodDataPtr, in_bytes(TypeEntriesAtCall::cell_count_offset())-off_to_args, tmp1);
+ sub(tmp1, i*TypeStackSlotEntries::per_arg_count(), tmp1);
+ cmp_and_br_short(tmp1, TypeStackSlotEntries::per_arg_count(), less, pn, done);
+ }
+ ld_ptr(Address(callee, Method::const_offset()), tmp1);
+ lduh(Address(tmp1, ConstMethod::size_of_parameters_offset()), tmp1);
+ // stack offset o (zero based) from the start of the argument
+ // list, for n arguments translates into offset n - o - 1 from
+ // the end of the argument list. But there's an extra slot at
+ // the stop of the stack. So the offset is n - o from Lesp.
+ ld_ptr(ImethodDataPtr, in_bytes(TypeEntriesAtCall::stack_slot_offset(i))-off_to_args, tmp2);
+ sub(tmp1, tmp2, tmp1);
+
+ // Can't use MacroAssembler::argument_address() which needs Gargs to be set up
+ sll(tmp1, Interpreter::logStackElementSize, tmp1);
+ ld_ptr(Lesp, tmp1, tmp1);
+
+ Address mdo_arg_addr(ImethodDataPtr, in_bytes(TypeEntriesAtCall::argument_type_offset(i))-off_to_args);
+ profile_obj_type(tmp1, mdo_arg_addr, tmp2);
+
+ int to_add = in_bytes(TypeStackSlotEntries::per_arg_size());
+ add(ImethodDataPtr, to_add, ImethodDataPtr);
+ off_to_args += to_add;
+ }
+
+ if (MethodData::profile_return()) {
+ ld_ptr(ImethodDataPtr, in_bytes(TypeEntriesAtCall::cell_count_offset())-off_to_args, tmp1);
+ sub(tmp1, TypeProfileArgsLimit*TypeStackSlotEntries::per_arg_count(), tmp1);
+ }
+
+ bind(done);
+
+ if (MethodData::profile_return()) {
+ // We're right after the type profile for the last
+ // argument. tmp1 is the number of cells left in the
+ // CallTypeData/VirtualCallTypeData to reach its end. Non null
+ // if there's a return to profile.
+ assert(ReturnTypeEntry::static_cell_count() < TypeStackSlotEntries::per_arg_count(), "can't move past ret type");
+ sll(tmp1, exact_log2(DataLayout::cell_size), tmp1);
+ add(ImethodDataPtr, tmp1, ImethodDataPtr);
+ }
+ } else {
+ assert(MethodData::profile_return(), "either profile call args or call ret");
+ update_mdp_by_constant(in_bytes(ReturnTypeEntry::size()));
+ }
+
+ // mdp points right after the end of the
+ // CallTypeData/VirtualCallTypeData, right after the cells for the
+ // return value type if there's one.
+
+ bind(profile_continue);
+ }
+}
+
+void InterpreterMacroAssembler::profile_return_type(Register ret, Register tmp1, Register tmp2) {
+ assert_different_registers(ret, tmp1, tmp2);
+ if (ProfileInterpreter && MethodData::profile_return()) {
+ Label profile_continue, done;
+
+ test_method_data_pointer(profile_continue);
+
+ if (MethodData::profile_return_jsr292_only()) {
+ // If we don't profile all invoke bytecodes we must make sure
+ // it's a bytecode we indeed profile. We can't go back to the
+ // begining of the ProfileData we intend to update to check its
+ // type because we're right after it and we don't known its
+ // length.
+ Label do_profile;
+ ldub(Lbcp, 0, tmp1);
+ cmp_and_br_short(tmp1, Bytecodes::_invokedynamic, equal, pn, do_profile);
+ cmp(tmp1, Bytecodes::_invokehandle);
+ br(equal, false, pn, do_profile);
+ delayed()->ldub(Lmethod, Method::intrinsic_id_offset_in_bytes(), tmp1);
+ cmp_and_br_short(tmp1, vmIntrinsics::_compiledLambdaForm, notEqual, pt, profile_continue);
+
+ bind(do_profile);
+ }
+
+ Address mdo_ret_addr(ImethodDataPtr, -in_bytes(ReturnTypeEntry::size()));
+ mov(ret, tmp1);
+ profile_obj_type(tmp1, mdo_ret_addr, tmp2);
+
+ bind(profile_continue);
+ }
+}
+
+void InterpreterMacroAssembler::profile_parameters_type(Register tmp1, Register tmp2, Register tmp3, Register tmp4) {
+ if (ProfileInterpreter && MethodData::profile_parameters()) {
+ Label profile_continue, done;
+
+ test_method_data_pointer(profile_continue);
+
+ // Load the offset of the area within the MDO used for
+ // parameters. If it's negative we're not profiling any parameters.
+ lduw(ImethodDataPtr, in_bytes(MethodData::parameters_type_data_di_offset()) - in_bytes(MethodData::data_offset()), tmp1);
+ cmp_and_br_short(tmp1, 0, less, pn, profile_continue);
+
+ // Compute a pointer to the area for parameters from the offset
+ // and move the pointer to the slot for the last
+ // parameters. Collect profiling from last parameter down.
+ // mdo start + parameters offset + array length - 1
+
+ // Pointer to the parameter area in the MDO
+ Register mdp = tmp1;
+ add(ImethodDataPtr, tmp1, mdp);
+
+ // offset of the current profile entry to update
+ Register entry_offset = tmp2;
+ // entry_offset = array len in number of cells
+ ld_ptr(mdp, ArrayData::array_len_offset(), entry_offset);
+
+ int off_base = in_bytes(ParametersTypeData::stack_slot_offset(0));
+ assert(off_base % DataLayout::cell_size == 0, "should be a number of cells");
+
+ // entry_offset (number of cells) = array len - size of 1 entry + offset of the stack slot field
+ sub(entry_offset, TypeStackSlotEntries::per_arg_count() - (off_base / DataLayout::cell_size), entry_offset);
+ // entry_offset in bytes
+ sll(entry_offset, exact_log2(DataLayout::cell_size), entry_offset);
+
+ Label loop;
+ bind(loop);
+
+ // load offset on the stack from the slot for this parameter
+ ld_ptr(mdp, entry_offset, tmp3);
+ sll(tmp3,Interpreter::logStackElementSize, tmp3);
+ neg(tmp3);
+ // read the parameter from the local area
+ ld_ptr(Llocals, tmp3, tmp3);
+
+ // make entry_offset now point to the type field for this parameter
+ int type_base = in_bytes(ParametersTypeData::type_offset(0));
+ assert(type_base > off_base, "unexpected");
+ add(entry_offset, type_base - off_base, entry_offset);
+
+ // profile the parameter
+ Address arg_type(mdp, entry_offset);
+ profile_obj_type(tmp3, arg_type, tmp4);
+
+ // go to next parameter
+ sub(entry_offset, TypeStackSlotEntries::per_arg_count() * DataLayout::cell_size + (type_base - off_base), entry_offset);
+ cmp_and_br_short(entry_offset, off_base, greaterEqual, pt, loop);
+
+ bind(profile_continue);
+ }
+}
+
// add a InterpMonitorElem to stack (see frame_sparc.hpp)
void InterpreterMacroAssembler::add_monitor_to_stack( bool stack_is_empty,
diff --git a/hotspot/src/cpu/sparc/vm/interp_masm_sparc.hpp b/hotspot/src/cpu/sparc/vm/interp_masm_sparc.hpp
index 1a79015..5ba547d 100644
--- a/hotspot/src/cpu/sparc/vm/interp_masm_sparc.hpp
+++ b/hotspot/src/cpu/sparc/vm/interp_masm_sparc.hpp
@@ -323,6 +323,11 @@
Register scratch2,
Register scratch3);
+ void profile_obj_type(Register obj, const Address& mdo_addr, Register tmp);
+ void profile_arguments_type(Register callee, Register tmp1, Register tmp2, bool is_virtual);
+ void profile_return_type(Register ret, Register tmp1, Register tmp2);
+ void profile_parameters_type(Register tmp1, Register tmp2, Register tmp3, Register tmp4);
+
// Debugging
void interp_verify_oop(Register reg, TosState state, const char * file, int line); // only if +VerifyOops && state == atos
void verify_oop_or_return_address(Register reg, Register rtmp); // for astore
diff --git a/hotspot/src/cpu/sparc/vm/sparc.ad b/hotspot/src/cpu/sparc/vm/sparc.ad
index 1b77525..5359951 100644
--- a/hotspot/src/cpu/sparc/vm/sparc.ad
+++ b/hotspot/src/cpu/sparc/vm/sparc.ad
@@ -1848,6 +1848,12 @@
return false;
}
+// Current (2013) SPARC platforms need to read original key
+// to construct decryption expanded key
+const bool Matcher::pass_original_key_for_aes() {
+ return true;
+}
+
// USII supports fxtof through the whole range of number, USIII doesn't
const bool Matcher::convL2FSupported(void) {
return VM_Version::has_fast_fxtof();
diff --git a/hotspot/src/cpu/sparc/vm/stubGenerator_sparc.cpp b/hotspot/src/cpu/sparc/vm/stubGenerator_sparc.cpp
index b991182..2502340 100644
--- a/hotspot/src/cpu/sparc/vm/stubGenerator_sparc.cpp
+++ b/hotspot/src/cpu/sparc/vm/stubGenerator_sparc.cpp
@@ -3304,6 +3304,775 @@
}
}
+ address generate_aescrypt_encryptBlock() {
+ __ align(CodeEntryAlignment);
+ StubCodeMark mark(this, "StubRoutines", "aesencryptBlock");
+ Label L_doLast128bit, L_storeOutput;
+ address start = __ pc();
+ Register from = O0; // source byte array
+ Register to = O1; // destination byte array
+ Register key = O2; // expanded key array
+ const Register keylen = O4; //reg for storing expanded key array length
+
+ // read expanded key length
+ __ ldsw(Address(key, arrayOopDesc::length_offset_in_bytes() - arrayOopDesc::base_offset_in_bytes(T_INT)), keylen, 0);
+
+ // load input into F54-F56; F30-F31 used as temp
+ __ ldf(FloatRegisterImpl::S, from, 0, F30);
+ __ ldf(FloatRegisterImpl::S, from, 4, F31);
+ __ fmov(FloatRegisterImpl::D, F30, F54);
+ __ ldf(FloatRegisterImpl::S, from, 8, F30);
+ __ ldf(FloatRegisterImpl::S, from, 12, F31);
+ __ fmov(FloatRegisterImpl::D, F30, F56);
+
+ // load expanded key
+ for ( int i = 0; i <= 38; i += 2 ) {
+ __ ldf(FloatRegisterImpl::D, key, i*4, as_FloatRegister(i));
+ }
+
+ // perform cipher transformation
+ __ fxor(FloatRegisterImpl::D, F0, F54, F54);
+ __ fxor(FloatRegisterImpl::D, F2, F56, F56);
+ // rounds 1 through 8
+ for ( int i = 4; i <= 28; i += 8 ) {
+ __ aes_eround01(as_FloatRegister(i), F54, F56, F58);
+ __ aes_eround23(as_FloatRegister(i+2), F54, F56, F60);
+ __ aes_eround01(as_FloatRegister(i+4), F58, F60, F54);
+ __ aes_eround23(as_FloatRegister(i+6), F58, F60, F56);
+ }
+ __ aes_eround01(F36, F54, F56, F58); //round 9
+ __ aes_eround23(F38, F54, F56, F60);
+
+ // 128-bit original key size
+ __ cmp_and_brx_short(keylen, 44, Assembler::equal, Assembler::pt, L_doLast128bit);
+
+ for ( int i = 40; i <= 50; i += 2 ) {
+ __ ldf(FloatRegisterImpl::D, key, i*4, as_FloatRegister(i) );
+ }
+ __ aes_eround01(F40, F58, F60, F54); //round 10
+ __ aes_eround23(F42, F58, F60, F56);
+ __ aes_eround01(F44, F54, F56, F58); //round 11
+ __ aes_eround23(F46, F54, F56, F60);
+
+ // 192-bit original key size
+ __ cmp_and_brx_short(keylen, 52, Assembler::equal, Assembler::pt, L_storeOutput);
+
+ __ ldf(FloatRegisterImpl::D, key, 208, F52);
+ __ aes_eround01(F48, F58, F60, F54); //round 12
+ __ aes_eround23(F50, F58, F60, F56);
+ __ ldf(FloatRegisterImpl::D, key, 216, F46);
+ __ ldf(FloatRegisterImpl::D, key, 224, F48);
+ __ ldf(FloatRegisterImpl::D, key, 232, F50);
+ __ aes_eround01(F52, F54, F56, F58); //round 13
+ __ aes_eround23(F46, F54, F56, F60);
+ __ br(Assembler::always, false, Assembler::pt, L_storeOutput);
+ __ delayed()->nop();
+
+ __ BIND(L_doLast128bit);
+ __ ldf(FloatRegisterImpl::D, key, 160, F48);
+ __ ldf(FloatRegisterImpl::D, key, 168, F50);
+
+ __ BIND(L_storeOutput);
+ // perform last round of encryption common for all key sizes
+ __ aes_eround01_l(F48, F58, F60, F54); //last round
+ __ aes_eround23_l(F50, F58, F60, F56);
+
+ // store output into the destination array, F0-F1 used as temp
+ __ fmov(FloatRegisterImpl::D, F54, F0);
+ __ stf(FloatRegisterImpl::S, F0, to, 0);
+ __ stf(FloatRegisterImpl::S, F1, to, 4);
+ __ fmov(FloatRegisterImpl::D, F56, F0);
+ __ stf(FloatRegisterImpl::S, F0, to, 8);
+ __ retl();
+ __ delayed()->stf(FloatRegisterImpl::S, F1, to, 12);
+
+ return start;
+ }
+
+ address generate_aescrypt_decryptBlock() {
+ __ align(CodeEntryAlignment);
+ StubCodeMark mark(this, "StubRoutines", "aesdecryptBlock");
+ address start = __ pc();
+ Label L_expand192bit, L_expand256bit, L_common_transform;
+ Register from = O0; // source byte array
+ Register to = O1; // destination byte array
+ Register key = O2; // expanded key array
+ Register original_key = O3; // original key array only required during decryption
+ const Register keylen = O4; // reg for storing expanded key array length
+
+ // read expanded key array length
+ __ ldsw(Address(key, arrayOopDesc::length_offset_in_bytes() - arrayOopDesc::base_offset_in_bytes(T_INT)), keylen, 0);
+
+ // load input into F52-F54; F30,F31 used as temp
+ __ ldf(FloatRegisterImpl::S, from, 0, F30);
+ __ ldf(FloatRegisterImpl::S, from, 4, F31);
+ __ fmov(FloatRegisterImpl::D, F30, F52);
+ __ ldf(FloatRegisterImpl::S, from, 8, F30);
+ __ ldf(FloatRegisterImpl::S, from, 12, F31);
+ __ fmov(FloatRegisterImpl::D, F30, F54);
+
+ // load original key from SunJCE expanded decryption key
+ for ( int i = 0; i <= 3; i++ ) {
+ __ ldf(FloatRegisterImpl::S, original_key, i*4, as_FloatRegister(i));
+ }
+
+ // 256-bit original key size
+ __ cmp_and_brx_short(keylen, 60, Assembler::equal, Assembler::pn, L_expand256bit);
+
+ // 192-bit original key size
+ __ cmp_and_brx_short(keylen, 52, Assembler::equal, Assembler::pn, L_expand192bit);
+
+ // 128-bit original key size
+ // perform key expansion since SunJCE decryption-key expansion is not compatible with SPARC crypto instructions
+ for ( int i = 0; i <= 36; i += 4 ) {
+ __ aes_kexpand1(as_FloatRegister(i), as_FloatRegister(i+2), i/4, as_FloatRegister(i+4));
+ __ aes_kexpand2(as_FloatRegister(i+2), as_FloatRegister(i+4), as_FloatRegister(i+6));
+ }
+
+ // perform 128-bit key specific inverse cipher transformation
+ __ fxor(FloatRegisterImpl::D, F42, F54, F54);
+ __ fxor(FloatRegisterImpl::D, F40, F52, F52);
+ __ br(Assembler::always, false, Assembler::pt, L_common_transform);
+ __ delayed()->nop();
+
+ __ BIND(L_expand192bit);
+
+ // start loading rest of the 192-bit key
+ __ ldf(FloatRegisterImpl::S, original_key, 16, F4);
+ __ ldf(FloatRegisterImpl::S, original_key, 20, F5);
+
+ // perform key expansion since SunJCE decryption-key expansion is not compatible with SPARC crypto instructions
+ for ( int i = 0; i <= 36; i += 6 ) {
+ __ aes_kexpand1(as_FloatRegister(i), as_FloatRegister(i+4), i/6, as_FloatRegister(i+6));
+ __ aes_kexpand2(as_FloatRegister(i+2), as_FloatRegister(i+6), as_FloatRegister(i+8));
+ __ aes_kexpand2(as_FloatRegister(i+4), as_FloatRegister(i+8), as_FloatRegister(i+10));
+ }
+ __ aes_kexpand1(F42, F46, 7, F48);
+ __ aes_kexpand2(F44, F48, F50);
+
+ // perform 192-bit key specific inverse cipher transformation
+ __ fxor(FloatRegisterImpl::D, F50, F54, F54);
+ __ fxor(FloatRegisterImpl::D, F48, F52, F52);
+ __ aes_dround23(F46, F52, F54, F58);
+ __ aes_dround01(F44, F52, F54, F56);
+ __ aes_dround23(F42, F56, F58, F54);
+ __ aes_dround01(F40, F56, F58, F52);
+ __ br(Assembler::always, false, Assembler::pt, L_common_transform);
+ __ delayed()->nop();
+
+ __ BIND(L_expand256bit);
+
+ // load rest of the 256-bit key
+ for ( int i = 4; i <= 7; i++ ) {
+ __ ldf(FloatRegisterImpl::S, original_key, i*4, as_FloatRegister(i));
+ }
+
+ // perform key expansion since SunJCE decryption-key expansion is not compatible with SPARC crypto instructions
+ for ( int i = 0; i <= 40; i += 8 ) {
+ __ aes_kexpand1(as_FloatRegister(i), as_FloatRegister(i+6), i/8, as_FloatRegister(i+8));
+ __ aes_kexpand2(as_FloatRegister(i+2), as_FloatRegister(i+8), as_FloatRegister(i+10));
+ __ aes_kexpand0(as_FloatRegister(i+4), as_FloatRegister(i+10), as_FloatRegister(i+12));
+ __ aes_kexpand2(as_FloatRegister(i+6), as_FloatRegister(i+12), as_FloatRegister(i+14));
+ }
+ __ aes_kexpand1(F48, F54, 6, F56);
+ __ aes_kexpand2(F50, F56, F58);
+
+ for ( int i = 0; i <= 6; i += 2 ) {
+ __ fmov(FloatRegisterImpl::D, as_FloatRegister(58-i), as_FloatRegister(i));
+ }
+
+ // load input into F52-F54
+ __ ldf(FloatRegisterImpl::D, from, 0, F52);
+ __ ldf(FloatRegisterImpl::D, from, 8, F54);
+
+ // perform 256-bit key specific inverse cipher transformation
+ __ fxor(FloatRegisterImpl::D, F0, F54, F54);
+ __ fxor(FloatRegisterImpl::D, F2, F52, F52);
+ __ aes_dround23(F4, F52, F54, F58);
+ __ aes_dround01(F6, F52, F54, F56);
+ __ aes_dround23(F50, F56, F58, F54);
+ __ aes_dround01(F48, F56, F58, F52);
+ __ aes_dround23(F46, F52, F54, F58);
+ __ aes_dround01(F44, F52, F54, F56);
+ __ aes_dround23(F42, F56, F58, F54);
+ __ aes_dround01(F40, F56, F58, F52);
+
+ for ( int i = 0; i <= 7; i++ ) {
+ __ ldf(FloatRegisterImpl::S, original_key, i*4, as_FloatRegister(i));
+ }
+
+ // perform inverse cipher transformations common for all key sizes
+ __ BIND(L_common_transform);
+ for ( int i = 38; i >= 6; i -= 8 ) {
+ __ aes_dround23(as_FloatRegister(i), F52, F54, F58);
+ __ aes_dround01(as_FloatRegister(i-2), F52, F54, F56);
+ if ( i != 6) {
+ __ aes_dround23(as_FloatRegister(i-4), F56, F58, F54);
+ __ aes_dround01(as_FloatRegister(i-6), F56, F58, F52);
+ } else {
+ __ aes_dround23_l(as_FloatRegister(i-4), F56, F58, F54);
+ __ aes_dround01_l(as_FloatRegister(i-6), F56, F58, F52);
+ }
+ }
+
+ // store output to destination array, F0-F1 used as temp
+ __ fmov(FloatRegisterImpl::D, F52, F0);
+ __ stf(FloatRegisterImpl::S, F0, to, 0);
+ __ stf(FloatRegisterImpl::S, F1, to, 4);
+ __ fmov(FloatRegisterImpl::D, F54, F0);
+ __ stf(FloatRegisterImpl::S, F0, to, 8);
+ __ retl();
+ __ delayed()->stf(FloatRegisterImpl::S, F1, to, 12);
+
+ return start;
+ }
+
+ address generate_cipherBlockChaining_encryptAESCrypt() {
+ __ align(CodeEntryAlignment);
+ StubCodeMark mark(this, "StubRoutines", "cipherBlockChaining_encryptAESCrypt");
+ Label L_cbcenc128, L_cbcenc192, L_cbcenc256;
+ address start = __ pc();
+ Register from = O0; // source byte array
+ Register to = O1; // destination byte array
+ Register key = O2; // expanded key array
+ Register rvec = O3; // init vector
+ const Register len_reg = O4; // cipher length
+ const Register keylen = O5; // reg for storing expanded key array length
+
+ // save cipher len to return in the end
+ __ mov(len_reg, L1);
+
+ // read expanded key length
+ __ ldsw(Address(key, arrayOopDesc::length_offset_in_bytes() - arrayOopDesc::base_offset_in_bytes(T_INT)), keylen, 0);
+
+ // load init vector
+ __ ldf(FloatRegisterImpl::D, rvec, 0, F60);
+ __ ldf(FloatRegisterImpl::D, rvec, 8, F62);
+ __ ldx(key,0,G1);
+ __ ldx(key,8,G2);
+
+ // start loading expanded key
+ for ( int i = 0, j = 16; i <= 38; i += 2, j += 8 ) {
+ __ ldf(FloatRegisterImpl::D, key, j, as_FloatRegister(i));
+ }
+
+ // 128-bit original key size
+ __ cmp_and_brx_short(keylen, 44, Assembler::equal, Assembler::pt, L_cbcenc128);
+
+ for ( int i = 40, j = 176; i <= 46; i += 2, j += 8 ) {
+ __ ldf(FloatRegisterImpl::D, key, j, as_FloatRegister(i));
+ }
+
+ // 192-bit original key size
+ __ cmp_and_brx_short(keylen, 52, Assembler::equal, Assembler::pt, L_cbcenc192);
+
+ for ( int i = 48, j = 208; i <= 54; i += 2, j += 8 ) {
+ __ ldf(FloatRegisterImpl::D, key, j, as_FloatRegister(i));
+ }
+
+ // 256-bit original key size
+ __ br(Assembler::always, false, Assembler::pt, L_cbcenc256);
+ __ delayed()->nop();
+
+ __ align(OptoLoopAlignment);
+ __ BIND(L_cbcenc128);
+ __ ldx(from,0,G3);
+ __ ldx(from,8,G4);
+ __ xor3(G1,G3,G3);
+ __ xor3(G2,G4,G4);
+ __ movxtod(G3,F56);
+ __ movxtod(G4,F58);
+ __ fxor(FloatRegisterImpl::D, F60, F56, F60);
+ __ fxor(FloatRegisterImpl::D, F62, F58, F62);
+
+ // TEN_EROUNDS
+ for ( int i = 0; i <= 32; i += 8 ) {
+ __ aes_eround01(as_FloatRegister(i), F60, F62, F56);
+ __ aes_eround23(as_FloatRegister(i+2), F60, F62, F58);
+ if (i != 32 ) {
+ __ aes_eround01(as_FloatRegister(i+4), F56, F58, F60);
+ __ aes_eround23(as_FloatRegister(i+6), F56, F58, F62);
+ } else {
+ __ aes_eround01_l(as_FloatRegister(i+4), F56, F58, F60);
+ __ aes_eround23_l(as_FloatRegister(i+6), F56, F58, F62);
+ }
+ }
+
+ __ stf(FloatRegisterImpl::D, F60, to, 0);
+ __ stf(FloatRegisterImpl::D, F62, to, 8);
+ __ add(from, 16, from);
+ __ add(to, 16, to);
+ __ subcc(len_reg, 16, len_reg);
+ __ br(Assembler::notEqual, false, Assembler::pt, L_cbcenc128);
+ __ delayed()->nop();
+ __ stf(FloatRegisterImpl::D, F60, rvec, 0);
+ __ stf(FloatRegisterImpl::D, F62, rvec, 8);
+ __ retl();
+ __ delayed()->mov(L1, O0);
+
+ __ align(OptoLoopAlignment);
+ __ BIND(L_cbcenc192);
+ __ ldx(from,0,G3);
+ __ ldx(from,8,G4);
+ __ xor3(G1,G3,G3);
+ __ xor3(G2,G4,G4);
+ __ movxtod(G3,F56);
+ __ movxtod(G4,F58);
+ __ fxor(FloatRegisterImpl::D, F60, F56, F60);
+ __ fxor(FloatRegisterImpl::D, F62, F58, F62);
+
+ // TWELEVE_EROUNDS
+ for ( int i = 0; i <= 40; i += 8 ) {
+ __ aes_eround01(as_FloatRegister(i), F60, F62, F56);
+ __ aes_eround23(as_FloatRegister(i+2), F60, F62, F58);
+ if (i != 40 ) {
+ __ aes_eround01(as_FloatRegister(i+4), F56, F58, F60);
+ __ aes_eround23(as_FloatRegister(i+6), F56, F58, F62);
+ } else {
+ __ aes_eround01_l(as_FloatRegister(i+4), F56, F58, F60);
+ __ aes_eround23_l(as_FloatRegister(i+6), F56, F58, F62);
+ }
+ }
+
+ __ stf(FloatRegisterImpl::D, F60, to, 0);
+ __ stf(FloatRegisterImpl::D, F62, to, 8);
+ __ add(from, 16, from);
+ __ subcc(len_reg, 16, len_reg);
+ __ add(to, 16, to);
+ __ br(Assembler::notEqual, false, Assembler::pt, L_cbcenc192);
+ __ delayed()->nop();
+ __ stf(FloatRegisterImpl::D, F60, rvec, 0);
+ __ stf(FloatRegisterImpl::D, F62, rvec, 8);
+ __ retl();
+ __ delayed()->mov(L1, O0);
+
+ __ align(OptoLoopAlignment);
+ __ BIND(L_cbcenc256);
+ __ ldx(from,0,G3);
+ __ ldx(from,8,G4);
+ __ xor3(G1,G3,G3);
+ __ xor3(G2,G4,G4);
+ __ movxtod(G3,F56);
+ __ movxtod(G4,F58);
+ __ fxor(FloatRegisterImpl::D, F60, F56, F60);
+ __ fxor(FloatRegisterImpl::D, F62, F58, F62);
+
+ // FOURTEEN_EROUNDS
+ for ( int i = 0; i <= 48; i += 8 ) {
+ __ aes_eround01(as_FloatRegister(i), F60, F62, F56);
+ __ aes_eround23(as_FloatRegister(i+2), F60, F62, F58);
+ if (i != 48 ) {
+ __ aes_eround01(as_FloatRegister(i+4), F56, F58, F60);
+ __ aes_eround23(as_FloatRegister(i+6), F56, F58, F62);
+ } else {
+ __ aes_eround01_l(as_FloatRegister(i+4), F56, F58, F60);
+ __ aes_eround23_l(as_FloatRegister(i+6), F56, F58, F62);
+ }
+ }
+
+ __ stf(FloatRegisterImpl::D, F60, to, 0);
+ __ stf(FloatRegisterImpl::D, F62, to, 8);
+ __ add(from, 16, from);
+ __ subcc(len_reg, 16, len_reg);
+ __ add(to, 16, to);
+ __ br(Assembler::notEqual, false, Assembler::pt, L_cbcenc256);
+ __ delayed()->nop();
+ __ stf(FloatRegisterImpl::D, F60, rvec, 0);
+ __ stf(FloatRegisterImpl::D, F62, rvec, 8);
+ __ retl();
+ __ delayed()->mov(L1, O0);
+
+ return start;
+ }
+
+ address generate_cipherBlockChaining_decryptAESCrypt_Parallel() {
+ __ align(CodeEntryAlignment);
+ StubCodeMark mark(this, "StubRoutines", "cipherBlockChaining_decryptAESCrypt");
+ Label L_cbcdec_end, L_expand192bit, L_expand256bit, L_dec_first_block_start;
+ Label L_dec_first_block128, L_dec_first_block192, L_dec_next2_blocks128, L_dec_next2_blocks192, L_dec_next2_blocks256;
+ address start = __ pc();
+ Register from = I0; // source byte array
+ Register to = I1; // destination byte array
+ Register key = I2; // expanded key array
+ Register rvec = I3; // init vector
+ const Register len_reg = I4; // cipher length
+ const Register original_key = I5; // original key array only required during decryption
+ const Register keylen = L6; // reg for storing expanded key array length
+
+ // save cipher len before save_frame, to return in the end
+ __ mov(O4, L0);
+ __ save_frame(0); //args are read from I* registers since we save the frame in the beginning
+
+ // load original key from SunJCE expanded decryption key
+ for ( int i = 0; i <= 3; i++ ) {
+ __ ldf(FloatRegisterImpl::S, original_key, i*4, as_FloatRegister(i));
+ }
+
+ // load initial vector
+ __ ldx(rvec,0,L0);
+ __ ldx(rvec,8,L1);
+
+ // read expanded key array length
+ __ ldsw(Address(key, arrayOopDesc::length_offset_in_bytes() - arrayOopDesc::base_offset_in_bytes(T_INT)), keylen, 0);
+
+ // 256-bit original key size
+ __ cmp_and_brx_short(keylen, 60, Assembler::equal, Assembler::pn, L_expand256bit);
+
+ // 192-bit original key size
+ __ cmp_and_brx_short(keylen, 52, Assembler::equal, Assembler::pn, L_expand192bit);
+
+ // 128-bit original key size
+ // perform key expansion since SunJCE decryption-key expansion is not compatible with SPARC crypto instructions
+ for ( int i = 0; i <= 36; i += 4 ) {
+ __ aes_kexpand1(as_FloatRegister(i), as_FloatRegister(i+2), i/4, as_FloatRegister(i+4));
+ __ aes_kexpand2(as_FloatRegister(i+2), as_FloatRegister(i+4), as_FloatRegister(i+6));
+ }
+
+ // load expanded key[last-1] and key[last] elements
+ __ movdtox(F40,L2);
+ __ movdtox(F42,L3);
+
+ __ and3(len_reg, 16, L4);
+ __ br_null(L4, false, Assembler::pt, L_dec_next2_blocks128);
+ __ delayed()->nop();
+
+ __ br(Assembler::always, false, Assembler::pt, L_dec_first_block_start);
+ __ delayed()->nop();
+
+ __ BIND(L_expand192bit);
+ // load rest of the 192-bit key
+ __ ldf(FloatRegisterImpl::S, original_key, 16, F4);
+ __ ldf(FloatRegisterImpl::S, original_key, 20, F5);
+
+ // perform key expansion since SunJCE decryption-key expansion is not compatible with SPARC crypto instructions
+ for ( int i = 0; i <= 36; i += 6 ) {
+ __ aes_kexpand1(as_FloatRegister(i), as_FloatRegister(i+4), i/6, as_FloatRegister(i+6));
+ __ aes_kexpand2(as_FloatRegister(i+2), as_FloatRegister(i+6), as_FloatRegister(i+8));
+ __ aes_kexpand2(as_FloatRegister(i+4), as_FloatRegister(i+8), as_FloatRegister(i+10));
+ }
+ __ aes_kexpand1(F42, F46, 7, F48);
+ __ aes_kexpand2(F44, F48, F50);
+
+ // load expanded key[last-1] and key[last] elements
+ __ movdtox(F48,L2);
+ __ movdtox(F50,L3);
+
+ __ and3(len_reg, 16, L4);
+ __ br_null(L4, false, Assembler::pt, L_dec_next2_blocks192);
+ __ delayed()->nop();
+
+ __ br(Assembler::always, false, Assembler::pt, L_dec_first_block_start);
+ __ delayed()->nop();
+
+ __ BIND(L_expand256bit);
+ // load rest of the 256-bit key
+ for ( int i = 4; i <= 7; i++ ) {
+ __ ldf(FloatRegisterImpl::S, original_key, i*4, as_FloatRegister(i));
+ }
+
+ // perform key expansion since SunJCE decryption-key expansion is not compatible with SPARC crypto instructions
+ for ( int i = 0; i <= 40; i += 8 ) {
+ __ aes_kexpand1(as_FloatRegister(i), as_FloatRegister(i+6), i/8, as_FloatRegister(i+8));
+ __ aes_kexpand2(as_FloatRegister(i+2), as_FloatRegister(i+8), as_FloatRegister(i+10));
+ __ aes_kexpand0(as_FloatRegister(i+4), as_FloatRegister(i+10), as_FloatRegister(i+12));
+ __ aes_kexpand2(as_FloatRegister(i+6), as_FloatRegister(i+12), as_FloatRegister(i+14));
+ }
+ __ aes_kexpand1(F48, F54, 6, F56);
+ __ aes_kexpand2(F50, F56, F58);
+
+ // load expanded key[last-1] and key[last] elements
+ __ movdtox(F56,L2);
+ __ movdtox(F58,L3);
+
+ __ and3(len_reg, 16, L4);
+ __ br_null(L4, false, Assembler::pt, L_dec_next2_blocks256);
+ __ delayed()->nop();
+
+ __ BIND(L_dec_first_block_start);
+ __ ldx(from,0,L4);
+ __ ldx(from,8,L5);
+ __ xor3(L2,L4,G1);
+ __ movxtod(G1,F60);
+ __ xor3(L3,L5,G1);
+ __ movxtod(G1,F62);
+
+ // 128-bit original key size
+ __ cmp_and_brx_short(keylen, 44, Assembler::equal, Assembler::pn, L_dec_first_block128);
+
+ // 192-bit original key size
+ __ cmp_and_brx_short(keylen, 52, Assembler::equal, Assembler::pn, L_dec_first_block192);
+
+ __ aes_dround23(F54, F60, F62, F58);
+ __ aes_dround01(F52, F60, F62, F56);
+ __ aes_dround23(F50, F56, F58, F62);
+ __ aes_dround01(F48, F56, F58, F60);
+
+ __ BIND(L_dec_first_block192);
+ __ aes_dround23(F46, F60, F62, F58);
+ __ aes_dround01(F44, F60, F62, F56);
+ __ aes_dround23(F42, F56, F58, F62);
+ __ aes_dround01(F40, F56, F58, F60);
+
+ __ BIND(L_dec_first_block128);
+ for ( int i = 38; i >= 6; i -= 8 ) {
+ __ aes_dround23(as_FloatRegister(i), F60, F62, F58);
+ __ aes_dround01(as_FloatRegister(i-2), F60, F62, F56);
+ if ( i != 6) {
+ __ aes_dround23(as_FloatRegister(i-4), F56, F58, F62);
+ __ aes_dround01(as_FloatRegister(i-6), F56, F58, F60);
+ } else {
+ __ aes_dround23_l(as_FloatRegister(i-4), F56, F58, F62);
+ __ aes_dround01_l(as_FloatRegister(i-6), F56, F58, F60);
+ }
+ }
+
+ __ movxtod(L0,F56);
+ __ movxtod(L1,F58);
+ __ mov(L4,L0);
+ __ mov(L5,L1);
+ __ fxor(FloatRegisterImpl::D, F56, F60, F60);
+ __ fxor(FloatRegisterImpl::D, F58, F62, F62);
+
+ __ stf(FloatRegisterImpl::D, F60, to, 0);
+ __ stf(FloatRegisterImpl::D, F62, to, 8);
+
+ __ add(from, 16, from);
+ __ add(to, 16, to);
+ __ subcc(len_reg, 16, len_reg);
+ __ br(Assembler::equal, false, Assembler::pt, L_cbcdec_end);
+ __ delayed()->nop();
+
+ // 256-bit original key size
+ __ cmp_and_brx_short(keylen, 60, Assembler::equal, Assembler::pn, L_dec_next2_blocks256);
+
+ // 192-bit original key size
+ __ cmp_and_brx_short(keylen, 52, Assembler::equal, Assembler::pn, L_dec_next2_blocks192);
+
+ __ align(OptoLoopAlignment);
+ __ BIND(L_dec_next2_blocks128);
+ __ nop();
+
+ // F40:F42 used for first 16-bytes
+ __ ldx(from,0,G4);
+ __ ldx(from,8,G5);
+ __ xor3(L2,G4,G1);
+ __ movxtod(G1,F40);
+ __ xor3(L3,G5,G1);
+ __ movxtod(G1,F42);
+
+ // F60:F62 used for next 16-bytes
+ __ ldx(from,16,L4);
+ __ ldx(from,24,L5);
+ __ xor3(L2,L4,G1);
+ __ movxtod(G1,F60);
+ __ xor3(L3,L5,G1);
+ __ movxtod(G1,F62);
+
+ for ( int i = 38; i >= 6; i -= 8 ) {
+ __ aes_dround23(as_FloatRegister(i), F40, F42, F44);
+ __ aes_dround01(as_FloatRegister(i-2), F40, F42, F46);
+ __ aes_dround23(as_FloatRegister(i), F60, F62, F58);
+ __ aes_dround01(as_FloatRegister(i-2), F60, F62, F56);
+ if (i != 6 ) {
+ __ aes_dround23(as_FloatRegister(i-4), F46, F44, F42);
+ __ aes_dround01(as_FloatRegister(i-6), F46, F44, F40);
+ __ aes_dround23(as_FloatRegister(i-4), F56, F58, F62);
+ __ aes_dround01(as_FloatRegister(i-6), F56, F58, F60);
+ } else {
+ __ aes_dround23_l(as_FloatRegister(i-4), F46, F44, F42);
+ __ aes_dround01_l(as_FloatRegister(i-6), F46, F44, F40);
+ __ aes_dround23_l(as_FloatRegister(i-4), F56, F58, F62);
+ __ aes_dround01_l(as_FloatRegister(i-6), F56, F58, F60);
+ }
+ }
+
+ __ movxtod(L0,F46);
+ __ movxtod(L1,F44);
+ __ fxor(FloatRegisterImpl::D, F46, F40, F40);
+ __ fxor(FloatRegisterImpl::D, F44, F42, F42);
+
+ __ stf(FloatRegisterImpl::D, F40, to, 0);
+ __ stf(FloatRegisterImpl::D, F42, to, 8);
+
+ __ movxtod(G4,F56);
+ __ movxtod(G5,F58);
+ __ mov(L4,L0);
+ __ mov(L5,L1);
+ __ fxor(FloatRegisterImpl::D, F56, F60, F60);
+ __ fxor(FloatRegisterImpl::D, F58, F62, F62);
+
+ __ stf(FloatRegisterImpl::D, F60, to, 16);
+ __ stf(FloatRegisterImpl::D, F62, to, 24);
+
+ __ add(from, 32, from);
+ __ add(to, 32, to);
+ __ subcc(len_reg, 32, len_reg);
+ __ br(Assembler::notEqual, false, Assembler::pt, L_dec_next2_blocks128);
+ __ delayed()->nop();
+ __ br(Assembler::always, false, Assembler::pt, L_cbcdec_end);
+ __ delayed()->nop();
+
+ __ align(OptoLoopAlignment);
+ __ BIND(L_dec_next2_blocks192);
+ __ nop();
+
+ // F48:F50 used for first 16-bytes
+ __ ldx(from,0,G4);
+ __ ldx(from,8,G5);
+ __ xor3(L2,G4,G1);
+ __ movxtod(G1,F48);
+ __ xor3(L3,G5,G1);
+ __ movxtod(G1,F50);
+
+ // F60:F62 used for next 16-bytes
+ __ ldx(from,16,L4);
+ __ ldx(from,24,L5);
+ __ xor3(L2,L4,G1);
+ __ movxtod(G1,F60);
+ __ xor3(L3,L5,G1);
+ __ movxtod(G1,F62);
+
+ for ( int i = 46; i >= 6; i -= 8 ) {
+ __ aes_dround23(as_FloatRegister(i), F48, F50, F52);
+ __ aes_dround01(as_FloatRegister(i-2), F48, F50, F54);
+ __ aes_dround23(as_FloatRegister(i), F60, F62, F58);
+ __ aes_dround01(as_FloatRegister(i-2), F60, F62, F56);
+ if (i != 6 ) {
+ __ aes_dround23(as_FloatRegister(i-4), F54, F52, F50);
+ __ aes_dround01(as_FloatRegister(i-6), F54, F52, F48);
+ __ aes_dround23(as_FloatRegister(i-4), F56, F58, F62);
+ __ aes_dround01(as_FloatRegister(i-6), F56, F58, F60);
+ } else {
+ __ aes_dround23_l(as_FloatRegister(i-4), F54, F52, F50);
+ __ aes_dround01_l(as_FloatRegister(i-6), F54, F52, F48);
+ __ aes_dround23_l(as_FloatRegister(i-4), F56, F58, F62);
+ __ aes_dround01_l(as_FloatRegister(i-6), F56, F58, F60);
+ }
+ }
+
+ __ movxtod(L0,F54);
+ __ movxtod(L1,F52);
+ __ fxor(FloatRegisterImpl::D, F54, F48, F48);
+ __ fxor(FloatRegisterImpl::D, F52, F50, F50);
+
+ __ stf(FloatRegisterImpl::D, F48, to, 0);
+ __ stf(FloatRegisterImpl::D, F50, to, 8);
+
+ __ movxtod(G4,F56);
+ __ movxtod(G5,F58);
+ __ mov(L4,L0);
+ __ mov(L5,L1);
+ __ fxor(FloatRegisterImpl::D, F56, F60, F60);
+ __ fxor(FloatRegisterImpl::D, F58, F62, F62);
+
+ __ stf(FloatRegisterImpl::D, F60, to, 16);
+ __ stf(FloatRegisterImpl::D, F62, to, 24);
+
+ __ add(from, 32, from);
+ __ add(to, 32, to);
+ __ subcc(len_reg, 32, len_reg);
+ __ br(Assembler::notEqual, false, Assembler::pt, L_dec_next2_blocks192);
+ __ delayed()->nop();
+ __ br(Assembler::always, false, Assembler::pt, L_cbcdec_end);
+ __ delayed()->nop();
+
+ __ align(OptoLoopAlignment);
+ __ BIND(L_dec_next2_blocks256);
+ __ nop();
+
+ // F0:F2 used for first 16-bytes
+ __ ldx(from,0,G4);
+ __ ldx(from,8,G5);
+ __ xor3(L2,G4,G1);
+ __ movxtod(G1,F0);
+ __ xor3(L3,G5,G1);
+ __ movxtod(G1,F2);
+
+ // F60:F62 used for next 16-bytes
+ __ ldx(from,16,L4);
+ __ ldx(from,24,L5);
+ __ xor3(L2,L4,G1);
+ __ movxtod(G1,F60);
+ __ xor3(L3,L5,G1);
+ __ movxtod(G1,F62);
+
+ __ aes_dround23(F54, F0, F2, F4);
+ __ aes_dround01(F52, F0, F2, F6);
+ __ aes_dround23(F54, F60, F62, F58);
+ __ aes_dround01(F52, F60, F62, F56);
+ __ aes_dround23(F50, F6, F4, F2);
+ __ aes_dround01(F48, F6, F4, F0);
+ __ aes_dround23(F50, F56, F58, F62);
+ __ aes_dround01(F48, F56, F58, F60);
+ // save F48:F54 in temp registers
+ __ movdtox(F54,G2);
+ __ movdtox(F52,G3);
+ __ movdtox(F50,G6);
+ __ movdtox(F48,G1);
+ for ( int i = 46; i >= 14; i -= 8 ) {
+ __ aes_dround23(as_FloatRegister(i), F0, F2, F4);
+ __ aes_dround01(as_FloatRegister(i-2), F0, F2, F6);
+ __ aes_dround23(as_FloatRegister(i), F60, F62, F58);
+ __ aes_dround01(as_FloatRegister(i-2), F60, F62, F56);
+ __ aes_dround23(as_FloatRegister(i-4), F6, F4, F2);
+ __ aes_dround01(as_FloatRegister(i-6), F6, F4, F0);
+ __ aes_dround23(as_FloatRegister(i-4), F56, F58, F62);
+ __ aes_dround01(as_FloatRegister(i-6), F56, F58, F60);
+ }
+ // init F48:F54 with F0:F6 values (original key)
+ __ ldf(FloatRegisterImpl::D, original_key, 0, F48);
+ __ ldf(FloatRegisterImpl::D, original_key, 8, F50);
+ __ ldf(FloatRegisterImpl::D, original_key, 16, F52);
+ __ ldf(FloatRegisterImpl::D, original_key, 24, F54);
+ __ aes_dround23(F54, F0, F2, F4);
+ __ aes_dround01(F52, F0, F2, F6);
+ __ aes_dround23(F54, F60, F62, F58);
+ __ aes_dround01(F52, F60, F62, F56);
+ __ aes_dround23_l(F50, F6, F4, F2);
+ __ aes_dround01_l(F48, F6, F4, F0);
+ __ aes_dround23_l(F50, F56, F58, F62);
+ __ aes_dround01_l(F48, F56, F58, F60);
+ // re-init F48:F54 with their original values
+ __ movxtod(G2,F54);
+ __ movxtod(G3,F52);
+ __ movxtod(G6,F50);
+ __ movxtod(G1,F48);
+
+ __ movxtod(L0,F6);
+ __ movxtod(L1,F4);
+ __ fxor(FloatRegisterImpl::D, F6, F0, F0);
+ __ fxor(FloatRegisterImpl::D, F4, F2, F2);
+
+ __ stf(FloatRegisterImpl::D, F0, to, 0);
+ __ stf(FloatRegisterImpl::D, F2, to, 8);
+
+ __ movxtod(G4,F56);
+ __ movxtod(G5,F58);
+ __ mov(L4,L0);
+ __ mov(L5,L1);
+ __ fxor(FloatRegisterImpl::D, F56, F60, F60);
+ __ fxor(FloatRegisterImpl::D, F58, F62, F62);
+
+ __ stf(FloatRegisterImpl::D, F60, to, 16);
+ __ stf(FloatRegisterImpl::D, F62, to, 24);
+
+ __ add(from, 32, from);
+ __ add(to, 32, to);
+ __ subcc(len_reg, 32, len_reg);
+ __ br(Assembler::notEqual, false, Assembler::pt, L_dec_next2_blocks256);
+ __ delayed()->nop();
+
+ __ BIND(L_cbcdec_end);
+ __ stx(L0, rvec, 0);
+ __ stx(L1, rvec, 8);
+ __ restore();
+ __ mov(L0, O0);
+ __ retl();
+ __ delayed()->nop();
+
+ return start;
+ }
+
void generate_initial() {
// Generates all stubs and initializes the entry points
@@ -3368,6 +4137,14 @@
generate_safefetch("SafeFetchN", sizeof(intptr_t), &StubRoutines::_safefetchN_entry,
&StubRoutines::_safefetchN_fault_pc,
&StubRoutines::_safefetchN_continuation_pc);
+
+ // generate AES intrinsics code
+ if (UseAESIntrinsics) {
+ StubRoutines::_aescrypt_encryptBlock = generate_aescrypt_encryptBlock();
+ StubRoutines::_aescrypt_decryptBlock = generate_aescrypt_decryptBlock();
+ StubRoutines::_cipherBlockChaining_encryptAESCrypt = generate_cipherBlockChaining_encryptAESCrypt();
+ StubRoutines::_cipherBlockChaining_decryptAESCrypt = generate_cipherBlockChaining_decryptAESCrypt_Parallel();
+ }
}
diff --git a/hotspot/src/cpu/sparc/vm/templateInterpreter_sparc.cpp b/hotspot/src/cpu/sparc/vm/templateInterpreter_sparc.cpp
index 40847f8..5fd629a 100644
--- a/hotspot/src/cpu/sparc/vm/templateInterpreter_sparc.cpp
+++ b/hotspot/src/cpu/sparc/vm/templateInterpreter_sparc.cpp
@@ -156,6 +156,10 @@
address TemplateInterpreterGenerator::generate_return_entry_for(TosState state, int step, size_t index_size) {
address entry = __ pc();
+ if (state == atos) {
+ __ profile_return_type(O0, G3_scratch, G1_scratch);
+ }
+
#if !defined(_LP64) && defined(COMPILER2)
// All return values are where we want them, except for Longs. C2 returns
// longs in G1 in the 32-bit build whereas the interpreter wants them in O0/O1.
@@ -1333,6 +1337,7 @@
__ movbool(true, G3_scratch);
__ stbool(G3_scratch, do_not_unlock_if_synchronized);
+ __ profile_parameters_type(G1_scratch, G3_scratch, G4_scratch, Lscratch);
// increment invocation counter and check for overflow
//
// Note: checking for negative value instead of overflow
diff --git a/hotspot/src/cpu/sparc/vm/templateTable_sparc.cpp b/hotspot/src/cpu/sparc/vm/templateTable_sparc.cpp
index 9209811..83e083e 100644
--- a/hotspot/src/cpu/sparc/vm/templateTable_sparc.cpp
+++ b/hotspot/src/cpu/sparc/vm/templateTable_sparc.cpp
@@ -2942,12 +2942,12 @@
void TemplateTable::generate_vtable_call(Register Rrecv, Register Rindex, Register Rret) {
- Register Rtemp = G4_scratch;
Register Rcall = Rindex;
assert_different_registers(Rcall, G5_method, Gargs, Rret);
// get target Method* & entry point
__ lookup_virtual_method(Rrecv, Rindex, G5_method);
+ __ profile_arguments_type(G5_method, Rcall, Gargs, true);
__ call_from_interpreter(Rcall, Gargs, Rret);
}
@@ -3022,6 +3022,7 @@
__ null_check(O0);
__ profile_final_call(O4);
+ __ profile_arguments_type(G5_method, Rscratch, Gargs, true);
// get return address
AddressLiteral table(Interpreter::invoke_return_entry_table());
@@ -3051,6 +3052,7 @@
// do the call
__ profile_call(O4);
+ __ profile_arguments_type(G5_method, Rscratch, Gargs, false);
__ call_from_interpreter(Rscratch, Gargs, Rret);
}
@@ -3066,6 +3068,7 @@
// do the call
__ profile_call(O4);
+ __ profile_arguments_type(G5_method, Rscratch, Gargs, false);
__ call_from_interpreter(Rscratch, Gargs, Rret);
}
@@ -3091,6 +3094,7 @@
// do the call - the index (f2) contains the Method*
assert_different_registers(G5_method, Gargs, Rcall);
__ mov(Rindex, G5_method);
+ __ profile_arguments_type(G5_method, Rcall, Gargs, true);
__ call_from_interpreter(Rcall, Gargs, Rret);
__ bind(notFinal);
@@ -3197,6 +3201,7 @@
Register Rcall = Rinterface;
assert_different_registers(Rcall, G5_method, Gargs, Rret);
+ __ profile_arguments_type(G5_method, Rcall, Gargs, true);
__ call_from_interpreter(Rcall, Gargs, Rret);
}
@@ -3226,6 +3231,7 @@
// do the call
__ verify_oop(G4_mtype);
__ profile_final_call(O4); // FIXME: profile the LambdaForm also
+ __ profile_arguments_type(G5_method, Rscratch, Gargs, true);
__ call_from_interpreter(Rscratch, Gargs, Rret);
}
@@ -3262,6 +3268,7 @@
// do the call
__ verify_oop(G4_callsite);
+ __ profile_arguments_type(G5_method, Rscratch, Gargs, false);
__ call_from_interpreter(Rscratch, Gargs, Rret);
}
diff --git a/hotspot/src/cpu/sparc/vm/vm_version_sparc.cpp b/hotspot/src/cpu/sparc/vm/vm_version_sparc.cpp
index bae7b35..b75d21f 100644
--- a/hotspot/src/cpu/sparc/vm/vm_version_sparc.cpp
+++ b/hotspot/src/cpu/sparc/vm/vm_version_sparc.cpp
@@ -234,7 +234,7 @@
assert((OptoLoopAlignment % relocInfo::addr_unit()) == 0, "alignment is not a multiple of NOP size");
char buf[512];
- jio_snprintf(buf, sizeof(buf), "%s%s%s%s%s%s%s%s%s%s%s%s%s%s",
+ jio_snprintf(buf, sizeof(buf), "%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s",
(has_v9() ? ", v9" : (has_v8() ? ", v8" : "")),
(has_hardware_popc() ? ", popc" : ""),
(has_vis1() ? ", vis1" : ""),
@@ -242,6 +242,7 @@
(has_vis3() ? ", vis3" : ""),
(has_blk_init() ? ", blk_init" : ""),
(has_cbcond() ? ", cbcond" : ""),
+ (has_aes() ? ", aes" : ""),
(is_ultra3() ? ", ultra3" : ""),
(is_sun4v() ? ", sun4v" : ""),
(is_niagara_plus() ? ", niagara_plus" : (is_niagara() ? ", niagara" : "")),
@@ -265,6 +266,41 @@
if (!has_vis1()) // Drop to 0 if no VIS1 support
UseVIS = 0;
+ // T2 and above should have support for AES instructions
+ if (has_aes()) {
+ if (UseVIS > 0) { // AES intrinsics use FXOR instruction which is VIS1
+ if (FLAG_IS_DEFAULT(UseAES)) {
+ FLAG_SET_DEFAULT(UseAES, true);
+ }
+ if (FLAG_IS_DEFAULT(UseAESIntrinsics)) {
+ FLAG_SET_DEFAULT(UseAESIntrinsics, true);
+ }
+ // we disable both the AES flags if either of them is disabled on the command line
+ if (!UseAES || !UseAESIntrinsics) {
+ FLAG_SET_DEFAULT(UseAES, false);
+ FLAG_SET_DEFAULT(UseAESIntrinsics, false);
+ }
+ } else {
+ if (UseAES || UseAESIntrinsics) {
+ warning("SPARC AES intrinsics require VIS1 instruction support. Intrinsics will be disabled.");
+ if (UseAES) {
+ FLAG_SET_DEFAULT(UseAES, false);
+ }
+ if (UseAESIntrinsics) {
+ FLAG_SET_DEFAULT(UseAESIntrinsics, false);
+ }
+ }
+ }
+ } else if (UseAES || UseAESIntrinsics) {
+ warning("AES instructions are not available on this CPU");
+ if (UseAES) {
+ FLAG_SET_DEFAULT(UseAES, false);
+ }
+ if (UseAESIntrinsics) {
+ FLAG_SET_DEFAULT(UseAESIntrinsics, false);
+ }
+ }
+
if (FLAG_IS_DEFAULT(ContendedPaddingWidth) &&
(cache_line_size > ContendedPaddingWidth))
ContendedPaddingWidth = cache_line_size;
diff --git a/hotspot/src/cpu/sparc/vm/vm_version_sparc.hpp b/hotspot/src/cpu/sparc/vm/vm_version_sparc.hpp
index b8d63f4..eafb485 100644
--- a/hotspot/src/cpu/sparc/vm/vm_version_sparc.hpp
+++ b/hotspot/src/cpu/sparc/vm/vm_version_sparc.hpp
@@ -48,7 +48,9 @@
sparc64_family = 14,
M_family = 15,
T_family = 16,
- T1_model = 17
+ T1_model = 17,
+ sparc5_instructions = 18,
+ aes_instructions = 19
};
enum Feature_Flag_Set {
@@ -73,6 +75,8 @@
M_family_m = 1 << M_family,
T_family_m = 1 << T_family,
T1_model_m = 1 << T1_model,
+ sparc5_instructions_m = 1 << sparc5_instructions,
+ aes_instructions_m = 1 << aes_instructions,
generic_v8_m = v8_instructions_m | hardware_mul32_m | hardware_div32_m | hardware_fsmuld_m,
generic_v9_m = generic_v8_m | v9_instructions_m,
@@ -123,6 +127,8 @@
static bool has_vis3() { return (_features & vis3_instructions_m) != 0; }
static bool has_blk_init() { return (_features & blk_init_instructions_m) != 0; }
static bool has_cbcond() { return (_features & cbcond_instructions_m) != 0; }
+ static bool has_sparc5_instr() { return (_features & sparc5_instructions_m) != 0; }
+ static bool has_aes() { return (_features & aes_instructions_m) != 0; }
static bool supports_compare_and_exchange()
{ return has_v9(); }
@@ -133,6 +139,7 @@
static bool is_M_series() { return is_M_family(_features); }
static bool is_T4() { return is_T_family(_features) && has_cbcond(); }
+ static bool is_T7() { return is_T_family(_features) && has_sparc5_instr(); }
// Fujitsu SPARC64
static bool is_sparc64() { return (_features & sparc64_family_m) != 0; }
@@ -152,7 +159,7 @@
static const char* cpu_features() { return _features_str; }
static intx prefetch_data_size() {
- return is_T4() ? 32 : 64; // default prefetch block size on sparc
+ return is_T4() && !is_T7() ? 32 : 64; // default prefetch block size on sparc
}
// Prefetch
diff --git a/hotspot/src/cpu/x86/vm/interp_masm_x86.cpp b/hotspot/src/cpu/x86/vm/interp_masm_x86.cpp
index f47c0b1..799be13 100644
--- a/hotspot/src/cpu/x86/vm/interp_masm_x86.cpp
+++ b/hotspot/src/cpu/x86/vm/interp_masm_x86.cpp
@@ -127,7 +127,7 @@
if (MethodData::profile_return()) {
// We're right after the type profile for the last
- // argument. tmp is the number of cell left in the
+ // argument. tmp is the number of cells left in the
// CallTypeData/VirtualCallTypeData to reach its end. Non null
// if there's a return to profile.
assert(ReturnTypeEntry::static_cell_count() < TypeStackSlotEntries::per_arg_count(), "can't move past ret type");
@@ -198,7 +198,7 @@
// parameters. Collect profiling from last parameter down.
// mdo start + parameters offset + array length - 1
addptr(mdp, tmp1);
- movptr(tmp1, Address(mdp, in_bytes(ArrayData::array_len_offset())));
+ movptr(tmp1, Address(mdp, ArrayData::array_len_offset()));
decrement(tmp1, TypeStackSlotEntries::per_arg_count());
Label loop;
diff --git a/hotspot/src/cpu/x86/vm/stubGenerator_x86_32.cpp b/hotspot/src/cpu/x86/vm/stubGenerator_x86_32.cpp
index 12fccf9..1622fe5 100644
--- a/hotspot/src/cpu/x86/vm/stubGenerator_x86_32.cpp
+++ b/hotspot/src/cpu/x86/vm/stubGenerator_x86_32.cpp
@@ -2403,6 +2403,9 @@
// c_rarg3 - r vector byte array address
// c_rarg4 - input length
//
+ // Output:
+ // rax - input length
+ //
address generate_cipherBlockChaining_encryptAESCrypt() {
assert(UseAES, "need AES instructions and misaligned SSE support");
__ align(CodeEntryAlignment);
@@ -2483,7 +2486,7 @@
__ movdqu(Address(rvec, 0), xmm_result); // final value of r stored in rvec of CipherBlockChaining object
handleSOERegisters(false /*restoring*/);
- __ movl(rax, 0); // return 0 (why?)
+ __ movptr(rax, len_param); // return length
__ leave(); // required for proper stackwalking of RuntimeStub frame
__ ret(0);
@@ -2557,6 +2560,9 @@
// c_rarg3 - r vector byte array address
// c_rarg4 - input length
//
+ // Output:
+ // rax - input length
+ //
address generate_cipherBlockChaining_decryptAESCrypt() {
assert(UseAES, "need AES instructions and misaligned SSE support");
@@ -2650,7 +2656,7 @@
__ movptr(rvec , rvec_param); // restore this since used in loop
__ movdqu(Address(rvec, 0), xmm_temp); // final value of r stored in rvec of CipherBlockChaining object
handleSOERegisters(false /*restoring*/);
- __ movl(rax, 0); // return 0 (why?)
+ __ movptr(rax, len_param); // return length
__ leave(); // required for proper stackwalking of RuntimeStub frame
__ ret(0);
diff --git a/hotspot/src/cpu/x86/vm/stubGenerator_x86_64.cpp b/hotspot/src/cpu/x86/vm/stubGenerator_x86_64.cpp
index a166112..0adb0d3 100644
--- a/hotspot/src/cpu/x86/vm/stubGenerator_x86_64.cpp
+++ b/hotspot/src/cpu/x86/vm/stubGenerator_x86_64.cpp
@@ -3217,6 +3217,9 @@
// c_rarg3 - r vector byte array address
// c_rarg4 - input length
//
+ // Output:
+ // rax - input length
+ //
address generate_cipherBlockChaining_encryptAESCrypt() {
assert(UseAES, "need AES instructions and misaligned SSE support");
__ align(CodeEntryAlignment);
@@ -3232,7 +3235,7 @@
#ifndef _WIN64
const Register len_reg = c_rarg4; // src len (must be multiple of blocksize 16)
#else
- const Address len_mem(rsp, 6 * wordSize); // length is on stack on Win64
+ const Address len_mem(rbp, 6 * wordSize); // length is on stack on Win64
const Register len_reg = r10; // pick the first volatile windows register
#endif
const Register pos = rax;
@@ -3259,6 +3262,8 @@
for (int i = 6; i <= XMM_REG_NUM_KEY_LAST; i++) {
__ movdqu(xmm_save(i), as_XMMRegister(i));
}
+#else
+ __ push(len_reg); // Save
#endif
const XMMRegister xmm_key_shuf_mask = xmm_temp; // used temporarily to swap key bytes up front
@@ -3301,8 +3306,10 @@
for (int i = 6; i <= XMM_REG_NUM_KEY_LAST; i++) {
__ movdqu(as_XMMRegister(i), xmm_save(i));
}
+ __ movl(rax, len_mem);
+#else
+ __ pop(rax); // return length
#endif
- __ movl(rax, 0); // return 0 (why?)
__ leave(); // required for proper stackwalking of RuntimeStub frame
__ ret(0);
@@ -3409,6 +3416,9 @@
// c_rarg3 - r vector byte array address
// c_rarg4 - input length
//
+ // Output:
+ // rax - input length
+ //
address generate_cipherBlockChaining_decryptAESCrypt_Parallel() {
assert(UseAES, "need AES instructions and misaligned SSE support");
@@ -3427,7 +3437,7 @@
#ifndef _WIN64
const Register len_reg = c_rarg4; // src len (must be multiple of blocksize 16)
#else
- const Address len_mem(rsp, 6 * wordSize); // length is on stack on Win64
+ const Address len_mem(rbp, 6 * wordSize); // length is on stack on Win64
const Register len_reg = r10; // pick the first volatile windows register
#endif
const Register pos = rax;
@@ -3448,7 +3458,10 @@
for (int i = 6; i <= XMM_REG_NUM_KEY_LAST; i++) {
__ movdqu(xmm_save(i), as_XMMRegister(i));
}
+#else
+ __ push(len_reg); // Save
#endif
+
// the java expanded key ordering is rotated one position from what we want
// so we start from 0x10 here and hit 0x00 last
const XMMRegister xmm_key_shuf_mask = xmm1; // used temporarily to swap key bytes up front
@@ -3554,8 +3567,10 @@
for (int i = 6; i <= XMM_REG_NUM_KEY_LAST; i++) {
__ movdqu(as_XMMRegister(i), xmm_save(i));
}
+ __ movl(rax, len_mem);
+#else
+ __ pop(rax); // return length
#endif
- __ movl(rax, 0); // return 0 (why?)
__ leave(); // required for proper stackwalking of RuntimeStub frame
__ ret(0);
diff --git a/hotspot/src/cpu/x86/vm/x86.ad b/hotspot/src/cpu/x86/vm/x86.ad
index c49d0e6..b0077a5 100644
--- a/hotspot/src/cpu/x86/vm/x86.ad
+++ b/hotspot/src/cpu/x86/vm/x86.ad
@@ -581,6 +581,12 @@
return !AlignVector; // can be changed by flag
}
+// x86 AES instructions are compatible with SunJCE expanded
+// keys, hence we do not need to pass the original key to stubs
+const bool Matcher::pass_original_key_for_aes() {
+ return false;
+}
+
// Helper methods for MachSpillCopyNode::implementation().
static int vec_mov_helper(CodeBuffer *cbuf, bool do_size, int src_lo, int dst_lo,
int src_hi, int dst_hi, uint ireg, outputStream* st) {
diff --git a/hotspot/src/os/bsd/vm/os_bsd.cpp b/hotspot/src/os/bsd/vm/os_bsd.cpp
index 1bea784..47e5d16 100644
--- a/hotspot/src/os/bsd/vm/os_bsd.cpp
+++ b/hotspot/src/os/bsd/vm/os_bsd.cpp
@@ -1557,6 +1557,17 @@
}
#endif /* !__APPLE__ */
+void* os::get_default_process_handle() {
+#ifdef __APPLE__
+ // MacOS X needs to use RTLD_FIRST instead of RTLD_LAZY
+ // to avoid finding unexpected symbols on second (or later)
+ // loads of a library.
+ return (void*)::dlopen(NULL, RTLD_FIRST);
+#else
+ return (void*)::dlopen(NULL, RTLD_LAZY);
+#endif
+}
+
// XXX: Do we need a lock around this as per Linux?
void* os::dll_lookup(void* handle, const char* name) {
return dlsym(handle, name);
diff --git a/hotspot/src/os/linux/vm/os_linux.cpp b/hotspot/src/os/linux/vm/os_linux.cpp
index 1bb3290..54149e1 100644
--- a/hotspot/src/os/linux/vm/os_linux.cpp
+++ b/hotspot/src/os/linux/vm/os_linux.cpp
@@ -2104,6 +2104,9 @@
return res;
}
+void* os::get_default_process_handle() {
+ return (void*)::dlopen(NULL, RTLD_LAZY);
+}
static bool _print_ascii_file(const char* filename, outputStream* st) {
int fd = ::open(filename, O_RDONLY);
diff --git a/hotspot/src/os/posix/vm/os_posix.cpp b/hotspot/src/os/posix/vm/os_posix.cpp
index 6aae96e..6333317 100644
--- a/hotspot/src/os/posix/vm/os_posix.cpp
+++ b/hotspot/src/os/posix/vm/os_posix.cpp
@@ -262,10 +262,6 @@
return ::fdopen(fd, mode);
}
-void* os::get_default_process_handle() {
- return (void*)::dlopen(NULL, RTLD_LAZY);
-}
-
// Builds a platform dependent Agent_OnLoad_<lib_name> function name
// which is used to find statically linked in agents.
// Parameters:
diff --git a/hotspot/src/os/solaris/vm/os_solaris.cpp b/hotspot/src/os/solaris/vm/os_solaris.cpp
index 8e5984f..a4d0178 100644
--- a/hotspot/src/os/solaris/vm/os_solaris.cpp
+++ b/hotspot/src/os/solaris/vm/os_solaris.cpp
@@ -2146,6 +2146,10 @@
return dlsym(handle, name);
}
+void* os::get_default_process_handle() {
+ return (void*)::dlopen(NULL, RTLD_LAZY);
+}
+
int os::stat(const char *path, struct stat *sbuf) {
char pathbuf[MAX_PATH];
if (strlen(path) > MAX_PATH - 1) {
diff --git a/hotspot/src/os_cpu/solaris_sparc/vm/vm_version_solaris_sparc.cpp b/hotspot/src/os_cpu/solaris_sparc/vm/vm_version_solaris_sparc.cpp
index e46e215..b6639c9 100644
--- a/hotspot/src/os_cpu/solaris_sparc/vm/vm_version_solaris_sparc.cpp
+++ b/hotspot/src/os_cpu/solaris_sparc/vm/vm_version_solaris_sparc.cpp
@@ -75,13 +75,19 @@
do_sysinfo(SI_ARCHITECTURE_64, "sparcv9", &features, generic_v9_m);
// Extract valid instruction set extensions.
- uint_t av;
- uint_t avn = os::Solaris::getisax(&av, 1);
- assert(avn == 1, "should only return one av");
+ uint_t avs[2];
+ uint_t avn = os::Solaris::getisax(avs, 2);
+ assert(avn <= 2, "should return two or less av's");
+ uint_t av = avs[0];
#ifndef PRODUCT
- if (PrintMiscellaneous && Verbose)
- tty->print_cr("getisax(2) returned: " PTR32_FORMAT, av);
+ if (PrintMiscellaneous && Verbose) {
+ tty->print("getisax(2) returned: " PTR32_FORMAT, av);
+ if (avn > 1) {
+ tty->print(", " PTR32_FORMAT, avs[1]);
+ }
+ tty->cr();
+ }
#endif
if (av & AV_SPARC_MUL32) features |= hardware_mul32_m;
@@ -91,6 +97,13 @@
if (av & AV_SPARC_POPC) features |= hardware_popc_m;
if (av & AV_SPARC_VIS) features |= vis1_instructions_m;
if (av & AV_SPARC_VIS2) features |= vis2_instructions_m;
+ if (avn > 1) {
+ uint_t av2 = avs[1];
+#ifndef AV2_SPARC_SPARC5
+#define AV2_SPARC_SPARC5 0x00000008 /* The 29 new fp and sub instructions */
+#endif
+ if (av2 & AV2_SPARC_SPARC5) features |= sparc5_instructions_m;
+ }
// Next values are not defined before Solaris 10
// but Solaris 8 is used for jdk6 update builds.
@@ -119,6 +132,11 @@
#endif
if (av & AV_SPARC_CBCOND) features |= cbcond_instructions_m;
+#ifndef AV_SPARC_AES
+#define AV_SPARC_AES 0x00020000 /* aes instrs supported */
+#endif
+ if (av & AV_SPARC_AES) features |= aes_instructions_m;
+
} else {
// getisax(2) failed, use the old legacy code.
#ifndef PRODUCT
diff --git a/hotspot/src/share/vm/c1/c1_Compilation.hpp b/hotspot/src/share/vm/c1/c1_Compilation.hpp
index 679ff60..8953d52 100644
--- a/hotspot/src/share/vm/c1/c1_Compilation.hpp
+++ b/hotspot/src/share/vm/c1/c1_Compilation.hpp
@@ -259,6 +259,9 @@
}
ciKlass* cha_exact_type(ciType* type);
+
+ // Dump inlining replay data to the stream.
+ void dump_inline_data(outputStream* out) { /* do nothing now */ }
};
diff --git a/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp b/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp
index 1bfd4ba..8d7d4e3 100644
--- a/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp
+++ b/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp
@@ -4338,11 +4338,15 @@
#endif // PRODUCT
void GraphBuilder::profile_call(ciMethod* callee, Value recv, ciKlass* known_holder, Values* obj_args, bool inlined) {
- // A default method's holder is an interface
- if (known_holder != NULL && known_holder->is_interface()) {
- assert(known_holder->is_instance_klass() && ((ciInstanceKlass*)known_holder)->has_default_methods(), "should be default method");
- known_holder = NULL;
+ assert(known_holder == NULL || (known_holder->is_instance_klass() &&
+ (!known_holder->is_interface() ||
+ ((ciInstanceKlass*)known_holder)->has_default_methods())), "should be default method");
+ if (known_holder != NULL) {
+ if (known_holder->exact_klass() == NULL) {
+ known_holder = compilation()->cha_exact_type(known_holder);
+ }
}
+
append(new ProfileCall(method(), bci(), callee, recv, known_holder, obj_args, inlined));
}
diff --git a/hotspot/src/share/vm/c1/c1_LIRAssembler.cpp b/hotspot/src/share/vm/c1/c1_LIRAssembler.cpp
index 7f1e075..5a49c0d 100644
--- a/hotspot/src/share/vm/c1/c1_LIRAssembler.cpp
+++ b/hotspot/src/share/vm/c1/c1_LIRAssembler.cpp
@@ -858,9 +858,7 @@
void LIR_Assembler::verify_oop_map(CodeEmitInfo* info) {
#ifndef PRODUCT
- if (VerifyOopMaps || VerifyOops) {
- bool v = VerifyOops;
- VerifyOops = true;
+ if (VerifyOops) {
OopMapStream s(info->oop_map());
while (!s.is_done()) {
OopMapValue v = s.current();
@@ -883,7 +881,6 @@
s.next();
}
- VerifyOops = v;
}
#endif
}
diff --git a/hotspot/src/share/vm/c1/c1_LIRGenerator.cpp b/hotspot/src/share/vm/c1/c1_LIRGenerator.cpp
index 8eb0189..5ed0476 100644
--- a/hotspot/src/share/vm/c1/c1_LIRGenerator.cpp
+++ b/hotspot/src/share/vm/c1/c1_LIRGenerator.cpp
@@ -3288,7 +3288,10 @@
ciSignature* signature_at_call = NULL;
x->method()->get_method_at_bci(bci, ignored_will_link, &signature_at_call);
- ciKlass* exact = profile_type(md, 0, md->byte_offset_of_slot(data, ret->type_offset()),
+ // The offset within the MDO of the entry to update may be too large
+ // to be used in load/store instructions on some platforms. So have
+ // profile_type() compute the address of the profile in a register.
+ ciKlass* exact = profile_type(md, md->byte_offset_of_slot(data, ret->type_offset()), 0,
ret->type(), x->ret(), mdp,
!x->needs_null_check(),
signature_at_call->return_type()->as_klass(),
diff --git a/hotspot/src/share/vm/c1/c1_globals.hpp b/hotspot/src/share/vm/c1/c1_globals.hpp
index a6b5fec..66476716 100644
--- a/hotspot/src/share/vm/c1/c1_globals.hpp
+++ b/hotspot/src/share/vm/c1/c1_globals.hpp
@@ -269,9 +269,6 @@
develop(bool, PrintNotLoaded, false, \
"Prints where classes are not loaded during code generation") \
\
- notproduct(bool, VerifyOopMaps, false, \
- "Adds oopmap verification code to the generated code") \
- \
develop(bool, PrintLIR, false, \
"print low-level IR") \
\
diff --git a/hotspot/src/share/vm/ci/ciEnv.cpp b/hotspot/src/share/vm/ci/ciEnv.cpp
index 9cc86db..dcb3472 100644
--- a/hotspot/src/share/vm/ci/ciEnv.cpp
+++ b/hotspot/src/share/vm/ci/ciEnv.cpp
@@ -1147,6 +1147,33 @@
// Don't change thread state and acquire any locks.
// Safe to call from VM error reporter.
+
+void ciEnv::dump_compile_data(outputStream* out) {
+ CompileTask* task = this->task();
+ Method* method = task->method();
+ int entry_bci = task->osr_bci();
+ int comp_level = task->comp_level();
+ out->print("compile %s %s %s %d %d",
+ method->klass_name()->as_quoted_ascii(),
+ method->name()->as_quoted_ascii(),
+ method->signature()->as_quoted_ascii(),
+ entry_bci, comp_level);
+ if (compiler_data() != NULL) {
+ if (is_c2_compile(comp_level)) { // C2 or Shark
+#ifdef COMPILER2
+ // Dump C2 inlining data.
+ ((Compile*)compiler_data())->dump_inline_data(out);
+#endif
+ } else if (is_c1_compile(comp_level)) { // C1
+#ifdef COMPILER1
+ // Dump C1 inlining data.
+ ((Compilation*)compiler_data())->dump_inline_data(out);
+#endif
+ }
+ }
+ out->cr();
+}
+
void ciEnv::dump_replay_data_unsafe(outputStream* out) {
ResourceMark rm;
#if INCLUDE_JVMTI
@@ -1160,16 +1187,7 @@
for (int i = 0; i < objects->length(); i++) {
objects->at(i)->dump_replay_data(out);
}
- CompileTask* task = this->task();
- Method* method = task->method();
- int entry_bci = task->osr_bci();
- int comp_level = task->comp_level();
- // Klass holder = method->method_holder();
- out->print_cr("compile %s %s %s %d %d",
- method->klass_name()->as_quoted_ascii(),
- method->name()->as_quoted_ascii(),
- method->signature()->as_quoted_ascii(),
- entry_bci, comp_level);
+ dump_compile_data(out);
out->flush();
}
@@ -1179,3 +1197,45 @@
dump_replay_data_unsafe(out);
)
}
+
+void ciEnv::dump_replay_data(int compile_id) {
+ static char buffer[O_BUFLEN];
+ int ret = jio_snprintf(buffer, O_BUFLEN, "replay_pid%p_compid%d.log", os::current_process_id(), compile_id);
+ if (ret > 0) {
+ int fd = open(buffer, O_RDWR | O_CREAT | O_TRUNC, 0666);
+ if (fd != -1) {
+ FILE* replay_data_file = os::open(fd, "w");
+ if (replay_data_file != NULL) {
+ fileStream replay_data_stream(replay_data_file, /*need_close=*/true);
+ dump_replay_data(&replay_data_stream);
+ tty->print("# Compiler replay data is saved as: ");
+ tty->print_cr(buffer);
+ } else {
+ tty->print_cr("# Can't open file to dump replay data.");
+ }
+ }
+ }
+}
+
+void ciEnv::dump_inline_data(int compile_id) {
+ static char buffer[O_BUFLEN];
+ int ret = jio_snprintf(buffer, O_BUFLEN, "inline_pid%p_compid%d.log", os::current_process_id(), compile_id);
+ if (ret > 0) {
+ int fd = open(buffer, O_RDWR | O_CREAT | O_TRUNC, 0666);
+ if (fd != -1) {
+ FILE* inline_data_file = os::open(fd, "w");
+ if (inline_data_file != NULL) {
+ fileStream replay_data_stream(inline_data_file, /*need_close=*/true);
+ GUARDED_VM_ENTRY(
+ MutexLocker ml(Compile_lock);
+ dump_compile_data(&replay_data_stream);
+ )
+ replay_data_stream.flush();
+ tty->print("# Compiler inline data is saved as: ");
+ tty->print_cr(buffer);
+ } else {
+ tty->print_cr("# Can't open file to dump inline data.");
+ }
+ }
+ }
+}
diff --git a/hotspot/src/share/vm/ci/ciEnv.hpp b/hotspot/src/share/vm/ci/ciEnv.hpp
index 8d9d48f..5a0bd1f 100644
--- a/hotspot/src/share/vm/ci/ciEnv.hpp
+++ b/hotspot/src/share/vm/ci/ciEnv.hpp
@@ -451,8 +451,11 @@
void metadata_do(void f(Metadata*)) { _factory->metadata_do(f); }
// Dump the compilation replay data for the ciEnv to the stream.
+ void dump_replay_data(int compile_id);
+ void dump_inline_data(int compile_id);
void dump_replay_data(outputStream* out);
void dump_replay_data_unsafe(outputStream* out);
+ void dump_compile_data(outputStream* out);
};
#endif // SHARE_VM_CI_CIENV_HPP
diff --git a/hotspot/src/share/vm/ci/ciMethod.cpp b/hotspot/src/share/vm/ci/ciMethod.cpp
index dd41164..923331e 100644
--- a/hotspot/src/share/vm/ci/ciMethod.cpp
+++ b/hotspot/src/share/vm/ci/ciMethod.cpp
@@ -1357,15 +1357,21 @@
#undef FETCH_FLAG_FROM_VM
+void ciMethod::dump_name_as_ascii(outputStream* st) {
+ Method* method = get_Method();
+ st->print("%s %s %s",
+ method->klass_name()->as_quoted_ascii(),
+ method->name()->as_quoted_ascii(),
+ method->signature()->as_quoted_ascii());
+}
+
void ciMethod::dump_replay_data(outputStream* st) {
ResourceMark rm;
Method* method = get_Method();
MethodCounters* mcs = method->method_counters();
- Klass* holder = method->method_holder();
- st->print_cr("ciMethod %s %s %s %d %d %d %d %d",
- holder->name()->as_quoted_ascii(),
- method->name()->as_quoted_ascii(),
- method->signature()->as_quoted_ascii(),
+ st->print("ciMethod ");
+ dump_name_as_ascii(st);
+ st->print_cr(" %d %d %d %d %d",
mcs == NULL ? 0 : mcs->invocation_counter()->raw_counter(),
mcs == NULL ? 0 : mcs->backedge_counter()->raw_counter(),
interpreter_invocation_count(),
diff --git a/hotspot/src/share/vm/ci/ciMethod.hpp b/hotspot/src/share/vm/ci/ciMethod.hpp
index 604babb..d7ddba8 100644
--- a/hotspot/src/share/vm/ci/ciMethod.hpp
+++ b/hotspot/src/share/vm/ci/ciMethod.hpp
@@ -310,10 +310,13 @@
bool is_accessor () const;
bool is_initializer () const;
bool can_be_statically_bound() const { return _can_be_statically_bound; }
- void dump_replay_data(outputStream* st);
bool is_boxing_method() const;
bool is_unboxing_method() const;
+ // Replay data methods
+ void dump_name_as_ascii(outputStream* st);
+ void dump_replay_data(outputStream* st);
+
// Print the bytecodes of this method.
void print_codes_on(outputStream* st);
void print_codes() {
diff --git a/hotspot/src/share/vm/ci/ciReplay.cpp b/hotspot/src/share/vm/ci/ciReplay.cpp
index 3c8ccf9..e880815 100644
--- a/hotspot/src/share/vm/ci/ciReplay.cpp
+++ b/hotspot/src/share/vm/ci/ciReplay.cpp
@@ -24,6 +24,8 @@
#include "precompiled.hpp"
#include "ci/ciMethodData.hpp"
#include "ci/ciReplay.hpp"
+#include "ci/ciSymbol.hpp"
+#include "ci/ciKlass.hpp"
#include "ci/ciUtilities.hpp"
#include "compiler/compileBroker.hpp"
#include "memory/allocation.inline.hpp"
@@ -37,74 +39,107 @@
// ciReplay
typedef struct _ciMethodDataRecord {
- const char* klass;
- const char* method;
- const char* signature;
- int state;
- int current_mileage;
- intptr_t* data;
- int data_length;
- char* orig_data;
- int orig_data_length;
- int oops_length;
- jobject* oops_handles;
- int* oops_offsets;
+ const char* _klass_name;
+ const char* _method_name;
+ const char* _signature;
+
+ int _state;
+ int _current_mileage;
+
+ intptr_t* _data;
+ char* _orig_data;
+ jobject* _oops_handles;
+ int* _oops_offsets;
+ int _data_length;
+ int _orig_data_length;
+ int _oops_length;
} ciMethodDataRecord;
typedef struct _ciMethodRecord {
- const char* klass;
- const char* method;
- const char* signature;
- int instructions_size;
- int interpreter_invocation_count;
- int interpreter_throwout_count;
- int invocation_counter;
- int backedge_counter;
+ const char* _klass_name;
+ const char* _method_name;
+ const char* _signature;
+
+ int _instructions_size;
+ int _interpreter_invocation_count;
+ int _interpreter_throwout_count;
+ int _invocation_counter;
+ int _backedge_counter;
} ciMethodRecord;
-class CompileReplay;
+typedef struct _ciInlineRecord {
+ const char* _klass_name;
+ const char* _method_name;
+ const char* _signature;
+
+ int _inline_depth;
+ int _inline_bci;
+} ciInlineRecord;
+
+class CompileReplay;
static CompileReplay* replay_state;
class CompileReplay : public StackObj {
private:
- FILE* stream;
- Thread* thread;
- Handle protection_domain;
- Handle loader;
+ FILE* _stream;
+ Thread* _thread;
+ Handle _protection_domain;
+ Handle _loader;
- GrowableArray<ciMethodRecord*> ci_method_records;
- GrowableArray<ciMethodDataRecord*> ci_method_data_records;
+ GrowableArray<ciMethodRecord*> _ci_method_records;
+ GrowableArray<ciMethodDataRecord*> _ci_method_data_records;
+
+ // Use pointer because we may need to return inline records
+ // without destroying them.
+ GrowableArray<ciInlineRecord*>* _ci_inline_records;
const char* _error_message;
- char* bufptr;
- char* buffer;
- int buffer_length;
- int buffer_end;
- int line_no;
+ char* _bufptr;
+ char* _buffer;
+ int _buffer_length;
+ int _buffer_pos;
+
+ // "compile" data
+ ciKlass* _iklass;
+ Method* _imethod;
+ int _entry_bci;
+ int _comp_level;
public:
CompileReplay(const char* filename, TRAPS) {
- thread = THREAD;
- loader = Handle(thread, SystemDictionary::java_system_loader());
- stream = fopen(filename, "rt");
- if (stream == NULL) {
+ _thread = THREAD;
+ _loader = Handle(_thread, SystemDictionary::java_system_loader());
+ _protection_domain = Handle();
+
+ _stream = fopen(filename, "rt");
+ if (_stream == NULL) {
fprintf(stderr, "ERROR: Can't open replay file %s\n", filename);
}
- buffer_length = 32;
- buffer = NEW_RESOURCE_ARRAY(char, buffer_length);
+
+ _ci_inline_records = NULL;
_error_message = NULL;
+ _buffer_length = 32;
+ _buffer = NEW_RESOURCE_ARRAY(char, _buffer_length);
+ _bufptr = _buffer;
+ _buffer_pos = 0;
+
+ _imethod = NULL;
+ _iklass = NULL;
+ _entry_bci = 0;
+ _comp_level = 0;
+
test();
}
~CompileReplay() {
- if (stream != NULL) fclose(stream);
+ if (_stream != NULL) fclose(_stream);
}
void test() {
- strcpy(buffer, "1 2 foo 4 bar 0x9 \"this is it\"");
- bufptr = buffer;
+ strcpy(_buffer, "1 2 foo 4 bar 0x9 \"this is it\"");
+ _bufptr = _buffer;
assert(parse_int("test") == 1, "what");
assert(parse_int("test") == 2, "what");
assert(strcmp(parse_string(), "foo") == 0, "what");
@@ -115,18 +150,18 @@
}
bool had_error() {
- return _error_message != NULL || thread->has_pending_exception();
+ return _error_message != NULL || _thread->has_pending_exception();
}
bool can_replay() {
- return !(stream == NULL || had_error());
+ return !(_stream == NULL || had_error());
}
void report_error(const char* msg) {
_error_message = msg;
- // Restore the buffer contents for error reporting
- for (int i = 0; i < buffer_end; i++) {
- if (buffer[i] == '\0') buffer[i] = ' ';
+ // Restore the _buffer contents for error reporting
+ for (int i = 0; i < _buffer_pos; i++) {
+ if (_buffer[i] == '\0') _buffer[i] = ' ';
}
}
@@ -137,10 +172,10 @@
int v = 0;
int read;
- if (sscanf(bufptr, "%i%n", &v, &read) != 1) {
+ if (sscanf(_bufptr, "%i%n", &v, &read) != 1) {
report_error(label);
} else {
- bufptr += read;
+ _bufptr += read;
}
return v;
}
@@ -152,31 +187,31 @@
intptr_t v = 0;
int read;
- if (sscanf(bufptr, INTPTR_FORMAT "%n", &v, &read) != 1) {
+ if (sscanf(_bufptr, INTPTR_FORMAT "%n", &v, &read) != 1) {
report_error(label);
} else {
- bufptr += read;
+ _bufptr += read;
}
return v;
}
void skip_ws() {
// Skip any leading whitespace
- while (*bufptr == ' ' || *bufptr == '\t') {
- bufptr++;
+ while (*_bufptr == ' ' || *_bufptr == '\t') {
+ _bufptr++;
}
}
char* scan_and_terminate(char delim) {
- char* str = bufptr;
- while (*bufptr != delim && *bufptr != '\0') {
- bufptr++;
+ char* str = _bufptr;
+ while (*_bufptr != delim && *_bufptr != '\0') {
+ _bufptr++;
}
- if (*bufptr != '\0') {
- *bufptr++ = '\0';
+ if (*_bufptr != '\0') {
+ *_bufptr++ = '\0';
}
- if (bufptr == str) {
+ if (_bufptr == str) {
// nothing here
return NULL;
}
@@ -195,8 +230,8 @@
skip_ws();
- if (*bufptr == '"') {
- bufptr++;
+ if (*_bufptr == '"') {
+ _bufptr++;
return scan_and_terminate('"');
} else {
return scan_and_terminate(' ');
@@ -273,7 +308,12 @@
const char* str = parse_escaped_string();
Symbol* klass_name = SymbolTable::lookup(str, (int)strlen(str), CHECK_NULL);
if (klass_name != NULL) {
- Klass* k = SystemDictionary::resolve_or_fail(klass_name, loader, protection_domain, true, THREAD);
+ Klass* k = NULL;
+ if (_iklass != NULL) {
+ k = (Klass*)_iklass->find_klass(ciSymbol::make(klass_name->as_C_string()))->constant_encoding();
+ } else {
+ k = SystemDictionary::resolve_or_fail(klass_name, _loader, _protection_domain, true, THREAD);
+ }
if (HAS_PENDING_EXCEPTION) {
oop throwable = PENDING_EXCEPTION;
java_lang_Throwable::print(throwable, tty);
@@ -289,7 +329,7 @@
// Lookup a klass
Klass* resolve_klass(const char* klass, TRAPS) {
Symbol* klass_name = SymbolTable::lookup(klass, (int)strlen(klass), CHECK_NULL);
- return SystemDictionary::resolve_or_fail(klass_name, loader, protection_domain, true, CHECK_NULL);
+ return SystemDictionary::resolve_or_fail(klass_name, _loader, _protection_domain, true, CHECK_NULL);
}
// Parse the standard tuple of <klass> <name> <signature>
@@ -304,40 +344,45 @@
return m;
}
- // Process each line of the replay file executing each command until
- // the file ends.
- void process(TRAPS) {
- line_no = 1;
- int pos = 0;
- int c = getc(stream);
+ int get_line(int c) {
while(c != EOF) {
- if (pos + 1 >= buffer_length) {
- int newl = buffer_length * 2;
- char* newb = NEW_RESOURCE_ARRAY(char, newl);
- memcpy(newb, buffer, pos);
- buffer = newb;
- buffer_length = newl;
+ if (_buffer_pos + 1 >= _buffer_length) {
+ int new_length = _buffer_length * 2;
+ // Next call will throw error in case of OOM.
+ _buffer = REALLOC_RESOURCE_ARRAY(char, _buffer, _buffer_length, new_length);
+ _buffer_length = new_length;
}
if (c == '\n') {
- // null terminate it, reset the pointer and process the line
- buffer[pos] = '\0';
- buffer_end = pos++;
- bufptr = buffer;
- process_command(CHECK);
- if (had_error()) {
- tty->print_cr("Error while parsing line %d: %s\n", line_no, _error_message);
- tty->print_cr("%s", buffer);
- return;
- }
- pos = 0;
- buffer_end = 0;
- line_no++;
+ c = getc(_stream); // get next char
+ break;
} else if (c == '\r') {
// skip LF
} else {
- buffer[pos++] = c;
+ _buffer[_buffer_pos++] = c;
}
- c = getc(stream);
+ c = getc(_stream);
+ }
+ // null terminate it, reset the pointer
+ _buffer[_buffer_pos] = '\0'; // NL or EOF
+ _buffer_pos = 0;
+ _bufptr = _buffer;
+ return c;
+ }
+
+ // Process each line of the replay file executing each command until
+ // the file ends.
+ void process(TRAPS) {
+ int line_no = 1;
+ int c = getc(_stream);
+ while(c != EOF) {
+ c = get_line(c);
+ process_command(CHECK);
+ if (had_error()) {
+ tty->print_cr("Error while parsing line %d: %s\n", line_no, _error_message);
+ tty->print_cr("%s", _buffer);
+ return;
+ }
+ line_no++;
}
}
@@ -396,7 +441,37 @@
return true;
}
- // compile <klass> <name> <signature> <entry_bci> <comp_level>
+ // compile <klass> <name> <signature> <entry_bci> <comp_level> inline <count> <depth> <bci> <klass> <name> <signature> ...
+ void* process_inline(ciMethod* imethod, Method* m, int entry_bci, int comp_level, TRAPS) {
+ _imethod = m;
+ _iklass = imethod->holder();
+ _entry_bci = entry_bci;
+ _comp_level = comp_level;
+ int line_no = 1;
+ int c = getc(_stream);
+ while(c != EOF) {
+ c = get_line(c);
+ // Expecting only lines with "compile" command in inline replay file.
+ char* cmd = parse_string();
+ if (cmd == NULL || strcmp("compile", cmd) != 0) {
+ return NULL;
+ }
+ process_compile(CHECK_NULL);
+ if (had_error()) {
+ tty->print_cr("Error while parsing line %d: %s\n", line_no, _error_message);
+ tty->print_cr("%s", _buffer);
+ return NULL;
+ }
+ if (_ci_inline_records != NULL && _ci_inline_records->length() > 0) {
+ // Found inlining record for the requested method.
+ return _ci_inline_records;
+ }
+ line_no++;
+ }
+ return NULL;
+ }
+
+ // compile <klass> <name> <signature> <entry_bci> <comp_level> inline <count> <depth> <bci> <klass> <name> <signature> ...
void process_compile(TRAPS) {
Method* method = parse_method(CHECK);
if (had_error()) return;
@@ -410,6 +485,43 @@
if (!is_valid_comp_level(comp_level)) {
return;
}
+ if (_imethod != NULL) {
+ // Replay Inlining
+ if (entry_bci != _entry_bci || comp_level != _comp_level) {
+ return;
+ }
+ const char* iklass_name = _imethod->method_holder()->name()->as_utf8();
+ const char* imethod_name = _imethod->name()->as_utf8();
+ const char* isignature = _imethod->signature()->as_utf8();
+ const char* klass_name = method->method_holder()->name()->as_utf8();
+ const char* method_name = method->name()->as_utf8();
+ const char* signature = method->signature()->as_utf8();
+ if (strcmp(iklass_name, klass_name) != 0 ||
+ strcmp(imethod_name, method_name) != 0 ||
+ strcmp(isignature, signature) != 0) {
+ return;
+ }
+ }
+ int inline_count = 0;
+ if (parse_tag_and_count("inline", inline_count)) {
+ // Record inlining data
+ _ci_inline_records = new GrowableArray<ciInlineRecord*>();
+ for (int i = 0; i < inline_count; i++) {
+ int depth = parse_int("inline_depth");
+ int bci = parse_int("inline_bci");
+ if (had_error()) {
+ break;
+ }
+ Method* inl_method = parse_method(CHECK);
+ if (had_error()) {
+ break;
+ }
+ new_ciInlineRecord(inl_method, bci, depth);
+ }
+ }
+ if (_imethod != NULL) {
+ return; // Replay Inlining
+ }
Klass* k = method->method_holder();
((InstanceKlass*)k)->initialize(THREAD);
if (HAS_PENDING_EXCEPTION) {
@@ -442,11 +554,11 @@
Method* method = parse_method(CHECK);
if (had_error()) return;
ciMethodRecord* rec = new_ciMethod(method);
- rec->invocation_counter = parse_int("invocation_counter");
- rec->backedge_counter = parse_int("backedge_counter");
- rec->interpreter_invocation_count = parse_int("interpreter_invocation_count");
- rec->interpreter_throwout_count = parse_int("interpreter_throwout_count");
- rec->instructions_size = parse_int("instructions_size");
+ rec->_invocation_counter = parse_int("invocation_counter");
+ rec->_backedge_counter = parse_int("backedge_counter");
+ rec->_interpreter_invocation_count = parse_int("interpreter_invocation_count");
+ rec->_interpreter_throwout_count = parse_int("interpreter_throwout_count");
+ rec->_instructions_size = parse_int("instructions_size");
}
// ciMethodData <klass> <name> <signature> <state> <current mileage> orig <length> # # ... data <length> # # ... oops <length>
@@ -471,32 +583,32 @@
// collect and record all the needed information for later
ciMethodDataRecord* rec = new_ciMethodData(method);
- rec->state = parse_int("state");
- rec->current_mileage = parse_int("current_mileage");
+ rec->_state = parse_int("state");
+ rec->_current_mileage = parse_int("current_mileage");
- rec->orig_data = parse_data("orig", rec->orig_data_length);
- if (rec->orig_data == NULL) {
+ rec->_orig_data = parse_data("orig", rec->_orig_data_length);
+ if (rec->_orig_data == NULL) {
return;
}
- rec->data = parse_intptr_data("data", rec->data_length);
- if (rec->data == NULL) {
+ rec->_data = parse_intptr_data("data", rec->_data_length);
+ if (rec->_data == NULL) {
return;
}
- if (!parse_tag_and_count("oops", rec->oops_length)) {
+ if (!parse_tag_and_count("oops", rec->_oops_length)) {
return;
}
- rec->oops_handles = NEW_RESOURCE_ARRAY(jobject, rec->oops_length);
- rec->oops_offsets = NEW_RESOURCE_ARRAY(int, rec->oops_length);
- for (int i = 0; i < rec->oops_length; i++) {
+ rec->_oops_handles = NEW_RESOURCE_ARRAY(jobject, rec->_oops_length);
+ rec->_oops_offsets = NEW_RESOURCE_ARRAY(int, rec->_oops_length);
+ for (int i = 0; i < rec->_oops_length; i++) {
int offset = parse_int("offset");
if (had_error()) {
return;
}
Klass* k = parse_klass(CHECK);
- rec->oops_offsets[i] = offset;
+ rec->_oops_offsets[i] = offset;
KlassHandle *kh = NEW_C_HEAP_OBJ(KlassHandle, mtCompiler);
::new ((void*)kh) KlassHandle(THREAD, k);
- rec->oops_handles[i] = (jobject)kh;
+ rec->_oops_handles[i] = (jobject)kh;
}
}
@@ -570,6 +682,9 @@
case JVM_CONSTANT_Utf8:
case JVM_CONSTANT_Integer:
case JVM_CONSTANT_Float:
+ case JVM_CONSTANT_MethodHandle:
+ case JVM_CONSTANT_MethodType:
+ case JVM_CONSTANT_InvokeDynamic:
if (tag != cp->tag_at(i).value()) {
report_error("tag mismatch: wrong class files?");
return;
@@ -729,10 +844,10 @@
// Create and initialize a record for a ciMethod
ciMethodRecord* new_ciMethod(Method* method) {
ciMethodRecord* rec = NEW_RESOURCE_OBJ(ciMethodRecord);
- rec->klass = method->method_holder()->name()->as_utf8();
- rec->method = method->name()->as_utf8();
- rec->signature = method->signature()->as_utf8();
- ci_method_records.append(rec);
+ rec->_klass_name = method->method_holder()->name()->as_utf8();
+ rec->_method_name = method->name()->as_utf8();
+ rec->_signature = method->signature()->as_utf8();
+ _ci_method_records.append(rec);
return rec;
}
@@ -741,11 +856,11 @@
const char* klass_name = method->method_holder()->name()->as_utf8();
const char* method_name = method->name()->as_utf8();
const char* signature = method->signature()->as_utf8();
- for (int i = 0; i < ci_method_records.length(); i++) {
- ciMethodRecord* rec = ci_method_records.at(i);
- if (strcmp(rec->klass, klass_name) == 0 &&
- strcmp(rec->method, method_name) == 0 &&
- strcmp(rec->signature, signature) == 0) {
+ for (int i = 0; i < _ci_method_records.length(); i++) {
+ ciMethodRecord* rec = _ci_method_records.at(i);
+ if (strcmp(rec->_klass_name, klass_name) == 0 &&
+ strcmp(rec->_method_name, method_name) == 0 &&
+ strcmp(rec->_signature, signature) == 0) {
return rec;
}
}
@@ -755,10 +870,10 @@
// Create and initialize a record for a ciMethodData
ciMethodDataRecord* new_ciMethodData(Method* method) {
ciMethodDataRecord* rec = NEW_RESOURCE_OBJ(ciMethodDataRecord);
- rec->klass = method->method_holder()->name()->as_utf8();
- rec->method = method->name()->as_utf8();
- rec->signature = method->signature()->as_utf8();
- ci_method_data_records.append(rec);
+ rec->_klass_name = method->method_holder()->name()->as_utf8();
+ rec->_method_name = method->name()->as_utf8();
+ rec->_signature = method->signature()->as_utf8();
+ _ci_method_data_records.append(rec);
return rec;
}
@@ -767,25 +882,65 @@
const char* klass_name = method->method_holder()->name()->as_utf8();
const char* method_name = method->name()->as_utf8();
const char* signature = method->signature()->as_utf8();
- for (int i = 0; i < ci_method_data_records.length(); i++) {
- ciMethodDataRecord* rec = ci_method_data_records.at(i);
- if (strcmp(rec->klass, klass_name) == 0 &&
- strcmp(rec->method, method_name) == 0 &&
- strcmp(rec->signature, signature) == 0) {
+ for (int i = 0; i < _ci_method_data_records.length(); i++) {
+ ciMethodDataRecord* rec = _ci_method_data_records.at(i);
+ if (strcmp(rec->_klass_name, klass_name) == 0 &&
+ strcmp(rec->_method_name, method_name) == 0 &&
+ strcmp(rec->_signature, signature) == 0) {
return rec;
}
}
return NULL;
}
+ // Create and initialize a record for a ciInlineRecord
+ ciInlineRecord* new_ciInlineRecord(Method* method, int bci, int depth) {
+ ciInlineRecord* rec = NEW_RESOURCE_OBJ(ciInlineRecord);
+ rec->_klass_name = method->method_holder()->name()->as_utf8();
+ rec->_method_name = method->name()->as_utf8();
+ rec->_signature = method->signature()->as_utf8();
+ rec->_inline_bci = bci;
+ rec->_inline_depth = depth;
+ _ci_inline_records->append(rec);
+ return rec;
+ }
+
+ // Lookup inlining data for a ciMethod
+ ciInlineRecord* find_ciInlineRecord(Method* method, int bci, int depth) {
+ if (_ci_inline_records != NULL) {
+ return find_ciInlineRecord(_ci_inline_records, method, bci, depth);
+ }
+ return NULL;
+ }
+
+ static ciInlineRecord* find_ciInlineRecord(GrowableArray<ciInlineRecord*>* records,
+ Method* method, int bci, int depth) {
+ if (records != NULL) {
+ const char* klass_name = method->method_holder()->name()->as_utf8();
+ const char* method_name = method->name()->as_utf8();
+ const char* signature = method->signature()->as_utf8();
+ for (int i = 0; i < records->length(); i++) {
+ ciInlineRecord* rec = records->at(i);
+ if ((rec->_inline_bci == bci) &&
+ (rec->_inline_depth == depth) &&
+ (strcmp(rec->_klass_name, klass_name) == 0) &&
+ (strcmp(rec->_method_name, method_name) == 0) &&
+ (strcmp(rec->_signature, signature) == 0)) {
+ return rec;
+ }
+ }
+ }
+ return NULL;
+ }
+
const char* error_message() {
return _error_message;
}
void reset() {
_error_message = NULL;
- ci_method_records.clear();
- ci_method_data_records.clear();
+ _ci_method_records.clear();
+ _ci_method_data_records.clear();
}
// Take an ascii string contain \u#### escapes and convert it to utf8
@@ -845,6 +1000,37 @@
vm_exit(exit_code);
}
+void* ciReplay::load_inline_data(ciMethod* method, int entry_bci, int comp_level) {
+ if (FLAG_IS_DEFAULT(InlineDataFile)) {
+ tty->print_cr("ERROR: no inline replay data file specified (use -XX:InlineDataFile=inline_pid12345.txt).");
+ return NULL;
+ }
+
+ VM_ENTRY_MARK;
+ // Load and parse the replay data
+ CompileReplay rp(InlineDataFile, THREAD);
+ if (!rp.can_replay()) {
+ tty->print_cr("ciReplay: !rp.can_replay()");
+ return NULL;
+ }
+ void* data = rp.process_inline(method, method->get_Method(), entry_bci, comp_level, THREAD);
+ if (HAS_PENDING_EXCEPTION) {
+ oop throwable = PENDING_EXCEPTION;
+ CLEAR_PENDING_EXCEPTION;
+ java_lang_Throwable::print(throwable, tty);
+ tty->cr();
+ java_lang_Throwable::print_stack_trace(throwable, tty);
+ tty->cr();
+ return NULL;
+ }
+
+ if (rp.had_error()) {
+ tty->print_cr("ciReplay: Failed on %s", rp.error_message());
+ return NULL;
+ }
+ return data;
+}
+
int ciReplay::replay_impl(TRAPS) {
HandleMark hm;
ResourceMark rm;
@@ -890,7 +1076,6 @@
return exit_code;
}
-
void ciReplay::initialize(ciMethodData* m) {
if (replay_state == NULL) {
return;
@@ -909,28 +1094,28 @@
method->print_name(tty);
tty->cr();
} else {
- m->_state = rec->state;
- m->_current_mileage = rec->current_mileage;
- if (rec->data_length != 0) {
- assert(m->_data_size == rec->data_length * (int)sizeof(rec->data[0]), "must agree");
+ m->_state = rec->_state;
+ m->_current_mileage = rec->_current_mileage;
+ if (rec->_data_length != 0) {
+ assert(m->_data_size == rec->_data_length * (int)sizeof(rec->_data[0]), "must agree");
// Write the correct ciObjects back into the profile data
ciEnv* env = ciEnv::current();
- for (int i = 0; i < rec->oops_length; i++) {
- KlassHandle *h = (KlassHandle *)rec->oops_handles[i];
- *(ciMetadata**)(rec->data + rec->oops_offsets[i]) =
+ for (int i = 0; i < rec->_oops_length; i++) {
+ KlassHandle *h = (KlassHandle *)rec->_oops_handles[i];
+ *(ciMetadata**)(rec->_data + rec->_oops_offsets[i]) =
env->get_metadata((*h)());
}
// Copy the updated profile data into place as intptr_ts
#ifdef _LP64
- Copy::conjoint_jlongs_atomic((jlong *)rec->data, (jlong *)m->_data, rec->data_length);
+ Copy::conjoint_jlongs_atomic((jlong *)rec->_data, (jlong *)m->_data, rec->_data_length);
#else
- Copy::conjoint_jints_atomic((jint *)rec->data, (jint *)m->_data, rec->data_length);
+ Copy::conjoint_jints_atomic((jint *)rec->_data, (jint *)m->_data, rec->_data_length);
#endif
}
// copy in the original header
- Copy::conjoint_jbytes(rec->orig_data, (char*)&m->_orig, rec->orig_data_length);
+ Copy::conjoint_jbytes(rec->_orig_data, (char*)&m->_orig, rec->_orig_data_length);
}
}
@@ -939,12 +1124,38 @@
if (replay_state == NULL) {
return false;
}
-
VM_ENTRY_MARK;
// ciMethod without a record shouldn't be inlined.
return replay_state->find_ciMethodRecord(method->get_Method()) == NULL;
}
+bool ciReplay::should_inline(void* data, ciMethod* method, int bci, int inline_depth) {
+ if (data != NULL) {
+ GrowableArray<ciInlineRecord*>* records = (GrowableArray<ciInlineRecord*>*)data;
+ VM_ENTRY_MARK;
+ // Inline record are ordered by bci and depth.
+ return CompileReplay::find_ciInlineRecord(records, method->get_Method(), bci, inline_depth) != NULL;
+ } else if (replay_state != NULL) {
+ VM_ENTRY_MARK;
+ // Inline record are ordered by bci and depth.
+ return replay_state->find_ciInlineRecord(method->get_Method(), bci, inline_depth) != NULL;
+ }
+ return false;
+}
+
+bool ciReplay::should_not_inline(void* data, ciMethod* method, int bci, int inline_depth) {
+ if (data != NULL) {
+ GrowableArray<ciInlineRecord*>* records = (GrowableArray<ciInlineRecord*>*)data;
+ VM_ENTRY_MARK;
+ // Inline record are ordered by bci and depth.
+ return CompileReplay::find_ciInlineRecord(records, method->get_Method(), bci, inline_depth) == NULL;
+ } else if (replay_state != NULL) {
+ VM_ENTRY_MARK;
+ // Inline record are ordered by bci and depth.
+ return replay_state->find_ciInlineRecord(method->get_Method(), bci, inline_depth) == NULL;
+ }
+ return false;
+}
void ciReplay::initialize(ciMethod* m) {
if (replay_state == NULL) {
@@ -965,14 +1176,14 @@
tty->cr();
} else {
EXCEPTION_CONTEXT;
- // m->_instructions_size = rec->instructions_size;
+ // m->_instructions_size = rec->_instructions_size;
m->_instructions_size = -1;
- m->_interpreter_invocation_count = rec->interpreter_invocation_count;
- m->_interpreter_throwout_count = rec->interpreter_throwout_count;
+ m->_interpreter_invocation_count = rec->_interpreter_invocation_count;
+ m->_interpreter_throwout_count = rec->_interpreter_throwout_count;
MethodCounters* mcs = method->get_method_counters(CHECK_AND_CLEAR);
guarantee(mcs != NULL, "method counters allocation failed");
- mcs->invocation_counter()->_counter = rec->invocation_counter;
- mcs->backedge_counter()->_counter = rec->backedge_counter;
+ mcs->invocation_counter()->_counter = rec->_invocation_counter;
+ mcs->backedge_counter()->_counter = rec->_backedge_counter;
}
}
diff --git a/hotspot/src/share/vm/ci/ciReplay.hpp b/hotspot/src/share/vm/ci/ciReplay.hpp
index 8fff345..90c503a 100644
--- a/hotspot/src/share/vm/ci/ciReplay.hpp
+++ b/hotspot/src/share/vm/ci/ciReplay.hpp
@@ -29,6 +29,73 @@
// ciReplay
+//
+// Replay compilation of a java method by using an information in replay file.
+// Replay inlining decisions during compilation by using an information in inline file.
+//
+// NOTE: these replay functions only exist in debug version of VM.
+//
+// Replay compilation.
+// -------------------
+//
+// Replay data file replay.txt can be created by Serviceability Agent
+// from a core file, see agent/doc/cireplay.html
+//
+// $ java -cp <jdk>/lib/sa-jdi.jar sun.jvm.hotspot.CLHSDB
+// hsdb> attach <jdk>/bin/java ./core
+// hsdb> threads
+// t@10 Service Thread
+// t@9 C2 CompilerThread0
+// t@8 Signal Dispatcher
+// t@7 Finalizer
+// t@6 Reference Handler
+// t@2 main
+// hsdb> dumpreplaydata t@9 > replay.txt
+// hsdb> quit
+//
+// (Note: SA could be also used to extract app.jar and boot.jar files
+// from core file to replay compilation if only core file is available)
+//
+// Replay data file replay_pid%p.log is also created when VM crashes
+// in Compiler thread during compilation. It is controlled by
+// DumpReplayDataOnError flag which is ON by default.
+//
+// Replay file replay_pid%p_compid%d.log can be created
+// for the specified java method during normal execution using
+// CompileCommand option DumpReplay:
+//
+// -XX:CompileCommand=option,Benchmark::test,DumpReplay
+//
+// In this case the file name has additional compilation id "_compid%d"
+// because the method could be compiled several times.
+//
+// To replay compilation the replay file should be specified:
+//
+// -XX:+ReplayCompiles -XX:ReplayDataFile=replay_pid2133.log
+//
+// VM thread reads data from the file immediately after VM initialization
+// and puts the compilation task on compile queue. After that it goes into
+// wait state (BackgroundCompilation flag is set to false) since there is no
+// a program to execute. VM exits when the compilation is finished.
+//
+//
+// Replay inlining.
+// ----------------
+//
+// Replay inlining file inline_pid%p_compid%d.log is created for
+// a specific java method during normal execution of a java program
+// using CompileCommand option DumpInline:
+//
+// -XX:CompileCommand=option,Benchmark::test,DumpInline
+//
+// To replay inlining the replay file and the method should be specified:
+//
+// -XX:CompileCommand=option,Benchmark::test,ReplayInline -XX:InlineDataFile=inline_pid3244_compid6.log
+//
+// The difference from replay compilation is that replay inlining
+// is performed during normal java program execution.
+//
+
class ciReplay {
CI_PACKAGE_ACCESS
@@ -37,7 +104,11 @@
static int replay_impl(TRAPS);
public:
+ // Replay specified compilation and exit VM.
static void replay(TRAPS);
+ // Load inlining decisions from file and use them
+ // during compilation of specified method.
+ static void* load_inline_data(ciMethod* method, int entry_bci, int comp_level);
// These are used by the CI to fill in the cached data from the
// replay file when replaying compiles.
@@ -48,6 +119,8 @@
static bool is_loaded(Klass* klass);
static bool should_not_inline(ciMethod* method);
+ static bool should_inline(void* data, ciMethod* method, int bci, int inline_depth);
+ static bool should_not_inline(void* data, ciMethod* method, int bci, int inline_depth);
#endif
};
diff --git a/hotspot/src/share/vm/classfile/classFileParser.cpp b/hotspot/src/share/vm/classfile/classFileParser.cpp
index db41756..094f359 100644
--- a/hotspot/src/share/vm/classfile/classFileParser.cpp
+++ b/hotspot/src/share/vm/classfile/classFileParser.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -4500,8 +4500,8 @@
break; // didn't find any match; get out
}
- if (super_m->is_final() &&
- // matching method in super is final
+ if (super_m->is_final() && !super_m->is_static() &&
+ // matching method in super is final, and not static
(Reflection::verify_field_access(this_klass(),
super_m->method_holder(),
super_m->method_holder(),
diff --git a/hotspot/src/share/vm/classfile/classLoaderData.cpp b/hotspot/src/share/vm/classfile/classLoaderData.cpp
index 273e018..6b34e01 100644
--- a/hotspot/src/share/vm/classfile/classLoaderData.cpp
+++ b/hotspot/src/share/vm/classfile/classLoaderData.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -520,6 +520,13 @@
}
}
+bool ClassLoaderData::contains_klass(Klass* klass) {
+ for (Klass* k = _klasses; k != NULL; k = k->next_link()) {
+ if (k == klass) return true;
+ }
+ return false;
+}
+
// GC root of class loader data created.
ClassLoaderData* ClassLoaderDataGraph::_head = NULL;
@@ -648,12 +655,12 @@
return array;
}
-#ifndef PRODUCT
-// for debugging and hsfind(x)
-bool ClassLoaderDataGraph::contains(address x) {
- // I think we need the _metaspace_lock taken here because the class loader
- // data graph could be changing while we are walking it (new entries added,
- // new entries being unloaded, etc).
+// For profiling and hsfind() only. Otherwise, this is unsafe (and slow). This
+// is done lock free to avoid lock inversion problems. It is safe because
+// new ClassLoaderData are added to the end of the CLDG, and only removed at
+// safepoint. The _unloading list can be deallocated concurrently with CMS so
+// this doesn't look in metaspace for classes that have been unloaded.
+bool ClassLoaderDataGraph::contains(const void* x) {
if (DumpSharedSpaces) {
// There are only two metaspaces to worry about.
ClassLoaderData* ncld = ClassLoaderData::the_null_class_loader_data();
@@ -670,16 +677,11 @@
}
}
- // Could also be on an unloading list which is okay, ie. still allocated
- // for a little while.
- for (ClassLoaderData* ucld = _unloading; ucld != NULL; ucld = ucld->next()) {
- if (ucld->metaspace_or_null() != NULL && ucld->metaspace_or_null()->contains(x)) {
- return true;
- }
- }
+ // Do not check unloading list because deallocation can be concurrent.
return false;
}
+#ifndef PRODUCT
bool ClassLoaderDataGraph::contains_loader_data(ClassLoaderData* loader_data) {
for (ClassLoaderData* data = _head; data != NULL; data = data->next()) {
if (loader_data == data) {
diff --git a/hotspot/src/share/vm/classfile/classLoaderData.hpp b/hotspot/src/share/vm/classfile/classLoaderData.hpp
index 2cb2180..3fcbb6b 100644
--- a/hotspot/src/share/vm/classfile/classLoaderData.hpp
+++ b/hotspot/src/share/vm/classfile/classLoaderData.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -90,9 +90,9 @@
static void dump() { dump_on(tty); }
static void verify();
-#ifndef PRODUCT
// expensive test for pointer in metaspace for debugging
- static bool contains(address x);
+ static bool contains(const void* x);
+#ifndef PRODUCT
static bool contains_loader_data(ClassLoaderData* loader_data);
#endif
@@ -260,6 +260,7 @@
jobject add_handle(Handle h);
void add_class(Klass* k);
void remove_class(Klass* k);
+ bool contains_klass(Klass* k);
void record_dependency(Klass* to, TRAPS);
void init_dependencies(TRAPS);
diff --git a/hotspot/src/share/vm/classfile/dictionary.cpp b/hotspot/src/share/vm/classfile/dictionary.cpp
index e308791..9a2bb74 100644
--- a/hotspot/src/share/vm/classfile/dictionary.cpp
+++ b/hotspot/src/share/vm/classfile/dictionary.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -707,7 +707,7 @@
loader_data->class_loader() == NULL ||
loader_data->class_loader()->is_instance(),
"checking type of class_loader");
- e->verify(/*check_dictionary*/false);
+ e->verify();
probe->verify_protection_domain_set();
element_count++;
}
diff --git a/hotspot/src/share/vm/classfile/symbolTable.cpp b/hotspot/src/share/vm/classfile/symbolTable.cpp
index d9cd2c8..d20673b 100644
--- a/hotspot/src/share/vm/classfile/symbolTable.cpp
+++ b/hotspot/src/share/vm/classfile/symbolTable.cpp
@@ -38,6 +38,9 @@
// --------------------------------------------------------------------------
+// the number of buckets a thread claims
+const int ClaimChunkSize = 32;
+
SymbolTable* SymbolTable::_the_table = NULL;
// Static arena for symbols that are not deallocated
Arena* SymbolTable::_arena = NULL;
@@ -83,16 +86,12 @@
}
}
-int SymbolTable::symbols_removed = 0;
-int SymbolTable::symbols_counted = 0;
+int SymbolTable::_symbols_removed = 0;
+int SymbolTable::_symbols_counted = 0;
+volatile int SymbolTable::_parallel_claimed_idx = 0;
-// Remove unreferenced symbols from the symbol table
-// This is done late during GC.
-void SymbolTable::unlink() {
- int removed = 0;
- int total = 0;
- size_t memory_total = 0;
- for (int i = 0; i < the_table()->table_size(); ++i) {
+void SymbolTable::buckets_unlink(int start_idx, int end_idx, int* processed, int* removed, size_t* memory_total) {
+ for (int i = start_idx; i < end_idx; ++i) {
HashtableEntry<Symbol*, mtSymbol>** p = the_table()->bucket_addr(i);
HashtableEntry<Symbol*, mtSymbol>* entry = the_table()->bucket(i);
while (entry != NULL) {
@@ -104,14 +103,14 @@
break;
}
Symbol* s = entry->literal();
- memory_total += s->size();
- total++;
+ (*memory_total) += s->size();
+ (*processed)++;
assert(s != NULL, "just checking");
// If reference count is zero, remove.
if (s->refcount() == 0) {
assert(!entry->is_shared(), "shared entries should be kept live");
delete s;
- removed++;
+ (*removed)++;
*p = entry->next();
the_table()->free_entry(entry);
} else {
@@ -121,12 +120,45 @@
entry = (HashtableEntry<Symbol*, mtSymbol>*)HashtableEntry<Symbol*, mtSymbol>::make_ptr(*p);
}
}
- symbols_removed += removed;
- symbols_counted += total;
+}
+
+// Remove unreferenced symbols from the symbol table
+// This is done late during GC.
+void SymbolTable::unlink(int* processed, int* removed) {
+ size_t memory_total = 0;
+ buckets_unlink(0, the_table()->table_size(), processed, removed, &memory_total);
+ _symbols_removed += *removed;
+ _symbols_counted += *processed;
// Exclude printing for normal PrintGCDetails because people parse
// this output.
if (PrintGCDetails && Verbose && WizardMode) {
- gclog_or_tty->print(" [Symbols=%d size=" SIZE_FORMAT "K] ", total,
+ gclog_or_tty->print(" [Symbols=%d size=" SIZE_FORMAT "K] ", *processed,
+ (memory_total*HeapWordSize)/1024);
+ }
+}
+
+void SymbolTable::possibly_parallel_unlink(int* processed, int* removed) {
+ const int limit = the_table()->table_size();
+
+ size_t memory_total = 0;
+
+ for (;;) {
+ // Grab next set of buckets to scan
+ int start_idx = Atomic::add(ClaimChunkSize, &_parallel_claimed_idx) - ClaimChunkSize;
+ if (start_idx >= limit) {
+ // End of table
+ break;
+ }
+
+ int end_idx = MIN2(limit, start_idx + ClaimChunkSize);
+ buckets_unlink(start_idx, end_idx, processed, removed, &memory_total);
+ }
+ Atomic::add(*processed, &_symbols_counted);
+ Atomic::add(*removed, &_symbols_removed);
+ // Exclude printing for normal PrintGCDetails because people parse
+ // this output.
+ if (PrintGCDetails && Verbose && WizardMode) {
+ gclog_or_tty->print(" [Symbols: scanned=%d removed=%d size=" SIZE_FORMAT "K] ", *processed, *removed,
(memory_total*HeapWordSize)/1024);
}
}
@@ -494,11 +526,11 @@
tty->print_cr("Total number of symbols %5d", count);
tty->print_cr("Total size in memory %5dK",
(memory_total*HeapWordSize)/1024);
- tty->print_cr("Total counted %5d", symbols_counted);
- tty->print_cr("Total removed %5d", symbols_removed);
- if (symbols_counted > 0) {
+ tty->print_cr("Total counted %5d", _symbols_counted);
+ tty->print_cr("Total removed %5d", _symbols_removed);
+ if (_symbols_counted > 0) {
tty->print_cr("Percent removed %3.2f",
- ((float)symbols_removed/(float)symbols_counted)* 100);
+ ((float)_symbols_removed/(float)_symbols_counted)* 100);
}
tty->print_cr("Reference counts %5d", Symbol::_total_count);
tty->print_cr("Symbol arena size %5d used %5d",
@@ -739,39 +771,38 @@
return result;
}
-void StringTable::unlink_or_oops_do(BoolObjectClosure* is_alive, OopClosure* f) {
+void StringTable::unlink_or_oops_do(BoolObjectClosure* is_alive, OopClosure* f, int* processed, int* removed) {
+ buckets_unlink_or_oops_do(is_alive, f, 0, the_table()->table_size(), processed, removed);
+}
+
+void StringTable::possibly_parallel_unlink_or_oops_do(BoolObjectClosure* is_alive, OopClosure* f, int* processed, int* removed) {
// Readers of the table are unlocked, so we should only be removing
// entries at a safepoint.
assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint");
- for (int i = 0; i < the_table()->table_size(); ++i) {
- HashtableEntry<oop, mtSymbol>** p = the_table()->bucket_addr(i);
- HashtableEntry<oop, mtSymbol>* entry = the_table()->bucket(i);
- while (entry != NULL) {
- assert(!entry->is_shared(), "CDS not used for the StringTable");
+ const int limit = the_table()->table_size();
- if (is_alive->do_object_b(entry->literal())) {
- if (f != NULL) {
- f->do_oop((oop*)entry->literal_addr());
- }
- p = entry->next_addr();
- } else {
- *p = entry->next();
- the_table()->free_entry(entry);
- }
- entry = *p;
+ for (;;) {
+ // Grab next set of buckets to scan
+ int start_idx = Atomic::add(ClaimChunkSize, &_parallel_claimed_idx) - ClaimChunkSize;
+ if (start_idx >= limit) {
+ // End of table
+ break;
}
+
+ int end_idx = MIN2(limit, start_idx + ClaimChunkSize);
+ buckets_unlink_or_oops_do(is_alive, f, start_idx, end_idx, processed, removed);
}
}
-void StringTable::buckets_do(OopClosure* f, int start_idx, int end_idx) {
+void StringTable::buckets_oops_do(OopClosure* f, int start_idx, int end_idx) {
const int limit = the_table()->table_size();
assert(0 <= start_idx && start_idx <= limit,
- err_msg("start_idx (" INT32_FORMAT ") oob?", start_idx));
+ err_msg("start_idx (" INT32_FORMAT ") is out of bounds", start_idx));
assert(0 <= end_idx && end_idx <= limit,
- err_msg("end_idx (" INT32_FORMAT ") oob?", end_idx));
+ err_msg("end_idx (" INT32_FORMAT ") is out of bounds", end_idx));
assert(start_idx <= end_idx,
- err_msg("Ordering: start_idx=" INT32_FORMAT", end_idx=" INT32_FORMAT,
+ err_msg("Index ordering: start_idx=" INT32_FORMAT", end_idx=" INT32_FORMAT,
start_idx, end_idx));
for (int i = start_idx; i < end_idx; i += 1) {
@@ -786,12 +817,44 @@
}
}
+void StringTable::buckets_unlink_or_oops_do(BoolObjectClosure* is_alive, OopClosure* f, int start_idx, int end_idx, int* processed, int* removed) {
+ const int limit = the_table()->table_size();
+
+ assert(0 <= start_idx && start_idx <= limit,
+ err_msg("start_idx (" INT32_FORMAT ") is out of bounds", start_idx));
+ assert(0 <= end_idx && end_idx <= limit,
+ err_msg("end_idx (" INT32_FORMAT ") is out of bounds", end_idx));
+ assert(start_idx <= end_idx,
+ err_msg("Index ordering: start_idx=" INT32_FORMAT", end_idx=" INT32_FORMAT,
+ start_idx, end_idx));
+
+ for (int i = start_idx; i < end_idx; ++i) {
+ HashtableEntry<oop, mtSymbol>** p = the_table()->bucket_addr(i);
+ HashtableEntry<oop, mtSymbol>* entry = the_table()->bucket(i);
+ while (entry != NULL) {
+ assert(!entry->is_shared(), "CDS not used for the StringTable");
+
+ if (is_alive->do_object_b(entry->literal())) {
+ if (f != NULL) {
+ f->do_oop((oop*)entry->literal_addr());
+ }
+ p = entry->next_addr();
+ } else {
+ *p = entry->next();
+ the_table()->free_entry(entry);
+ (*removed)++;
+ }
+ (*processed)++;
+ entry = *p;
+ }
+ }
+}
+
void StringTable::oops_do(OopClosure* f) {
- buckets_do(f, 0, the_table()->table_size());
+ buckets_oops_do(f, 0, the_table()->table_size());
}
void StringTable::possibly_parallel_oops_do(OopClosure* f) {
- const int ClaimChunkSize = 32;
const int limit = the_table()->table_size();
for (;;) {
@@ -803,7 +866,7 @@
}
int end_idx = MIN2(limit, start_idx + ClaimChunkSize);
- buckets_do(f, start_idx, end_idx);
+ buckets_oops_do(f, start_idx, end_idx);
}
}
diff --git a/hotspot/src/share/vm/classfile/symbolTable.hpp b/hotspot/src/share/vm/classfile/symbolTable.hpp
index 50cde69..b0a2fcb 100644
--- a/hotspot/src/share/vm/classfile/symbolTable.hpp
+++ b/hotspot/src/share/vm/classfile/symbolTable.hpp
@@ -86,8 +86,8 @@
static bool _needs_rehashing;
// For statistics
- static int symbols_removed;
- static int symbols_counted;
+ static int _symbols_removed;
+ static int _symbols_counted;
Symbol* allocate_symbol(const u1* name, int len, bool c_heap, TRAPS); // Assumes no characters larger than 0x7F
@@ -121,6 +121,11 @@
static Arena* arena() { return _arena; } // called for statistics
static void initialize_symbols(int arena_alloc_size = 0);
+
+ static volatile int _parallel_claimed_idx;
+
+ // Release any dead symbols
+ static void buckets_unlink(int start_idx, int end_idx, int* processed, int* removed, size_t* memory_total);
public:
enum {
symbol_alloc_batch_size = 8,
@@ -177,7 +182,14 @@
unsigned int* hashValues, TRAPS);
// Release any dead symbols
- static void unlink();
+ static void unlink() {
+ int processed = 0;
+ int removed = 0;
+ unlink(&processed, &removed);
+ }
+ static void unlink(int* processed, int* removed);
+ // Release any dead symbols, possibly parallel version
+ static void possibly_parallel_unlink(int* processed, int* removed);
// iterate over symbols
static void symbols_do(SymbolClosure *cl);
@@ -235,6 +247,9 @@
// Rehash the symbol table if it gets out of balance
static void rehash_table();
static bool needs_rehashing() { return _needs_rehashing; }
+ // Parallel chunked scanning
+ static void clear_parallel_claimed_index() { _parallel_claimed_idx = 0; }
+ static int parallel_claimed_index() { return _parallel_claimed_idx; }
};
class StringTable : public Hashtable<oop, mtSymbol> {
@@ -258,7 +273,10 @@
// Apply the give oop closure to the entries to the buckets
// in the range [start_idx, end_idx).
- static void buckets_do(OopClosure* f, int start_idx, int end_idx);
+ static void buckets_oops_do(OopClosure* f, int start_idx, int end_idx);
+ // Unlink or apply the give oop closure to the entries to the buckets
+ // in the range [start_idx, end_idx).
+ static void buckets_unlink_or_oops_do(BoolObjectClosure* is_alive, OopClosure* f, int start_idx, int end_idx, int* processed, int* removed);
StringTable() : Hashtable<oop, mtSymbol>((int)StringTableSize,
sizeof (HashtableEntry<oop, mtSymbol>)) {}
@@ -280,15 +298,28 @@
// GC support
// Delete pointers to otherwise-unreachable objects.
- static void unlink_or_oops_do(BoolObjectClosure* cl, OopClosure* f);
- static void unlink(BoolObjectClosure* cl) {
- unlink_or_oops_do(cl, NULL);
+ static void unlink_or_oops_do(BoolObjectClosure* cl, OopClosure* f) {
+ int processed = 0;
+ int removed = 0;
+ unlink_or_oops_do(cl, f, &processed, &removed);
}
-
+ static void unlink(BoolObjectClosure* cl) {
+ int processed = 0;
+ int removed = 0;
+ unlink_or_oops_do(cl, NULL, &processed, &removed);
+ }
+ static void unlink_or_oops_do(BoolObjectClosure* cl, OopClosure* f, int* processed, int* removed);
+ static void unlink(BoolObjectClosure* cl, int* processed, int* removed) {
+ unlink_or_oops_do(cl, NULL, processed, removed);
+ }
// Serially invoke "f->do_oop" on the locations of all oops in the table.
static void oops_do(OopClosure* f);
- // Possibly parallel version of the above
+ // Possibly parallel versions of the above
+ static void possibly_parallel_unlink_or_oops_do(BoolObjectClosure* cl, OopClosure* f, int* processed, int* removed);
+ static void possibly_parallel_unlink(BoolObjectClosure* cl, int* processed, int* removed) {
+ possibly_parallel_unlink_or_oops_do(cl, NULL, processed, removed);
+ }
static void possibly_parallel_oops_do(OopClosure* f);
// Hashing algorithm, used as the hash value used by the
@@ -349,5 +380,6 @@
// Parallel chunked scanning
static void clear_parallel_claimed_index() { _parallel_claimed_idx = 0; }
+ static int parallel_claimed_index() { return _parallel_claimed_idx; }
};
#endif // SHARE_VM_CLASSFILE_SYMBOLTABLE_HPP
diff --git a/hotspot/src/share/vm/classfile/systemDictionary.cpp b/hotspot/src/share/vm/classfile/systemDictionary.cpp
index f5c5c01..7034435 100644
--- a/hotspot/src/share/vm/classfile/systemDictionary.cpp
+++ b/hotspot/src/share/vm/classfile/systemDictionary.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -2650,23 +2650,6 @@
constraints()->verify(dictionary(), placeholders());
}
-
-void SystemDictionary::verify_obj_klass_present(Symbol* class_name,
- ClassLoaderData* loader_data) {
- GCMutexLocker mu(SystemDictionary_lock);
- Symbol* name;
-
- Klass* probe = find_class(class_name, loader_data);
- if (probe == NULL) {
- probe = SystemDictionary::find_shared_class(class_name);
- if (probe == NULL) {
- name = find_placeholder(class_name, loader_data);
- }
- }
- guarantee(probe != NULL || name != NULL,
- "Loaded klasses should be in SystemDictionary");
-}
-
// utility function for class load event
void SystemDictionary::post_class_load_event(const Ticks& start_time,
instanceKlassHandle k,
diff --git a/hotspot/src/share/vm/classfile/systemDictionary.hpp b/hotspot/src/share/vm/classfile/systemDictionary.hpp
index b0e914f..88132f5 100644
--- a/hotspot/src/share/vm/classfile/systemDictionary.hpp
+++ b/hotspot/src/share/vm/classfile/systemDictionary.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -375,10 +375,6 @@
static bool is_internal_format(Symbol* class_name);
#endif
- // Verify class is in dictionary
- static void verify_obj_klass_present(Symbol* class_name,
- ClassLoaderData* loader_data);
-
// Initialization
static void initialize(TRAPS);
diff --git a/hotspot/src/share/vm/classfile/vmSymbols.hpp b/hotspot/src/share/vm/classfile/vmSymbols.hpp
index 9a06792..ed3c0db 100644
--- a/hotspot/src/share/vm/classfile/vmSymbols.hpp
+++ b/hotspot/src/share/vm/classfile/vmSymbols.hpp
@@ -654,9 +654,9 @@
do_intrinsic(_addExactI, java_lang_Math, addExact_name, int2_int_signature, F_S) \
do_intrinsic(_addExactL, java_lang_Math, addExact_name, long2_long_signature, F_S) \
do_intrinsic(_decrementExactI, java_lang_Math, decrementExact_name, int_int_signature, F_S) \
- do_intrinsic(_decrementExactL, java_lang_Math, decrementExact_name, long2_long_signature, F_S) \
+ do_intrinsic(_decrementExactL, java_lang_Math, decrementExact_name, long_long_signature, F_S) \
do_intrinsic(_incrementExactI, java_lang_Math, incrementExact_name, int_int_signature, F_S) \
- do_intrinsic(_incrementExactL, java_lang_Math, incrementExact_name, long2_long_signature, F_S) \
+ do_intrinsic(_incrementExactL, java_lang_Math, incrementExact_name, long_long_signature, F_S) \
do_intrinsic(_multiplyExactI, java_lang_Math, multiplyExact_name, int2_int_signature, F_S) \
do_intrinsic(_multiplyExactL, java_lang_Math, multiplyExact_name, long2_long_signature, F_S) \
do_intrinsic(_negateExactI, java_lang_Math, negateExact_name, int_int_signature, F_S) \
@@ -787,7 +787,7 @@
do_intrinsic(_cipherBlockChaining_decryptAESCrypt, com_sun_crypto_provider_cipherBlockChaining, decrypt_name, byteArray_int_int_byteArray_int_signature, F_R) \
do_name( encrypt_name, "encrypt") \
do_name( decrypt_name, "decrypt") \
- do_signature(byteArray_int_int_byteArray_int_signature, "([BII[BI)V") \
+ do_signature(byteArray_int_int_byteArray_int_signature, "([BII[BI)I") \
\
/* support for java.util.zip */ \
do_class(java_util_zip_CRC32, "java/util/zip/CRC32") \
diff --git a/hotspot/src/share/vm/code/dependencies.cpp b/hotspot/src/share/vm/code/dependencies.cpp
index 29aaf32..778efe8 100644
--- a/hotspot/src/share/vm/code/dependencies.cpp
+++ b/hotspot/src/share/vm/code/dependencies.cpp
@@ -655,8 +655,6 @@
} else {
o = _deps->oop_recorder()->metadata_at(i);
}
- assert(o == NULL || o->is_metaspace_object(),
- err_msg("Should be metadata " PTR_FORMAT, o));
return o;
}
diff --git a/hotspot/src/share/vm/code/vtableStubs.cpp b/hotspot/src/share/vm/code/vtableStubs.cpp
index 5af91a3..b3bfc25 100644
--- a/hotspot/src/share/vm/code/vtableStubs.cpp
+++ b/hotspot/src/share/vm/code/vtableStubs.cpp
@@ -55,6 +55,9 @@
const int chunk_factor = 32;
if (_chunk == NULL || _chunk + real_size > _chunk_end) {
const int bytes = chunk_factor * real_size + pd_code_alignment();
+
+ // There is a dependency on the name of the blob in src/share/vm/prims/jvmtiCodeBlobEvents.cpp
+ // If changing the name, update the other file accordingly.
BufferBlob* blob = BufferBlob::create("vtable chunks", bytes);
if (blob == NULL) {
return NULL;
@@ -62,12 +65,6 @@
_chunk = blob->content_begin();
_chunk_end = _chunk + bytes;
Forte::register_stub("vtable stub", _chunk, _chunk_end);
- // Notify JVMTI about this stub. The event will be recorded by the enclosing
- // JvmtiDynamicCodeEventCollector and posted when this thread has released
- // all locks.
- if (JvmtiExport::should_post_dynamic_code_generated()) {
- JvmtiExport::post_dynamic_code_generated_while_holding_locks("vtable stub", _chunk, _chunk_end);
- }
align_chunk();
}
assert(_chunk + real_size <= _chunk_end, "bad allocation");
@@ -130,6 +127,13 @@
is_vtable_stub? "vtbl": "itbl", vtable_index, VtableStub::receiver_location());
Disassembler::decode(s->code_begin(), s->code_end());
}
+ // Notify JVMTI about this stub. The event will be recorded by the enclosing
+ // JvmtiDynamicCodeEventCollector and posted when this thread has released
+ // all locks.
+ if (JvmtiExport::should_post_dynamic_code_generated()) {
+ JvmtiExport::post_dynamic_code_generated_while_holding_locks(is_vtable_stub? "vtable stub": "itable stub",
+ s->code_begin(), s->code_end());
+ }
}
return s->entry_point();
}
@@ -195,6 +199,14 @@
VtableStubs::initialize();
}
+void VtableStubs::vtable_stub_do(void f(VtableStub*)) {
+ for (int i = 0; i < N; i++) {
+ for (VtableStub* s = _table[i]; s != NULL; s = s->next()) {
+ f(s);
+ }
+ }
+}
+
//-----------------------------------------------------------------------------------------------------
// Non-product code
diff --git a/hotspot/src/share/vm/code/vtableStubs.hpp b/hotspot/src/share/vm/code/vtableStubs.hpp
index 06f2a67..b3d4f2d 100644
--- a/hotspot/src/share/vm/code/vtableStubs.hpp
+++ b/hotspot/src/share/vm/code/vtableStubs.hpp
@@ -131,6 +131,7 @@
static VtableStub* stub_containing(address pc); // stub containing pc or NULL
static int number_of_vtable_stubs() { return _number_of_vtable_stubs; }
static void initialize();
+ static void vtable_stub_do(void f(VtableStub*)); // iterates over all vtable stubs
};
#endif // SHARE_VM_CODE_VTABLESTUBS_HPP
diff --git a/hotspot/src/share/vm/compiler/compileBroker.cpp b/hotspot/src/share/vm/compiler/compileBroker.cpp
index f8fa26f..a6c9117 100644
--- a/hotspot/src/share/vm/compiler/compileBroker.cpp
+++ b/hotspot/src/share/vm/compiler/compileBroker.cpp
@@ -132,9 +132,9 @@
// The installed compiler(s)
AbstractCompiler* CompileBroker::_compilers[2];
-// These counters are used for assigning id's to each compilation
-uint CompileBroker::_compilation_id = 0;
-uint CompileBroker::_osr_compilation_id = 0;
+// These counters are used to assign an unique ID to each compilation.
+volatile jint CompileBroker::_compilation_id = 0;
+volatile jint CompileBroker::_osr_compilation_id = 0;
// Debugging information
int CompileBroker::_last_compile_type = no_compile;
@@ -1158,7 +1158,7 @@
// We now know that this compilation is not pending, complete,
// or prohibited. Assign a compile_id to this compilation
// and check to see if it is in our [Start..Stop) range.
- uint compile_id = assign_compile_id(method, osr_bci);
+ int compile_id = assign_compile_id(method, osr_bci);
if (compile_id == 0) {
// The compilation falls outside the allowed range.
return;
@@ -1305,18 +1305,12 @@
// do the compilation
if (method->is_native()) {
if (!PreferInterpreterNativeStubs || method->is_method_handle_intrinsic()) {
- // Acquire our lock.
- int compile_id;
- {
- MutexLocker locker(MethodCompileQueue_lock, THREAD);
- compile_id = assign_compile_id(method, standard_entry_bci);
- }
// To properly handle the appendix argument for out-of-line calls we are using a small trampoline that
// pops off the appendix argument and jumps to the target (see gen_special_dispatch in SharedRuntime).
//
// Since normal compiled-to-compiled calls are not able to handle such a thing we MUST generate an adapter
// in this case. If we can't generate one and use it we can not execute the out-of-line method handle calls.
- (void) AdapterHandlerLibrary::create_native_wrapper(method, compile_id);
+ AdapterHandlerLibrary::create_native_wrapper(method);
} else {
return NULL;
}
@@ -1419,27 +1413,28 @@
return false;
}
-
-// ------------------------------------------------------------------
-// CompileBroker::assign_compile_id
-//
-// Assign a serialized id number to this compilation request. If the
-// number falls out of the allowed range, return a 0. OSR
-// compilations may be numbered separately from regular compilations
-// if certain debugging flags are used.
-uint CompileBroker::assign_compile_id(methodHandle method, int osr_bci) {
- assert(MethodCompileQueue_lock->owner() == Thread::current(),
- "must hold the compilation queue lock");
+/**
+ * Generate serialized IDs for compilation requests. If certain debugging flags are used
+ * and the ID is not within the specified range, the method is not compiled and 0 is returned.
+ * The function also allows to generate separate compilation IDs for OSR compilations.
+ */
+int CompileBroker::assign_compile_id(methodHandle method, int osr_bci) {
+#ifdef ASSERT
bool is_osr = (osr_bci != standard_entry_bci);
- uint id;
- if (CICountOSR && is_osr) {
- id = ++_osr_compilation_id;
- if ((uint)CIStartOSR <= id && id < (uint)CIStopOSR) {
+ int id;
+ if (method->is_native()) {
+ assert(!is_osr, "can't be osr");
+ // Adapters, native wrappers and method handle intrinsics
+ // should be generated always.
+ return Atomic::add(1, &_compilation_id);
+ } else if (CICountOSR && is_osr) {
+ id = Atomic::add(1, &_osr_compilation_id);
+ if (CIStartOSR <= id && id < CIStopOSR) {
return id;
}
} else {
- id = ++_compilation_id;
- if ((uint)CIStart <= id && id < (uint)CIStop) {
+ id = Atomic::add(1, &_compilation_id);
+ if (CIStart <= id && id < CIStop) {
return id;
}
}
@@ -1447,6 +1442,11 @@
// Method was not in the appropriate compilation range.
method->set_not_compilable_quietly();
return 0;
+#else
+ // CICountOSR is a develop flag and set to 'false' by default. In a product built,
+ // only _compilation_id is incremented.
+ return Atomic::add(1, &_compilation_id);
+#endif
}
diff --git a/hotspot/src/share/vm/compiler/compileBroker.hpp b/hotspot/src/share/vm/compiler/compileBroker.hpp
index a74afb3..75cbcaf 100644
--- a/hotspot/src/share/vm/compiler/compileBroker.hpp
+++ b/hotspot/src/share/vm/compiler/compileBroker.hpp
@@ -246,6 +246,8 @@
// Compile type Information for print_last_compile() and CompilerCounters
enum { no_compile, normal_compile, osr_compile, native_compile };
+ static int assign_compile_id (methodHandle method, int osr_bci);
+
private:
static bool _initialized;
@@ -258,9 +260,8 @@
static AbstractCompiler* _compilers[2];
// These counters are used for assigning id's to each compilation
- static uint _compilation_id;
- static uint _osr_compilation_id;
- static uint _native_compilation_id;
+ static volatile jint _compilation_id;
+ static volatile jint _osr_compilation_id;
static int _last_compile_type;
static int _last_compile_level;
@@ -321,7 +322,6 @@
static void init_compiler_threads(int c1_compiler_count, int c2_compiler_count);
static bool compilation_is_complete (methodHandle method, int osr_bci, int comp_level);
static bool compilation_is_prohibited(methodHandle method, int osr_bci, int comp_level);
- static uint assign_compile_id (methodHandle method, int osr_bci);
static bool is_compile_blocking (methodHandle method, int osr_bci);
static void preload_classes (methodHandle method, TRAPS);
diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp
index b87efd7..3484b78 100644
--- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp
+++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp
@@ -1704,8 +1704,8 @@
_dictionary->return_chunk(chunk);
#ifndef PRODUCT
if (CMSCollector::abstract_state() != CMSCollector::Sweeping) {
- TreeChunk<FreeChunk, AdaptiveFreeList>* tc = TreeChunk<FreeChunk, AdaptiveFreeList>::as_TreeChunk(chunk);
- TreeList<FreeChunk, AdaptiveFreeList>* tl = tc->list();
+ TreeChunk<FreeChunk, AdaptiveFreeList<FreeChunk> >* tc = TreeChunk<FreeChunk, AdaptiveFreeList<FreeChunk> >::as_TreeChunk(chunk);
+ TreeList<FreeChunk, AdaptiveFreeList<FreeChunk> >* tl = tc->list();
tl->verify_stats();
}
#endif // PRODUCT
@@ -2515,10 +2515,10 @@
#ifndef PRODUCT
void CompactibleFreeListSpace::check_free_list_consistency() const {
- assert((TreeChunk<FreeChunk, AdaptiveFreeList>::min_size() <= IndexSetSize),
+ assert((TreeChunk<FreeChunk, AdaptiveFreeList<FreeChunk> >::min_size() <= IndexSetSize),
"Some sizes can't be allocated without recourse to"
" linear allocation buffers");
- assert((TreeChunk<FreeChunk, AdaptiveFreeList>::min_size()*HeapWordSize == sizeof(TreeChunk<FreeChunk, AdaptiveFreeList>)),
+ assert((TreeChunk<FreeChunk, AdaptiveFreeList<FreeChunk> >::min_size()*HeapWordSize == sizeof(TreeChunk<FreeChunk, AdaptiveFreeList<FreeChunk> >)),
"else MIN_TREE_CHUNK_SIZE is wrong");
assert(IndexSetStart != 0, "IndexSetStart not initialized");
assert(IndexSetStride != 0, "IndexSetStride not initialized");
diff --git a/hotspot/src/share/vm/gc_implementation/g1/bufferingOopClosure.hpp b/hotspot/src/share/vm/gc_implementation/g1/bufferingOopClosure.hpp
index 1ceca17..cde2132 100644
--- a/hotspot/src/share/vm/gc_implementation/g1/bufferingOopClosure.hpp
+++ b/hotspot/src/share/vm/gc_implementation/g1/bufferingOopClosure.hpp
@@ -98,116 +98,4 @@
_closure_app_seconds(0.0) { }
};
-class BufferingOopsInGenClosure: public OopsInGenClosure {
- BufferingOopClosure _boc;
- OopsInGenClosure* _oc;
- protected:
- template <class T> inline void do_oop_work(T* p) {
- assert(generation()->is_in_reserved((void*)p), "Must be in!");
- _boc.do_oop(p);
- }
- public:
- BufferingOopsInGenClosure(OopsInGenClosure *oc) :
- _boc(oc), _oc(oc) {}
-
- virtual void do_oop(narrowOop* p) { do_oop_work(p); }
- virtual void do_oop(oop* p) { do_oop_work(p); }
-
- void done() {
- _boc.done();
- }
-
- double closure_app_seconds () {
- return _boc.closure_app_seconds();
- }
-
- void set_generation(Generation* gen) {
- OopsInGenClosure::set_generation(gen);
- _oc->set_generation(gen);
- }
-
- void reset_generation() {
- // Make sure we finish the current work with the current generation.
- _boc.done();
- OopsInGenClosure::reset_generation();
- _oc->reset_generation();
- }
-
-};
-
-
-class BufferingOopsInHeapRegionClosure: public OopsInHeapRegionClosure {
-private:
- enum PrivateConstants {
- BufferLength = 1024
- };
-
- StarTask _buffer[BufferLength];
- StarTask* _buffer_top;
- StarTask* _buffer_curr;
-
- HeapRegion* _hr_buffer[BufferLength];
- HeapRegion** _hr_curr;
-
- OopsInHeapRegionClosure* _oc;
- double _closure_app_seconds;
-
- void process_buffer () {
-
- assert((_hr_curr - _hr_buffer) == (_buffer_curr - _buffer),
- "the two lengths should be the same");
-
- double start = os::elapsedTime();
- HeapRegion** hr_curr = _hr_buffer;
- HeapRegion* hr_prev = NULL;
- for (StarTask* curr = _buffer; curr < _buffer_curr; ++curr) {
- HeapRegion* region = *hr_curr;
- if (region != hr_prev) {
- _oc->set_region(region);
- hr_prev = region;
- }
- if (curr->is_narrow()) {
- assert(UseCompressedOops, "Error");
- _oc->do_oop((narrowOop*)(*curr));
- } else {
- _oc->do_oop((oop*)(*curr));
- }
- ++hr_curr;
- }
- _buffer_curr = _buffer;
- _hr_curr = _hr_buffer;
- _closure_app_seconds += (os::elapsedTime() - start);
- }
-
-public:
- virtual void do_oop(narrowOop* p) { do_oop_work(p); }
- virtual void do_oop( oop* p) { do_oop_work(p); }
-
- template <class T> void do_oop_work(T* p) {
- if (_buffer_curr == _buffer_top) {
- assert(_hr_curr > _hr_buffer, "_hr_curr should be consistent with _buffer_curr");
- process_buffer();
- }
- StarTask new_ref(p);
- *_buffer_curr = new_ref;
- ++_buffer_curr;
- *_hr_curr = _from;
- ++_hr_curr;
- }
- void done () {
- if (_buffer_curr > _buffer) {
- assert(_hr_curr > _hr_buffer, "_hr_curr should be consistent with _buffer_curr");
- process_buffer();
- }
- }
- double closure_app_seconds () {
- return _closure_app_seconds;
- }
- BufferingOopsInHeapRegionClosure (OopsInHeapRegionClosure *oc) :
- _oc(oc),
- _buffer_curr(_buffer), _buffer_top(_buffer + BufferLength),
- _hr_curr(_hr_buffer),
- _closure_app_seconds(0.0) { }
-};
-
#endif // SHARE_VM_GC_IMPLEMENTATION_G1_BUFFERINGOOPCLOSURE_HPP
diff --git a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp
index 4e45831..bf7a771 100644
--- a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp
+++ b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp
@@ -1619,7 +1619,6 @@
}
};
-
class G1ParVerifyFinalCountTask: public AbstractGangTask {
protected:
G1CollectedHeap* _g1h;
@@ -2529,10 +2528,9 @@
assert(!rp->discovery_enabled(), "Post condition");
}
- // Now clean up stale oops in StringTable
- StringTable::unlink(&g1_is_alive);
- // Clean up unreferenced symbols in symbol table.
- SymbolTable::unlink();
+ g1h->unlink_string_and_symbol_table(&g1_is_alive,
+ /* process_strings */ false, // currently strings are always roots
+ /* process_symbols */ true);
}
void ConcurrentMark::swapMarkBitMaps() {
diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp
index 5ae273b..91d2a1c 100644
--- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -50,8 +50,8 @@
#include "gc_implementation/shared/gcTraceTime.hpp"
#include "gc_implementation/shared/isGCActiveMark.hpp"
#include "memory/gcLocker.inline.hpp"
-#include "memory/genOopClosures.inline.hpp"
#include "memory/generationSpec.hpp"
+#include "memory/iterator.hpp"
#include "memory/referenceProcessor.hpp"
#include "oops/oop.inline.hpp"
#include "oops/oop.pcgc.inline.hpp"
@@ -1575,8 +1575,6 @@
void
G1CollectedHeap::
resize_if_necessary_after_full_collection(size_t word_size) {
- assert(MinHeapFreeRatio <= MaxHeapFreeRatio, "sanity check");
-
// Include the current allocation, if any, and bytes that will be
// pre-allocated to support collections, as "used".
const size_t used_after_gc = used();
@@ -3096,11 +3094,7 @@
return NULL; // keep some compilers happy
}
-// TODO: VerifyRootsClosure extends OopsInGenClosure so that we can
-// pass it as the perm_blk to SharedHeap::process_strong_roots.
-// When process_strong_roots stop calling perm_blk->younger_refs_iterate
-// we can change this closure to extend the simpler OopClosure.
-class VerifyRootsClosure: public OopsInGenClosure {
+class VerifyRootsClosure: public OopClosure {
private:
G1CollectedHeap* _g1h;
VerifyOption _vo;
@@ -3136,7 +3130,7 @@
void do_oop(narrowOop* p) { do_oop_nv(p); }
};
-class G1VerifyCodeRootOopClosure: public OopsInGenClosure {
+class G1VerifyCodeRootOopClosure: public OopClosure {
G1CollectedHeap* _g1h;
OopClosure* _root_cl;
nmethod* _nm;
@@ -4545,7 +4539,7 @@
G1ParGCAllocBuffer::G1ParGCAllocBuffer(size_t gclab_word_size) :
ParGCAllocBuffer(gclab_word_size), _retired(false) { }
-G1ParScanThreadState::G1ParScanThreadState(G1CollectedHeap* g1h, uint queue_num)
+G1ParScanThreadState::G1ParScanThreadState(G1CollectedHeap* g1h, uint queue_num, ReferenceProcessor* rp)
: _g1h(g1h),
_refs(g1h->task_queue(queue_num)),
_dcq(&g1h->dirty_card_queue_set()),
@@ -4555,7 +4549,7 @@
_term_attempts(0),
_surviving_alloc_buffer(g1h->desired_plab_sz(GCAllocForSurvived)),
_tenured_alloc_buffer(g1h->desired_plab_sz(GCAllocForTenured)),
- _age_table(false),
+ _age_table(false), _scanner(g1h, this, rp),
_strong_roots_time(0), _term_time(0),
_alloc_buffer_waste(0), _undo_waste(0) {
// we allocate G1YoungSurvRateNumRegions plus one entries, since
@@ -4664,14 +4658,10 @@
G1ParClosureSuper::G1ParClosureSuper(G1CollectedHeap* g1,
G1ParScanThreadState* par_scan_state) :
- _g1(g1), _g1_rem(_g1->g1_rem_set()), _cm(_g1->concurrent_mark()),
- _par_scan_state(par_scan_state),
- _worker_id(par_scan_state->queue_num()),
- _during_initial_mark(_g1->g1_policy()->during_initial_mark_pause()),
- _mark_in_progress(_g1->mark_in_progress()) { }
+ _g1(g1), _par_scan_state(par_scan_state),
+ _worker_id(par_scan_state->queue_num()) { }
-template <bool do_gen_barrier, G1Barrier barrier, bool do_mark_object>
-void G1ParCopyClosure<do_gen_barrier, barrier, do_mark_object>::mark_object(oop obj) {
+void G1ParCopyHelper::mark_object(oop obj) {
#ifdef ASSERT
HeapRegion* hr = _g1->heap_region_containing(obj);
assert(hr != NULL, "sanity");
@@ -4682,9 +4672,7 @@
_cm->grayRoot(obj, (size_t) obj->size(), _worker_id);
}
-template <bool do_gen_barrier, G1Barrier barrier, bool do_mark_object>
-void G1ParCopyClosure<do_gen_barrier, barrier, do_mark_object>
- ::mark_forwarded_object(oop from_obj, oop to_obj) {
+void G1ParCopyHelper::mark_forwarded_object(oop from_obj, oop to_obj) {
#ifdef ASSERT
assert(from_obj->is_forwarded(), "from obj should be forwarded");
assert(from_obj->forwardee() == to_obj, "to obj should be the forwardee");
@@ -4706,27 +4694,25 @@
_cm->grayRoot(to_obj, (size_t) from_obj->size(), _worker_id);
}
-template <bool do_gen_barrier, G1Barrier barrier, bool do_mark_object>
-oop G1ParCopyClosure<do_gen_barrier, barrier, do_mark_object>
- ::copy_to_survivor_space(oop old) {
+oop G1ParScanThreadState::copy_to_survivor_space(oop const old) {
size_t word_sz = old->size();
- HeapRegion* from_region = _g1->heap_region_containing_raw(old);
+ HeapRegion* from_region = _g1h->heap_region_containing_raw(old);
// +1 to make the -1 indexes valid...
int young_index = from_region->young_index_in_cset()+1;
assert( (from_region->is_young() && young_index > 0) ||
(!from_region->is_young() && young_index == 0), "invariant" );
- G1CollectorPolicy* g1p = _g1->g1_policy();
+ G1CollectorPolicy* g1p = _g1h->g1_policy();
markOop m = old->mark();
int age = m->has_displaced_mark_helper() ? m->displaced_mark_helper()->age()
: m->age();
GCAllocPurpose alloc_purpose = g1p->evacuation_destination(from_region, age,
word_sz);
- HeapWord* obj_ptr = _par_scan_state->allocate(alloc_purpose, word_sz);
+ HeapWord* obj_ptr = allocate(alloc_purpose, word_sz);
#ifndef PRODUCT
// Should this evacuation fail?
- if (_g1->evacuation_should_fail()) {
+ if (_g1h->evacuation_should_fail()) {
if (obj_ptr != NULL) {
- _par_scan_state->undo_allocation(alloc_purpose, obj_ptr, word_sz);
+ undo_allocation(alloc_purpose, obj_ptr, word_sz);
obj_ptr = NULL;
}
}
@@ -4735,7 +4721,7 @@
if (obj_ptr == NULL) {
// This will either forward-to-self, or detect that someone else has
// installed a forwarding pointer.
- return _g1->handle_evacuation_failure_par(_par_scan_state, old);
+ return _g1h->handle_evacuation_failure_par(this, old);
}
oop obj = oop(obj_ptr);
@@ -4768,12 +4754,12 @@
m = m->incr_age();
obj->set_mark(m);
}
- _par_scan_state->age_table()->add(obj, word_sz);
+ age_table()->add(obj, word_sz);
} else {
obj->set_mark(m);
}
- size_t* surv_young_words = _par_scan_state->surviving_young_words();
+ size_t* surv_young_words = surviving_young_words();
surv_young_words[young_index] += word_sz;
if (obj->is_objArray() && arrayOop(obj)->length() >= ParGCArrayScanChunk) {
@@ -4782,15 +4768,15 @@
// length field of the from-space object.
arrayOop(obj)->set_length(0);
oop* old_p = set_partial_array_mask(old);
- _par_scan_state->push_on_queue(old_p);
+ push_on_queue(old_p);
} else {
// No point in using the slower heap_region_containing() method,
// given that we know obj is in the heap.
- _scanner.set_region(_g1->heap_region_containing_raw(obj));
+ _scanner.set_region(_g1h->heap_region_containing_raw(obj));
obj->oop_iterate_backwards(&_scanner);
}
} else {
- _par_scan_state->undo_allocation(alloc_purpose, obj_ptr, word_sz);
+ undo_allocation(alloc_purpose, obj_ptr, word_sz);
obj = forward_ptr;
}
return obj;
@@ -4803,23 +4789,25 @@
}
}
-template <bool do_gen_barrier, G1Barrier barrier, bool do_mark_object>
+template <G1Barrier barrier, bool do_mark_object>
template <class T>
-void G1ParCopyClosure<do_gen_barrier, barrier, do_mark_object>
-::do_oop_work(T* p) {
- oop obj = oopDesc::load_decode_heap_oop(p);
- assert(barrier != G1BarrierRS || obj != NULL,
- "Precondition: G1BarrierRS implies obj is non-NULL");
+void G1ParCopyClosure<barrier, do_mark_object>::do_oop_work(T* p) {
+ T heap_oop = oopDesc::load_heap_oop(p);
+
+ if (oopDesc::is_null(heap_oop)) {
+ return;
+ }
+
+ oop obj = oopDesc::decode_heap_oop_not_null(heap_oop);
assert(_worker_id == _par_scan_state->queue_num(), "sanity");
- // here the null check is implicit in the cset_fast_test() test
if (_g1->in_cset_fast_test(obj)) {
oop forwardee;
if (obj->is_forwarded()) {
forwardee = obj->forwardee();
} else {
- forwardee = copy_to_survivor_space(obj);
+ forwardee = _par_scan_state->copy_to_survivor_space(obj);
}
assert(forwardee != NULL, "forwardee should not be NULL");
oopDesc::encode_store_heap_oop(p, forwardee);
@@ -4829,32 +4817,25 @@
mark_forwarded_object(obj, forwardee);
}
- // When scanning the RS, we only care about objs in CS.
- if (barrier == G1BarrierRS) {
- _par_scan_state->update_rs(_from, p, _worker_id);
- } else if (barrier == G1BarrierKlass) {
+ if (barrier == G1BarrierKlass) {
do_klass_barrier(p, forwardee);
}
} else {
// The object is not in collection set. If we're a root scanning
// closure during an initial mark pause (i.e. do_mark_object will
// be true) then attempt to mark the object.
- if (do_mark_object && _g1->is_in_g1_reserved(obj)) {
+ if (do_mark_object) {
mark_object(obj);
}
}
- if (barrier == G1BarrierEvac && obj != NULL) {
+ if (barrier == G1BarrierEvac) {
_par_scan_state->update_rs(_from, p, _worker_id);
}
-
- if (do_gen_barrier && obj != NULL) {
- par_do_barrier(p);
- }
}
-template void G1ParCopyClosure<false, G1BarrierEvac, false>::do_oop_work(oop* p);
-template void G1ParCopyClosure<false, G1BarrierEvac, false>::do_oop_work(narrowOop* p);
+template void G1ParCopyClosure<G1BarrierEvac, false>::do_oop_work(oop* p);
+template void G1ParCopyClosure<G1BarrierEvac, false>::do_oop_work(narrowOop* p);
template <class T> void G1ParScanPartialArrayClosure::do_oop_nv(T* p) {
assert(has_partial_array_mask(p), "invariant");
@@ -5045,7 +5026,7 @@
ReferenceProcessor* rp = _g1h->ref_processor_stw();
- G1ParScanThreadState pss(_g1h, worker_id);
+ G1ParScanThreadState pss(_g1h, worker_id, rp);
G1ParScanHeapEvacClosure scan_evac_cl(_g1h, &pss, rp);
G1ParScanHeapEvacFailureClosure evac_failure_cl(_g1h, &pss, rp);
G1ParScanPartialArrayClosure partial_scan_cl(_g1h, &pss, rp);
@@ -5212,6 +5193,102 @@
SharedHeap::process_weak_roots(root_closure, &roots_in_blobs);
}
+class G1StringSymbolTableUnlinkTask : public AbstractGangTask {
+private:
+ BoolObjectClosure* _is_alive;
+ int _initial_string_table_size;
+ int _initial_symbol_table_size;
+
+ bool _process_strings;
+ int _strings_processed;
+ int _strings_removed;
+
+ bool _process_symbols;
+ int _symbols_processed;
+ int _symbols_removed;
+
+ bool _do_in_parallel;
+public:
+ G1StringSymbolTableUnlinkTask(BoolObjectClosure* is_alive, bool process_strings, bool process_symbols) :
+ AbstractGangTask("Par String/Symbol table unlink"), _is_alive(is_alive),
+ _do_in_parallel(G1CollectedHeap::use_parallel_gc_threads()),
+ _process_strings(process_strings), _strings_processed(0), _strings_removed(0),
+ _process_symbols(process_symbols), _symbols_processed(0), _symbols_removed(0) {
+
+ _initial_string_table_size = StringTable::the_table()->table_size();
+ _initial_symbol_table_size = SymbolTable::the_table()->table_size();
+ if (process_strings) {
+ StringTable::clear_parallel_claimed_index();
+ }
+ if (process_symbols) {
+ SymbolTable::clear_parallel_claimed_index();
+ }
+ }
+
+ ~G1StringSymbolTableUnlinkTask() {
+ guarantee(!_process_strings || !_do_in_parallel || StringTable::parallel_claimed_index() >= _initial_string_table_size,
+ err_msg("claim value "INT32_FORMAT" after unlink less than initial string table size "INT32_FORMAT,
+ StringTable::parallel_claimed_index(), _initial_string_table_size));
+ guarantee(!_process_symbols || !_do_in_parallel || SymbolTable::parallel_claimed_index() >= _initial_symbol_table_size,
+ err_msg("claim value "INT32_FORMAT" after unlink less than initial symbol table size "INT32_FORMAT,
+ SymbolTable::parallel_claimed_index(), _initial_symbol_table_size));
+ }
+
+ void work(uint worker_id) {
+ if (_do_in_parallel) {
+ int strings_processed = 0;
+ int strings_removed = 0;
+ int symbols_processed = 0;
+ int symbols_removed = 0;
+ if (_process_strings) {
+ StringTable::possibly_parallel_unlink(_is_alive, &strings_processed, &strings_removed);
+ Atomic::add(strings_processed, &_strings_processed);
+ Atomic::add(strings_removed, &_strings_removed);
+ }
+ if (_process_symbols) {
+ SymbolTable::possibly_parallel_unlink(&symbols_processed, &symbols_removed);
+ Atomic::add(symbols_processed, &_symbols_processed);
+ Atomic::add(symbols_removed, &_symbols_removed);
+ }
+ } else {
+ if (_process_strings) {
+ StringTable::unlink(_is_alive, &_strings_processed, &_strings_removed);
+ }
+ if (_process_symbols) {
+ SymbolTable::unlink(&_symbols_processed, &_symbols_removed);
+ }
+ }
+ }
+
+ size_t strings_processed() const { return (size_t)_strings_processed; }
+ size_t strings_removed() const { return (size_t)_strings_removed; }
+
+ size_t symbols_processed() const { return (size_t)_symbols_processed; }
+ size_t symbols_removed() const { return (size_t)_symbols_removed; }
+};
+
+void G1CollectedHeap::unlink_string_and_symbol_table(BoolObjectClosure* is_alive,
+ bool process_strings, bool process_symbols) {
+ uint n_workers = (G1CollectedHeap::use_parallel_gc_threads() ?
+ _g1h->workers()->active_workers() : 1);
+
+ G1StringSymbolTableUnlinkTask g1_unlink_task(is_alive, process_strings, process_symbols);
+ if (G1CollectedHeap::use_parallel_gc_threads()) {
+ set_par_threads(n_workers);
+ workers()->run_task(&g1_unlink_task);
+ set_par_threads(0);
+ } else {
+ g1_unlink_task.work(0);
+ }
+ if (G1TraceStringSymbolTableScrubbing) {
+ gclog_or_tty->print_cr("Cleaned string and symbol table, "
+ "strings: "SIZE_FORMAT" processed, "SIZE_FORMAT" removed, "
+ "symbols: "SIZE_FORMAT" processed, "SIZE_FORMAT" removed",
+ g1_unlink_task.strings_processed(), g1_unlink_task.strings_removed(),
+ g1_unlink_task.symbols_processed(), g1_unlink_task.symbols_removed());
+ }
+}
+
// Weak Reference Processing support
// An always "is_alive" closure that is used to preserve referents.
@@ -5392,7 +5469,7 @@
G1STWIsAliveClosure is_alive(_g1h);
- G1ParScanThreadState pss(_g1h, worker_id);
+ G1ParScanThreadState pss(_g1h, worker_id, NULL);
G1ParScanHeapEvacClosure scan_evac_cl(_g1h, &pss, NULL);
G1ParScanHeapEvacFailureClosure evac_failure_cl(_g1h, &pss, NULL);
@@ -5504,7 +5581,7 @@
ResourceMark rm;
HandleMark hm;
- G1ParScanThreadState pss(_g1h, worker_id);
+ G1ParScanThreadState pss(_g1h, worker_id, NULL);
G1ParScanHeapEvacClosure scan_evac_cl(_g1h, &pss, NULL);
G1ParScanHeapEvacFailureClosure evac_failure_cl(_g1h, &pss, NULL);
G1ParScanPartialArrayClosure partial_scan_cl(_g1h, &pss, NULL);
@@ -5630,7 +5707,7 @@
// JNI refs.
// Use only a single queue for this PSS.
- G1ParScanThreadState pss(this, 0);
+ G1ParScanThreadState pss(this, 0, NULL);
// We do not embed a reference processor in the copying/scanning
// closures while we're actually processing the discovered
diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp
index 69aa325..f9a19b5 100644
--- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp
@@ -209,7 +209,7 @@
friend class OldGCAllocRegion;
// Closures used in implementation.
- template <bool do_gen_barrier, G1Barrier barrier, bool do_mark_object>
+ template <G1Barrier barrier, bool do_mark_object>
friend class G1ParCopyClosure;
friend class G1IsAliveClosure;
friend class G1EvacuateFollowersClosure;
@@ -606,6 +606,11 @@
// may not be a humongous - it must fit into a single heap region.
HeapWord* par_allocate_during_gc(GCAllocPurpose purpose, size_t word_size);
+ HeapWord* allocate_during_gc_slow(GCAllocPurpose purpose,
+ HeapRegion* alloc_region,
+ bool par,
+ size_t word_size);
+
// Ensure that no further allocations can happen in "r", bearing in mind
// that parallel threads might be attempting allocations.
void par_allocate_remaining_space(HeapRegion* r);
@@ -698,23 +703,20 @@
}
// This is a fast test on whether a reference points into the
- // collection set or not. It does not assume that the reference
- // points into the heap; if it doesn't, it will return false.
+ // collection set or not. Assume that the reference
+ // points into the heap.
bool in_cset_fast_test(oop obj) {
assert(_in_cset_fast_test != NULL, "sanity");
- if (_g1_committed.contains((HeapWord*) obj)) {
- // no need to subtract the bottom of the heap from obj,
- // _in_cset_fast_test is biased
- uintx index = cast_from_oop<uintx>(obj) >> HeapRegion::LogOfHRGrainBytes;
- bool ret = _in_cset_fast_test[index];
- // let's make sure the result is consistent with what the slower
- // test returns
- assert( ret || !obj_in_cs(obj), "sanity");
- assert(!ret || obj_in_cs(obj), "sanity");
- return ret;
- } else {
- return false;
- }
+ assert(_g1_committed.contains((HeapWord*) obj), err_msg("Given reference outside of heap, is "PTR_FORMAT, (HeapWord*)obj));
+ // no need to subtract the bottom of the heap from obj,
+ // _in_cset_fast_test is biased
+ uintx index = cast_from_oop<uintx>(obj) >> HeapRegion::LogOfHRGrainBytes;
+ bool ret = _in_cset_fast_test[index];
+ // let's make sure the result is consistent with what the slower
+ // test returns
+ assert( ret || !obj_in_cs(obj), "sanity");
+ assert(!ret || obj_in_cs(obj), "sanity");
+ return ret;
}
void clear_cset_fast_test() {
@@ -1677,6 +1679,10 @@
// after a full GC
void rebuild_strong_code_roots();
+ // Delete entries for dead interned string and clean up unreferenced symbols
+ // in symbol table, possibly in parallel.
+ void unlink_string_and_symbol_table(BoolObjectClosure* is_alive, bool unlink_strings = true, bool unlink_symbols = true);
+
// Verification
// The following is just to alert the verification code
@@ -1782,95 +1788,6 @@
ParGCAllocBuffer::retire(end_of_gc, retain);
_retired = true;
}
-
- bool is_retired() {
- return _retired;
- }
-};
-
-class G1ParGCAllocBufferContainer {
-protected:
- static int const _priority_max = 2;
- G1ParGCAllocBuffer* _priority_buffer[_priority_max];
-
-public:
- G1ParGCAllocBufferContainer(size_t gclab_word_size) {
- for (int pr = 0; pr < _priority_max; ++pr) {
- _priority_buffer[pr] = new G1ParGCAllocBuffer(gclab_word_size);
- }
- }
-
- ~G1ParGCAllocBufferContainer() {
- for (int pr = 0; pr < _priority_max; ++pr) {
- assert(_priority_buffer[pr]->is_retired(), "alloc buffers should all retire at this point.");
- delete _priority_buffer[pr];
- }
- }
-
- HeapWord* allocate(size_t word_sz) {
- HeapWord* obj;
- for (int pr = 0; pr < _priority_max; ++pr) {
- obj = _priority_buffer[pr]->allocate(word_sz);
- if (obj != NULL) return obj;
- }
- return obj;
- }
-
- bool contains(void* addr) {
- for (int pr = 0; pr < _priority_max; ++pr) {
- if (_priority_buffer[pr]->contains(addr)) return true;
- }
- return false;
- }
-
- void undo_allocation(HeapWord* obj, size_t word_sz) {
- bool finish_undo;
- for (int pr = 0; pr < _priority_max; ++pr) {
- if (_priority_buffer[pr]->contains(obj)) {
- _priority_buffer[pr]->undo_allocation(obj, word_sz);
- finish_undo = true;
- }
- }
- if (!finish_undo) ShouldNotReachHere();
- }
-
- size_t words_remaining() {
- size_t result = 0;
- for (int pr = 0; pr < _priority_max; ++pr) {
- result += _priority_buffer[pr]->words_remaining();
- }
- return result;
- }
-
- size_t words_remaining_in_retired_buffer() {
- G1ParGCAllocBuffer* retired = _priority_buffer[0];
- return retired->words_remaining();
- }
-
- void flush_stats_and_retire(PLABStats* stats, bool end_of_gc, bool retain) {
- for (int pr = 0; pr < _priority_max; ++pr) {
- _priority_buffer[pr]->flush_stats_and_retire(stats, end_of_gc, retain);
- }
- }
-
- void update(bool end_of_gc, bool retain, HeapWord* buf, size_t word_sz) {
- G1ParGCAllocBuffer* retired_and_set = _priority_buffer[0];
- retired_and_set->retire(end_of_gc, retain);
- retired_and_set->set_buf(buf);
- retired_and_set->set_word_size(word_sz);
- adjust_priority_order();
- }
-
-private:
- void adjust_priority_order() {
- G1ParGCAllocBuffer* retired_and_set = _priority_buffer[0];
-
- int last = _priority_max - 1;
- for (int pr = 0; pr < last; ++pr) {
- _priority_buffer[pr] = _priority_buffer[pr + 1];
- }
- _priority_buffer[last] = retired_and_set;
- }
};
class G1ParScanThreadState : public StackObj {
@@ -1881,11 +1798,13 @@
G1SATBCardTableModRefBS* _ct_bs;
G1RemSet* _g1_rem;
- G1ParGCAllocBufferContainer _surviving_alloc_buffer;
- G1ParGCAllocBufferContainer _tenured_alloc_buffer;
- G1ParGCAllocBufferContainer* _alloc_buffers[GCAllocPurposeCount];
+ G1ParGCAllocBuffer _surviving_alloc_buffer;
+ G1ParGCAllocBuffer _tenured_alloc_buffer;
+ G1ParGCAllocBuffer* _alloc_buffers[GCAllocPurposeCount];
ageTable _age_table;
+ G1ParScanClosure _scanner;
+
size_t _alloc_buffer_waste;
size_t _undo_waste;
@@ -1938,7 +1857,7 @@
}
public:
- G1ParScanThreadState(G1CollectedHeap* g1h, uint queue_num);
+ G1ParScanThreadState(G1CollectedHeap* g1h, uint queue_num, ReferenceProcessor* rp);
~G1ParScanThreadState() {
FREE_C_HEAP_ARRAY(size_t, _surviving_young_words_base, mtGC);
@@ -1947,7 +1866,7 @@
RefToScanQueue* refs() { return _refs; }
ageTable* age_table() { return &_age_table; }
- G1ParGCAllocBufferContainer* alloc_buffer(GCAllocPurpose purpose) {
+ G1ParGCAllocBuffer* alloc_buffer(GCAllocPurpose purpose) {
return _alloc_buffers[purpose];
}
@@ -1977,13 +1896,15 @@
HeapWord* obj = NULL;
size_t gclab_word_size = _g1h->desired_plab_sz(purpose);
if (word_sz * 100 < gclab_word_size * ParallelGCBufferWastePct) {
- G1ParGCAllocBufferContainer* alloc_buf = alloc_buffer(purpose);
+ G1ParGCAllocBuffer* alloc_buf = alloc_buffer(purpose);
+ add_to_alloc_buffer_waste(alloc_buf->words_remaining());
+ alloc_buf->retire(false /* end_of_gc */, false /* retain */);
HeapWord* buf = _g1h->par_allocate_during_gc(purpose, gclab_word_size);
if (buf == NULL) return NULL; // Let caller handle allocation failure.
-
- add_to_alloc_buffer_waste(alloc_buf->words_remaining_in_retired_buffer());
- alloc_buf->update(false /* end_of_gc */, false /* retain */, buf, gclab_word_size);
+ // Otherwise.
+ alloc_buf->set_word_size(gclab_word_size);
+ alloc_buf->set_buf(buf);
obj = alloc_buf->allocate(word_sz);
assert(obj != NULL, "buffer was definitely big enough...");
@@ -2073,6 +1994,8 @@
}
}
+ oop copy_to_survivor_space(oop const obj);
+
template <class T> void deal_with_reference(T* ref_to_scan) {
if (has_partial_array_mask(ref_to_scan)) {
_partial_scan_cl->do_oop_nv(ref_to_scan);
@@ -2095,6 +2018,7 @@
}
}
+public:
void trim_queue();
};
diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1MarkSweep.cpp b/hotspot/src/share/vm/gc_implementation/g1/g1MarkSweep.cpp
index 8765010..2add92e 100644
--- a/hotspot/src/share/vm/gc_implementation/g1/g1MarkSweep.cpp
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1MarkSweep.cpp
@@ -163,11 +163,8 @@
// Prune dead klasses from subklass/sibling/implementor lists.
Klass::clean_weak_klass_links(&GenMarkSweep::is_alive);
- // Delete entries for dead interned strings.
- StringTable::unlink(&GenMarkSweep::is_alive);
-
- // Clean up unreferenced symbols in symbol table.
- SymbolTable::unlink();
+ // Delete entries for dead interned string and clean up unreferenced symbols in symbol table.
+ G1CollectedHeap::heap()->unlink_string_and_symbol_table(&GenMarkSweep::is_alive);
if (VerifyDuringGC) {
HandleMark hm; // handle scope
diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1OopClosures.cpp b/hotspot/src/share/vm/gc_implementation/g1/g1OopClosures.cpp
new file mode 100644
index 0000000..a30b004
--- /dev/null
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1OopClosures.cpp
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+
+#include "precompiled.hpp"
+#include "gc_implementation/g1/g1CollectedHeap.inline.hpp"
+#include "gc_implementation/g1/g1OopClosures.inline.hpp"
+
+G1ParCopyHelper::G1ParCopyHelper(G1CollectedHeap* g1, G1ParScanThreadState* par_scan_state) :
+ G1ParClosureSuper(g1, par_scan_state), _scanned_klass(NULL),
+ _cm(_g1->concurrent_mark()) {}
diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1OopClosures.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1OopClosures.hpp
index b616cb9..5eb5691 100644
--- a/hotspot/src/share/vm/gc_implementation/g1/g1OopClosures.hpp
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1OopClosures.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -38,7 +38,7 @@
// A class that scans oops in a given heap region (much as OopsInGenClosure
// scans oops in a generation.)
-class OopsInHeapRegionClosure: public OopsInGenClosure {
+class OopsInHeapRegionClosure: public ExtendedOopClosure {
protected:
HeapRegion* _from;
public:
@@ -48,12 +48,8 @@
class G1ParClosureSuper : public OopsInHeapRegionClosure {
protected:
G1CollectedHeap* _g1;
- G1RemSet* _g1_rem;
- ConcurrentMark* _cm;
G1ParScanThreadState* _par_scan_state;
uint _worker_id;
- bool _during_initial_mark;
- bool _mark_in_progress;
public:
G1ParClosureSuper(G1CollectedHeap* g1, G1ParScanThreadState* par_scan_state);
bool apply_to_weak_ref_discovered_field() { return true; }
@@ -86,13 +82,26 @@
#define G1_PARTIAL_ARRAY_MASK 0x2
-template <class T> inline bool has_partial_array_mask(T* ref) {
+inline bool has_partial_array_mask(oop* ref) {
return ((uintptr_t)ref & G1_PARTIAL_ARRAY_MASK) == G1_PARTIAL_ARRAY_MASK;
}
-template <class T> inline T* set_partial_array_mask(T obj) {
+// We never encode partial array oops as narrowOop*, so return false immediately.
+// This allows the compiler to create optimized code when popping references from
+// the work queue.
+inline bool has_partial_array_mask(narrowOop* ref) {
+ assert(((uintptr_t)ref & G1_PARTIAL_ARRAY_MASK) != G1_PARTIAL_ARRAY_MASK, "Partial array oop reference encoded as narrowOop*");
+ return false;
+}
+
+// Only implement set_partial_array_mask() for regular oops, not for narrowOops.
+// We always encode partial arrays as regular oop, to allow the
+// specialization for has_partial_array_mask() for narrowOops above.
+// This means that unintentional use of this method with narrowOops are caught
+// by the compiler.
+inline oop* set_partial_array_mask(oop obj) {
assert(((uintptr_t)(void *)obj & G1_PARTIAL_ARRAY_MASK) == 0, "Information loss!");
- return (T*) ((uintptr_t)(void *)obj | G1_PARTIAL_ARRAY_MASK);
+ return (oop*) ((uintptr_t)(void *)obj | G1_PARTIAL_ARRAY_MASK);
}
template <class T> inline oop clear_partial_array_mask(T* ref) {
@@ -120,23 +129,10 @@
// Add back base class for metadata
class G1ParCopyHelper : public G1ParClosureSuper {
- Klass* _scanned_klass;
-
- public:
- G1ParCopyHelper(G1CollectedHeap* g1, G1ParScanThreadState* par_scan_state) :
- _scanned_klass(NULL),
- G1ParClosureSuper(g1, par_scan_state) {}
-
- void set_scanned_klass(Klass* k) { _scanned_klass = k; }
- template <class T> void do_klass_barrier(T* p, oop new_obj);
-};
-
-template <bool do_gen_barrier, G1Barrier barrier, bool do_mark_object>
-class G1ParCopyClosure : public G1ParCopyHelper {
- G1ParScanClosure _scanner;
- template <class T> void do_oop_work(T* p);
-
protected:
+ Klass* _scanned_klass;
+ ConcurrentMark* _cm;
+
// Mark the object if it's not already marked. This is used to mark
// objects pointed to by roots that are guaranteed not to move
// during the GC (i.e., non-CSet objects). It is MT-safe.
@@ -146,42 +142,40 @@
// objects pointed to by roots that have been forwarded during a
// GC. It is MT-safe.
void mark_forwarded_object(oop from_obj, oop to_obj);
+ public:
+ G1ParCopyHelper(G1CollectedHeap* g1, G1ParScanThreadState* par_scan_state);
- oop copy_to_survivor_space(oop obj);
+ void set_scanned_klass(Klass* k) { _scanned_klass = k; }
+ template <class T> void do_klass_barrier(T* p, oop new_obj);
+};
+
+template <G1Barrier barrier, bool do_mark_object>
+class G1ParCopyClosure : public G1ParCopyHelper {
+private:
+ template <class T> void do_oop_work(T* p);
public:
G1ParCopyClosure(G1CollectedHeap* g1, G1ParScanThreadState* par_scan_state,
ReferenceProcessor* rp) :
- _scanner(g1, par_scan_state, rp),
G1ParCopyHelper(g1, par_scan_state) {
assert(_ref_processor == NULL, "sanity");
}
- G1ParScanClosure* scanner() { return &_scanner; }
-
- template <class T> void do_oop_nv(T* p) {
- do_oop_work(p);
- }
+ template <class T> void do_oop_nv(T* p) { do_oop_work(p); }
virtual void do_oop(oop* p) { do_oop_nv(p); }
virtual void do_oop(narrowOop* p) { do_oop_nv(p); }
};
-typedef G1ParCopyClosure<false, G1BarrierNone, false> G1ParScanExtRootClosure;
-typedef G1ParCopyClosure<false, G1BarrierKlass, false> G1ParScanMetadataClosure;
+typedef G1ParCopyClosure<G1BarrierNone, false> G1ParScanExtRootClosure;
+typedef G1ParCopyClosure<G1BarrierKlass, false> G1ParScanMetadataClosure;
-typedef G1ParCopyClosure<false, G1BarrierNone, true> G1ParScanAndMarkExtRootClosure;
-typedef G1ParCopyClosure<true, G1BarrierNone, true> G1ParScanAndMarkClosure;
-typedef G1ParCopyClosure<false, G1BarrierKlass, true> G1ParScanAndMarkMetadataClosure;
-
-// The following closure types are no longer used but are retained
-// for historical reasons:
-// typedef G1ParCopyClosure<false, G1BarrierRS, false> G1ParScanHeapRSClosure;
-// typedef G1ParCopyClosure<false, G1BarrierRS, true> G1ParScanAndMarkHeapRSClosure;
+typedef G1ParCopyClosure<G1BarrierNone, true> G1ParScanAndMarkExtRootClosure;
+typedef G1ParCopyClosure<G1BarrierKlass, true> G1ParScanAndMarkMetadataClosure;
// The following closure type is defined in g1_specialized_oop_closures.hpp:
//
-// typedef G1ParCopyClosure<false, G1BarrierEvac, false> G1ParScanHeapEvacClosure;
+// typedef G1ParCopyClosure<G1BarrierEvac, false> G1ParScanHeapEvacClosure;
// We use a separate closure to handle references during evacuation
// failure processing.
@@ -189,7 +183,7 @@
// (since that closure no longer assumes that the references it
// handles point into the collection set).
-typedef G1ParCopyClosure<false, G1BarrierEvac, false> G1ParScanHeapEvacFailureClosure;
+typedef G1ParCopyClosure<G1BarrierEvac, false> G1ParScanHeapEvacFailureClosure;
class FilterIntoCSClosure: public ExtendedOopClosure {
G1CollectedHeap* _g1;
diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1OopClosures.inline.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1OopClosures.inline.hpp
index e26d2a6..9374d23 100644
--- a/hotspot/src/share/vm/gc_implementation/g1/g1OopClosures.inline.hpp
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1OopClosures.inline.hpp
@@ -82,7 +82,7 @@
_par_scan_state->push_on_queue(p);
} else {
- _par_scan_state->update_rs(_from, p, _par_scan_state->queue_num());
+ _par_scan_state->update_rs(_from, p, _worker_id);
}
}
}
diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1_globals.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1_globals.hpp
index c7d8049..f82fda9 100644
--- a/hotspot/src/share/vm/gc_implementation/g1/g1_globals.hpp
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1_globals.hpp
@@ -71,6 +71,9 @@
diagnostic(bool, G1TraceConcRefinement, false, \
"Trace G1 concurrent refinement") \
\
+ experimental(bool, G1TraceStringSymbolTableScrubbing, false, \
+ "Trace information string and symbol table scrubbing.") \
+ \
product(double, G1ConcMarkStepDurationMillis, 10.0, \
"Target duration of individual concurrent marking steps " \
"in milliseconds.") \
diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1_specialized_oop_closures.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1_specialized_oop_closures.hpp
index e16561c..e10a658 100644
--- a/hotspot/src/share/vm/gc_implementation/g1/g1_specialized_oop_closures.hpp
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1_specialized_oop_closures.hpp
@@ -33,18 +33,17 @@
// Forward declarations.
enum G1Barrier {
G1BarrierNone,
- G1BarrierRS,
G1BarrierEvac,
G1BarrierKlass
};
-template<bool do_gen_barrier, G1Barrier barrier, bool do_mark_object>
+template<G1Barrier barrier, bool do_mark_object>
class G1ParCopyClosure;
class G1ParScanClosure;
class G1ParPushHeapRSClosure;
-typedef G1ParCopyClosure<false, G1BarrierEvac, false> G1ParScanHeapEvacClosure;
+typedef G1ParCopyClosure<G1BarrierEvac, false> G1ParScanHeapEvacClosure;
class FilterIntoCSClosure;
class FilterOutOfRegionClosure;
diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psAdaptiveSizePolicy.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psAdaptiveSizePolicy.cpp
index a2f2fa7..0fb8766 100644
--- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psAdaptiveSizePolicy.cpp
+++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psAdaptiveSizePolicy.cpp
@@ -23,6 +23,7 @@
*/
#include "precompiled.hpp"
+#include "gc_implementation/parallelScavenge/parallelScavengeHeap.hpp"
#include "gc_implementation/parallelScavenge/psAdaptiveSizePolicy.hpp"
#include "gc_implementation/parallelScavenge/psGCAdaptivePolicyCounters.hpp"
#include "gc_implementation/parallelScavenge/psScavenge.hpp"
@@ -76,6 +77,38 @@
_old_gen_policy_is_ready = false;
}
+size_t PSAdaptiveSizePolicy::calculate_free_based_on_live(size_t live, uintx ratio_as_percentage) {
+ // We want to calculate how much free memory there can be based on the
+ // amount of live data currently in the old gen. Using the formula:
+ // ratio * (free + live) = free
+ // Some equation solving later we get:
+ // free = (live * ratio) / (1 - ratio)
+
+ const double ratio = ratio_as_percentage / 100.0;
+ const double ratio_inverse = 1.0 - ratio;
+ const double tmp = live * ratio;
+ size_t free = (size_t)(tmp / ratio_inverse);
+
+ return free;
+}
+
+size_t PSAdaptiveSizePolicy::calculated_old_free_size_in_bytes() const {
+ size_t free_size = (size_t)(_promo_size + avg_promoted()->padded_average());
+ size_t live = ParallelScavengeHeap::heap()->old_gen()->used_in_bytes();
+
+ if (MinHeapFreeRatio != 0) {
+ size_t min_free = calculate_free_based_on_live(live, MinHeapFreeRatio);
+ free_size = MAX2(free_size, min_free);
+ }
+
+ if (MaxHeapFreeRatio != 100) {
+ size_t max_free = calculate_free_based_on_live(live, MaxHeapFreeRatio);
+ free_size = MIN2(max_free, free_size);
+ }
+
+ return free_size;
+}
+
void PSAdaptiveSizePolicy::major_collection_begin() {
// Update the interval time
_major_timer.stop();
@@ -1292,3 +1325,18 @@
st,
PSScavenge::tenuring_threshold());
}
+
+#ifndef PRODUCT
+
+void TestOldFreeSpaceCalculation_test() {
+ assert(PSAdaptiveSizePolicy::calculate_free_based_on_live(100, 20) == 25, "Calculation of free memory failed");
+ assert(PSAdaptiveSizePolicy::calculate_free_based_on_live(100, 50) == 100, "Calculation of free memory failed");
+ assert(PSAdaptiveSizePolicy::calculate_free_based_on_live(100, 60) == 150, "Calculation of free memory failed");
+ assert(PSAdaptiveSizePolicy::calculate_free_based_on_live(100, 75) == 300, "Calculation of free memory failed");
+ assert(PSAdaptiveSizePolicy::calculate_free_based_on_live(400, 20) == 100, "Calculation of free memory failed");
+ assert(PSAdaptiveSizePolicy::calculate_free_based_on_live(400, 50) == 400, "Calculation of free memory failed");
+ assert(PSAdaptiveSizePolicy::calculate_free_based_on_live(400, 60) == 600, "Calculation of free memory failed");
+ assert(PSAdaptiveSizePolicy::calculate_free_based_on_live(400, 75) == 1200, "Calculation of free memory failed");
+}
+
+#endif /* !PRODUCT */
diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psAdaptiveSizePolicy.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psAdaptiveSizePolicy.hpp
index 3389911..5cea21a 100644
--- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psAdaptiveSizePolicy.hpp
+++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psAdaptiveSizePolicy.hpp
@@ -240,7 +240,6 @@
void major_collection_begin();
void major_collection_end(size_t amount_live, GCCause::Cause gc_cause);
- //
void tenured_allocation(size_t size) {
_avg_pretenured->sample(size);
}
@@ -248,9 +247,9 @@
// Accessors
// NEEDS_CLEANUP should use sizes.hpp
- size_t calculated_old_free_size_in_bytes() const {
- return (size_t)(_promo_size + avg_promoted()->padded_average());
- }
+ static size_t calculate_free_based_on_live(size_t live, uintx ratio_as_percentage);
+
+ size_t calculated_old_free_size_in_bytes() const;
size_t average_old_live_in_bytes() const {
return (size_t) avg_old_live()->average();
diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp
index 66b23c4..1bc0cd5 100644
--- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp
+++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -466,10 +466,12 @@
}
}
- GCTraceTime tm("StringTable", false, false, &_gc_timer);
- // Unlink any dead interned Strings and process the remaining live ones.
- PSScavengeRootsClosure root_closure(promotion_manager);
- StringTable::unlink_or_oops_do(&_is_alive_closure, &root_closure);
+ {
+ GCTraceTime tm("StringTable", false, false, &_gc_timer);
+ // Unlink any dead interned Strings and process the remaining live ones.
+ PSScavengeRootsClosure root_closure(promotion_manager);
+ StringTable::unlink_or_oops_do(&_is_alive_closure, &root_closure);
+ }
// Finally, flush the promotion_manager's labs, and deallocate its stacks.
promotion_failure_occurred = PSPromotionManager::post_scavenge(_gc_tracer);
@@ -527,8 +529,19 @@
counters->update_survivor_overflowed(_survivor_overflow);
}
+ size_t max_young_size = young_gen->max_size();
+
+ // Deciding a free ratio in the young generation is tricky, so if
+ // MinHeapFreeRatio or MaxHeapFreeRatio are in use (implicating
+ // that the old generation size may have been limited because of them) we
+ // should then limit our young generation size using NewRatio to have it
+ // follow the old generation size.
+ if (MinHeapFreeRatio != 0 || MaxHeapFreeRatio != 100) {
+ max_young_size = MIN2(old_gen->capacity_in_bytes() / NewRatio, young_gen->max_size());
+ }
+
size_t survivor_limit =
- size_policy->max_survivor_size(young_gen->max_size());
+ size_policy->max_survivor_size(max_young_size);
_tenuring_threshold =
size_policy->compute_survivor_space_size_and_threshold(
_survivor_overflow,
@@ -551,8 +564,7 @@
// Do call at minor collections?
// Don't check if the size_policy is ready at this
// level. Let the size_policy check that internally.
- if (UseAdaptiveSizePolicy &&
- UseAdaptiveGenerationSizePolicyAtMinorCollection &&
+ if (UseAdaptiveGenerationSizePolicyAtMinorCollection &&
((gc_cause != GCCause::_java_lang_system_gc) ||
UseAdaptiveSizePolicyWithSystemGC)) {
@@ -566,7 +578,7 @@
size_t eden_live = young_gen->eden_space()->used_in_bytes();
size_t cur_eden = young_gen->eden_space()->capacity_in_bytes();
size_t max_old_gen_size = old_gen->max_gen_size();
- size_t max_eden_size = young_gen->max_size() -
+ size_t max_eden_size = max_young_size -
young_gen->from_space()->capacity_in_bytes() -
young_gen->to_space()->capacity_in_bytes();
diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psYoungGen.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psYoungGen.hpp
index 6bc8ef7..e3da6bd 100644
--- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psYoungGen.hpp
+++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psYoungGen.hpp
@@ -127,7 +127,7 @@
void adjust_pointers();
void compact();
- // Called during/after gc
+ // Called during/after GC
void swap_spaces();
// Resize generation using suggested free space size and survivor size
@@ -146,14 +146,14 @@
size_t free_in_words() const;
// The max this generation can grow to
- size_t max_size() const { return _reserved.byte_size(); }
+ size_t max_size() const { return _reserved.byte_size(); }
// The max this generation can grow to if the boundary between
// the generations are allowed to move.
size_t gen_size_limit() const { return _max_gen_size; }
bool is_maximal_no_gc() const {
- return true; // never expands except at a GC
+ return true; // Never expands except at a GC
}
// Allocation
diff --git a/hotspot/src/share/vm/gc_implementation/shared/parGCAllocBuffer.hpp b/hotspot/src/share/vm/gc_implementation/shared/parGCAllocBuffer.hpp
index 80a4a22..1f76ad3 100644
--- a/hotspot/src/share/vm/gc_implementation/shared/parGCAllocBuffer.hpp
+++ b/hotspot/src/share/vm/gc_implementation/shared/parGCAllocBuffer.hpp
@@ -158,7 +158,7 @@
// Fills in the unallocated portion of the buffer with a garbage object.
// If "end_of_gc" is TRUE, is after the last use in the GC. IF "retain"
// is true, attempt to re-use the unused portion in the next GC.
- virtual void retire(bool end_of_gc, bool retain);
+ void retire(bool end_of_gc, bool retain);
void print() PRODUCT_RETURN;
};
diff --git a/hotspot/src/share/vm/interpreter/linkResolver.cpp b/hotspot/src/share/vm/interpreter/linkResolver.cpp
index b63e03b..aa11784 100644
--- a/hotspot/src/share/vm/interpreter/linkResolver.cpp
+++ b/hotspot/src/share/vm/interpreter/linkResolver.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -564,16 +564,7 @@
}
}
- // 5. check if method is concrete
- if (resolved_method->is_abstract() && !resolved_klass->is_abstract()) {
- ResourceMark rm(THREAD);
- THROW_MSG(vmSymbols::java_lang_AbstractMethodError(),
- Method::name_and_sig_as_C_string(resolved_klass(),
- method_name,
- method_signature));
- }
-
- // 6. access checks, access checking may be turned off when calling from within the VM.
+ // 5. access checks, access checking may be turned off when calling from within the VM.
if (check_access) {
assert(current_klass.not_null() , "current_klass should not be null");
@@ -649,16 +640,6 @@
}
}
- if (nostatics && resolved_method->is_static()) {
- ResourceMark rm(THREAD);
- char buf[200];
- jio_snprintf(buf, sizeof(buf), "Expected instance not static method %s", Method::name_and_sig_as_C_string(resolved_klass(),
- resolved_method->name(),
- resolved_method->signature()));
- THROW_MSG(vmSymbols::java_lang_IncompatibleClassChangeError(), buf);
- }
-
-
if (check_access) {
// JDK8 adds non-public interface methods, and accessability check requirement
assert(current_klass.not_null() , "current_klass should not be null");
@@ -702,6 +683,15 @@
}
}
+ if (nostatics && resolved_method->is_static()) {
+ ResourceMark rm(THREAD);
+ char buf[200];
+ jio_snprintf(buf, sizeof(buf), "Expected instance not static method %s",
+ Method::name_and_sig_as_C_string(resolved_klass(),
+ resolved_method->name(), resolved_method->signature()));
+ THROW_MSG(vmSymbols::java_lang_IncompatibleClassChangeError(), buf);
+ }
+
if (TraceItables && Verbose) {
ResourceMark rm(THREAD);
tty->print("invokeinterface resolved method: caller-class:%s, compile-time-class:%s, method:%s, method_holder:%s, access_flags: ",
diff --git a/hotspot/src/share/vm/interpreter/rewriter.cpp b/hotspot/src/share/vm/interpreter/rewriter.cpp
index 208f861..2474ae7 100644
--- a/hotspot/src/share/vm/interpreter/rewriter.cpp
+++ b/hotspot/src/share/vm/interpreter/rewriter.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -250,8 +250,8 @@
// We will reverse the bytecode rewriting _after_ adjusting them.
// Adjust the cache index by offset to the invokedynamic entries in the
// cpCache plus the delta if the invokedynamic bytecodes were adjusted.
- cache_index = cp_cache_delta() + _first_iteration_cp_cache_limit;
- int cp_index = invokedynamic_cp_cache_entry_pool_index(cache_index);
+ int adjustment = cp_cache_delta() + _first_iteration_cp_cache_limit;
+ int cp_index = invokedynamic_cp_cache_entry_pool_index(cache_index - adjustment);
assert(_pool->tag_at(cp_index).is_invoke_dynamic(), "wrong index");
// zero out 4 bytes
Bytes::put_Java_u4(p, 0);
@@ -453,18 +453,7 @@
return method;
}
-void Rewriter::rewrite(instanceKlassHandle klass, TRAPS) {
- ResourceMark rm(THREAD);
- Rewriter rw(klass, klass->constants(), klass->methods(), CHECK);
- // (That's all, folks.)
-}
-
-
-Rewriter::Rewriter(instanceKlassHandle klass, constantPoolHandle cpool, Array<Method*>* methods, TRAPS)
- : _klass(klass),
- _pool(cpool),
- _methods(methods)
-{
+void Rewriter::rewrite_bytecodes(TRAPS) {
assert(_pool->cache() == NULL, "constant pool cache must not be set yet");
// determine index maps for Method* rewriting
@@ -508,6 +497,29 @@
// May have to fix invokedynamic bytecodes if invokestatic/InterfaceMethodref
// entries had to be added.
patch_invokedynamic_bytecodes();
+}
+
+void Rewriter::rewrite(instanceKlassHandle klass, TRAPS) {
+ ResourceMark rm(THREAD);
+ Rewriter rw(klass, klass->constants(), klass->methods(), CHECK);
+ // (That's all, folks.)
+}
+
+
+Rewriter::Rewriter(instanceKlassHandle klass, constantPoolHandle cpool, Array<Method*>* methods, TRAPS)
+ : _klass(klass),
+ _pool(cpool),
+ _methods(methods)
+{
+
+ // Rewrite bytecodes - exception here exits.
+ rewrite_bytecodes(CHECK);
+
+ // Stress restoring bytecodes
+ if (StressRewriter) {
+ restore_bytecodes();
+ rewrite_bytecodes(CHECK);
+ }
// allocate constant pool cache, now that we've seen all the bytecodes
make_constant_pool_cache(THREAD);
@@ -523,6 +535,7 @@
// so methods with jsrs in custom class lists in aren't attempted to be
// rewritten in the RO section of the shared archive.
// Relocated bytecodes don't have to be restored, only the cp cache entries
+ int len = _methods->length();
for (int i = len-1; i >= 0; i--) {
methodHandle m(THREAD, _methods->at(i));
diff --git a/hotspot/src/share/vm/interpreter/rewriter.hpp b/hotspot/src/share/vm/interpreter/rewriter.hpp
index 2c7990f..aa4b7cd 100644
--- a/hotspot/src/share/vm/interpreter/rewriter.hpp
+++ b/hotspot/src/share/vm/interpreter/rewriter.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -199,6 +199,9 @@
void patch_invokedynamic_bytecodes();
+ // Do all the work.
+ void rewrite_bytecodes(TRAPS);
+
// Revert bytecodes in case of an exception.
void restore_bytecodes();
diff --git a/hotspot/src/share/vm/memory/allocation.cpp b/hotspot/src/share/vm/memory/allocation.cpp
index 36c0d06..9841022 100644
--- a/hotspot/src/share/vm/memory/allocation.cpp
+++ b/hotspot/src/share/vm/memory/allocation.cpp
@@ -71,9 +71,8 @@
return MetaspaceShared::is_in_shared_space(this);
}
-
bool MetaspaceObj::is_metaspace_object() const {
- return Metaspace::contains((void*)this);
+ return ClassLoaderDataGraph::contains((void*)this);
}
void MetaspaceObj::print_address_on(outputStream* st) const {
@@ -140,7 +139,7 @@
void ResourceObj::set_allocation_type(address res, allocation_type type) {
// Set allocation type in the resource object
uintptr_t allocation = (uintptr_t)res;
- assert((allocation & allocation_mask) == 0, "address should be aligned to 4 bytes at least");
+ assert((allocation & allocation_mask) == 0, err_msg("address should be aligned to 4 bytes at least: " PTR_FORMAT, res));
assert(type <= allocation_mask, "incorrect allocation type");
ResourceObj* resobj = (ResourceObj *)res;
resobj->_allocation_t[0] = ~(allocation + type);
diff --git a/hotspot/src/share/vm/memory/allocation.hpp b/hotspot/src/share/vm/memory/allocation.hpp
index 7397533..590b74f 100644
--- a/hotspot/src/share/vm/memory/allocation.hpp
+++ b/hotspot/src/share/vm/memory/allocation.hpp
@@ -264,7 +264,7 @@
class MetaspaceObj {
public:
- bool is_metaspace_object() const; // more specific test but slower
+ bool is_metaspace_object() const;
bool is_shared() const;
void print_address_on(outputStream* st) const; // nonvirtual address printing
diff --git a/hotspot/src/share/vm/memory/binaryTreeDictionary.cpp b/hotspot/src/share/vm/memory/binaryTreeDictionary.cpp
index 30b0382..0ad161a 100644
--- a/hotspot/src/share/vm/memory/binaryTreeDictionary.cpp
+++ b/hotspot/src/share/vm/memory/binaryTreeDictionary.cpp
@@ -44,16 +44,16 @@
// This is currently used in the Concurrent Mark&Sweep implementation.
////////////////////////////////////////////////////////////////////////////////
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
size_t TreeChunk<Chunk_t, FreeList_t>::_min_tree_chunk_size = sizeof(TreeChunk<Chunk_t, FreeList_t>)/HeapWordSize;
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
TreeChunk<Chunk_t, FreeList_t>* TreeChunk<Chunk_t, FreeList_t>::as_TreeChunk(Chunk_t* fc) {
// Do some assertion checking here.
return (TreeChunk<Chunk_t, FreeList_t>*) fc;
}
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
void TreeChunk<Chunk_t, FreeList_t>::verify_tree_chunk_list() const {
TreeChunk<Chunk_t, FreeList_t>* nextTC = (TreeChunk<Chunk_t, FreeList_t>*)next();
if (prev() != NULL) { // interior list node shouldn'r have tree fields
@@ -67,11 +67,11 @@
}
}
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
TreeList<Chunk_t, FreeList_t>::TreeList() : _parent(NULL),
_left(NULL), _right(NULL) {}
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
TreeList<Chunk_t, FreeList_t>*
TreeList<Chunk_t, FreeList_t>::as_TreeList(TreeChunk<Chunk_t,FreeList_t>* tc) {
// This first free chunk in the list will be the tree list.
@@ -88,20 +88,7 @@
return tl;
}
-
-template <class Chunk_t, template <class> class FreeList_t>
-TreeList<Chunk_t, FreeList_t>*
-get_chunk(size_t size, enum FreeBlockDictionary<Chunk_t>::Dither dither) {
- FreeBlockDictionary<Chunk_t>::verify_par_locked();
- Chunk_t* res = get_chunk_from_tree(size, dither);
- assert(res == NULL || res->is_free(),
- "Should be returning a free chunk");
- assert(dither != FreeBlockDictionary<Chunk_t>::exactly ||
- res->size() == size, "Not correct size");
- return res;
-}
-
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
TreeList<Chunk_t, FreeList_t>*
TreeList<Chunk_t, FreeList_t>::as_TreeList(HeapWord* addr, size_t size) {
TreeChunk<Chunk_t, FreeList_t>* tc = (TreeChunk<Chunk_t, FreeList_t>*) addr;
@@ -125,17 +112,17 @@
// an over populated size. The general get_better_list() just returns
// the current list.
template <>
-TreeList<FreeChunk, AdaptiveFreeList>*
-TreeList<FreeChunk, AdaptiveFreeList>::get_better_list(
- BinaryTreeDictionary<FreeChunk, ::AdaptiveFreeList>* dictionary) {
+TreeList<FreeChunk, AdaptiveFreeList<FreeChunk> >*
+TreeList<FreeChunk, AdaptiveFreeList<FreeChunk> >::get_better_list(
+ BinaryTreeDictionary<FreeChunk, ::AdaptiveFreeList<FreeChunk> >* dictionary) {
// A candidate chunk has been found. If it is already under
// populated, get a chunk associated with the hint for this
// chunk.
- TreeList<FreeChunk, ::AdaptiveFreeList>* curTL = this;
+ TreeList<FreeChunk, ::AdaptiveFreeList<FreeChunk> >* curTL = this;
if (surplus() <= 0) {
/* Use the hint to find a size with a surplus, and reset the hint. */
- TreeList<FreeChunk, ::AdaptiveFreeList>* hintTL = this;
+ TreeList<FreeChunk, ::AdaptiveFreeList<FreeChunk> >* hintTL = this;
while (hintTL->hint() != 0) {
assert(hintTL->hint() > hintTL->size(),
"hint points in the wrong direction");
@@ -163,14 +150,14 @@
}
#endif // INCLUDE_ALL_GCS
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
TreeList<Chunk_t, FreeList_t>*
TreeList<Chunk_t, FreeList_t>::get_better_list(
BinaryTreeDictionary<Chunk_t, FreeList_t>* dictionary) {
return this;
}
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
TreeList<Chunk_t, FreeList_t>* TreeList<Chunk_t, FreeList_t>::remove_chunk_replace_if_needed(TreeChunk<Chunk_t, FreeList_t>* tc) {
TreeList<Chunk_t, FreeList_t>* retTL = this;
@@ -286,7 +273,7 @@
return retTL;
}
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
void TreeList<Chunk_t, FreeList_t>::return_chunk_at_tail(TreeChunk<Chunk_t, FreeList_t>* chunk) {
assert(chunk != NULL, "returning NULL chunk");
assert(chunk->list() == this, "list should be set for chunk");
@@ -301,7 +288,7 @@
this->link_tail(chunk);
assert(!tail() || size() == tail()->size(), "Wrong sized chunk in list");
- FreeList_t<Chunk_t>::increment_count();
+ FreeList_t::increment_count();
debug_only(this->increment_returned_bytes_by(chunk->size()*sizeof(HeapWord));)
assert(head() == NULL || head()->prev() == NULL, "list invariant");
assert(tail() == NULL || tail()->next() == NULL, "list invariant");
@@ -311,7 +298,7 @@
// is defined to be after the chunk pointer to by head(). This is
// because the TreeList<Chunk_t, FreeList_t> is embedded in the first TreeChunk<Chunk_t, FreeList_t> in the
// list. See the definition of TreeChunk<Chunk_t, FreeList_t>.
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
void TreeList<Chunk_t, FreeList_t>::return_chunk_at_head(TreeChunk<Chunk_t, FreeList_t>* chunk) {
assert(chunk->list() == this, "list should be set for chunk");
assert(head() != NULL, "The tree list is embedded in the first chunk");
@@ -329,13 +316,13 @@
}
head()->link_after(chunk);
assert(!head() || size() == head()->size(), "Wrong sized chunk in list");
- FreeList_t<Chunk_t>::increment_count();
+ FreeList_t::increment_count();
debug_only(this->increment_returned_bytes_by(chunk->size()*sizeof(HeapWord));)
assert(head() == NULL || head()->prev() == NULL, "list invariant");
assert(tail() == NULL || tail()->next() == NULL, "list invariant");
}
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
void TreeChunk<Chunk_t, FreeList_t>::assert_is_mangled() const {
assert((ZapUnusedHeapArea &&
SpaceMangler::is_mangled((HeapWord*) Chunk_t::size_addr()) &&
@@ -345,14 +332,14 @@
"Space should be clear or mangled");
}
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
TreeChunk<Chunk_t, FreeList_t>* TreeList<Chunk_t, FreeList_t>::head_as_TreeChunk() {
assert(head() == NULL || (TreeChunk<Chunk_t, FreeList_t>::as_TreeChunk(head())->list() == this),
"Wrong type of chunk?");
return TreeChunk<Chunk_t, FreeList_t>::as_TreeChunk(head());
}
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
TreeChunk<Chunk_t, FreeList_t>* TreeList<Chunk_t, FreeList_t>::first_available() {
assert(head() != NULL, "The head of the list cannot be NULL");
Chunk_t* fc = head()->next();
@@ -369,7 +356,7 @@
// Returns the block with the largest heap address amongst
// those in the list for this size; potentially slow and expensive,
// use with caution!
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
TreeChunk<Chunk_t, FreeList_t>* TreeList<Chunk_t, FreeList_t>::largest_address() {
assert(head() != NULL, "The head of the list cannot be NULL");
Chunk_t* fc = head()->next();
@@ -392,7 +379,7 @@
return retTC;
}
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
BinaryTreeDictionary<Chunk_t, FreeList_t>::BinaryTreeDictionary(MemRegion mr) {
assert((mr.byte_size() > min_size()), "minimum chunk size");
@@ -405,17 +392,17 @@
assert(total_free_blocks() == 1, "reset check failed");
}
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
void BinaryTreeDictionary<Chunk_t, FreeList_t>::inc_total_size(size_t inc) {
_total_size = _total_size + inc;
}
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
void BinaryTreeDictionary<Chunk_t, FreeList_t>::dec_total_size(size_t dec) {
_total_size = _total_size - dec;
}
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
void BinaryTreeDictionary<Chunk_t, FreeList_t>::reset(MemRegion mr) {
assert((mr.byte_size() > min_size()), "minimum chunk size");
set_root(TreeList<Chunk_t, FreeList_t>::as_TreeList(mr.start(), mr.word_size()));
@@ -423,13 +410,13 @@
set_total_free_blocks(1);
}
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
void BinaryTreeDictionary<Chunk_t, FreeList_t>::reset(HeapWord* addr, size_t byte_size) {
MemRegion mr(addr, heap_word_size(byte_size));
reset(mr);
}
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
void BinaryTreeDictionary<Chunk_t, FreeList_t>::reset() {
set_root(NULL);
set_total_size(0);
@@ -437,7 +424,7 @@
}
// Get a free block of size at least size from tree, or NULL.
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
TreeChunk<Chunk_t, FreeList_t>*
BinaryTreeDictionary<Chunk_t, FreeList_t>::get_chunk_from_tree(
size_t size,
@@ -496,7 +483,7 @@
return retTC;
}
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
TreeList<Chunk_t, FreeList_t>* BinaryTreeDictionary<Chunk_t, FreeList_t>::find_list(size_t size) const {
TreeList<Chunk_t, FreeList_t>* curTL;
for (curTL = root(); curTL != NULL;) {
@@ -515,7 +502,7 @@
}
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
bool BinaryTreeDictionary<Chunk_t, FreeList_t>::verify_chunk_in_free_list(Chunk_t* tc) const {
size_t size = tc->size();
TreeList<Chunk_t, FreeList_t>* tl = find_list(size);
@@ -526,7 +513,7 @@
}
}
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
Chunk_t* BinaryTreeDictionary<Chunk_t, FreeList_t>::find_largest_dict() const {
TreeList<Chunk_t, FreeList_t> *curTL = root();
if (curTL != NULL) {
@@ -541,7 +528,7 @@
// chunk in a list on a tree node, just unlink it.
// If it is the last chunk in the list (the next link is NULL),
// remove the node and repair the tree.
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
TreeChunk<Chunk_t, FreeList_t>*
BinaryTreeDictionary<Chunk_t, FreeList_t>::remove_chunk_from_tree(TreeChunk<Chunk_t, FreeList_t>* tc) {
assert(tc != NULL, "Should not call with a NULL chunk");
@@ -682,7 +669,7 @@
// Remove the leftmost node (lm) in the tree and return it.
// If lm has a right child, link it to the left node of
// the parent of lm.
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
TreeList<Chunk_t, FreeList_t>* BinaryTreeDictionary<Chunk_t, FreeList_t>::remove_tree_minimum(TreeList<Chunk_t, FreeList_t>* tl) {
assert(tl != NULL && tl->parent() != NULL, "really need a proper sub-tree");
// locate the subtree minimum by walking down left branches
@@ -717,7 +704,7 @@
return curTL;
}
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
void BinaryTreeDictionary<Chunk_t, FreeList_t>::insert_chunk_in_tree(Chunk_t* fc) {
TreeList<Chunk_t, FreeList_t> *curTL, *prevTL;
size_t size = fc->size();
@@ -783,7 +770,7 @@
}
}
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
size_t BinaryTreeDictionary<Chunk_t, FreeList_t>::max_chunk_size() const {
FreeBlockDictionary<Chunk_t>::verify_par_locked();
TreeList<Chunk_t, FreeList_t>* tc = root();
@@ -792,7 +779,7 @@
return tc->size();
}
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
size_t BinaryTreeDictionary<Chunk_t, FreeList_t>::total_list_length(TreeList<Chunk_t, FreeList_t>* tl) const {
size_t res;
res = tl->count();
@@ -805,7 +792,7 @@
return res;
}
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
size_t BinaryTreeDictionary<Chunk_t, FreeList_t>::total_size_in_tree(TreeList<Chunk_t, FreeList_t>* tl) const {
if (tl == NULL)
return 0;
@@ -814,7 +801,7 @@
total_size_in_tree(tl->right());
}
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
double BinaryTreeDictionary<Chunk_t, FreeList_t>::sum_of_squared_block_sizes(TreeList<Chunk_t, FreeList_t>* const tl) const {
if (tl == NULL) {
return 0.0;
@@ -826,7 +813,7 @@
return curr;
}
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
size_t BinaryTreeDictionary<Chunk_t, FreeList_t>::total_free_blocks_in_tree(TreeList<Chunk_t, FreeList_t>* tl) const {
if (tl == NULL)
return 0;
@@ -835,14 +822,14 @@
total_free_blocks_in_tree(tl->right());
}
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
size_t BinaryTreeDictionary<Chunk_t, FreeList_t>::num_free_blocks() const {
assert(total_free_blocks_in_tree(root()) == total_free_blocks(),
"_total_free_blocks inconsistency");
return total_free_blocks();
}
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
size_t BinaryTreeDictionary<Chunk_t, FreeList_t>::tree_height_helper(TreeList<Chunk_t, FreeList_t>* tl) const {
if (tl == NULL)
return 0;
@@ -850,12 +837,12 @@
tree_height_helper(tl->right()));
}
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
size_t BinaryTreeDictionary<Chunk_t, FreeList_t>::tree_height() const {
return tree_height_helper(root());
}
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
size_t BinaryTreeDictionary<Chunk_t, FreeList_t>::total_nodes_helper(TreeList<Chunk_t, FreeList_t>* tl) const {
if (tl == NULL) {
return 0;
@@ -864,18 +851,18 @@
total_nodes_helper(tl->right());
}
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
size_t BinaryTreeDictionary<Chunk_t, FreeList_t>::total_nodes_in_tree(TreeList<Chunk_t, FreeList_t>* tl) const {
return total_nodes_helper(root());
}
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
void BinaryTreeDictionary<Chunk_t, FreeList_t>::dict_census_update(size_t size, bool split, bool birth){}
#if INCLUDE_ALL_GCS
template <>
-void AFLBinaryTreeDictionary::dict_census_update(size_t size, bool split, bool birth){
- TreeList<FreeChunk, AdaptiveFreeList>* nd = find_list(size);
+void AFLBinaryTreeDictionary::dict_census_update(size_t size, bool split, bool birth) {
+ TreeList<FreeChunk, AdaptiveFreeList<FreeChunk> >* nd = find_list(size);
if (nd) {
if (split) {
if (birth) {
@@ -903,7 +890,7 @@
}
#endif // INCLUDE_ALL_GCS
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
bool BinaryTreeDictionary<Chunk_t, FreeList_t>::coal_dict_over_populated(size_t size) {
// For the general type of freelists, encourage coalescing by
// returning true.
@@ -915,7 +902,7 @@
bool AFLBinaryTreeDictionary::coal_dict_over_populated(size_t size) {
if (FLSAlwaysCoalesceLarge) return true;
- TreeList<FreeChunk, AdaptiveFreeList>* list_of_size = find_list(size);
+ TreeList<FreeChunk, AdaptiveFreeList<FreeChunk> >* list_of_size = find_list(size);
// None of requested size implies overpopulated.
return list_of_size == NULL || list_of_size->coal_desired() <= 0 ||
list_of_size->count() > list_of_size->coal_desired();
@@ -928,15 +915,15 @@
// do_tree() walks the nodes in the binary tree applying do_list()
// to each list at each node.
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
class TreeCensusClosure : public StackObj {
protected:
- virtual void do_list(FreeList_t<Chunk_t>* fl) = 0;
+ virtual void do_list(FreeList_t* fl) = 0;
public:
virtual void do_tree(TreeList<Chunk_t, FreeList_t>* tl) = 0;
};
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
class AscendTreeCensusClosure : public TreeCensusClosure<Chunk_t, FreeList_t> {
public:
void do_tree(TreeList<Chunk_t, FreeList_t>* tl) {
@@ -948,7 +935,7 @@
}
};
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
class DescendTreeCensusClosure : public TreeCensusClosure<Chunk_t, FreeList_t> {
public:
void do_tree(TreeList<Chunk_t, FreeList_t>* tl) {
@@ -962,7 +949,7 @@
// For each list in the tree, calculate the desired, desired
// coalesce, count before sweep, and surplus before sweep.
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
class BeginSweepClosure : public AscendTreeCensusClosure<Chunk_t, FreeList_t> {
double _percentage;
float _inter_sweep_current;
@@ -995,16 +982,16 @@
// Similar to TreeCensusClosure but searches the
// tree and returns promptly when found.
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
class TreeSearchClosure : public StackObj {
protected:
- virtual bool do_list(FreeList_t<Chunk_t>* fl) = 0;
+ virtual bool do_list(FreeList_t* fl) = 0;
public:
virtual bool do_tree(TreeList<Chunk_t, FreeList_t>* tl) = 0;
};
#if 0 // Don't need this yet but here for symmetry.
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
class AscendTreeSearchClosure : public TreeSearchClosure<Chunk_t> {
public:
bool do_tree(TreeList<Chunk_t, FreeList_t>* tl) {
@@ -1018,7 +1005,7 @@
};
#endif
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
class DescendTreeSearchClosure : public TreeSearchClosure<Chunk_t, FreeList_t> {
public:
bool do_tree(TreeList<Chunk_t, FreeList_t>* tl) {
@@ -1033,14 +1020,14 @@
// Searches the tree for a chunk that ends at the
// specified address.
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
class EndTreeSearchClosure : public DescendTreeSearchClosure<Chunk_t, FreeList_t> {
HeapWord* _target;
Chunk_t* _found;
public:
EndTreeSearchClosure(HeapWord* target) : _target(target), _found(NULL) {}
- bool do_list(FreeList_t<Chunk_t>* fl) {
+ bool do_list(FreeList_t* fl) {
Chunk_t* item = fl->head();
while (item != NULL) {
if (item->end() == (uintptr_t*) _target) {
@@ -1054,7 +1041,7 @@
Chunk_t* found() { return _found; }
};
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
Chunk_t* BinaryTreeDictionary<Chunk_t, FreeList_t>::find_chunk_ends_at(HeapWord* target) const {
EndTreeSearchClosure<Chunk_t, FreeList_t> etsc(target);
bool found_target = etsc.do_tree(root());
@@ -1063,7 +1050,7 @@
return etsc.found();
}
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
void BinaryTreeDictionary<Chunk_t, FreeList_t>::begin_sweep_dict_census(double coalSurplusPercent,
float inter_sweep_current, float inter_sweep_estimate, float intra_sweep_estimate) {
BeginSweepClosure<Chunk_t, FreeList_t> bsc(coalSurplusPercent, inter_sweep_current,
@@ -1075,32 +1062,32 @@
// Closures and methods for calculating total bytes returned to the
// free lists in the tree.
#ifndef PRODUCT
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
class InitializeDictReturnedBytesClosure : public AscendTreeCensusClosure<Chunk_t, FreeList_t> {
public:
- void do_list(FreeList_t<Chunk_t>* fl) {
+ void do_list(FreeList_t* fl) {
fl->set_returned_bytes(0);
}
};
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
void BinaryTreeDictionary<Chunk_t, FreeList_t>::initialize_dict_returned_bytes() {
InitializeDictReturnedBytesClosure<Chunk_t, FreeList_t> idrb;
idrb.do_tree(root());
}
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
class ReturnedBytesClosure : public AscendTreeCensusClosure<Chunk_t, FreeList_t> {
size_t _dict_returned_bytes;
public:
ReturnedBytesClosure() { _dict_returned_bytes = 0; }
- void do_list(FreeList_t<Chunk_t>* fl) {
+ void do_list(FreeList_t* fl) {
_dict_returned_bytes += fl->returned_bytes();
}
size_t dict_returned_bytes() { return _dict_returned_bytes; }
};
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
size_t BinaryTreeDictionary<Chunk_t, FreeList_t>::sum_dict_returned_bytes() {
ReturnedBytesClosure<Chunk_t, FreeList_t> rbc;
rbc.do_tree(root());
@@ -1109,17 +1096,17 @@
}
// Count the number of entries in the tree.
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
class treeCountClosure : public DescendTreeCensusClosure<Chunk_t, FreeList_t> {
public:
uint count;
treeCountClosure(uint c) { count = c; }
- void do_list(FreeList_t<Chunk_t>* fl) {
+ void do_list(FreeList_t* fl) {
count++;
}
};
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
size_t BinaryTreeDictionary<Chunk_t, FreeList_t>::total_count() {
treeCountClosure<Chunk_t, FreeList_t> ctc(0);
ctc.do_tree(root());
@@ -1128,7 +1115,7 @@
#endif // PRODUCT
// Calculate surpluses for the lists in the tree.
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
class setTreeSurplusClosure : public AscendTreeCensusClosure<Chunk_t, FreeList_t> {
double percentage;
public:
@@ -1144,14 +1131,14 @@
#endif // INCLUDE_ALL_GCS
};
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
void BinaryTreeDictionary<Chunk_t, FreeList_t>::set_tree_surplus(double splitSurplusPercent) {
setTreeSurplusClosure<Chunk_t, FreeList_t> sts(splitSurplusPercent);
sts.do_tree(root());
}
// Set hints for the lists in the tree.
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
class setTreeHintsClosure : public DescendTreeCensusClosure<Chunk_t, FreeList_t> {
size_t hint;
public:
@@ -1170,14 +1157,14 @@
#endif // INCLUDE_ALL_GCS
};
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
void BinaryTreeDictionary<Chunk_t, FreeList_t>::set_tree_hints(void) {
setTreeHintsClosure<Chunk_t, FreeList_t> sth(0);
sth.do_tree(root());
}
// Save count before previous sweep and splits and coalesces.
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
class clearTreeCensusClosure : public AscendTreeCensusClosure<Chunk_t, FreeList_t> {
void do_list(FreeList<Chunk_t>* fl) {}
@@ -1192,14 +1179,14 @@
#endif // INCLUDE_ALL_GCS
};
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
void BinaryTreeDictionary<Chunk_t, FreeList_t>::clear_tree_census(void) {
clearTreeCensusClosure<Chunk_t, FreeList_t> ctc;
ctc.do_tree(root());
}
// Do reporting and post sweep clean up.
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
void BinaryTreeDictionary<Chunk_t, FreeList_t>::end_sweep_dict_census(double splitSurplusPercent) {
// Does walking the tree 3 times hurt?
set_tree_surplus(splitSurplusPercent);
@@ -1211,7 +1198,7 @@
}
// Print summary statistics
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
void BinaryTreeDictionary<Chunk_t, FreeList_t>::report_statistics() const {
FreeBlockDictionary<Chunk_t>::verify_par_locked();
gclog_or_tty->print("Statistics for BinaryTreeDictionary:\n"
@@ -1230,22 +1217,22 @@
// Print census information - counts, births, deaths, etc.
// for each list in the tree. Also print some summary
// information.
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
class PrintTreeCensusClosure : public AscendTreeCensusClosure<Chunk_t, FreeList_t> {
int _print_line;
size_t _total_free;
- FreeList_t<Chunk_t> _total;
+ FreeList_t _total;
public:
PrintTreeCensusClosure() {
_print_line = 0;
_total_free = 0;
}
- FreeList_t<Chunk_t>* total() { return &_total; }
+ FreeList_t* total() { return &_total; }
size_t total_free() { return _total_free; }
void do_list(FreeList<Chunk_t>* fl) {
if (++_print_line >= 40) {
- FreeList_t<Chunk_t>::print_labels_on(gclog_or_tty, "size");
+ FreeList_t::print_labels_on(gclog_or_tty, "size");
_print_line = 0;
}
fl->print_on(gclog_or_tty);
@@ -1256,7 +1243,7 @@
#if INCLUDE_ALL_GCS
void do_list(AdaptiveFreeList<Chunk_t>* fl) {
if (++_print_line >= 40) {
- FreeList_t<Chunk_t>::print_labels_on(gclog_or_tty, "size");
+ FreeList_t::print_labels_on(gclog_or_tty, "size");
_print_line = 0;
}
fl->print_on(gclog_or_tty);
@@ -1275,16 +1262,16 @@
#endif // INCLUDE_ALL_GCS
};
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
void BinaryTreeDictionary<Chunk_t, FreeList_t>::print_dict_census(void) const {
gclog_or_tty->print("\nBinaryTree\n");
- FreeList_t<Chunk_t>::print_labels_on(gclog_or_tty, "size");
+ FreeList_t::print_labels_on(gclog_or_tty, "size");
PrintTreeCensusClosure<Chunk_t, FreeList_t> ptc;
ptc.do_tree(root());
- FreeList_t<Chunk_t>* total = ptc.total();
- FreeList_t<Chunk_t>::print_labels_on(gclog_or_tty, " ");
+ FreeList_t* total = ptc.total();
+ FreeList_t::print_labels_on(gclog_or_tty, " ");
}
#if INCLUDE_ALL_GCS
@@ -1293,7 +1280,7 @@
gclog_or_tty->print("\nBinaryTree\n");
AdaptiveFreeList<FreeChunk>::print_labels_on(gclog_or_tty, "size");
- PrintTreeCensusClosure<FreeChunk, AdaptiveFreeList> ptc;
+ PrintTreeCensusClosure<FreeChunk, AdaptiveFreeList<FreeChunk> > ptc;
ptc.do_tree(root());
AdaptiveFreeList<FreeChunk>* total = ptc.total();
@@ -1311,7 +1298,7 @@
}
#endif // INCLUDE_ALL_GCS
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
class PrintFreeListsClosure : public AscendTreeCensusClosure<Chunk_t, FreeList_t> {
outputStream* _st;
int _print_line;
@@ -1321,9 +1308,9 @@
_st = st;
_print_line = 0;
}
- void do_list(FreeList_t<Chunk_t>* fl) {
+ void do_list(FreeList_t* fl) {
if (++_print_line >= 40) {
- FreeList_t<Chunk_t>::print_labels_on(_st, "size");
+ FreeList_t::print_labels_on(_st, "size");
_print_line = 0;
}
fl->print_on(gclog_or_tty);
@@ -1337,10 +1324,10 @@
}
};
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
void BinaryTreeDictionary<Chunk_t, FreeList_t>::print_free_lists(outputStream* st) const {
- FreeList_t<Chunk_t>::print_labels_on(st, "size");
+ FreeList_t::print_labels_on(st, "size");
PrintFreeListsClosure<Chunk_t, FreeList_t> pflc(st);
pflc.do_tree(root());
}
@@ -1349,7 +1336,7 @@
// . _root has no parent
// . parent and child point to each other
// . each node's key correctly related to that of its child(ren)
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
void BinaryTreeDictionary<Chunk_t, FreeList_t>::verify_tree() const {
guarantee(root() == NULL || total_free_blocks() == 0 ||
total_size() != 0, "_total_size should't be 0?");
@@ -1357,7 +1344,7 @@
verify_tree_helper(root());
}
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
size_t BinaryTreeDictionary<Chunk_t, FreeList_t>::verify_prev_free_ptrs(TreeList<Chunk_t, FreeList_t>* tl) {
size_t ct = 0;
for (Chunk_t* curFC = tl->head(); curFC != NULL; curFC = curFC->next()) {
@@ -1371,7 +1358,7 @@
// Note: this helper is recursive rather than iterative, so use with
// caution on very deep trees; and watch out for stack overflow errors;
// In general, to be used only for debugging.
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
void BinaryTreeDictionary<Chunk_t, FreeList_t>::verify_tree_helper(TreeList<Chunk_t, FreeList_t>* tl) const {
if (tl == NULL)
return;
@@ -1400,25 +1387,25 @@
verify_tree_helper(tl->right());
}
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
void BinaryTreeDictionary<Chunk_t, FreeList_t>::verify() const {
verify_tree();
guarantee(total_size() == total_size_in_tree(root()), "Total Size inconsistency");
}
-template class TreeList<Metablock, FreeList>;
-template class BinaryTreeDictionary<Metablock, FreeList>;
-template class TreeChunk<Metablock, FreeList>;
+template class TreeList<Metablock, FreeList<Metablock> >;
+template class BinaryTreeDictionary<Metablock, FreeList<Metablock> >;
+template class TreeChunk<Metablock, FreeList<Metablock> >;
-template class TreeList<Metachunk, FreeList>;
-template class BinaryTreeDictionary<Metachunk, FreeList>;
-template class TreeChunk<Metachunk, FreeList>;
+template class TreeList<Metachunk, FreeList<Metachunk> >;
+template class BinaryTreeDictionary<Metachunk, FreeList<Metachunk> >;
+template class TreeChunk<Metachunk, FreeList<Metachunk> >;
#if INCLUDE_ALL_GCS
// Explicitly instantiate these types for FreeChunk.
-template class TreeList<FreeChunk, AdaptiveFreeList>;
-template class BinaryTreeDictionary<FreeChunk, AdaptiveFreeList>;
-template class TreeChunk<FreeChunk, AdaptiveFreeList>;
+template class TreeList<FreeChunk, AdaptiveFreeList<FreeChunk> >;
+template class BinaryTreeDictionary<FreeChunk, AdaptiveFreeList<FreeChunk> >;
+template class TreeChunk<FreeChunk, AdaptiveFreeList<FreeChunk> >;
#endif // INCLUDE_ALL_GCS
diff --git a/hotspot/src/share/vm/memory/binaryTreeDictionary.hpp b/hotspot/src/share/vm/memory/binaryTreeDictionary.hpp
index 23d7fe0..95696cf 100644
--- a/hotspot/src/share/vm/memory/binaryTreeDictionary.hpp
+++ b/hotspot/src/share/vm/memory/binaryTreeDictionary.hpp
@@ -37,18 +37,18 @@
// A TreeList is a FreeList which can be used to maintain a
// binary tree of free lists.
-template <class Chunk_t, template <class> class FreeList_t> class TreeChunk;
-template <class Chunk_t, template <class> class FreeList_t> class BinaryTreeDictionary;
-template <class Chunk_t, template <class> class FreeList_t> class AscendTreeCensusClosure;
-template <class Chunk_t, template <class> class FreeList_t> class DescendTreeCensusClosure;
-template <class Chunk_t, template <class> class FreeList_t> class DescendTreeSearchClosure;
+template <class Chunk_t, class FreeList_t> class TreeChunk;
+template <class Chunk_t, class FreeList_t> class BinaryTreeDictionary;
+template <class Chunk_t, class FreeList_t> class AscendTreeCensusClosure;
+template <class Chunk_t, class FreeList_t> class DescendTreeCensusClosure;
+template <class Chunk_t, class FreeList_t> class DescendTreeSearchClosure;
class FreeChunk;
template <class> class AdaptiveFreeList;
-typedef BinaryTreeDictionary<FreeChunk, AdaptiveFreeList> AFLBinaryTreeDictionary;
+typedef BinaryTreeDictionary<FreeChunk, AdaptiveFreeList<FreeChunk> > AFLBinaryTreeDictionary;
-template <class Chunk_t, template <class> class FreeList_t>
-class TreeList : public FreeList_t<Chunk_t> {
+template <class Chunk_t, class FreeList_t>
+class TreeList : public FreeList_t {
friend class TreeChunk<Chunk_t, FreeList_t>;
friend class BinaryTreeDictionary<Chunk_t, FreeList_t>;
friend class AscendTreeCensusClosure<Chunk_t, FreeList_t>;
@@ -66,12 +66,12 @@
TreeList<Chunk_t, FreeList_t>* right() const { return _right; }
// Wrapper on call to base class, to get the template to compile.
- Chunk_t* head() const { return FreeList_t<Chunk_t>::head(); }
- Chunk_t* tail() const { return FreeList_t<Chunk_t>::tail(); }
- void set_head(Chunk_t* head) { FreeList_t<Chunk_t>::set_head(head); }
- void set_tail(Chunk_t* tail) { FreeList_t<Chunk_t>::set_tail(tail); }
+ Chunk_t* head() const { return FreeList_t::head(); }
+ Chunk_t* tail() const { return FreeList_t::tail(); }
+ void set_head(Chunk_t* head) { FreeList_t::set_head(head); }
+ void set_tail(Chunk_t* tail) { FreeList_t::set_tail(tail); }
- size_t size() const { return FreeList_t<Chunk_t>::size(); }
+ size_t size() const { return FreeList_t::size(); }
// Accessors for links in tree.
@@ -90,7 +90,7 @@
void clear_left() { _left = NULL; }
void clear_right() { _right = NULL; }
void clear_parent() { _parent = NULL; }
- void initialize() { clear_left(); clear_right(), clear_parent(); FreeList_t<Chunk_t>::initialize(); }
+ void initialize() { clear_left(); clear_right(), clear_parent(); FreeList_t::initialize(); }
// For constructing a TreeList from a Tree chunk or
// address and size.
@@ -139,7 +139,7 @@
// on the free list for a node in the tree and is only removed if
// it is the last chunk on the free list.
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
class TreeChunk : public Chunk_t {
friend class TreeList<Chunk_t, FreeList_t>;
TreeList<Chunk_t, FreeList_t>* _list;
@@ -173,7 +173,7 @@
};
-template <class Chunk_t, template <class> class FreeList_t>
+template <class Chunk_t, class FreeList_t>
class BinaryTreeDictionary: public FreeBlockDictionary<Chunk_t> {
friend class VMStructs;
size_t _total_size;
diff --git a/hotspot/src/share/vm/memory/metachunk.hpp b/hotspot/src/share/vm/memory/metachunk.hpp
index 3bd4d15..e873dc6 100644
--- a/hotspot/src/share/vm/memory/metachunk.hpp
+++ b/hotspot/src/share/vm/memory/metachunk.hpp
@@ -143,6 +143,8 @@
void set_is_tagged_free(bool v) { _is_tagged_free = v; }
#endif
+ bool contains(const void* ptr) { return bottom() <= ptr && ptr < _top; }
+
NOT_PRODUCT(void mangle();)
void print_on(outputStream* st) const;
diff --git a/hotspot/src/share/vm/memory/metaspace.cpp b/hotspot/src/share/vm/memory/metaspace.cpp
index 19c0366..d780cc5 100644
--- a/hotspot/src/share/vm/memory/metaspace.cpp
+++ b/hotspot/src/share/vm/memory/metaspace.cpp
@@ -46,8 +46,8 @@
#include "utilities/copy.hpp"
#include "utilities/debug.hpp"
-typedef BinaryTreeDictionary<Metablock, FreeList> BlockTreeDictionary;
-typedef BinaryTreeDictionary<Metachunk, FreeList> ChunkTreeDictionary;
+typedef BinaryTreeDictionary<Metablock, FreeList<Metablock> > BlockTreeDictionary;
+typedef BinaryTreeDictionary<Metachunk, FreeList<Metachunk> > ChunkTreeDictionary;
// Set this constant to enable slow integrity checking of the free chunk lists
const bool metaspace_slow_verify = false;
@@ -513,8 +513,6 @@
// Unlink empty VirtualSpaceNodes and free it.
void purge(ChunkManager* chunk_manager);
- bool contains(const void *ptr);
-
void print_on(outputStream* st) const;
class VirtualSpaceListIterator : public StackObj {
@@ -558,7 +556,7 @@
private:
- // protects allocations and contains.
+ // protects allocations
Mutex* const _lock;
// Type of metadata allocated.
@@ -595,7 +593,11 @@
private:
// Accessors
Metachunk* chunks_in_use(ChunkIndex index) const { return _chunks_in_use[index]; }
- void set_chunks_in_use(ChunkIndex index, Metachunk* v) { _chunks_in_use[index] = v; }
+ void set_chunks_in_use(ChunkIndex index, Metachunk* v) {
+ // ensure lock-free iteration sees fully initialized node
+ OrderAccess::storestore();
+ _chunks_in_use[index] = v;
+ }
BlockFreelist* block_freelists() const {
return (BlockFreelist*) &_block_freelists;
@@ -708,6 +710,8 @@
void print_on(outputStream* st) const;
void locked_print_chunks_in_use_on(outputStream* st) const;
+ bool contains(const void *ptr);
+
void verify();
void verify_chunk_size(Metachunk* chunk);
NOT_PRODUCT(void mangle_freed_chunks();)
@@ -786,7 +790,7 @@
return NULL;
}
- if (word_size < TreeChunk<Metablock, FreeList>::min_size()) {
+ if (word_size < TreeChunk<Metablock, FreeList<Metablock> >::min_size()) {
// Dark matter. Too small for dictionary.
return NULL;
}
@@ -806,7 +810,7 @@
MetaWord* new_block = (MetaWord*)free_block;
assert(block_size >= word_size, "Incorrect size of block from freelist");
const size_t unused = block_size - word_size;
- if (unused >= TreeChunk<Metablock, FreeList>::min_size()) {
+ if (unused >= TreeChunk<Metablock, FreeList<Metablock> >::min_size()) {
return_block(new_block + word_size, unused);
}
@@ -1159,8 +1163,6 @@
} else {
assert(new_entry->reserved_words() == vs_word_size,
"Reserved memory size differs from requested memory size");
- // ensure lock-free iteration sees fully initialized node
- OrderAccess::storestore();
link_vs(new_entry);
return true;
}
@@ -1287,19 +1289,6 @@
}
}
-bool VirtualSpaceList::contains(const void *ptr) {
- VirtualSpaceNode* list = virtual_space_list();
- VirtualSpaceListIterator iter(list);
- while (iter.repeat()) {
- VirtualSpaceNode* node = iter.get_next();
- if (node->reserved()->contains(ptr)) {
- return true;
- }
- }
- return false;
-}
-
-
// MetaspaceGC methods
// VM_CollectForMetadataAllocation is the vm operation used to GC.
@@ -2250,7 +2239,7 @@
void SpaceManager::deallocate(MetaWord* p, size_t word_size) {
assert_lock_strong(_lock);
size_t raw_word_size = get_raw_word_size(word_size);
- size_t min_size = TreeChunk<Metablock, FreeList>::min_size();
+ size_t min_size = TreeChunk<Metablock, FreeList<Metablock> >::min_size();
assert(raw_word_size >= min_size,
err_msg("Should not deallocate dark matter " SIZE_FORMAT "<" SIZE_FORMAT, word_size, min_size));
block_freelists()->return_block(p, raw_word_size);
@@ -2306,7 +2295,7 @@
void SpaceManager::retire_current_chunk() {
if (current_chunk() != NULL) {
size_t remaining_words = current_chunk()->free_word_size();
- if (remaining_words >= TreeChunk<Metablock, FreeList>::min_size()) {
+ if (remaining_words >= TreeChunk<Metablock, FreeList<Metablock> >::min_size()) {
block_freelists()->return_block(current_chunk()->allocate(remaining_words), remaining_words);
inc_used_metrics(remaining_words);
}
@@ -2392,6 +2381,21 @@
return result;
}
+// This function looks at the chunks in the metaspace without locking.
+// The chunks are added with store ordering and not deleted except for at
+// unloading time.
+bool SpaceManager::contains(const void *ptr) {
+ for (ChunkIndex i = ZeroIndex; i < NumberOfInUseLists; i = next_chunk_index(i))
+ {
+ Metachunk* curr = chunks_in_use(i);
+ while (curr != NULL) {
+ if (curr->contains(ptr)) return true;
+ curr = curr->next();
+ }
+ }
+ return false;
+}
+
void SpaceManager::verify() {
// If there are blocks in the dictionary, then
// verfication of chunks does not work since
@@ -3274,7 +3278,7 @@
assert(Thread::current()->is_VM_thread(), "should be the VM thread");
// Don't take Heap_lock
MutexLockerEx ml(vsm()->lock(), Mutex::_no_safepoint_check_flag);
- if (word_size < TreeChunk<Metablock, FreeList>::min_size()) {
+ if (word_size < TreeChunk<Metablock, FreeList<Metablock> >::min_size()) {
// Dark matter. Too small for dictionary.
#ifdef ASSERT
Copy::fill_to_words((HeapWord*)ptr, word_size, 0xf5f5f5f5);
@@ -3289,7 +3293,7 @@
} else {
MutexLockerEx ml(vsm()->lock(), Mutex::_no_safepoint_check_flag);
- if (word_size < TreeChunk<Metablock, FreeList>::min_size()) {
+ if (word_size < TreeChunk<Metablock, FreeList<Metablock> >::min_size()) {
// Dark matter. Too small for dictionary.
#ifdef ASSERT
Copy::fill_to_words((HeapWord*)ptr, word_size, 0xf5f5f5f5);
@@ -3463,17 +3467,12 @@
}
}
-bool Metaspace::contains(const void * ptr) {
- if (MetaspaceShared::is_in_shared_space(ptr)) {
- return true;
+bool Metaspace::contains(const void* ptr) {
+ if (vsm()->contains(ptr)) return true;
+ if (using_class_space()) {
+ return class_vsm()->contains(ptr);
}
- // This is checked while unlocked. As long as the virtualspaces are added
- // at the end, the pointer will be in one of them. The virtual spaces
- // aren't deleted presently. When they are, some sort of locking might
- // be needed. Note, locking this can cause inversion problems with the
- // caller in MetaspaceObj::is_metadata() function.
- return space_list()->contains(ptr) ||
- (using_class_space() && class_space_list()->contains(ptr));
+ return false;
}
void Metaspace::verify() {
diff --git a/hotspot/src/share/vm/memory/metaspace.hpp b/hotspot/src/share/vm/memory/metaspace.hpp
index c22d217..96427cb 100644
--- a/hotspot/src/share/vm/memory/metaspace.hpp
+++ b/hotspot/src/share/vm/memory/metaspace.hpp
@@ -225,7 +225,7 @@
MetaWord* expand_and_allocate(size_t size,
MetadataType mdtype);
- static bool contains(const void *ptr);
+ bool contains(const void* ptr);
void dump(outputStream* const out) const;
// Free empty virtualspaces
diff --git a/hotspot/src/share/vm/oops/arrayKlass.cpp b/hotspot/src/share/vm/oops/arrayKlass.cpp
index 9e40206..fcb46b1 100644
--- a/hotspot/src/share/vm/oops/arrayKlass.cpp
+++ b/hotspot/src/share/vm/oops/arrayKlass.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -214,8 +214,8 @@
// Verification
-void ArrayKlass::verify_on(outputStream* st, bool check_dictionary) {
- Klass::verify_on(st, check_dictionary);
+void ArrayKlass::verify_on(outputStream* st) {
+ Klass::verify_on(st);
if (component_mirror() != NULL) {
guarantee(component_mirror()->klass() != NULL, "should have a class");
diff --git a/hotspot/src/share/vm/oops/arrayKlass.hpp b/hotspot/src/share/vm/oops/arrayKlass.hpp
index 4b06f1c..7b4ad2e 100644
--- a/hotspot/src/share/vm/oops/arrayKlass.hpp
+++ b/hotspot/src/share/vm/oops/arrayKlass.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -146,7 +146,7 @@
void oop_print_on(oop obj, outputStream* st);
// Verification
- void verify_on(outputStream* st, bool check_dictionary);
+ void verify_on(outputStream* st);
void oop_verify_on(oop obj, outputStream* st);
};
diff --git a/hotspot/src/share/vm/oops/constantPool.cpp b/hotspot/src/share/vm/oops/constantPool.cpp
index 16b53a6..90abff7 100644
--- a/hotspot/src/share/vm/oops/constantPool.cpp
+++ b/hotspot/src/share/vm/oops/constantPool.cpp
@@ -82,6 +82,9 @@
void ConstantPool::deallocate_contents(ClassLoaderData* loader_data) {
MetadataFactory::free_metadata(loader_data, cache());
set_cache(NULL);
+ MetadataFactory::free_array<u2>(loader_data, reference_map());
+ set_reference_map(NULL);
+
MetadataFactory::free_array<jushort>(loader_data, operands());
set_operands(NULL);
@@ -1292,6 +1295,7 @@
} break;
case JVM_CONSTANT_UnresolvedClass:
+ case JVM_CONSTANT_UnresolvedClassInError:
{
// Can be resolved after checking tag, so check the slot first.
CPSlot entry = from_cp->slot_at(from_i);
diff --git a/hotspot/src/share/vm/oops/instanceKlass.cpp b/hotspot/src/share/vm/oops/instanceKlass.cpp
index a6ca58c..ac9340a 100644
--- a/hotspot/src/share/vm/oops/instanceKlass.cpp
+++ b/hotspot/src/share/vm/oops/instanceKlass.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -3180,7 +3180,7 @@
virtual void do_oop(narrowOop* p) { VerifyFieldClosure::do_oop_work(p); }
};
-void InstanceKlass::verify_on(outputStream* st, bool check_dictionary) {
+void InstanceKlass::verify_on(outputStream* st) {
#ifndef PRODUCT
// Avoid redundant verifies, this really should be in product.
if (_verify_count == Universe::verify_count()) return;
@@ -3188,14 +3188,11 @@
#endif
// Verify Klass
- Klass::verify_on(st, check_dictionary);
+ Klass::verify_on(st);
- // Verify that klass is present in SystemDictionary if not already
- // verifying the SystemDictionary.
- if (is_loaded() && !is_anonymous() && check_dictionary) {
- Symbol* h_name = name();
- SystemDictionary::verify_obj_klass_present(h_name, class_loader_data());
- }
+ // Verify that klass is present in ClassLoaderData
+ guarantee(class_loader_data()->contains_klass(this),
+ "this class isn't found in class loader data");
// Verify vtables
if (is_linked()) {
diff --git a/hotspot/src/share/vm/oops/instanceKlass.hpp b/hotspot/src/share/vm/oops/instanceKlass.hpp
index 2b7a73a..ba2bce8 100644
--- a/hotspot/src/share/vm/oops/instanceKlass.hpp
+++ b/hotspot/src/share/vm/oops/instanceKlass.hpp
@@ -1086,7 +1086,7 @@
const char* internal_name() const;
// Verification
- void verify_on(outputStream* st, bool check_dictionary);
+ void verify_on(outputStream* st);
void oop_verify_on(oop obj, outputStream* st);
};
diff --git a/hotspot/src/share/vm/oops/klass.cpp b/hotspot/src/share/vm/oops/klass.cpp
index 22b570b..adca246 100644
--- a/hotspot/src/share/vm/oops/klass.cpp
+++ b/hotspot/src/share/vm/oops/klass.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -376,8 +376,6 @@
}
bool Klass::is_loader_alive(BoolObjectClosure* is_alive) {
- assert(ClassLoaderDataGraph::contains((address)this), "is in the metaspace");
-
#ifdef ASSERT
// The class is alive iff the class loader is alive.
oop loader = class_loader();
@@ -640,7 +638,7 @@
// Verification
-void Klass::verify_on(outputStream* st, bool check_dictionary) {
+void Klass::verify_on(outputStream* st) {
// This can be expensive, but it is worth checking that this klass is actually
// in the CLD graph but not in production.
diff --git a/hotspot/src/share/vm/oops/klass.hpp b/hotspot/src/share/vm/oops/klass.hpp
index 9855fdd..a31a235 100644
--- a/hotspot/src/share/vm/oops/klass.hpp
+++ b/hotspot/src/share/vm/oops/klass.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -695,8 +695,8 @@
virtual const char* internal_name() const = 0;
// Verification
- virtual void verify_on(outputStream* st, bool check_dictionary);
- void verify(bool check_dictionary = true) { verify_on(tty, check_dictionary); }
+ virtual void verify_on(outputStream* st);
+ void verify() { verify_on(tty); }
#ifndef PRODUCT
bool verify_vtable_index(int index);
diff --git a/hotspot/src/share/vm/oops/objArrayKlass.cpp b/hotspot/src/share/vm/oops/objArrayKlass.cpp
index 7294ebe..3316a8b 100644
--- a/hotspot/src/share/vm/oops/objArrayKlass.cpp
+++ b/hotspot/src/share/vm/oops/objArrayKlass.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -674,8 +674,8 @@
// Verification
-void ObjArrayKlass::verify_on(outputStream* st, bool check_dictionary) {
- ArrayKlass::verify_on(st, check_dictionary);
+void ObjArrayKlass::verify_on(outputStream* st) {
+ ArrayKlass::verify_on(st);
guarantee(element_klass()->is_klass(), "should be klass");
guarantee(bottom_klass()->is_klass(), "should be klass");
Klass* bk = bottom_klass();
diff --git a/hotspot/src/share/vm/oops/objArrayKlass.hpp b/hotspot/src/share/vm/oops/objArrayKlass.hpp
index af06fd4..cfe31e8 100644
--- a/hotspot/src/share/vm/oops/objArrayKlass.hpp
+++ b/hotspot/src/share/vm/oops/objArrayKlass.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -151,7 +151,7 @@
const char* internal_name() const;
// Verification
- void verify_on(outputStream* st, bool check_dictionary);
+ void verify_on(outputStream* st);
void oop_verify_on(oop obj, outputStream* st);
};
diff --git a/hotspot/src/share/vm/opto/bytecodeInfo.cpp b/hotspot/src/share/vm/opto/bytecodeInfo.cpp
index 3e7b7a5..101d5f7 100644
--- a/hotspot/src/share/vm/opto/bytecodeInfo.cpp
+++ b/hotspot/src/share/vm/opto/bytecodeInfo.cpp
@@ -50,7 +50,10 @@
_subtrees(c->comp_arena(), 2, 0, NULL),
_msg(NULL)
{
- NOT_PRODUCT(_count_inlines = 0;)
+#ifndef PRODUCT
+ _count_inlines = 0;
+ _forced_inline = false;
+#endif
if (_caller_jvms != NULL) {
// Keep a private copy of the caller_jvms:
_caller_jvms = new (C) JVMState(caller_jvms->method(), caller_tree->caller_jvms());
@@ -60,31 +63,14 @@
assert(_caller_jvms->same_calls_as(caller_jvms), "consistent JVMS");
assert((caller_tree == NULL ? 0 : caller_tree->stack_depth() + 1) == stack_depth(), "correct (redundant) depth parameter");
assert(caller_bci == this->caller_bci(), "correct (redundant) bci parameter");
- if (UseOldInlining) {
- // Update hierarchical counts, count_inline_bcs() and count_inlines()
- InlineTree *caller = (InlineTree *)caller_tree;
- for( ; caller != NULL; caller = ((InlineTree *)(caller->caller_tree())) ) {
- caller->_count_inline_bcs += count_inline_bcs();
- NOT_PRODUCT(caller->_count_inlines++;)
- }
+ // Update hierarchical counts, count_inline_bcs() and count_inlines()
+ InlineTree *caller = (InlineTree *)caller_tree;
+ for( ; caller != NULL; caller = ((InlineTree *)(caller->caller_tree())) ) {
+ caller->_count_inline_bcs += count_inline_bcs();
+ NOT_PRODUCT(caller->_count_inlines++;)
}
}
-InlineTree::InlineTree(Compile* c, ciMethod* callee_method, JVMState* caller_jvms,
- float site_invoke_ratio, int max_inline_level) :
- C(c),
- _caller_jvms(caller_jvms),
- _caller_tree(NULL),
- _method(callee_method),
- _site_invoke_ratio(site_invoke_ratio),
- _max_inline_level(max_inline_level),
- _count_inline_bcs(method()->code_size()),
- _msg(NULL)
-{
- NOT_PRODUCT(_count_inlines = 0;)
- assert(!UseOldInlining, "do not use for old stuff");
-}
-
/**
* Return true when EA is ON and a java constructor is called or
* a super constructor is called from an inlined java constructor.
@@ -128,9 +114,19 @@
tty->print_cr("Inlined method is hot: ");
}
set_msg("force inline by CompilerOracle");
+ _forced_inline = true;
return true;
}
+#ifndef PRODUCT
+ int inline_depth = inline_level()+1;
+ if (ciReplay::should_inline(C->replay_inline_data(), callee_method, caller_bci, inline_depth)) {
+ set_msg("force inline by ciReplay");
+ _forced_inline = true;
+ return true;
+ }
+#endif
+
int size = callee_method->code_size_for_inlining();
// Check for too many throws (and not too huge)
@@ -145,11 +141,6 @@
return true;
}
- if (!UseOldInlining) {
- set_msg("!UseOldInlining");
- return true; // size and frequency are represented in a new way
- }
-
int default_max_inline_size = C->max_inline_size();
int inline_small_code_size = InlineSmallCode / 4;
int max_inline_size = default_max_inline_size;
@@ -213,35 +204,6 @@
fail_msg = "don't inline by annotation";
}
- if (!UseOldInlining) {
- if (fail_msg != NULL) {
- *wci_result = *(WarmCallInfo::always_cold());
- set_msg(fail_msg);
- return true;
- }
-
- if (callee_method->has_unloaded_classes_in_signature()) {
- wci_result->set_profit(wci_result->profit() * 0.1);
- }
-
- // don't inline exception code unless the top method belongs to an
- // exception class
- if (callee_method->holder()->is_subclass_of(C->env()->Throwable_klass())) {
- ciMethod* top_method = jvms->caller() != NULL ? jvms->caller()->of_depth(1)->method() : method();
- if (!top_method->holder()->is_subclass_of(C->env()->Throwable_klass())) {
- wci_result->set_profit(wci_result->profit() * 0.1);
- }
- }
-
- if (callee_method->has_compiled_code() &&
- callee_method->instructions_size() > InlineSmallCode) {
- wci_result->set_profit(wci_result->profit() * 0.1);
- // %%% adjust wci_result->size()?
- }
-
- return false;
- }
-
// one more inlining restriction
if (fail_msg == NULL && callee_method->has_unloaded_classes_in_signature()) {
fail_msg = "unloaded signature classes";
@@ -264,6 +226,18 @@
}
#ifndef PRODUCT
+ int caller_bci = jvms->bci();
+ int inline_depth = inline_level()+1;
+ if (ciReplay::should_inline(C->replay_inline_data(), callee_method, caller_bci, inline_depth)) {
+ set_msg("force inline by ciReplay");
+ return false;
+ }
+
+ if (ciReplay::should_not_inline(C->replay_inline_data(), callee_method, caller_bci, inline_depth)) {
+ set_msg("disallowed by ciReplay");
+ return true;
+ }
+
if (ciReplay::should_not_inline(callee_method)) {
set_msg("disallowed by ciReplay");
return true;
@@ -332,9 +306,7 @@
int caller_bci, JVMState* jvms, ciCallProfile& profile,
WarmCallInfo* wci_result, bool& should_delay) {
- // Old algorithm had funny accumulating BC-size counters
- if (UseOldInlining && ClipInlining
- && (int)count_inline_bcs() >= DesiredMethodLimit) {
+ if (ClipInlining && (int)count_inline_bcs() >= DesiredMethodLimit) {
if (!callee_method->force_inline() || !IncrementalInline) {
set_msg("size > DesiredMethodLimit");
return false;
@@ -343,6 +315,7 @@
}
}
+ _forced_inline = false; // Reset
if (!should_inline(callee_method, caller_method, caller_bci, profile,
wci_result)) {
return false;
@@ -373,10 +346,10 @@
if ((!UseInterpreter || CompileTheWorld) &&
is_init_with_ea(callee_method, caller_method, C)) {
-
// Escape Analysis stress testing when running Xcomp or CTW:
// inline constructors even if they are not reached.
-
+ } else if (forced_inline()) {
+ // Inlining was forced by CompilerOracle or ciReplay
} else if (profile.count() == 0) {
// don't inline unreached call sites
set_msg("call site not reached");
@@ -436,8 +409,7 @@
int size = callee_method->code_size_for_inlining();
- if (UseOldInlining && ClipInlining
- && (int)count_inline_bcs() + size >= DesiredMethodLimit) {
+ if (ClipInlining && (int)count_inline_bcs() + size >= DesiredMethodLimit) {
if (!callee_method->force_inline() || !IncrementalInline) {
set_msg("size > DesiredMethodLimit");
return false;
@@ -555,8 +527,7 @@
jvms, profile, &wci, should_delay);
#ifndef PRODUCT
- if (UseOldInlining && InlineWarmCalls
- && (PrintOpto || C->print_inlining())) {
+ if (InlineWarmCalls && (PrintOpto || C->print_inlining())) {
bool cold = wci.is_cold();
bool hot = !cold && wci.is_hot();
bool old_cold = !success;
@@ -570,13 +541,12 @@
}
}
#endif
- if (UseOldInlining) {
- if (success) {
- wci = *(WarmCallInfo::always_hot());
- } else {
- wci = *(WarmCallInfo::always_cold());
- }
+ if (success) {
+ wci = *(WarmCallInfo::always_hot());
+ } else {
+ wci = *(WarmCallInfo::always_cold());
}
+
if (!InlineWarmCalls) {
if (!wci.is_cold() && !wci.is_hot()) {
// Do not inline the warm calls.
@@ -590,8 +560,7 @@
set_msg("inline (hot)");
}
print_inlining(callee_method, caller_bci, true /* success */);
- if (UseOldInlining)
- build_inline_tree_for_callee(callee_method, jvms, caller_bci);
+ build_inline_tree_for_callee(callee_method, jvms, caller_bci);
if (InlineWarmCalls && !wci.is_hot())
return new (C) WarmCallInfo(wci); // copy to heap
return WarmCallInfo::always_hot();
@@ -700,12 +669,28 @@
return iltp;
}
+// Count number of nodes in this subtree
+int InlineTree::count() const {
+ int result = 1;
+ for (int i = 0 ; i < _subtrees.length(); i++) {
+ result += _subtrees.at(i)->count();
+ }
+ return result;
+}
+
+void InlineTree::dump_replay_data(outputStream* out) {
+ out->print(" %d %d ", inline_level(), caller_bci());
+ method()->dump_name_as_ascii(out);
+ for (int i = 0 ; i < _subtrees.length(); i++) {
+ _subtrees.at(i)->dump_replay_data(out);
+ }
+}
#ifndef PRODUCT
void InlineTree::print_impl(outputStream* st, int indent) const {
for (int i = 0; i < indent; i++) st->print(" ");
- st->print(" @ %d ", caller_bci());
+ st->print(" @ %d", caller_bci());
method()->print_short_name(st);
st->cr();
diff --git a/hotspot/src/share/vm/opto/callGenerator.cpp b/hotspot/src/share/vm/opto/callGenerator.cpp
index 6e9c98d..a509f01 100644
--- a/hotspot/src/share/vm/opto/callGenerator.cpp
+++ b/hotspot/src/share/vm/opto/callGenerator.cpp
@@ -722,7 +722,7 @@
Node* m = kit.map()->in(i);
Node* n = slow_map->in(i);
if (m != n) {
- const Type* t = gvn.type(m)->meet(gvn.type(n));
+ const Type* t = gvn.type(m)->meet_speculative(gvn.type(n));
Node* phi = PhiNode::make(region, m, t);
phi->set_req(2, n);
kit.map()->set_req(i, gvn.transform(phi));
@@ -975,7 +975,7 @@
Node* m = kit.map()->in(i);
Node* n = slow_map->in(i);
if (m != n) {
- const Type* t = gvn.type(m)->meet(gvn.type(n));
+ const Type* t = gvn.type(m)->meet_speculative(gvn.type(n));
Node* phi = PhiNode::make(region, m, t);
phi->set_req(2, n);
kit.map()->set_req(i, gvn.transform(phi));
diff --git a/hotspot/src/share/vm/opto/cfgnode.cpp b/hotspot/src/share/vm/opto/cfgnode.cpp
index 36347fb..2522303 100644
--- a/hotspot/src/share/vm/opto/cfgnode.cpp
+++ b/hotspot/src/share/vm/opto/cfgnode.cpp
@@ -951,7 +951,7 @@
if (is_intf != ti_is_intf)
{ t = _type; break; }
}
- t = t->meet(ti);
+ t = t->meet_speculative(ti);
}
}
@@ -968,11 +968,11 @@
//
// It is not possible to see Type::BOTTOM values as phi inputs,
// because the ciTypeFlow pre-pass produces verifier-quality types.
- const Type* ft = t->filter(_type); // Worst case type
+ const Type* ft = t->filter_speculative(_type); // Worst case type
#ifdef ASSERT
// The following logic has been moved into TypeOopPtr::filter.
- const Type* jt = t->join(_type);
+ const Type* jt = t->join_speculative(_type);
if( jt->empty() ) { // Emptied out???
// Check for evil case of 't' being a class and '_type' expecting an
@@ -1018,7 +1018,7 @@
!jtkp->klass_is_exact() && // Keep exact interface klass (6894807)
ttkp->is_loaded() && !ttkp->klass()->is_interface() ) {
assert(ft == ttkp->cast_to_ptr_type(jtkp->ptr()) ||
- ft->isa_narrowoop() && ft->make_ptr() == ttkp->cast_to_ptr_type(jtkp->ptr()), "");
+ ft->isa_narrowklass() && ft->make_ptr() == ttkp->cast_to_ptr_type(jtkp->ptr()), "");
jt = ft;
}
}
@@ -1757,7 +1757,7 @@
break;
}
// Accumulate type for resulting Phi
- type = type->meet(in(i)->in(AddPNode::Base)->bottom_type());
+ type = type->meet_speculative(in(i)->in(AddPNode::Base)->bottom_type());
}
Node* base = NULL;
if (doit) {
diff --git a/hotspot/src/share/vm/opto/chaitin.cpp b/hotspot/src/share/vm/opto/chaitin.cpp
index 492bf38..47fa4ba 100644
--- a/hotspot/src/share/vm/opto/chaitin.cpp
+++ b/hotspot/src/share/vm/opto/chaitin.cpp
@@ -1682,9 +1682,21 @@
// (where top() node is placed).
base->init_req(0, _cfg.get_root_node());
Block *startb = _cfg.get_block_for_node(C->top());
- startb->insert_node(base, startb->find_node(C->top()));
+ uint node_pos = startb->find_node(C->top());
+ startb->insert_node(base, node_pos);
_cfg.map_node_to_block(base, startb);
assert(_lrg_map.live_range_id(base) == 0, "should not have LRG yet");
+
+ // The loadConP0 might have projection nodes depending on architecture
+ // Add the projection nodes to the CFG
+ for (DUIterator_Fast imax, i = base->fast_outs(imax); i < imax; i++) {
+ Node* use = base->fast_out(i);
+ if (use->is_MachProj()) {
+ startb->insert_node(use, ++node_pos);
+ _cfg.map_node_to_block(use, startb);
+ new_lrg(use, maxlrg++);
+ }
+ }
}
if (_lrg_map.live_range_id(base) == 0) {
new_lrg(base, maxlrg++);
diff --git a/hotspot/src/share/vm/opto/compile.cpp b/hotspot/src/share/vm/opto/compile.cpp
index 99d3cec..10b62f3 100644
--- a/hotspot/src/share/vm/opto/compile.cpp
+++ b/hotspot/src/share/vm/opto/compile.cpp
@@ -25,6 +25,7 @@
#include "precompiled.hpp"
#include "asm/macroAssembler.hpp"
#include "asm/macroAssembler.inline.hpp"
+#include "ci/ciReplay.hpp"
#include "classfile/systemDictionary.hpp"
#include "code/exceptionHandlerTable.hpp"
#include "code/nmethod.hpp"
@@ -647,6 +648,7 @@
_printer(IdealGraphPrinter::printer()),
#endif
_congraph(NULL),
+ _replay_inline_data(NULL),
_late_inlines(comp_arena(), 2, 0, NULL),
_string_late_inlines(comp_arena(), 2, 0, NULL),
_boxing_late_inlines(comp_arena(), 2, 0, NULL),
@@ -680,6 +682,10 @@
}
set_print_assembly(print_opto_assembly);
set_parsed_irreducible_loop(false);
+
+ if (method()->has_option("ReplayInline")) {
+ _replay_inline_data = ciReplay::load_inline_data(method(), entry_bci(), ci_env->comp_level());
+ }
#endif
set_print_inlining(PrintInlining || method()->has_option("PrintInlining") NOT_PRODUCT( || PrintOptoInlining));
set_print_intrinsics(PrintIntrinsics || method()->has_option("PrintIntrinsics"));
@@ -695,10 +701,7 @@
print_compile_messages();
- if (UseOldInlining || PrintCompilation NOT_PRODUCT( || PrintOpto) )
- _ilt = InlineTree::build_inline_tree_root();
- else
- _ilt = NULL;
+ _ilt = InlineTree::build_inline_tree_root();
// Even if NO memory addresses are used, MergeMem nodes must have at least 1 slice
assert(num_alias_types() >= AliasIdxRaw, "");
@@ -849,6 +852,15 @@
#endif
NOT_PRODUCT( verify_barriers(); )
+
+ // Dump compilation data to replay it.
+ if (method()->has_option("DumpReplay")) {
+ env()->dump_replay_data(_compile_id);
+ }
+ if (method()->has_option("DumpInline") && (ilt() != NULL)) {
+ env()->dump_inline_data(_compile_id);
+ }
+
// Now that we know the size of all the monitors we can add a fixed slot
// for the original deopt pc.
@@ -938,6 +950,7 @@
_dead_node_list(comp_arena()),
_dead_node_count(0),
_congraph(NULL),
+ _replay_inline_data(NULL),
_number_of_mh_late_inlines(0),
_inlining_progress(false),
_inlining_incrementally(false),
@@ -3757,6 +3770,16 @@
}
}
+// Dump inlining replay data to the stream.
+// Don't change thread state and acquire any locks.
+void Compile::dump_inline_data(outputStream* out) {
+ InlineTree* inl_tree = ilt();
+ if (inl_tree != NULL) {
+ out->print(" inline %d", inl_tree->count());
+ inl_tree->dump_replay_data(out);
+ }
+}
+
int Compile::cmp_expensive_nodes(Node* n1, Node* n2) {
if (n1->Opcode() < n2->Opcode()) return -1;
else if (n1->Opcode() > n2->Opcode()) return 1;
@@ -3893,16 +3916,18 @@
// which may optimize it out.
for (uint next = 0; next < worklist.size(); ++next) {
Node *n = worklist.at(next);
- if (n->is_Type() && n->as_Type()->type()->isa_oopptr() != NULL &&
- n->as_Type()->type()->is_oopptr()->speculative() != NULL) {
+ if (n->is_Type()) {
TypeNode* tn = n->as_Type();
- const TypeOopPtr* t = tn->type()->is_oopptr();
- bool in_hash = igvn.hash_delete(n);
- assert(in_hash, "node should be in igvn hash table");
- tn->set_type(t->remove_speculative());
- igvn.hash_insert(n);
- igvn._worklist.push(n); // give it a chance to go away
- modified++;
+ const Type* t = tn->type();
+ const Type* t_no_spec = t->remove_speculative();
+ if (t_no_spec != t) {
+ bool in_hash = igvn.hash_delete(n);
+ assert(in_hash, "node should be in igvn hash table");
+ tn->set_type(t_no_spec);
+ igvn.hash_insert(n);
+ igvn._worklist.push(n); // give it a chance to go away
+ modified++;
+ }
}
uint max = n->len();
for( uint i = 0; i < max; ++i ) {
@@ -3916,6 +3941,27 @@
if (modified > 0) {
igvn.optimize();
}
+#ifdef ASSERT
+ // Verify that after the IGVN is over no speculative type has resurfaced
+ worklist.clear();
+ worklist.push(root());
+ for (uint next = 0; next < worklist.size(); ++next) {
+ Node *n = worklist.at(next);
+ const Type* t = igvn.type(n);
+ assert(t == t->remove_speculative(), "no more speculative types");
+ if (n->is_Type()) {
+ t = n->as_Type()->type();
+ assert(t == t->remove_speculative(), "no more speculative types");
+ }
+ uint max = n->len();
+ for( uint i = 0; i < max; ++i ) {
+ Node *m = n->in(i);
+ if (not_a_node(m)) continue;
+ worklist.push(m);
+ }
+ }
+ igvn.check_no_speculative_types();
+#endif
}
}
diff --git a/hotspot/src/share/vm/opto/compile.hpp b/hotspot/src/share/vm/opto/compile.hpp
index d248d9d..8858123 100644
--- a/hotspot/src/share/vm/opto/compile.hpp
+++ b/hotspot/src/share/vm/opto/compile.hpp
@@ -431,6 +431,8 @@
// Are we within a PreserveJVMState block?
int _preserve_jvm_state;
+ void* _replay_inline_data; // Pointer to data loaded from file
+
public:
outputStream* print_inlining_stream() const {
@@ -465,6 +467,11 @@
print_inlining_stream()->print(ss.as_string());
}
+ void* replay_inline_data() const { return _replay_inline_data; }
+
+ // Dump inlining replay data to the stream.
+ void dump_inline_data(outputStream* out);
+
private:
// Matching, CFG layout, allocation, code generation
PhaseCFG* _cfg; // Results of CFG finding
diff --git a/hotspot/src/share/vm/opto/connode.cpp b/hotspot/src/share/vm/opto/connode.cpp
index 948ff7b..0a71bc5 100644
--- a/hotspot/src/share/vm/opto/connode.cpp
+++ b/hotspot/src/share/vm/opto/connode.cpp
@@ -188,7 +188,7 @@
const Type *CMoveNode::Value( PhaseTransform *phase ) const {
if( phase->type(in(Condition)) == Type::TOP )
return Type::TOP;
- return phase->type(in(IfFalse))->meet(phase->type(in(IfTrue)));
+ return phase->type(in(IfFalse))->meet_speculative(phase->type(in(IfTrue)));
}
//------------------------------make-------------------------------------------
@@ -392,14 +392,14 @@
//=============================================================================
// If input is already higher or equal to cast type, then this is an identity.
Node *ConstraintCastNode::Identity( PhaseTransform *phase ) {
- return phase->type(in(1))->higher_equal(_type) ? in(1) : this;
+ return phase->type(in(1))->higher_equal_speculative(_type) ? in(1) : this;
}
//------------------------------Value------------------------------------------
// Take 'join' of input and cast-up type
const Type *ConstraintCastNode::Value( PhaseTransform *phase ) const {
if( in(0) && phase->type(in(0)) == Type::TOP ) return Type::TOP;
- const Type* ft = phase->type(in(1))->filter(_type);
+const Type* ft = phase->type(in(1))->filter_speculative(_type);
#ifdef ASSERT
// Previous versions of this function had some special case logic,
@@ -409,7 +409,7 @@
{
const Type* t1 = phase->type(in(1));
if( t1 == Type::TOP ) assert(ft == Type::TOP, "special case #1");
- const Type* rt = t1->join(_type);
+ const Type* rt = t1->join_speculative(_type);
if (rt->empty()) assert(ft == Type::TOP, "special case #2");
break;
}
diff --git a/hotspot/src/share/vm/opto/connode.hpp b/hotspot/src/share/vm/opto/connode.hpp
index 53ff820..03a096b 100644
--- a/hotspot/src/share/vm/opto/connode.hpp
+++ b/hotspot/src/share/vm/opto/connode.hpp
@@ -36,7 +36,7 @@
// Simple constants
class ConNode : public TypeNode {
public:
- ConNode( const Type *t ) : TypeNode(t,1) {
+ ConNode( const Type *t ) : TypeNode(t->remove_speculative(),1) {
init_req(0, (Node*)Compile::current()->root());
init_flags(Flag_is_Con);
}
diff --git a/hotspot/src/share/vm/opto/doCall.cpp b/hotspot/src/share/vm/opto/doCall.cpp
index 223f7da..e888b55 100644
--- a/hotspot/src/share/vm/opto/doCall.cpp
+++ b/hotspot/src/share/vm/opto/doCall.cpp
@@ -161,19 +161,8 @@
// Try inlining a bytecoded method:
if (!call_does_dispatch) {
- InlineTree* ilt;
- if (UseOldInlining) {
- ilt = InlineTree::find_subtree_from_root(this->ilt(), jvms->caller(), jvms->method());
- } else {
- // Make a disembodied, stateless ILT.
- // TO DO: When UseOldInlining is removed, copy the ILT code elsewhere.
- float site_invoke_ratio = prof_factor;
- // Note: ilt is for the root of this parse, not the present call site.
- ilt = new InlineTree(this, jvms->method(), jvms->caller(), site_invoke_ratio, MaxInlineLevel);
- }
+ InlineTree* ilt = InlineTree::find_subtree_from_root(this->ilt(), jvms->caller(), jvms->method());
WarmCallInfo scratch_ci;
- if (!UseOldInlining)
- scratch_ci.init(jvms, callee, profile, prof_factor);
bool should_delay = false;
WarmCallInfo* ci = ilt->ok_to_inline(callee, jvms, profile, &scratch_ci, should_delay);
assert(ci != &scratch_ci, "do not let this pointer escape");
diff --git a/hotspot/src/share/vm/opto/escape.cpp b/hotspot/src/share/vm/opto/escape.cpp
index 50afded..028aa24 100644
--- a/hotspot/src/share/vm/opto/escape.cpp
+++ b/hotspot/src/share/vm/opto/escape.cpp
@@ -1579,9 +1579,20 @@
jobj->set_scalar_replaceable(false);
return;
}
+ // 2. An object is not scalar replaceable if the field into which it is
+ // stored has multiple bases one of which is null.
+ if (field->base_count() > 1) {
+ for (BaseIterator i(field); i.has_next(); i.next()) {
+ PointsToNode* base = i.get();
+ if (base == null_obj) {
+ jobj->set_scalar_replaceable(false);
+ return;
+ }
+ }
+ }
}
assert(use->is_Field() || use->is_LocalVar(), "sanity");
- // 2. An object is not scalar replaceable if it is merged with other objects.
+ // 3. An object is not scalar replaceable if it is merged with other objects.
for (EdgeIterator j(use); j.has_next(); j.next()) {
PointsToNode* ptn = j.get();
if (ptn->is_JavaObject() && ptn != jobj) {
@@ -1600,13 +1611,13 @@
FieldNode* field = j.get()->as_Field();
int offset = field->as_Field()->offset();
- // 3. An object is not scalar replaceable if it has a field with unknown
+ // 4. An object is not scalar replaceable if it has a field with unknown
// offset (array's element is accessed in loop).
if (offset == Type::OffsetBot) {
jobj->set_scalar_replaceable(false);
return;
}
- // 4. Currently an object is not scalar replaceable if a LoadStore node
+ // 5. Currently an object is not scalar replaceable if a LoadStore node
// access its field since the field value is unknown after it.
//
Node* n = field->ideal_node();
@@ -1617,7 +1628,7 @@
}
}
- // 5. Or the address may point to more then one object. This may produce
+ // 6. Or the address may point to more then one object. This may produce
// the false positive result (set not scalar replaceable)
// since the flow-insensitive escape analysis can't separate
// the case when stores overwrite the field's value from the case
diff --git a/hotspot/src/share/vm/opto/graphKit.cpp b/hotspot/src/share/vm/opto/graphKit.cpp
index c30cdc1..e7ec989 100644
--- a/hotspot/src/share/vm/opto/graphKit.cpp
+++ b/hotspot/src/share/vm/opto/graphKit.cpp
@@ -420,7 +420,7 @@
}
const Type* srctype = _gvn.type(src);
if (phi->type() != srctype) {
- const Type* dsttype = phi->type()->meet(srctype);
+ const Type* dsttype = phi->type()->meet_speculative(srctype);
if (phi->type() != dsttype) {
phi->set_type(dsttype);
_gvn.set_type(phi, dsttype);
@@ -1223,7 +1223,7 @@
// See if mixing in the NULL pointer changes type.
// If so, then the NULL pointer was not allowed in the original
// type. In other words, "value" was not-null.
- if (t->meet(TypePtr::NULL_PTR) != t) {
+ if (t->meet(TypePtr::NULL_PTR) != t->remove_speculative()) {
// same as: if (!TypePtr::NULL_PTR->higher_equal(t)) ...
explicit_null_checks_elided++;
return value; // Elided null check quickly!
@@ -1356,7 +1356,7 @@
// Cast obj to not-null on this path
Node* GraphKit::cast_not_null(Node* obj, bool do_replace_in_map) {
const Type *t = _gvn.type(obj);
- const Type *t_not_null = t->join(TypePtr::NOTNULL);
+ const Type *t_not_null = t->join_speculative(TypePtr::NOTNULL);
// Object is already not-null?
if( t == t_not_null ) return obj;
@@ -3009,7 +3009,7 @@
if (failure_control != NULL) // failure is now impossible
(*failure_control) = top();
// adjust the type of the phi to the exact klass:
- phi->raise_bottom_type(_gvn.type(cast_obj)->meet(TypePtr::NULL_PTR));
+ phi->raise_bottom_type(_gvn.type(cast_obj)->meet_speculative(TypePtr::NULL_PTR));
}
}
diff --git a/hotspot/src/share/vm/opto/library_call.cpp b/hotspot/src/share/vm/opto/library_call.cpp
index df6c29f..564aa7c 100644
--- a/hotspot/src/share/vm/opto/library_call.cpp
+++ b/hotspot/src/share/vm/opto/library_call.cpp
@@ -304,6 +304,7 @@
bool inline_cipherBlockChaining_AESCrypt(vmIntrinsics::ID id);
Node* inline_cipherBlockChaining_AESCrypt_predicate(bool decrypting);
Node* get_key_start_from_aescrypt_object(Node* aescrypt_object);
+ Node* get_original_key_start_from_aescrypt_object(Node* aescrypt_object);
bool inline_encodeISOArray();
bool inline_updateCRC32();
bool inline_updateBytesCRC32();
@@ -5936,10 +5937,22 @@
Node* k_start = get_key_start_from_aescrypt_object(aescrypt_object);
if (k_start == NULL) return false;
- // Call the stub.
- make_runtime_call(RC_LEAF|RC_NO_FP, OptoRuntime::aescrypt_block_Type(),
- stubAddr, stubName, TypePtr::BOTTOM,
- src_start, dest_start, k_start);
+ if (Matcher::pass_original_key_for_aes()) {
+ // on SPARC we need to pass the original key since key expansion needs to happen in intrinsics due to
+ // compatibility issues between Java key expansion and SPARC crypto instructions
+ Node* original_k_start = get_original_key_start_from_aescrypt_object(aescrypt_object);
+ if (original_k_start == NULL) return false;
+
+ // Call the stub.
+ make_runtime_call(RC_LEAF|RC_NO_FP, OptoRuntime::aescrypt_block_Type(),
+ stubAddr, stubName, TypePtr::BOTTOM,
+ src_start, dest_start, k_start, original_k_start);
+ } else {
+ // Call the stub.
+ make_runtime_call(RC_LEAF|RC_NO_FP, OptoRuntime::aescrypt_block_Type(),
+ stubAddr, stubName, TypePtr::BOTTOM,
+ src_start, dest_start, k_start);
+ }
return true;
}
@@ -6017,14 +6030,29 @@
if (objRvec == NULL) return false;
Node* r_start = array_element_address(objRvec, intcon(0), T_BYTE);
- // Call the stub, passing src_start, dest_start, k_start, r_start and src_len
- make_runtime_call(RC_LEAF|RC_NO_FP,
- OptoRuntime::cipherBlockChaining_aescrypt_Type(),
- stubAddr, stubName, TypePtr::BOTTOM,
- src_start, dest_start, k_start, r_start, len);
+ Node* cbcCrypt;
+ if (Matcher::pass_original_key_for_aes()) {
+ // on SPARC we need to pass the original key since key expansion needs to happen in intrinsics due to
+ // compatibility issues between Java key expansion and SPARC crypto instructions
+ Node* original_k_start = get_original_key_start_from_aescrypt_object(aescrypt_object);
+ if (original_k_start == NULL) return false;
- // return is void so no result needs to be pushed
+ // Call the stub, passing src_start, dest_start, k_start, r_start, src_len and original_k_start
+ cbcCrypt = make_runtime_call(RC_LEAF|RC_NO_FP,
+ OptoRuntime::cipherBlockChaining_aescrypt_Type(),
+ stubAddr, stubName, TypePtr::BOTTOM,
+ src_start, dest_start, k_start, r_start, len, original_k_start);
+ } else {
+ // Call the stub, passing src_start, dest_start, k_start, r_start and src_len
+ cbcCrypt = make_runtime_call(RC_LEAF|RC_NO_FP,
+ OptoRuntime::cipherBlockChaining_aescrypt_Type(),
+ stubAddr, stubName, TypePtr::BOTTOM,
+ src_start, dest_start, k_start, r_start, len);
+ }
+ // return cipher length (int)
+ Node* retvalue = _gvn.transform(new (C) ProjNode(cbcCrypt, TypeFunc::Parms));
+ set_result(retvalue);
return true;
}
@@ -6039,6 +6067,17 @@
return k_start;
}
+//------------------------------get_original_key_start_from_aescrypt_object-----------------------
+Node * LibraryCallKit::get_original_key_start_from_aescrypt_object(Node *aescrypt_object) {
+ Node* objAESCryptKey = load_field_from_object(aescrypt_object, "lastKey", "[B", /*is_exact*/ false);
+ assert (objAESCryptKey != NULL, "wrong version of com.sun.crypto.provider.AESCrypt");
+ if (objAESCryptKey == NULL) return (Node *) NULL;
+
+ // now have the array, need to get the start address of the lastKey array
+ Node* original_k_start = array_element_address(objAESCryptKey, intcon(0), T_BYTE);
+ return original_k_start;
+}
+
//----------------------------inline_cipherBlockChaining_AESCrypt_predicate----------------------------
// Return node representing slow path of predicate check.
// the pseudo code we want to emulate with this predicate is:
diff --git a/hotspot/src/share/vm/opto/loopopts.cpp b/hotspot/src/share/vm/opto/loopopts.cpp
index ba19f74..ac97d3e 100644
--- a/hotspot/src/share/vm/opto/loopopts.cpp
+++ b/hotspot/src/share/vm/opto/loopopts.cpp
@@ -1115,8 +1115,8 @@
Node *n2 = phi->in(i)->in(1)->in(2);
phi1->set_req( i, n1 );
phi2->set_req( i, n2 );
- phi1->set_type( phi1->type()->meet(n1->bottom_type()) );
- phi2->set_type( phi2->type()->meet(n2->bottom_type()) );
+ phi1->set_type( phi1->type()->meet_speculative(n1->bottom_type()));
+ phi2->set_type( phi2->type()->meet_speculative(n2->bottom_type()));
}
// See if these Phis have been made before.
// Register with optimizer
@@ -1189,8 +1189,8 @@
}
phi1->set_req( j, n1 );
phi2->set_req( j, n2 );
- phi1->set_type( phi1->type()->meet(n1->bottom_type()) );
- phi2->set_type( phi2->type()->meet(n2->bottom_type()) );
+ phi1->set_type(phi1->type()->meet_speculative(n1->bottom_type()));
+ phi2->set_type(phi2->type()->meet_speculative(n2->bottom_type()));
}
// See if these Phis have been made before.
diff --git a/hotspot/src/share/vm/opto/matcher.hpp b/hotspot/src/share/vm/opto/matcher.hpp
index f840d0c..c299717 100644
--- a/hotspot/src/share/vm/opto/matcher.hpp
+++ b/hotspot/src/share/vm/opto/matcher.hpp
@@ -286,6 +286,9 @@
// CPU supports misaligned vectors store/load.
static const bool misaligned_vectors_ok();
+ // Should original key array reference be passed to AES stubs
+ static const bool pass_original_key_for_aes();
+
// Used to determine a "low complexity" 64-bit constant. (Zero is simple.)
// The standard of comparison is one (StoreL ConL) vs. two (StoreI ConI).
// Depends on the details of 64-bit constant generation on the CPU.
diff --git a/hotspot/src/share/vm/opto/memnode.cpp b/hotspot/src/share/vm/opto/memnode.cpp
index 14d347b..9e712dc 100644
--- a/hotspot/src/share/vm/opto/memnode.cpp
+++ b/hotspot/src/share/vm/opto/memnode.cpp
@@ -657,7 +657,7 @@
// disregarding "null"-ness.
// (We make an exception for TypeRawPtr::BOTTOM, which is a bit bucket.)
const TypePtr* tp_notnull = tp->join(TypePtr::NOTNULL)->is_ptr();
- assert(cross_check->meet(tp_notnull) == cross_check,
+ assert(cross_check->meet(tp_notnull) == cross_check->remove_speculative(),
"real address must not escape from expected memory type");
}
#endif
@@ -1681,7 +1681,7 @@
// t might actually be lower than _type, if _type is a unique
// concrete subclass of abstract class t.
if (off_beyond_header) { // is the offset beyond the header?
- const Type* jt = t->join(_type);
+ const Type* jt = t->join_speculative(_type);
// In any case, do not allow the join, per se, to empty out the type.
if (jt->empty() && !t->empty()) {
// This can happen if a interface-typed array narrows to a class type.
diff --git a/hotspot/src/share/vm/opto/multnode.cpp b/hotspot/src/share/vm/opto/multnode.cpp
index 106a008..d9e04a2 100644
--- a/hotspot/src/share/vm/opto/multnode.cpp
+++ b/hotspot/src/share/vm/opto/multnode.cpp
@@ -94,7 +94,7 @@
if ((_con == TypeFunc::Parms) &&
n->is_CallStaticJava() && n->as_CallStaticJava()->is_boxing_method()) {
// The result of autoboxing is always non-null on normal path.
- t = t->join(TypePtr::NOTNULL);
+ t = t->join_speculative(TypePtr::NOTNULL);
}
return t;
}
diff --git a/hotspot/src/share/vm/opto/node.cpp b/hotspot/src/share/vm/opto/node.cpp
index 06e74b6..d3ee58a 100644
--- a/hotspot/src/share/vm/opto/node.cpp
+++ b/hotspot/src/share/vm/opto/node.cpp
@@ -995,13 +995,13 @@
if (is_Type()) {
TypeNode *n = this->as_Type();
if (VerifyAliases) {
- assert(new_type->higher_equal(n->type()), "new type must refine old type");
+ assert(new_type->higher_equal_speculative(n->type()), "new type must refine old type");
}
n->set_type(new_type);
} else if (is_Load()) {
LoadNode *n = this->as_Load();
if (VerifyAliases) {
- assert(new_type->higher_equal(n->type()), "new type must refine old type");
+ assert(new_type->higher_equal_speculative(n->type()), "new type must refine old type");
}
n->set_type(new_type);
}
diff --git a/hotspot/src/share/vm/opto/output.cpp b/hotspot/src/share/vm/opto/output.cpp
index f362669..9ddb263 100644
--- a/hotspot/src/share/vm/opto/output.cpp
+++ b/hotspot/src/share/vm/opto/output.cpp
@@ -344,6 +344,11 @@
uint* jmp_offset = NEW_RESOURCE_ARRAY(uint,nblocks);
uint* jmp_size = NEW_RESOURCE_ARRAY(uint,nblocks);
int* jmp_nidx = NEW_RESOURCE_ARRAY(int ,nblocks);
+
+ // Collect worst case block paddings
+ int* block_worst_case_pad = NEW_RESOURCE_ARRAY(int, nblocks);
+ memset(block_worst_case_pad, 0, nblocks * sizeof(int));
+
DEBUG_ONLY( uint *jmp_target = NEW_RESOURCE_ARRAY(uint,nblocks); )
DEBUG_ONLY( uint *jmp_rule = NEW_RESOURCE_ARRAY(uint,nblocks); )
@@ -460,6 +465,7 @@
last_avoid_back_to_back_adr += max_loop_pad;
}
blk_size += max_loop_pad;
+ block_worst_case_pad[i + 1] = max_loop_pad;
}
}
@@ -499,9 +505,16 @@
if (bnum > i) { // adjust following block's offset
offset -= adjust_block_start;
}
+
+ // This block can be a loop header, account for the padding
+ // in the previous block.
+ int block_padding = block_worst_case_pad[i];
+ assert(i == 0 || block_padding == 0 || br_offs >= block_padding, "Should have at least a padding on top");
// In the following code a nop could be inserted before
// the branch which will increase the backward distance.
- bool needs_padding = ((uint)br_offs == last_may_be_short_branch_adr);
+ bool needs_padding = ((uint)(br_offs - block_padding) == last_may_be_short_branch_adr);
+ assert(!needs_padding || jmp_offset[i] == 0, "padding only branches at the beginning of block");
+
if (needs_padding && offset <= 0)
offset -= nop_size;
diff --git a/hotspot/src/share/vm/opto/parse.hpp b/hotspot/src/share/vm/opto/parse.hpp
index 1e367d4..6da027e 100644
--- a/hotspot/src/share/vm/opto/parse.hpp
+++ b/hotspot/src/share/vm/opto/parse.hpp
@@ -141,6 +141,13 @@
GrowableArray<InlineTree*> subtrees() { return _subtrees; }
void print_value_on(outputStream* st) const PRODUCT_RETURN;
+
+ bool _forced_inline; // Inlining was forced by CompilerOracle or ciReplay
+ bool forced_inline() const { return _forced_inline; }
+ // Count number of nodes in this subtree
+ int count() const;
+ // Dump inlining replay data to the stream.
+ void dump_replay_data(outputStream* out);
};
diff --git a/hotspot/src/share/vm/opto/parse1.cpp b/hotspot/src/share/vm/opto/parse1.cpp
index de7188f..747c78e 100644
--- a/hotspot/src/share/vm/opto/parse1.cpp
+++ b/hotspot/src/share/vm/opto/parse1.cpp
@@ -1649,7 +1649,7 @@
assert(bt1 != Type::BOTTOM, "should not be building conflict phis");
map()->set_req(j, _gvn.transform_no_reclaim(phi));
debug_only(const Type* bt2 = phi->bottom_type());
- assert(bt2->higher_equal(bt1), "must be consistent with type-flow");
+ assert(bt2->higher_equal_speculative(bt1), "must be consistent with type-flow");
record_for_igvn(phi);
}
}
@@ -2022,7 +2022,7 @@
!tp->klass()->is_interface()) {
// sharpen the type eagerly; this eases certain assert checking
if (tp->higher_equal(TypeInstPtr::NOTNULL))
- tr = tr->join(TypeInstPtr::NOTNULL)->is_instptr();
+ tr = tr->join_speculative(TypeInstPtr::NOTNULL)->is_instptr();
value = _gvn.transform(new (C) CheckCastPPNode(0,value,tr));
}
}
diff --git a/hotspot/src/share/vm/opto/parse2.cpp b/hotspot/src/share/vm/opto/parse2.cpp
index 7574621..5435399 100644
--- a/hotspot/src/share/vm/opto/parse2.cpp
+++ b/hotspot/src/share/vm/opto/parse2.cpp
@@ -88,7 +88,7 @@
if (toop->klass()->as_instance_klass()->unique_concrete_subklass()) {
// If we load from "AbstractClass[]" we must see "ConcreteSubClass".
const Type* subklass = Type::get_const_type(toop->klass());
- elemtype = subklass->join(el);
+ elemtype = subklass->join_speculative(el);
}
}
}
@@ -1278,7 +1278,7 @@
// Bool(CmpP(LoadKlass(obj._klass), ConP(Foo.klass)), [eq])
// or the narrowOop equivalent.
const Type* obj_type = _gvn.type(obj);
- const TypeOopPtr* tboth = obj_type->join(con_type)->isa_oopptr();
+ const TypeOopPtr* tboth = obj_type->join_speculative(con_type)->isa_oopptr();
if (tboth != NULL && tboth->klass_is_exact() && tboth != obj_type &&
tboth->higher_equal(obj_type)) {
// obj has to be of the exact type Foo if the CmpP succeeds.
@@ -1288,7 +1288,7 @@
(jvms->is_loc(obj_in_map) || jvms->is_stk(obj_in_map))) {
TypeNode* ccast = new (C) CheckCastPPNode(control(), obj, tboth);
const Type* tcc = ccast->as_Type()->type();
- assert(tcc != obj_type && tcc->higher_equal(obj_type), "must improve");
+ assert(tcc != obj_type && tcc->higher_equal_speculative(obj_type), "must improve");
// Delay transform() call to allow recovery of pre-cast value
// at the control merge.
_gvn.set_type_bottom(ccast);
@@ -1318,7 +1318,7 @@
switch (btest) {
case BoolTest::eq: // Constant test?
{
- const Type* tboth = tcon->join(tval);
+ const Type* tboth = tcon->join_speculative(tval);
if (tboth == tval) break; // Nothing to gain.
if (tcon->isa_int()) {
ccast = new (C) CastIINode(val, tboth);
@@ -1352,7 +1352,7 @@
if (ccast != NULL) {
const Type* tcc = ccast->as_Type()->type();
- assert(tcc != tval && tcc->higher_equal(tval), "must improve");
+ assert(tcc != tval && tcc->higher_equal_speculative(tval), "must improve");
// Delay transform() call to allow recovery of pre-cast value
// at the control merge.
ccast->set_req(0, control());
diff --git a/hotspot/src/share/vm/opto/parse3.cpp b/hotspot/src/share/vm/opto/parse3.cpp
index 8c545f3..a72fb7e 100644
--- a/hotspot/src/share/vm/opto/parse3.cpp
+++ b/hotspot/src/share/vm/opto/parse3.cpp
@@ -337,7 +337,7 @@
// should_be_constant = (oop not scavengable || ScavengeRootsInCode >= 2)
// An oop is not scavengable if it is in the perm gen.
if (stable_type != NULL && con_type != NULL && con_type->isa_oopptr())
- con_type = con_type->join(stable_type);
+ con_type = con_type->join_speculative(stable_type);
break;
case T_ILLEGAL:
diff --git a/hotspot/src/share/vm/opto/phaseX.cpp b/hotspot/src/share/vm/opto/phaseX.cpp
index 3e6ab4e..fd08b06 100644
--- a/hotspot/src/share/vm/opto/phaseX.cpp
+++ b/hotspot/src/share/vm/opto/phaseX.cpp
@@ -323,6 +323,23 @@
}
}
+
+void NodeHash::check_no_speculative_types() {
+#ifdef ASSERT
+ uint max = size();
+ Node *sentinel_node = sentinel();
+ for (uint i = 0; i < max; ++i) {
+ Node *n = at(i);
+ if(n != NULL && n != sentinel_node && n->is_Type()) {
+ TypeNode* tn = n->as_Type();
+ const Type* t = tn->type();
+ const Type* t_no_spec = t->remove_speculative();
+ assert(t == t_no_spec, "dead node in hash table or missed node during speculative cleanup");
+ }
+ }
+#endif
+}
+
#ifndef PRODUCT
//------------------------------dump-------------------------------------------
// Dump statistics for the hash table
@@ -1392,11 +1409,11 @@
assert(UseTypeSpeculation, "speculation is off");
for (uint i = 0; i < _types.Size(); i++) {
const Type* t = _types.fast_lookup(i);
- if (t != NULL && t->isa_oopptr()) {
- const TypeOopPtr* to = t->is_oopptr();
- _types.map(i, to->remove_speculative());
+ if (t != NULL) {
+ _types.map(i, t->remove_speculative());
}
}
+ _table.check_no_speculative_types();
}
//=============================================================================
diff --git a/hotspot/src/share/vm/opto/phaseX.hpp b/hotspot/src/share/vm/opto/phaseX.hpp
index d03d47d..fcdd47e 100644
--- a/hotspot/src/share/vm/opto/phaseX.hpp
+++ b/hotspot/src/share/vm/opto/phaseX.hpp
@@ -92,7 +92,8 @@
}
void remove_useless_nodes(VectorSet &useful); // replace with sentinel
- void replace_with(NodeHash* nh);
+ void replace_with(NodeHash* nh);
+ void check_no_speculative_types(); // Check no speculative part for type nodes in table
Node *sentinel() { return _sentinel; }
@@ -501,6 +502,9 @@
Deoptimization::DeoptReason reason);
void remove_speculative_types();
+ void check_no_speculative_types() {
+ _table.check_no_speculative_types();
+ }
#ifndef PRODUCT
protected:
diff --git a/hotspot/src/share/vm/opto/runtime.cpp b/hotspot/src/share/vm/opto/runtime.cpp
index 6e09cb7..3ec8e7b 100644
--- a/hotspot/src/share/vm/opto/runtime.cpp
+++ b/hotspot/src/share/vm/opto/runtime.cpp
@@ -814,12 +814,18 @@
const TypeFunc* OptoRuntime::aescrypt_block_Type() {
// create input type (domain)
int num_args = 3;
+ if (Matcher::pass_original_key_for_aes()) {
+ num_args = 4;
+ }
int argcnt = num_args;
const Type** fields = TypeTuple::fields(argcnt);
int argp = TypeFunc::Parms;
fields[argp++] = TypePtr::NOTNULL; // src
fields[argp++] = TypePtr::NOTNULL; // dest
fields[argp++] = TypePtr::NOTNULL; // k array
+ if (Matcher::pass_original_key_for_aes()) {
+ fields[argp++] = TypePtr::NOTNULL; // original k array
+ }
assert(argp == TypeFunc::Parms+argcnt, "correct decoding");
const TypeTuple* domain = TypeTuple::make(TypeFunc::Parms+argcnt, fields);
@@ -856,6 +862,9 @@
const TypeFunc* OptoRuntime::cipherBlockChaining_aescrypt_Type() {
// create input type (domain)
int num_args = 5;
+ if (Matcher::pass_original_key_for_aes()) {
+ num_args = 6;
+ }
int argcnt = num_args;
const Type** fields = TypeTuple::fields(argcnt);
int argp = TypeFunc::Parms;
@@ -864,13 +873,16 @@
fields[argp++] = TypePtr::NOTNULL; // k array
fields[argp++] = TypePtr::NOTNULL; // r array
fields[argp++] = TypeInt::INT; // src len
+ if (Matcher::pass_original_key_for_aes()) {
+ fields[argp++] = TypePtr::NOTNULL; // original k array
+ }
assert(argp == TypeFunc::Parms+argcnt, "correct decoding");
const TypeTuple* domain = TypeTuple::make(TypeFunc::Parms+argcnt, fields);
- // no result type needed
+ // returning cipher len (int)
fields = TypeTuple::fields(1);
- fields[TypeFunc::Parms+0] = NULL; // void
- const TypeTuple* range = TypeTuple::make(TypeFunc::Parms, fields);
+ fields[TypeFunc::Parms+0] = TypeInt::INT;
+ const TypeTuple* range = TypeTuple::make(TypeFunc::Parms+1, fields);
return TypeFunc::make(domain, range);
}
diff --git a/hotspot/src/share/vm/opto/type.cpp b/hotspot/src/share/vm/opto/type.cpp
index 3f62819..181e69a 100644
--- a/hotspot/src/share/vm/opto/type.cpp
+++ b/hotspot/src/share/vm/opto/type.cpp
@@ -236,6 +236,13 @@
return !t1->eq(t2); // Return ZERO if equal
}
+const Type* Type::maybe_remove_speculative(bool include_speculative) const {
+ if (!include_speculative) {
+ return remove_speculative();
+ }
+ return this;
+}
+
//------------------------------hash-------------------------------------------
int Type::uhash( const Type *const t ) {
return t->hash();
@@ -628,41 +635,44 @@
//------------------------------meet-------------------------------------------
// Compute the MEET of two types. NOT virtual. It enforces that meet is
// commutative and the lattice is symmetric.
-const Type *Type::meet( const Type *t ) const {
+const Type *Type::meet_helper(const Type *t, bool include_speculative) const {
if (isa_narrowoop() && t->isa_narrowoop()) {
- const Type* result = make_ptr()->meet(t->make_ptr());
+ const Type* result = make_ptr()->meet_helper(t->make_ptr(), include_speculative);
return result->make_narrowoop();
}
if (isa_narrowklass() && t->isa_narrowklass()) {
- const Type* result = make_ptr()->meet(t->make_ptr());
+ const Type* result = make_ptr()->meet_helper(t->make_ptr(), include_speculative);
return result->make_narrowklass();
}
- const Type *mt = xmeet(t);
+ const Type *this_t = maybe_remove_speculative(include_speculative);
+ t = t->maybe_remove_speculative(include_speculative);
+
+ const Type *mt = this_t->xmeet(t);
if (isa_narrowoop() || t->isa_narrowoop()) return mt;
if (isa_narrowklass() || t->isa_narrowklass()) return mt;
#ifdef ASSERT
- assert( mt == t->xmeet(this), "meet not commutative" );
+ assert(mt == t->xmeet(this_t), "meet not commutative");
const Type* dual_join = mt->_dual;
const Type *t2t = dual_join->xmeet(t->_dual);
- const Type *t2this = dual_join->xmeet( _dual);
+ const Type *t2this = dual_join->xmeet(this_t->_dual);
// Interface meet Oop is Not Symmetric:
// Interface:AnyNull meet Oop:AnyNull == Interface:AnyNull
// Interface:NotNull meet Oop:NotNull == java/lang/Object:NotNull
- if( !interface_vs_oop(t) && (t2t != t->_dual || t2this != _dual) ) {
+ if( !interface_vs_oop(t) && (t2t != t->_dual || t2this != this_t->_dual) ) {
tty->print_cr("=== Meet Not Symmetric ===");
- tty->print("t = "); t->dump(); tty->cr();
- tty->print("this= "); dump(); tty->cr();
- tty->print("mt=(t meet this)= "); mt->dump(); tty->cr();
+ tty->print("t = "); t->dump(); tty->cr();
+ tty->print("this= "); this_t->dump(); tty->cr();
+ tty->print("mt=(t meet this)= "); mt->dump(); tty->cr();
- tty->print("t_dual= "); t->_dual->dump(); tty->cr();
- tty->print("this_dual= "); _dual->dump(); tty->cr();
- tty->print("mt_dual= "); mt->_dual->dump(); tty->cr();
+ tty->print("t_dual= "); t->_dual->dump(); tty->cr();
+ tty->print("this_dual= "); this_t->_dual->dump(); tty->cr();
+ tty->print("mt_dual= "); mt->_dual->dump(); tty->cr();
- tty->print("mt_dual meet t_dual= "); t2t ->dump(); tty->cr();
- tty->print("mt_dual meet this_dual= "); t2this ->dump(); tty->cr();
+ tty->print("mt_dual meet t_dual= "); t2t ->dump(); tty->cr();
+ tty->print("mt_dual meet this_dual= "); t2this ->dump(); tty->cr();
fatal("meet not symmetric" );
}
@@ -754,8 +764,8 @@
}
//-----------------------------filter------------------------------------------
-const Type *Type::filter( const Type *kills ) const {
- const Type* ft = join(kills);
+const Type *Type::filter_helper(const Type *kills, bool include_speculative) const {
+ const Type* ft = join_helper(kills, include_speculative);
if (ft->empty())
return Type::TOP; // Canonical empty value
return ft;
@@ -1309,8 +1319,8 @@
}
//-----------------------------filter------------------------------------------
-const Type *TypeInt::filter( const Type *kills ) const {
- const TypeInt* ft = join(kills)->isa_int();
+const Type *TypeInt::filter_helper(const Type *kills, bool include_speculative) const {
+ const TypeInt* ft = join_helper(kills, include_speculative)->isa_int();
if (ft == NULL || ft->empty())
return Type::TOP; // Canonical empty value
if (ft->_widen < this->_widen) {
@@ -1570,8 +1580,8 @@
}
//-----------------------------filter------------------------------------------
-const Type *TypeLong::filter( const Type *kills ) const {
- const TypeLong* ft = join(kills)->isa_long();
+const Type *TypeLong::filter_helper(const Type *kills, bool include_speculative) const {
+ const TypeLong* ft = join_helper(kills, include_speculative)->isa_long();
if (ft == NULL || ft->empty())
return Type::TOP; // Canonical empty value
if (ft->_widen < this->_widen) {
@@ -1726,7 +1736,7 @@
total_fields++;
field_array = fields(total_fields);
// Use get_const_type here because it respects UseUniqueSubclasses:
- field_array[pos++] = get_const_type(recv)->join(TypePtr::NOTNULL);
+ field_array[pos++] = get_const_type(recv)->join_speculative(TypePtr::NOTNULL);
} else {
field_array = fields(total_fields);
}
@@ -1916,7 +1926,7 @@
case Array: { // Meeting 2 arrays?
const TypeAry *a = t->is_ary();
- return TypeAry::make(_elem->meet(a->_elem),
+ return TypeAry::make(_elem->meet_speculative(a->_elem),
_size->xmeet(a->_size)->is_int(),
_stable & a->_stable);
}
@@ -1949,6 +1959,13 @@
return (intptr_t)_elem + (intptr_t)_size + (_stable ? 43 : 0);
}
+/**
+ * Return same type without a speculative part in the element
+ */
+const Type* TypeAry::remove_speculative() const {
+ return make(_elem->remove_speculative(), _size, _stable);
+}
+
//----------------------interface_vs_oop---------------------------------------
#ifdef ASSERT
bool TypeAry::interface_vs_oop(const Type *t) const {
@@ -2560,14 +2577,14 @@
return res;
}
- if (res->isa_oopptr() != NULL) {
+ const TypeOopPtr* res_oopptr = res->is_oopptr();
+ if (res_oopptr->speculative() != NULL) {
// type->speculative() == NULL means that speculation is no better
// than type, i.e. type->speculative() == type. So there are 2
// ways to represent the fact that we have no useful speculative
// data and we should use a single one to be able to test for
// equality between types. Check whether type->speculative() ==
// type and set speculative to NULL if it is the case.
- const TypeOopPtr* res_oopptr = res->is_oopptr();
if (res_oopptr->remove_speculative() == res_oopptr->speculative()) {
return res_oopptr->remove_speculative();
}
@@ -2633,7 +2650,7 @@
case OopPtr: { // Meeting to other OopPtrs
const TypeOopPtr *tp = t->is_oopptr();
int instance_id = meet_instance_id(tp->instance_id());
- const TypeOopPtr* speculative = meet_speculative(tp);
+ const TypeOopPtr* speculative = xmeet_speculative(tp);
return make(meet_ptr(tp->ptr()), meet_offset(tp->offset()), instance_id, speculative);
}
@@ -2787,9 +2804,9 @@
//-----------------------------filter------------------------------------------
// Do not allow interface-vs.-noninterface joins to collapse to top.
-const Type *TypeOopPtr::filter(const Type *kills) const {
+const Type *TypeOopPtr::filter_helper(const Type *kills, bool include_speculative) const {
- const Type* ft = join(kills);
+ const Type* ft = join_helper(kills, include_speculative);
const TypeInstPtr* ftip = ft->isa_instptr();
const TypeInstPtr* ktip = kills->isa_instptr();
@@ -2901,7 +2918,10 @@
/**
* Return same type without a speculative part
*/
-const TypeOopPtr* TypeOopPtr::remove_speculative() const {
+const Type* TypeOopPtr::remove_speculative() const {
+ if (_speculative == NULL) {
+ return this;
+ }
return make(_ptr, _offset, _instance_id, NULL);
}
@@ -2927,7 +2947,7 @@
*
* @param other type to meet with
*/
-const TypeOopPtr* TypeOopPtr::meet_speculative(const TypeOopPtr* other) const {
+const TypeOopPtr* TypeOopPtr::xmeet_speculative(const TypeOopPtr* other) const {
bool this_has_spec = (_speculative != NULL);
bool other_has_spec = (other->speculative() != NULL);
@@ -2952,7 +2972,7 @@
other_spec = other;
}
- return this_spec->meet(other_spec)->is_oopptr();
+ return this_spec->meet_speculative(other_spec)->is_oopptr();
}
/**
@@ -3111,7 +3131,7 @@
int off = meet_offset(tinst->offset());
PTR ptr = meet_ptr(tinst->ptr());
int instance_id = meet_instance_id(tinst->instance_id());
- const TypeOopPtr* speculative = meet_speculative(tinst);
+ const TypeOopPtr* speculative = xmeet_speculative(tinst);
const TypeInstPtr *loaded = is_loaded() ? this : tinst;
const TypeInstPtr *unloaded = is_loaded() ? tinst : this;
@@ -3188,7 +3208,7 @@
int offset = meet_offset(tp->offset());
PTR ptr = meet_ptr(tp->ptr());
int instance_id = meet_instance_id(tp->instance_id());
- const TypeOopPtr* speculative = meet_speculative(tp);
+ const TypeOopPtr* speculative = xmeet_speculative(tp);
switch (ptr) {
case TopPTR:
case AnyNull: // Fall 'down' to dual of object klass
@@ -3238,14 +3258,14 @@
case TopPTR:
case AnyNull: {
int instance_id = meet_instance_id(InstanceTop);
- const TypeOopPtr* speculative = meet_speculative(tp);
+ const TypeOopPtr* speculative = xmeet_speculative(tp);
return make(ptr, klass(), klass_is_exact(),
(ptr == Constant ? const_oop() : NULL), offset, instance_id, speculative);
}
case NotNull:
case BotPTR: {
int instance_id = meet_instance_id(tp->instance_id());
- const TypeOopPtr* speculative = meet_speculative(tp);
+ const TypeOopPtr* speculative = xmeet_speculative(tp);
return TypeOopPtr::make(ptr, offset, instance_id, speculative);
}
default: typerr(t);
@@ -3297,7 +3317,7 @@
int off = meet_offset( tinst->offset() );
PTR ptr = meet_ptr( tinst->ptr() );
int instance_id = meet_instance_id(tinst->instance_id());
- const TypeOopPtr* speculative = meet_speculative(tinst);
+ const TypeOopPtr* speculative = xmeet_speculative(tinst);
// Check for easy case; klasses are equal (and perhaps not loaded!)
// If we have constants, then we created oops so classes are loaded
@@ -3546,7 +3566,10 @@
return make(_ptr, klass(), klass_is_exact(), const_oop(), xadd_offset(offset), _instance_id, add_offset_speculative(offset));
}
-const TypeOopPtr *TypeInstPtr::remove_speculative() const {
+const Type *TypeInstPtr::remove_speculative() const {
+ if (_speculative == NULL) {
+ return this;
+ }
return make(_ptr, klass(), klass_is_exact(), const_oop(), _offset, _instance_id, NULL);
}
@@ -3748,14 +3771,14 @@
case TopPTR:
case AnyNull: {
int instance_id = meet_instance_id(InstanceTop);
- const TypeOopPtr* speculative = meet_speculative(tp);
+ const TypeOopPtr* speculative = xmeet_speculative(tp);
return make(ptr, (ptr == Constant ? const_oop() : NULL),
_ary, _klass, _klass_is_exact, offset, instance_id, speculative);
}
case BotPTR:
case NotNull: {
int instance_id = meet_instance_id(tp->instance_id());
- const TypeOopPtr* speculative = meet_speculative(tp);
+ const TypeOopPtr* speculative = xmeet_speculative(tp);
return TypeOopPtr::make(ptr, offset, instance_id, speculative);
}
default: ShouldNotReachHere();
@@ -3793,10 +3816,10 @@
case AryPtr: { // Meeting 2 references?
const TypeAryPtr *tap = t->is_aryptr();
int off = meet_offset(tap->offset());
- const TypeAry *tary = _ary->meet(tap->_ary)->is_ary();
+ const TypeAry *tary = _ary->meet_speculative(tap->_ary)->is_ary();
PTR ptr = meet_ptr(tap->ptr());
int instance_id = meet_instance_id(tap->instance_id());
- const TypeOopPtr* speculative = meet_speculative(tap);
+ const TypeOopPtr* speculative = xmeet_speculative(tap);
ciKlass* lazy_klass = NULL;
if (tary->_elem->isa_int()) {
// Integral array element types have irrelevant lattice relations.
@@ -3812,17 +3835,17 @@
tary = TypeAry::make(Type::BOTTOM, tary->_size, tary->_stable);
}
} else // Non integral arrays.
- // Must fall to bottom if exact klasses in upper lattice
- // are not equal or super klass is exact.
- if ( above_centerline(ptr) && klass() != tap->klass() &&
- // meet with top[] and bottom[] are processed further down:
- tap ->_klass != NULL && this->_klass != NULL &&
- // both are exact and not equal:
- ((tap ->_klass_is_exact && this->_klass_is_exact) ||
- // 'tap' is exact and super or unrelated:
- (tap ->_klass_is_exact && !tap->klass()->is_subtype_of(klass())) ||
- // 'this' is exact and super or unrelated:
- (this->_klass_is_exact && !klass()->is_subtype_of(tap->klass())))) {
+ // Must fall to bottom if exact klasses in upper lattice
+ // are not equal or super klass is exact.
+ if ((above_centerline(ptr) || ptr == Constant) && klass() != tap->klass() &&
+ // meet with top[] and bottom[] are processed further down:
+ tap->_klass != NULL && this->_klass != NULL &&
+ // both are exact and not equal:
+ ((tap->_klass_is_exact && this->_klass_is_exact) ||
+ // 'tap' is exact and super or unrelated:
+ (tap->_klass_is_exact && !tap->klass()->is_subtype_of(klass())) ||
+ // 'this' is exact and super or unrelated:
+ (this->_klass_is_exact && !klass()->is_subtype_of(tap->klass())))) {
tary = TypeAry::make(Type::BOTTOM, tary->_size, tary->_stable);
return make(NotNull, NULL, tary, lazy_klass, false, off, InstanceBot);
}
@@ -3876,7 +3899,7 @@
int offset = meet_offset(tp->offset());
PTR ptr = meet_ptr(tp->ptr());
int instance_id = meet_instance_id(tp->instance_id());
- const TypeOopPtr* speculative = meet_speculative(tp);
+ const TypeOopPtr* speculative = xmeet_speculative(tp);
switch (ptr) {
case TopPTR:
case AnyNull: // Fall 'down' to dual of object klass
@@ -3990,8 +4013,8 @@
return make(_ptr, _const_oop, _ary, _klass, _klass_is_exact, xadd_offset(offset), _instance_id, add_offset_speculative(offset));
}
-const TypeOopPtr *TypeAryPtr::remove_speculative() const {
- return make(_ptr, _const_oop, _ary, _klass, _klass_is_exact, _offset, _instance_id, NULL);
+const Type *TypeAryPtr::remove_speculative() const {
+ return make(_ptr, _const_oop, _ary->remove_speculative()->is_ary(), _klass, _klass_is_exact, _offset, _instance_id, NULL);
}
//=============================================================================
@@ -4031,9 +4054,9 @@
}
-const Type *TypeNarrowPtr::filter( const Type *kills ) const {
+const Type *TypeNarrowPtr::filter_helper(const Type *kills, bool include_speculative) const {
if (isa_same_narrowptr(kills)) {
- const Type* ft =_ptrtype->filter(is_same_narrowptr(kills)->_ptrtype);
+ const Type* ft =_ptrtype->filter_helper(is_same_narrowptr(kills)->_ptrtype, include_speculative);
if (ft->empty())
return Type::TOP; // Canonical empty value
if (ft->isa_ptr()) {
@@ -4041,7 +4064,7 @@
}
return ft;
} else if (kills->isa_ptr()) {
- const Type* ft = _ptrtype->join(kills);
+ const Type* ft = _ptrtype->join_helper(kills, include_speculative);
if (ft->empty())
return Type::TOP; // Canonical empty value
return ft;
@@ -4171,8 +4194,8 @@
//-----------------------------filter------------------------------------------
// Do not allow interface-vs.-noninterface joins to collapse to top.
-const Type *TypeMetadataPtr::filter( const Type *kills ) const {
- const TypeMetadataPtr* ft = join(kills)->isa_metadataptr();
+const Type *TypeMetadataPtr::filter_helper(const Type *kills, bool include_speculative) const {
+ const TypeMetadataPtr* ft = join_helper(kills, include_speculative)->isa_metadataptr();
if (ft == NULL || ft->empty())
return Type::TOP; // Canonical empty value
return ft;
@@ -4374,10 +4397,10 @@
}
// Do not allow interface-vs.-noninterface joins to collapse to top.
-const Type *TypeKlassPtr::filter(const Type *kills) const {
+const Type *TypeKlassPtr::filter_helper(const Type *kills, bool include_speculative) const {
// logic here mirrors the one from TypeOopPtr::filter. See comments
// there.
- const Type* ft = join(kills);
+ const Type* ft = join_helper(kills, include_speculative);
const TypeKlassPtr* ftkp = ft->isa_klassptr();
const TypeKlassPtr* ktkp = kills->isa_klassptr();
diff --git a/hotspot/src/share/vm/opto/type.hpp b/hotspot/src/share/vm/opto/type.hpp
index 9810edf..747c29c 100644
--- a/hotspot/src/share/vm/opto/type.hpp
+++ b/hotspot/src/share/vm/opto/type.hpp
@@ -164,6 +164,8 @@
virtual bool interface_vs_oop_helper(const Type *t) const;
#endif
+ const Type *meet_helper(const Type *t, bool include_speculative) const;
+
protected:
// Each class of type is also identified by its base.
const TYPES _base; // Enum of Types type
@@ -171,6 +173,10 @@
Type( TYPES t ) : _dual(NULL), _base(t) {} // Simple types
// ~Type(); // Use fast deallocation
const Type *hashcons(); // Hash-cons the type
+ virtual const Type *filter_helper(const Type *kills, bool include_speculative) const;
+ const Type *join_helper(const Type *t, bool include_speculative) const {
+ return dual()->meet_helper(t->dual(), include_speculative)->dual();
+ }
public:
@@ -202,10 +208,24 @@
// Test for equivalence of types
static int cmp( const Type *const t1, const Type *const t2 );
// Test for higher or equal in lattice
- int higher_equal( const Type *t ) const { return !cmp(meet(t),t); }
+ // Variant that drops the speculative part of the types
+ int higher_equal(const Type *t) const {
+ return !cmp(meet(t),t->remove_speculative());
+ }
+ // Variant that keeps the speculative part of the types
+ int higher_equal_speculative(const Type *t) const {
+ return !cmp(meet_speculative(t),t);
+ }
// MEET operation; lower in lattice.
- const Type *meet( const Type *t ) const;
+ // Variant that drops the speculative part of the types
+ const Type *meet(const Type *t) const {
+ return meet_helper(t, false);
+ }
+ // Variant that keeps the speculative part of the types
+ const Type *meet_speculative(const Type *t) const {
+ return meet_helper(t, true);
+ }
// WIDEN: 'widens' for Ints and other range types
virtual const Type *widen( const Type *old, const Type* limit ) const { return this; }
// NARROW: complement for widen, used by pessimistic phases
@@ -221,13 +241,26 @@
// JOIN operation; higher in lattice. Done by finding the dual of the
// meet of the dual of the 2 inputs.
- const Type *join( const Type *t ) const {
- return dual()->meet(t->dual())->dual(); }
+ // Variant that drops the speculative part of the types
+ const Type *join(const Type *t) const {
+ return join_helper(t, false);
+ }
+ // Variant that keeps the speculative part of the types
+ const Type *join_speculative(const Type *t) const {
+ return join_helper(t, true);
+ }
// Modified version of JOIN adapted to the needs Node::Value.
// Normalizes all empty values to TOP. Does not kill _widen bits.
// Currently, it also works around limitations involving interface types.
- virtual const Type *filter( const Type *kills ) const;
+ // Variant that drops the speculative part of the types
+ const Type *filter(const Type *kills) const {
+ return filter_helper(kills, false);
+ }
+ // Variant that keeps the speculative part of the types
+ const Type *filter_speculative(const Type *kills) const {
+ return filter_helper(kills, true);
+ }
#ifdef ASSERT
// One type is interface, the other is oop
@@ -383,6 +416,8 @@
// Speculative type. See TypeInstPtr
virtual ciKlass* speculative_type() const { return NULL; }
+ const Type* maybe_remove_speculative(bool include_speculative) const;
+ virtual const Type* remove_speculative() const { return this; }
private:
// support arrays
@@ -450,12 +485,14 @@
// upper bound, inclusive.
class TypeInt : public Type {
TypeInt( jint lo, jint hi, int w );
+protected:
+ virtual const Type *filter_helper(const Type *kills, bool include_speculative) const;
+
public:
virtual bool eq( const Type *t ) const;
virtual int hash() const; // Type specific hashing
virtual bool singleton(void) const; // TRUE if type is a singleton
virtual bool empty(void) const; // TRUE if type is vacuous
-public:
const jint _lo, _hi; // Lower bound, upper bound
const short _widen; // Limit on times we widen this sucker
@@ -475,7 +512,6 @@
virtual const Type *widen( const Type *t, const Type* limit_type ) const;
virtual const Type *narrow( const Type *t ) const;
// Do not kill _widen bits.
- virtual const Type *filter( const Type *kills ) const;
// Convenience common pre-built types.
static const TypeInt *MINUS_1;
static const TypeInt *ZERO;
@@ -506,6 +542,9 @@
// an upper bound, inclusive.
class TypeLong : public Type {
TypeLong( jlong lo, jlong hi, int w );
+protected:
+ // Do not kill _widen bits.
+ virtual const Type *filter_helper(const Type *kills, bool include_speculative) const;
public:
virtual bool eq( const Type *t ) const;
virtual int hash() const; // Type specific hashing
@@ -530,8 +569,6 @@
virtual const Type *xdual() const; // Compute dual right now.
virtual const Type *widen( const Type *t, const Type* limit_type ) const;
virtual const Type *narrow( const Type *t ) const;
- // Do not kill _widen bits.
- virtual const Type *filter( const Type *kills ) const;
// Convenience common pre-built types.
static const TypeLong *MINUS_1;
static const TypeLong *ZERO;
@@ -622,6 +659,7 @@
virtual const Type *xmeet( const Type *t ) const;
virtual const Type *xdual() const; // Compute dual right now.
bool ary_must_be_exact() const; // true if arrays of such are never generic
+ virtual const Type* remove_speculative() const;
#ifdef ASSERT
// One type is interface, the other is oop
virtual bool interface_vs_oop(const Type *t) const;
@@ -832,7 +870,7 @@
// utility methods to work on the speculative part of the type
const TypeOopPtr* dual_speculative() const;
- const TypeOopPtr* meet_speculative(const TypeOopPtr* other) const;
+ const TypeOopPtr* xmeet_speculative(const TypeOopPtr* other) const;
bool eq_speculative(const TypeOopPtr* other) const;
int hash_speculative() const;
const TypeOopPtr* add_offset_speculative(intptr_t offset) const;
@@ -840,6 +878,9 @@
void dump_speculative(outputStream *st) const;
#endif
+ // Do not allow interface-vs.-noninterface joins to collapse to top.
+ virtual const Type *filter_helper(const Type *kills, bool include_speculative) const;
+
public:
// Creates a type given a klass. Correctly handles multi-dimensional arrays
// Respects UseUniqueSubclasses.
@@ -895,16 +936,13 @@
virtual const TypePtr *add_offset( intptr_t offset ) const;
// Return same type without a speculative part
- virtual const TypeOopPtr* remove_speculative() const;
+ virtual const Type* remove_speculative() const;
virtual const Type *xmeet(const Type *t) const;
virtual const Type *xdual() const; // Compute dual right now.
// the core of the computation of the meet for TypeOopPtr and for its subclasses
virtual const Type *xmeet_helper(const Type *t) const;
- // Do not allow interface-vs.-noninterface joins to collapse to top.
- virtual const Type *filter( const Type *kills ) const;
-
// Convenience common pre-built type.
static const TypeOopPtr *BOTTOM;
#ifndef PRODUCT
@@ -981,7 +1019,7 @@
virtual const TypePtr *add_offset( intptr_t offset ) const;
// Return same type without a speculative part
- virtual const TypeOopPtr* remove_speculative() const;
+ virtual const Type* remove_speculative() const;
// the core of the computation of the meet of 2 types
virtual const Type *xmeet_helper(const Type *t) const;
@@ -1059,7 +1097,7 @@
virtual bool empty(void) const; // TRUE if type is vacuous
virtual const TypePtr *add_offset( intptr_t offset ) const;
// Return same type without a speculative part
- virtual const TypeOopPtr* remove_speculative() const;
+ virtual const Type* remove_speculative() const;
// the core of the computation of the meet of 2 types
virtual const Type *xmeet_helper(const Type *t) const;
@@ -1100,6 +1138,8 @@
class TypeMetadataPtr : public TypePtr {
protected:
TypeMetadataPtr(PTR ptr, ciMetadata* metadata, int offset);
+ // Do not allow interface-vs.-noninterface joins to collapse to top.
+ virtual const Type *filter_helper(const Type *kills, bool include_speculative) const;
public:
virtual bool eq( const Type *t ) const;
virtual int hash() const; // Type specific hashing
@@ -1125,9 +1165,6 @@
virtual intptr_t get_con() const;
- // Do not allow interface-vs.-noninterface joins to collapse to top.
- virtual const Type *filter( const Type *kills ) const;
-
// Convenience common pre-built types.
static const TypeMetadataPtr *BOTTOM;
@@ -1141,6 +1178,8 @@
class TypeKlassPtr : public TypePtr {
TypeKlassPtr( PTR ptr, ciKlass* klass, int offset );
+protected:
+ virtual const Type *filter_helper(const Type *kills, bool include_speculative) const;
public:
virtual bool eq( const Type *t ) const;
virtual int hash() const; // Type specific hashing
@@ -1202,9 +1241,6 @@
virtual intptr_t get_con() const;
- // Do not allow interface-vs.-noninterface joins to collapse to top.
- virtual const Type *filter( const Type *kills ) const;
-
// Convenience common pre-built types.
static const TypeKlassPtr* OBJECT; // Not-null object klass or below
static const TypeKlassPtr* OBJECT_OR_NULL; // Maybe-null version of same
@@ -1228,6 +1264,8 @@
virtual const TypeNarrowPtr *is_same_narrowptr(const Type *t) const = 0;
virtual const TypeNarrowPtr *make_same_narrowptr(const TypePtr *t) const = 0;
virtual const TypeNarrowPtr *make_hash_same_narrowptr(const TypePtr *t) const = 0;
+ // Do not allow interface-vs.-noninterface joins to collapse to top.
+ virtual const Type *filter_helper(const Type *kills, bool include_speculative) const;
public:
virtual bool eq( const Type *t ) const;
virtual int hash() const; // Type specific hashing
@@ -1238,9 +1276,6 @@
virtual intptr_t get_con() const;
- // Do not allow interface-vs.-noninterface joins to collapse to top.
- virtual const Type *filter( const Type *kills ) const;
-
virtual bool empty(void) const; // TRUE if type is vacuous
// returns the equivalent ptr type for this compressed pointer
@@ -1291,6 +1326,10 @@
static const TypeNarrowOop *BOTTOM;
static const TypeNarrowOop *NULL_PTR;
+ virtual const Type* remove_speculative() const {
+ return make(_ptrtype->remove_speculative()->is_ptr());
+ }
+
#ifndef PRODUCT
virtual void dump2( Dict &d, uint depth, outputStream *st ) const;
#endif
diff --git a/hotspot/src/share/vm/prims/jni.cpp b/hotspot/src/share/vm/prims/jni.cpp
index ab24446..3d8943f 100644
--- a/hotspot/src/share/vm/prims/jni.cpp
+++ b/hotspot/src/share/vm/prims/jni.cpp
@@ -1356,9 +1356,13 @@
// interface call
KlassHandle h_holder(THREAD, holder);
- int itbl_index = m->itable_index();
- Klass* k = h_recv->klass();
- selected_method = InstanceKlass::cast(k)->method_at_itable(h_holder(), itbl_index, CHECK);
+ if (call_type == JNI_VIRTUAL) {
+ int itbl_index = m->itable_index();
+ Klass* k = h_recv->klass();
+ selected_method = InstanceKlass::cast(k)->method_at_itable(h_holder(), itbl_index, CHECK);
+ } else {
+ selected_method = m;
+ }
}
}
@@ -5062,6 +5066,7 @@
void TestMetachunk_test();
void TestVirtualSpaceNode_test();
#if INCLUDE_ALL_GCS
+void TestOldFreeSpaceCalculation_test();
void TestG1BiasedArray_test();
#endif
@@ -5085,6 +5090,7 @@
run_unit_test(VMStructs::test());
#endif
#if INCLUDE_ALL_GCS
+ run_unit_test(TestOldFreeSpaceCalculation_test());
run_unit_test(TestG1BiasedArray_test());
run_unit_test(HeapRegionRemSet::test_prt());
#endif
diff --git a/hotspot/src/share/vm/prims/jvm.cpp b/hotspot/src/share/vm/prims/jvm.cpp
index a757e19..947da5f 100644
--- a/hotspot/src/share/vm/prims/jvm.cpp
+++ b/hotspot/src/share/vm/prims/jvm.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -518,6 +518,12 @@
JavaThreadInObjectWaitState jtiows(thread, ms != 0);
if (JvmtiExport::should_post_monitor_wait()) {
JvmtiExport::post_monitor_wait((JavaThread *)THREAD, (oop)obj(), ms);
+
+ // The current thread already owns the monitor and it has not yet
+ // been added to the wait queue so the current thread cannot be
+ // made the successor. This means that the JVMTI_EVENT_MONITOR_WAIT
+ // event handler cannot accidentally consume an unpark() meant for
+ // the ParkEvent associated with this ObjectMonitor.
}
ObjectSynchronizer::wait(obj, ms, CHECK);
JVM_END
diff --git a/hotspot/src/share/vm/prims/jvmtiCodeBlobEvents.cpp b/hotspot/src/share/vm/prims/jvmtiCodeBlobEvents.cpp
index c46afdc..18d8786 100644
--- a/hotspot/src/share/vm/prims/jvmtiCodeBlobEvents.cpp
+++ b/hotspot/src/share/vm/prims/jvmtiCodeBlobEvents.cpp
@@ -26,6 +26,7 @@
#include "code/codeBlob.hpp"
#include "code/codeCache.hpp"
#include "code/scopeDesc.hpp"
+#include "code/vtableStubs.hpp"
#include "memory/resourceArea.hpp"
#include "oops/oop.inline.hpp"
#include "prims/jvmtiCodeBlobEvents.hpp"
@@ -63,6 +64,7 @@
// used during a collection
static GrowableArray<JvmtiCodeBlobDesc*>* _global_code_blobs;
static void do_blob(CodeBlob* cb);
+ static void do_vtable_stub(VtableStub* vs);
public:
CodeBlobCollector() {
_code_blobs = NULL;
@@ -119,6 +121,10 @@
if (cb->is_nmethod()) {
return;
}
+ // exclude VtableStubs, which are processed separately
+ if (cb->is_buffer_blob() && strcmp(cb->name(), "vtable chunks") == 0) {
+ return;
+ }
// check if this starting address has been seen already - the
// assumption is that stubs are inserted into the list before the
@@ -136,6 +142,13 @@
_global_code_blobs->append(scb);
}
+// called for each VtableStub in VtableStubs
+
+void CodeBlobCollector::do_vtable_stub(VtableStub* vs) {
+ JvmtiCodeBlobDesc* scb = new JvmtiCodeBlobDesc(vs->is_vtable_stub() ? "vtable stub" : "itable stub",
+ vs->code_begin(), vs->code_end());
+ _global_code_blobs->append(scb);
+}
// collects a list of CodeBlobs in the CodeCache.
//
@@ -166,6 +179,10 @@
_global_code_blobs->append(new JvmtiCodeBlobDesc(desc->name(), desc->begin(), desc->end()));
}
+ // Vtable stubs are not described with StubCodeDesc,
+ // process them separately
+ VtableStubs::vtable_stub_do(do_vtable_stub);
+
// next iterate over all the non-nmethod code blobs and add them to
// the list - as noted above this will filter out duplicates and
// enclosing blobs.
diff --git a/hotspot/src/share/vm/prims/jvmtiEnvThreadState.cpp b/hotspot/src/share/vm/prims/jvmtiEnvThreadState.cpp
index 0f9135f..ab3c5f4 100644
--- a/hotspot/src/share/vm/prims/jvmtiEnvThreadState.cpp
+++ b/hotspot/src/share/vm/prims/jvmtiEnvThreadState.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -272,7 +272,7 @@
// There can be a race condition between a VM_Operation reaching a safepoint
// and the target thread exiting from Java execution.
// We must recheck the last Java frame still exists.
- if (_thread->has_last_Java_frame()) {
+ if (!_thread->is_exiting() && _thread->has_last_Java_frame()) {
javaVFrame* vf = _thread->last_java_vframe(&rm);
assert(vf != NULL, "must have last java frame");
Method* method = vf->method();
diff --git a/hotspot/src/share/vm/prims/jvmtiRedefineClasses.cpp b/hotspot/src/share/vm/prims/jvmtiRedefineClasses.cpp
index 4a57b20..1c3bbbf 100644
--- a/hotspot/src/share/vm/prims/jvmtiRedefineClasses.cpp
+++ b/hotspot/src/share/vm/prims/jvmtiRedefineClasses.cpp
@@ -147,6 +147,9 @@
_scratch_classes[i] = NULL;
}
+ // Disable any dependent concurrent compilations
+ SystemDictionary::notice_modification();
+
// Set flag indicating that some invariants are no longer true.
// See jvmtiExport.hpp for detailed explanation.
JvmtiExport::set_has_redefined_a_class();
diff --git a/hotspot/src/share/vm/runtime/arguments.cpp b/hotspot/src/share/vm/runtime/arguments.cpp
index 5a8ea0d..02e2c82 100644
--- a/hotspot/src/share/vm/runtime/arguments.cpp
+++ b/hotspot/src/share/vm/runtime/arguments.cpp
@@ -290,6 +290,7 @@
{ "UsePermISM", JDK_Version::jdk(8), JDK_Version::jdk(9) },
{ "UseMPSS", JDK_Version::jdk(8), JDK_Version::jdk(9) },
{ "UseStringCache", JDK_Version::jdk(8), JDK_Version::jdk(9) },
+ { "UseOldInlining", JDK_Version::jdk(9), JDK_Version::jdk(10) },
#ifdef PRODUCT
{ "DesiredMethodLimit",
JDK_Version::jdk_update(7, 2), JDK_Version::jdk(8) },
@@ -878,7 +879,7 @@
arg_len = equal_sign - argname;
}
- Flag* found_flag = Flag::find_flag((const char*)argname, arg_len, true);
+ Flag* found_flag = Flag::find_flag((const char*)argname, arg_len, true, true);
if (found_flag != NULL) {
char locked_message_buf[BUFLEN];
found_flag->get_locked_message(locked_message_buf, BUFLEN);
@@ -1569,6 +1570,16 @@
vm_exit(1);
}
+ if (UseAdaptiveSizePolicy) {
+ // We don't want to limit adaptive heap sizing's freedom to adjust the heap
+ // unless the user actually sets these flags.
+ if (FLAG_IS_DEFAULT(MinHeapFreeRatio)) {
+ FLAG_SET_DEFAULT(MinHeapFreeRatio, 0);
+ }
+ if (FLAG_IS_DEFAULT(MaxHeapFreeRatio)) {
+ FLAG_SET_DEFAULT(MaxHeapFreeRatio, 100);
+ }
+ }
// If InitialSurvivorRatio or MinSurvivorRatio were not specified, but the
// SurvivorRatio has been set, reset their default values to SurvivorRatio +
@@ -1844,7 +1855,7 @@
}
bool Arguments::verify_percentage(uintx value, const char* name) {
- if (value <= 100) {
+ if (is_percentage(value)) {
return true;
}
jio_fprintf(defaultStream::error_stream(),
@@ -1932,6 +1943,34 @@
return count_p < 2 && count_t < 2;
}
+bool Arguments::verify_MinHeapFreeRatio(FormatBuffer<80>& err_msg, uintx min_heap_free_ratio) {
+ if (!is_percentage(min_heap_free_ratio)) {
+ err_msg.print("MinHeapFreeRatio must have a value between 0 and 100");
+ return false;
+ }
+ if (min_heap_free_ratio > MaxHeapFreeRatio) {
+ err_msg.print("MinHeapFreeRatio (" UINTX_FORMAT ") must be less than or "
+ "equal to MaxHeapFreeRatio (" UINTX_FORMAT ")", min_heap_free_ratio,
+ MaxHeapFreeRatio);
+ return false;
+ }
+ return true;
+}
+
+bool Arguments::verify_MaxHeapFreeRatio(FormatBuffer<80>& err_msg, uintx max_heap_free_ratio) {
+ if (!is_percentage(max_heap_free_ratio)) {
+ err_msg.print("MaxHeapFreeRatio must have a value between 0 and 100");
+ return false;
+ }
+ if (max_heap_free_ratio < MinHeapFreeRatio) {
+ err_msg.print("MaxHeapFreeRatio (" UINTX_FORMAT ") must be greater than or "
+ "equal to MinHeapFreeRatio (" UINTX_FORMAT ")", max_heap_free_ratio,
+ MinHeapFreeRatio);
+ return false;
+ }
+ return true;
+}
+
// Check consistency of GC selection
bool Arguments::check_gc_consistency() {
check_gclog_consistency();
@@ -2037,8 +2076,6 @@
status = status && verify_interval(AdaptiveSizePolicyWeight, 0, 100,
"AdaptiveSizePolicyWeight");
status = status && verify_percentage(ThresholdTolerance, "ThresholdTolerance");
- status = status && verify_percentage(MinHeapFreeRatio, "MinHeapFreeRatio");
- status = status && verify_percentage(MaxHeapFreeRatio, "MaxHeapFreeRatio");
// Divide by bucket size to prevent a large size from causing rollover when
// calculating amount of memory needed to be allocated for the String table.
@@ -2048,15 +2085,19 @@
status = status && verify_interval(SymbolTableSize, minimumSymbolTableSize,
(max_uintx / SymbolTable::bucket_size()), "SymbolTable size");
- if (MinHeapFreeRatio > MaxHeapFreeRatio) {
- jio_fprintf(defaultStream::error_stream(),
- "MinHeapFreeRatio (" UINTX_FORMAT ") must be less than or "
- "equal to MaxHeapFreeRatio (" UINTX_FORMAT ")\n",
- MinHeapFreeRatio, MaxHeapFreeRatio);
- status = false;
+ {
+ // Using "else if" below to avoid printing two error messages if min > max.
+ // This will also prevent us from reporting both min>100 and max>100 at the
+ // same time, but that is less annoying than printing two identical errors IMHO.
+ FormatBuffer<80> err_msg("");
+ if (!verify_MinHeapFreeRatio(err_msg, MinHeapFreeRatio)) {
+ jio_fprintf(defaultStream::error_stream(), "%s\n", err_msg.buffer());
+ status = false;
+ } else if (!verify_MaxHeapFreeRatio(err_msg, MaxHeapFreeRatio)) {
+ jio_fprintf(defaultStream::error_stream(), "%s\n", err_msg.buffer());
+ status = false;
+ }
}
- // Keeping the heap 100% free is hard ;-) so limit it to 99%.
- MinHeapFreeRatio = MIN2(MinHeapFreeRatio, (uintx) 99);
// Min/MaxMetaspaceFreeRatio
status = status && verify_percentage(MinMetaspaceFreeRatio, "MinMetaspaceFreeRatio");
@@ -2689,7 +2730,7 @@
} else if (match_option(option, "-Xmaxf", &tail)) {
char* err;
int maxf = (int)(strtod(tail, &err) * 100);
- if (*err != '\0' || maxf < 0 || maxf > 100) {
+ if (*err != '\0' || *tail == '\0' || maxf < 0 || maxf > 100) {
jio_fprintf(defaultStream::error_stream(),
"Bad max heap free percentage size: %s\n",
option->optionString);
@@ -2701,7 +2742,7 @@
} else if (match_option(option, "-Xminf", &tail)) {
char* err;
int minf = (int)(strtod(tail, &err) * 100);
- if (*err != '\0' || minf < 0 || minf > 100) {
+ if (*err != '\0' || *tail == '\0' || minf < 0 || minf > 100) {
jio_fprintf(defaultStream::error_stream(),
"Bad min heap free percentage size: %s\n",
option->optionString);
@@ -3646,9 +3687,9 @@
// Set per-collector flags
if (UseParallelGC || UseParallelOldGC) {
set_parallel_gc_flags();
- } else if (UseConcMarkSweepGC) { // should be done before ParNew check below
+ } else if (UseConcMarkSweepGC) { // Should be done before ParNew check below
set_cms_and_parnew_gc_flags();
- } else if (UseParNewGC) { // skipped if CMS is set above
+ } else if (UseParNewGC) { // Skipped if CMS is set above
set_parnew_gc_flags();
} else if (UseG1GC) {
set_g1_gc_flags();
@@ -3662,6 +3703,10 @@
" using -XX:ParallelGCThreads=N");
}
}
+ if (MinHeapFreeRatio == 100) {
+ // Keeping the heap 100% free is hard ;-) so limit it to 99%.
+ FLAG_SET_ERGO(uintx, MinHeapFreeRatio, 99);
+ }
#else // INCLUDE_ALL_GCS
assert(verify_serial_gc_flags(), "SerialGC unset");
#endif // INCLUDE_ALL_GCS
@@ -3727,10 +3772,6 @@
// Doing the replace in parent maps helps speculation
FLAG_SET_DEFAULT(ReplaceInParentMaps, true);
}
-#ifndef X86
- // Only on x86 for now
- FLAG_SET_DEFAULT(TypeProfileLevel, 0);
-#endif
#endif
if (PrintAssembly && FLAG_IS_DEFAULT(DebugNonSafepoints)) {
diff --git a/hotspot/src/share/vm/runtime/arguments.hpp b/hotspot/src/share/vm/runtime/arguments.hpp
index d016e22..ec4b1f6 100644
--- a/hotspot/src/share/vm/runtime/arguments.hpp
+++ b/hotspot/src/share/vm/runtime/arguments.hpp
@@ -27,6 +27,7 @@
#include "runtime/java.hpp"
#include "runtime/perfData.hpp"
+#include "utilities/debug.hpp"
#include "utilities/top.hpp"
// Arguments parses the command line and recognizes options
@@ -370,11 +371,16 @@
static jint parse_vm_init_args(const JavaVMInitArgs* args);
static jint parse_each_vm_init_arg(const JavaVMInitArgs* args, SysClassPath* scp_p, bool* scp_assembly_required_p, Flag::Flags origin);
static jint finalize_vm_init_args(SysClassPath* scp_p, bool scp_assembly_required);
- static bool is_bad_option(const JavaVMOption* option, jboolean ignore,
- const char* option_type);
+ static bool is_bad_option(const JavaVMOption* option, jboolean ignore, const char* option_type);
+
static bool is_bad_option(const JavaVMOption* option, jboolean ignore) {
return is_bad_option(option, ignore, NULL);
}
+
+ static bool is_percentage(uintx val) {
+ return val <= 100;
+ }
+
static bool verify_interval(uintx val, uintx min,
uintx max, const char* name);
static bool verify_min_value(intx val, intx min, const char* name);
@@ -440,6 +446,15 @@
static jint apply_ergo();
// Adjusts the arguments after the OS have adjusted the arguments
static jint adjust_after_os();
+
+ // Verifies that the given value will fit as a MinHeapFreeRatio. If not, an error
+ // message is returned in the provided buffer.
+ static bool verify_MinHeapFreeRatio(FormatBuffer<80>& err_msg, uintx min_heap_free_ratio);
+
+ // Verifies that the given value will fit as a MaxHeapFreeRatio. If not, an error
+ // message is returned in the provided buffer.
+ static bool verify_MaxHeapFreeRatio(FormatBuffer<80>& err_msg, uintx max_heap_free_ratio);
+
// Check for consistency in the selection of the garbage collector.
static bool check_gc_consistency();
static void check_deprecated_gcs();
diff --git a/hotspot/src/share/vm/runtime/deoptimization.cpp b/hotspot/src/share/vm/runtime/deoptimization.cpp
index 0ba0244..8b6fc33 100644
--- a/hotspot/src/share/vm/runtime/deoptimization.cpp
+++ b/hotspot/src/share/vm/runtime/deoptimization.cpp
@@ -1224,9 +1224,19 @@
load_class_by_index(constant_pool, index, THREAD);
if (HAS_PENDING_EXCEPTION) {
// Exception happened during classloading. We ignore the exception here, since it
- // is going to be rethrown since the current activation is going to be deoptimzied and
+ // is going to be rethrown since the current activation is going to be deoptimized and
// the interpreter will re-execute the bytecode.
CLEAR_PENDING_EXCEPTION;
+ // Class loading called java code which may have caused a stack
+ // overflow. If the exception was thrown right before the return
+ // to the runtime the stack is no longer guarded. Reguard the
+ // stack otherwise if we return to the uncommon trap blob and the
+ // stack bang causes a stack overflow we crash.
+ assert(THREAD->is_Java_thread(), "only a java thread can be here");
+ JavaThread* thread = (JavaThread*)THREAD;
+ bool guard_pages_enabled = thread->stack_yellow_zone_enabled();
+ if (!guard_pages_enabled) guard_pages_enabled = thread->reguard_stack();
+ assert(guard_pages_enabled, "stack banging in uncommon trap blob may cause crash");
}
}
diff --git a/hotspot/src/share/vm/runtime/globals.cpp b/hotspot/src/share/vm/runtime/globals.cpp
index de6fbf7..74f7acd 100644
--- a/hotspot/src/share/vm/runtime/globals.cpp
+++ b/hotspot/src/share/vm/runtime/globals.cpp
@@ -31,6 +31,7 @@
#include "utilities/ostream.hpp"
#include "utilities/macros.hpp"
#include "utilities/top.hpp"
+#include "trace/tracing.hpp"
#if INCLUDE_ALL_GCS
#include "gc_implementation/g1/g1_globals.hpp"
#endif // INCLUDE_ALL_GCS
@@ -62,6 +63,14 @@
MATERIALIZE_FLAGS_EXT
+static bool is_product_build() {
+#ifdef PRODUCT
+ return true;
+#else
+ return false;
+#endif
+}
+
void Flag::check_writable() {
if (is_constant_in_binary()) {
fatal(err_msg("flag is constant: %s", _name));
@@ -235,6 +244,27 @@
// Get custom message for this locked flag, or return NULL if
// none is available.
void Flag::get_locked_message(char* buf, int buflen) const {
+ buf[0] = '\0';
+ if (is_diagnostic() && !is_unlocked()) {
+ jio_snprintf(buf, buflen, "Error: VM option '%s' is diagnostic and must be enabled via -XX:+UnlockDiagnosticVMOptions.\n",
+ _name);
+ return;
+ }
+ if (is_experimental() && !is_unlocked()) {
+ jio_snprintf(buf, buflen, "Error: VM option '%s' is experimental and must be enabled via -XX:+UnlockExperimentalVMOptions.\n",
+ _name);
+ return;
+ }
+ if (is_develop() && is_product_build()) {
+ jio_snprintf(buf, buflen, "Error: VM option '%s' is develop and is available only in debug version of VM.\n",
+ _name);
+ return;
+ }
+ if (is_notproduct() && is_product_build()) {
+ jio_snprintf(buf, buflen, "Error: VM option '%s' is notproduct and is available only in debug version of VM.\n",
+ _name);
+ return;
+ }
get_locked_message_ext(buf, buflen);
}
@@ -464,13 +494,13 @@
}
// Search the flag table for a named flag
-Flag* Flag::find_flag(const char* name, size_t length, bool allow_locked) {
+Flag* Flag::find_flag(const char* name, size_t length, bool allow_locked, bool return_flag) {
for (Flag* current = &flagTable[0]; current->_name != NULL; current++) {
if (str_equal(current->_name, name, length)) {
// Found a matching entry.
// Don't report notproduct and develop flags in product builds.
if (current->is_constant_in_binary()) {
- return NULL;
+ return (return_flag == true ? current : NULL);
}
// Report locked flags only if allowed.
if (!(current->is_unlocked() || current->is_unlocker())) {
@@ -564,6 +594,17 @@
return true;
}
+template<class E, class T>
+static void trace_flag_changed(const char* name, const T old_value, const T new_value, const Flag::Flags origin)
+{
+ E e;
+ e.set_name(name);
+ e.set_old_value(old_value);
+ e.set_new_value(new_value);
+ e.set_origin(origin);
+ e.commit();
+}
+
bool CommandLineFlags::boolAt(char* name, size_t len, bool* value) {
Flag* result = Flag::find_flag(name, len);
if (result == NULL) return false;
@@ -577,6 +618,7 @@
if (result == NULL) return false;
if (!result->is_bool()) return false;
bool old_value = result->get_bool();
+ trace_flag_changed<EventBooleanFlagChanged, bool>(name, old_value, *value, origin);
result->set_bool(*value);
*value = old_value;
result->set_origin(origin);
@@ -586,6 +628,7 @@
void CommandLineFlagsEx::boolAtPut(CommandLineFlagWithType flag, bool value, Flag::Flags origin) {
Flag* faddr = address_of_flag(flag);
guarantee(faddr != NULL && faddr->is_bool(), "wrong flag type");
+ trace_flag_changed<EventBooleanFlagChanged, bool>(faddr->_name, faddr->get_bool(), value, origin);
faddr->set_bool(value);
faddr->set_origin(origin);
}
@@ -603,6 +646,7 @@
if (result == NULL) return false;
if (!result->is_intx()) return false;
intx old_value = result->get_intx();
+ trace_flag_changed<EventLongFlagChanged, s8>(name, old_value, *value, origin);
result->set_intx(*value);
*value = old_value;
result->set_origin(origin);
@@ -612,6 +656,7 @@
void CommandLineFlagsEx::intxAtPut(CommandLineFlagWithType flag, intx value, Flag::Flags origin) {
Flag* faddr = address_of_flag(flag);
guarantee(faddr != NULL && faddr->is_intx(), "wrong flag type");
+ trace_flag_changed<EventLongFlagChanged, s8>(faddr->_name, faddr->get_intx(), value, origin);
faddr->set_intx(value);
faddr->set_origin(origin);
}
@@ -629,6 +674,7 @@
if (result == NULL) return false;
if (!result->is_uintx()) return false;
uintx old_value = result->get_uintx();
+ trace_flag_changed<EventUnsignedLongFlagChanged, u8>(name, old_value, *value, origin);
result->set_uintx(*value);
*value = old_value;
result->set_origin(origin);
@@ -638,6 +684,7 @@
void CommandLineFlagsEx::uintxAtPut(CommandLineFlagWithType flag, uintx value, Flag::Flags origin) {
Flag* faddr = address_of_flag(flag);
guarantee(faddr != NULL && faddr->is_uintx(), "wrong flag type");
+ trace_flag_changed<EventUnsignedLongFlagChanged, u8>(faddr->_name, faddr->get_uintx(), value, origin);
faddr->set_uintx(value);
faddr->set_origin(origin);
}
@@ -655,6 +702,7 @@
if (result == NULL) return false;
if (!result->is_uint64_t()) return false;
uint64_t old_value = result->get_uint64_t();
+ trace_flag_changed<EventUnsignedLongFlagChanged, u8>(name, old_value, *value, origin);
result->set_uint64_t(*value);
*value = old_value;
result->set_origin(origin);
@@ -664,6 +712,7 @@
void CommandLineFlagsEx::uint64_tAtPut(CommandLineFlagWithType flag, uint64_t value, Flag::Flags origin) {
Flag* faddr = address_of_flag(flag);
guarantee(faddr != NULL && faddr->is_uint64_t(), "wrong flag type");
+ trace_flag_changed<EventUnsignedLongFlagChanged, u8>(faddr->_name, faddr->get_uint64_t(), value, origin);
faddr->set_uint64_t(value);
faddr->set_origin(origin);
}
@@ -681,6 +730,7 @@
if (result == NULL) return false;
if (!result->is_double()) return false;
double old_value = result->get_double();
+ trace_flag_changed<EventDoubleFlagChanged, double>(name, old_value, *value, origin);
result->set_double(*value);
*value = old_value;
result->set_origin(origin);
@@ -690,6 +740,7 @@
void CommandLineFlagsEx::doubleAtPut(CommandLineFlagWithType flag, double value, Flag::Flags origin) {
Flag* faddr = address_of_flag(flag);
guarantee(faddr != NULL && faddr->is_double(), "wrong flag type");
+ trace_flag_changed<EventDoubleFlagChanged, double>(faddr->_name, faddr->get_double(), value, origin);
faddr->set_double(value);
faddr->set_origin(origin);
}
@@ -709,6 +760,7 @@
if (result == NULL) return false;
if (!result->is_ccstr()) return false;
ccstr old_value = result->get_ccstr();
+ trace_flag_changed<EventStringFlagChanged, const char*>(name, old_value, *value, origin);
char* new_value = NULL;
if (*value != NULL) {
new_value = NEW_C_HEAP_ARRAY(char, strlen(*value)+1, mtInternal);
@@ -731,6 +783,7 @@
Flag* faddr = address_of_flag(flag);
guarantee(faddr != NULL && faddr->is_ccstr(), "wrong flag type");
ccstr old_value = faddr->get_ccstr();
+ trace_flag_changed<EventStringFlagChanged, const char*>(faddr->_name, old_value, value, origin);
char* new_value = NEW_C_HEAP_ARRAY(char, strlen(value)+1, mtInternal);
strcpy(new_value, value);
faddr->set_ccstr(new_value);
diff --git a/hotspot/src/share/vm/runtime/globals.hpp b/hotspot/src/share/vm/runtime/globals.hpp
index 4967ead..c99a2b7 100644
--- a/hotspot/src/share/vm/runtime/globals.hpp
+++ b/hotspot/src/share/vm/runtime/globals.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -241,7 +241,7 @@
// number of flags
static size_t numFlags;
- static Flag* find_flag(const char* name, size_t length, bool allow_locked = false);
+ static Flag* find_flag(const char* name, size_t length, bool allow_locked = false, bool return_flag = false);
static Flag* fuzzy_match(const char* name, size_t length, bool allow_locked = false);
void check_writable();
@@ -1258,6 +1258,9 @@
develop(bool, TraceJNICalls, false, \
"Trace JNI calls") \
\
+ develop(bool, StressRewriter, false, \
+ "Stress linktime bytecode rewriting") \
+ \
notproduct(bool, TraceJVMCalls, false, \
"Trace JVM calls") \
\
@@ -2531,6 +2534,9 @@
develop(bool, PrintMethodFlushing, false, \
"Print the nmethods being flushed") \
\
+ diagnostic(bool, PrintMethodFlushingStatistics, false, \
+ "print statistics about method flushing") \
+ \
develop(bool, UseRelocIndex, false, \
"Use an index to speed random access to relocations") \
\
@@ -3130,15 +3136,15 @@
"Maximum size of class area in Metaspace when compressed " \
"class pointers are used") \
\
- product(uintx, MinHeapFreeRatio, 40, \
+ manageable(uintx, MinHeapFreeRatio, 40, \
"The minimum percentage of heap free after GC to avoid expansion."\
- " For most GCs this applies to the old generation. In G1 it" \
- " applies to the whole heap. Not supported by ParallelGC.") \
+ " For most GCs this applies to the old generation. In G1 and" \
+ " ParallelGC it applies to the whole heap.") \
\
- product(uintx, MaxHeapFreeRatio, 70, \
+ manageable(uintx, MaxHeapFreeRatio, 70, \
"The maximum percentage of heap free after GC to avoid shrinking."\
- " For most GCs this applies to the old generation. In G1 it" \
- " applies to the whole heap. Not supported by ParallelGC.") \
+ " For most GCs this applies to the old generation. In G1 and" \
+ " ParallelGC it applies to the whole heap.") \
\
product(intx, SoftRefLRUPolicyMSPerMB, 1000, \
"Number of milliseconds per MB of free space in the heap") \
@@ -3306,21 +3312,21 @@
develop(intx, CIStart, 0, \
"The id of the first compilation to permit") \
\
- develop(intx, CIStop, -1, \
+ develop(intx, CIStop, max_jint, \
"The id of the last compilation to permit") \
\
- develop(intx, CIStartOSR, 0, \
+ develop(intx, CIStartOSR, 0, \
"The id of the first osr compilation to permit " \
"(CICountOSR must be on)") \
\
- develop(intx, CIStopOSR, -1, \
+ develop(intx, CIStopOSR, max_jint, \
"The id of the last osr compilation to permit " \
"(CICountOSR must be on)") \
\
- develop(intx, CIBreakAtOSR, -1, \
+ develop(intx, CIBreakAtOSR, -1, \
"The id of osr compilation to break at") \
\
- develop(intx, CIBreakAt, -1, \
+ develop(intx, CIBreakAt, -1, \
"The id of compilation to break at") \
\
product(ccstrlist, CompileOnly, "", \
@@ -3339,6 +3345,10 @@
"File containing compilation replay information" \
"[default: ./replay_pid%p.log] (%p replaced with pid)") \
\
+ product(ccstr, InlineDataFile, NULL, \
+ "File containing inlining replay information" \
+ "[default: ./inline_pid%p.log] (%p replaced with pid)") \
+ \
develop(intx, ReplaySuppressInitializers, 2, \
"Control handling of class initialization during replay: " \
"0 - don't do anything special; " \
diff --git a/hotspot/src/share/vm/runtime/java.cpp b/hotspot/src/share/vm/runtime/java.cpp
index a356157..f5fde74 100644
--- a/hotspot/src/share/vm/runtime/java.cpp
+++ b/hotspot/src/share/vm/runtime/java.cpp
@@ -52,6 +52,7 @@
#include "runtime/memprofiler.hpp"
#include "runtime/sharedRuntime.hpp"
#include "runtime/statSampler.hpp"
+#include "runtime/sweeper.hpp"
#include "runtime/task.hpp"
#include "runtime/thread.inline.hpp"
#include "runtime/timer.hpp"
@@ -217,9 +218,7 @@
// General statistics printing (profiling ...)
-
void print_statistics() {
-
#ifdef ASSERT
if (CountRuntimeCalls) {
@@ -315,6 +314,10 @@
CodeCache::print();
}
+ if (PrintMethodFlushingStatistics) {
+ NMethodSweeper::print();
+ }
+
if (PrintCodeCache2) {
MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
CodeCache::print_internals();
@@ -382,6 +385,10 @@
CodeCache::print();
}
+ if (PrintMethodFlushingStatistics) {
+ NMethodSweeper::print();
+ }
+
#ifdef COMPILER2
if (PrintPreciseBiasedLockingStatistics) {
OptoRuntime::print_named_counters();
diff --git a/hotspot/src/share/vm/runtime/objectMonitor.cpp b/hotspot/src/share/vm/runtime/objectMonitor.cpp
index 5238875..4fcbf5d 100644
--- a/hotspot/src/share/vm/runtime/objectMonitor.cpp
+++ b/hotspot/src/share/vm/runtime/objectMonitor.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -382,6 +382,12 @@
DTRACE_MONITOR_PROBE(contended__enter, this, object(), jt);
if (JvmtiExport::should_post_monitor_contended_enter()) {
JvmtiExport::post_monitor_contended_enter(jt, this);
+
+ // The current thread does not yet own the monitor and does not
+ // yet appear on any queues that would get it made the successor.
+ // This means that the JVMTI_EVENT_MONITOR_CONTENDED_ENTER event
+ // handler cannot accidentally consume an unpark() meant for the
+ // ParkEvent associated with this ObjectMonitor.
}
OSThreadContendState osts(Self->osthread());
@@ -439,6 +445,12 @@
DTRACE_MONITOR_PROBE(contended__entered, this, object(), jt);
if (JvmtiExport::should_post_monitor_contended_entered()) {
JvmtiExport::post_monitor_contended_entered(jt, this);
+
+ // The current thread already owns the monitor and is not going to
+ // call park() for the remainder of the monitor enter protocol. So
+ // it doesn't matter if the JVMTI_EVENT_MONITOR_CONTENDED_ENTERED
+ // event handler consumed an unpark() issued by the thread that
+ // just exited the monitor.
}
if (event.should_commit()) {
@@ -1456,6 +1468,14 @@
// Note: 'false' parameter is passed here because the
// wait was not timed out due to thread interrupt.
JvmtiExport::post_monitor_waited(jt, this, false);
+
+ // In this short circuit of the monitor wait protocol, the
+ // current thread never drops ownership of the monitor and
+ // never gets added to the wait queue so the current thread
+ // cannot be made the successor. This means that the
+ // JVMTI_EVENT_MONITOR_WAITED event handler cannot accidentally
+ // consume an unpark() meant for the ParkEvent associated with
+ // this ObjectMonitor.
}
if (event.should_commit()) {
post_monitor_wait_event(&event, 0, millis, false);
@@ -1499,21 +1519,6 @@
exit (true, Self) ; // exit the monitor
guarantee (_owner != Self, "invariant") ;
- // As soon as the ObjectMonitor's ownership is dropped in the exit()
- // call above, another thread can enter() the ObjectMonitor, do the
- // notify(), and exit() the ObjectMonitor. If the other thread's
- // exit() call chooses this thread as the successor and the unpark()
- // call happens to occur while this thread is posting a
- // MONITOR_CONTENDED_EXIT event, then we run the risk of the event
- // handler using RawMonitors and consuming the unpark().
- //
- // To avoid the problem, we re-post the event. This does no harm
- // even if the original unpark() was not consumed because we are the
- // chosen successor for this monitor.
- if (node._notified != 0 && _succ == Self) {
- node._event->unpark();
- }
-
// The thread is on the WaitSet list - now park() it.
// On MP systems it's conceivable that a brief spin before we park
// could be profitable.
@@ -1597,6 +1602,33 @@
JvmtiExport::post_monitor_waited(jt, this, ret == OS_TIMEOUT);
}
+ // Without the fix for 8028280, it is possible for the above call:
+ //
+ // Thread::SpinAcquire (&_WaitSetLock, "WaitSet - unlink") ;
+ //
+ // to consume the unpark() that was done when the successor was set.
+ // The solution for this very rare possibility is to redo the unpark()
+ // outside of the JvmtiExport::should_post_monitor_waited() check.
+ //
+ if (node._notified != 0 && _succ == Self) {
+ // In this part of the monitor wait-notify-reenter protocol it
+ // is possible (and normal) for another thread to do a fastpath
+ // monitor enter-exit while this thread is still trying to get
+ // to the reenter portion of the protocol.
+ //
+ // The ObjectMonitor was notified and the current thread is
+ // the successor which also means that an unpark() has already
+ // been done. The JVMTI_EVENT_MONITOR_WAITED event handler can
+ // consume the unpark() that was done when the successor was
+ // set because the same ParkEvent is shared between Java
+ // monitors and JVM/TI RawMonitors (for now).
+ //
+ // We redo the unpark() to ensure forward progress, i.e., we
+ // don't want all pending threads hanging (parked) with none
+ // entering the unlocked monitor.
+ node._event->unpark();
+ }
+
if (event.should_commit()) {
post_monitor_wait_event(&event, node._notifier_tid, millis, ret == OS_TIMEOUT);
}
diff --git a/hotspot/src/share/vm/runtime/os.cpp b/hotspot/src/share/vm/runtime/os.cpp
index c489b07..332ec29 100644
--- a/hotspot/src/share/vm/runtime/os.cpp
+++ b/hotspot/src/share/vm/runtime/os.cpp
@@ -1081,7 +1081,6 @@
}
-#ifndef PRODUCT
// Check if in metaspace.
if (ClassLoaderDataGraph::contains((address)addr)) {
// Use addr->print() from the debugger instead (not here)
@@ -1089,7 +1088,6 @@
" is pointing into metadata", addr);
return;
}
-#endif
// Try an OS specific find
if (os::find(addr, st)) {
diff --git a/hotspot/src/share/vm/runtime/perfMemory.cpp b/hotspot/src/share/vm/runtime/perfMemory.cpp
index 0685cbd..cf52165 100644
--- a/hotspot/src/share/vm/runtime/perfMemory.cpp
+++ b/hotspot/src/share/vm/runtime/perfMemory.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -155,7 +155,7 @@
void PerfMemory::destroy() {
- assert(_prologue != NULL, "prologue pointer must be initialized");
+ if (_prologue == NULL) return;
if (_start != NULL && _prologue->overflow != 0) {
diff --git a/hotspot/src/share/vm/runtime/sharedRuntime.cpp b/hotspot/src/share/vm/runtime/sharedRuntime.cpp
index a993c4d..fc89af6 100644
--- a/hotspot/src/share/vm/runtime/sharedRuntime.cpp
+++ b/hotspot/src/share/vm/runtime/sharedRuntime.cpp
@@ -494,6 +494,13 @@
assert(!nm->is_native_method(), "no exception handler");
assert(nm->header_begin() != nm->exception_begin(), "no exception handler");
if (nm->is_deopt_pc(return_address)) {
+ // If we come here because of a stack overflow, the stack may be
+ // unguarded. Reguard the stack otherwise if we return to the
+ // deopt blob and the stack bang causes a stack overflow we
+ // crash.
+ bool guard_pages_enabled = thread->stack_yellow_zone_enabled();
+ if (!guard_pages_enabled) guard_pages_enabled = thread->reguard_stack();
+ assert(guard_pages_enabled, "stack banging in deopt blob may cause crash");
return SharedRuntime::deopt_blob()->unpack_with_exception();
} else {
return nm->exception_begin();
@@ -2400,7 +2407,7 @@
ResourceMark rm;
NOT_PRODUCT(int insts_size);
- AdapterBlob* B = NULL;
+ AdapterBlob* new_adapter = NULL;
AdapterHandlerEntry* entry = NULL;
AdapterFingerPrint* fingerprint = NULL;
{
@@ -2432,7 +2439,8 @@
#ifdef ASSERT
AdapterHandlerEntry* shared_entry = NULL;
- if (VerifyAdapterSharing && entry != NULL) {
+ // Start adapter sharing verification only after the VM is booted.
+ if (VerifyAdapterSharing && (entry != NULL)) {
shared_entry = entry;
entry = NULL;
}
@@ -2448,41 +2456,44 @@
// Make a C heap allocated version of the fingerprint to store in the adapter
fingerprint = new AdapterFingerPrint(total_args_passed, sig_bt);
- // Create I2C & C2I handlers
+ // StubRoutines::code2() is initialized after this function can be called. As a result,
+ // VerifyAdapterCalls and VerifyAdapterSharing can fail if we re-use code that generated
+ // prior to StubRoutines::code2() being set. Checks refer to checks generated in an I2C
+ // stub that ensure that an I2C stub is called from an interpreter frame.
+ bool contains_all_checks = StubRoutines::code2() != NULL;
+ // Create I2C & C2I handlers
BufferBlob* buf = buffer_blob(); // the temporary code buffer in CodeCache
if (buf != NULL) {
CodeBuffer buffer(buf);
short buffer_locs[20];
buffer.insts()->initialize_shared_locs((relocInfo*)buffer_locs,
sizeof(buffer_locs)/sizeof(relocInfo));
- MacroAssembler _masm(&buffer);
+ MacroAssembler _masm(&buffer);
entry = SharedRuntime::generate_i2c2i_adapters(&_masm,
total_args_passed,
comp_args_on_stack,
sig_bt,
regs,
fingerprint);
-
#ifdef ASSERT
if (VerifyAdapterSharing) {
if (shared_entry != NULL) {
- assert(shared_entry->compare_code(buf->code_begin(), buffer.insts_size(), total_args_passed, sig_bt),
- "code must match");
+ assert(shared_entry->compare_code(buf->code_begin(), buffer.insts_size()), "code must match");
// Release the one just created and return the original
_adapters->free_entry(entry);
return shared_entry;
} else {
- entry->save_code(buf->code_begin(), buffer.insts_size(), total_args_passed, sig_bt);
+ entry->save_code(buf->code_begin(), buffer.insts_size());
}
}
#endif
- B = AdapterBlob::create(&buffer);
+ new_adapter = AdapterBlob::create(&buffer);
NOT_PRODUCT(insts_size = buffer.insts_size());
}
- if (B == NULL) {
+ if (new_adapter == NULL) {
// CodeCache is full, disable compilation
// Ought to log this but compile log is only per compile thread
// and we're some non descript Java thread.
@@ -2490,7 +2501,7 @@
CompileBroker::handle_full_code_cache();
return NULL; // Out of CodeCache space
}
- entry->relocate(B->content_begin());
+ entry->relocate(new_adapter->content_begin());
#ifndef PRODUCT
// debugging suppport
if (PrintAdapterHandlers || PrintStubCode) {
@@ -2509,22 +2520,25 @@
}
}
#endif
-
- _adapters->add(entry);
+ // Add the entry only if the entry contains all required checks (see sharedRuntime_xxx.cpp)
+ // The checks are inserted only if -XX:+VerifyAdapterCalls is specified.
+ if (contains_all_checks || !VerifyAdapterCalls) {
+ _adapters->add(entry);
+ }
}
// Outside of the lock
- if (B != NULL) {
+ if (new_adapter != NULL) {
char blob_id[256];
jio_snprintf(blob_id,
sizeof(blob_id),
"%s(%s)@" PTR_FORMAT,
- B->name(),
+ new_adapter->name(),
fingerprint->as_string(),
- B->content_begin());
- Forte::register_stub(blob_id, B->content_begin(), B->content_end());
+ new_adapter->content_begin());
+ Forte::register_stub(blob_id, new_adapter->content_begin(),new_adapter->content_end());
if (JvmtiExport::should_post_dynamic_code_generated()) {
- JvmtiExport::post_dynamic_code_generated(blob_id, B->content_begin(), B->content_end());
+ JvmtiExport::post_dynamic_code_generated(blob_id, new_adapter->content_begin(), new_adapter->content_end());
}
}
return entry;
@@ -2556,7 +2570,6 @@
delete _fingerprint;
#ifdef ASSERT
if (_saved_code) FREE_C_HEAP_ARRAY(unsigned char, _saved_code, mtCode);
- if (_saved_sig) FREE_C_HEAP_ARRAY(Basictype, _saved_sig, mtCode);
#endif
}
@@ -2565,35 +2578,30 @@
// Capture the code before relocation so that it can be compared
// against other versions. If the code is captured after relocation
// then relative instructions won't be equivalent.
-void AdapterHandlerEntry::save_code(unsigned char* buffer, int length, int total_args_passed, BasicType* sig_bt) {
+void AdapterHandlerEntry::save_code(unsigned char* buffer, int length) {
_saved_code = NEW_C_HEAP_ARRAY(unsigned char, length, mtCode);
- _code_length = length;
+ _saved_code_length = length;
memcpy(_saved_code, buffer, length);
- _total_args_passed = total_args_passed;
- _saved_sig = NEW_C_HEAP_ARRAY(BasicType, _total_args_passed, mtCode);
- memcpy(_saved_sig, sig_bt, _total_args_passed * sizeof(BasicType));
}
-bool AdapterHandlerEntry::compare_code(unsigned char* buffer, int length, int total_args_passed, BasicType* sig_bt) {
- if (length != _code_length) {
+bool AdapterHandlerEntry::compare_code(unsigned char* buffer, int length) {
+ if (length != _saved_code_length) {
return false;
}
- for (int i = 0; i < length; i++) {
- if (buffer[i] != _saved_code[i]) {
- return false;
- }
- }
- return true;
+
+ return (memcmp(buffer, _saved_code, length) == 0) ? true : false;
}
#endif
-// Create a native wrapper for this native method. The wrapper converts the
-// java compiled calling convention to the native convention, handlizes
-// arguments, and transitions to native. On return from the native we transition
-// back to java blocking if a safepoint is in progress.
-nmethod *AdapterHandlerLibrary::create_native_wrapper(methodHandle method, int compile_id) {
+/**
+ * Create a native wrapper for this native method. The wrapper converts the
+ * Java-compiled calling convention to the native convention, handles
+ * arguments, and transitions to native. On return from the native we transition
+ * back to java blocking if a safepoint is in progress.
+ */
+void AdapterHandlerLibrary::create_native_wrapper(methodHandle method) {
ResourceMark rm;
nmethod* nm = NULL;
@@ -2602,16 +2610,19 @@
method->has_native_function(), "must have something valid to call!");
{
- // perform the work while holding the lock, but perform any printing outside the lock
+ // Perform the work while holding the lock, but perform any printing outside the lock
MutexLocker mu(AdapterHandlerLibrary_lock);
// See if somebody beat us to it
nm = method->code();
- if (nm) {
- return nm;
+ if (nm != NULL) {
+ return;
}
- ResourceMark rm;
+ const int compile_id = CompileBroker::assign_compile_id(method, CompileBroker::standard_entry_bci);
+ assert(compile_id > 0, "Must generate native wrapper");
+
+ ResourceMark rm;
BufferBlob* buf = buffer_blob(); // the temporary code buffer in CodeCache
if (buf != NULL) {
CodeBuffer buffer(buf);
@@ -2643,16 +2654,14 @@
int comp_args_on_stack = SharedRuntime::java_calling_convention(sig_bt, regs, total_args_passed, is_outgoing);
// Generate the compiled-to-native wrapper code
- nm = SharedRuntime::generate_native_wrapper(&_masm,
- method,
- compile_id,
- sig_bt,
- regs,
- ret_type);
- }
- }
+ nm = SharedRuntime::generate_native_wrapper(&_masm, method, compile_id, sig_bt, regs, ret_type);
- // Must unlock before calling set_code
+ if (nm != NULL) {
+ method->set_code(method, nm);
+ }
+ }
+ } // Unlock AdapterHandlerLibrary_lock
+
// Install the generated code.
if (nm != NULL) {
@@ -2660,13 +2669,11 @@
ttyLocker ttyl;
CompileTask::print_compilation(tty, nm, method->is_static() ? "(static)" : "");
}
- method->set_code(method, nm);
nm->post_compiled_method_load_event();
} else {
// CodeCache is full, disable compilation
CompileBroker::handle_full_code_cache();
}
- return nm;
}
JRT_ENTRY_NO_ASYNC(void, SharedRuntime::block_for_jni_critical(JavaThread* thread))
diff --git a/hotspot/src/share/vm/runtime/sharedRuntime.hpp b/hotspot/src/share/vm/runtime/sharedRuntime.hpp
index ddf339e..6fc9424 100644
--- a/hotspot/src/share/vm/runtime/sharedRuntime.hpp
+++ b/hotspot/src/share/vm/runtime/sharedRuntime.hpp
@@ -612,9 +612,7 @@
// Captures code and signature used to generate this adapter when
// verifing adapter equivalence.
unsigned char* _saved_code;
- int _code_length;
- BasicType* _saved_sig;
- int _total_args_passed;
+ int _saved_code_length;
#endif
void init(AdapterFingerPrint* fingerprint, address i2c_entry, address c2i_entry, address c2i_unverified_entry) {
@@ -624,9 +622,7 @@
_c2i_unverified_entry = c2i_unverified_entry;
#ifdef ASSERT
_saved_code = NULL;
- _code_length = 0;
- _saved_sig = NULL;
- _total_args_passed = 0;
+ _saved_code_length = 0;
#endif
}
@@ -639,7 +635,6 @@
address get_i2c_entry() const { return _i2c_entry; }
address get_c2i_entry() const { return _c2i_entry; }
address get_c2i_unverified_entry() const { return _c2i_unverified_entry; }
-
address base_address();
void relocate(address new_base);
@@ -651,8 +646,8 @@
#ifdef ASSERT
// Used to verify that code generated for shared adapters is equivalent
- void save_code(unsigned char* code, int length, int total_args_passed, BasicType* sig_bt);
- bool compare_code(unsigned char* code, int length, int total_args_passed, BasicType* sig_bt);
+ void save_code (unsigned char* code, int length);
+ bool compare_code(unsigned char* code, int length);
#endif
//virtual void print_on(outputStream* st) const; DO NOT USE
@@ -671,7 +666,7 @@
static AdapterHandlerEntry* new_entry(AdapterFingerPrint* fingerprint,
address i2c_entry, address c2i_entry, address c2i_unverified_entry);
- static nmethod* create_native_wrapper(methodHandle method, int compile_id);
+ static void create_native_wrapper(methodHandle method);
static AdapterHandlerEntry* get_adapter(methodHandle method);
#ifdef HAVE_DTRACE_H
diff --git a/hotspot/src/share/vm/runtime/sweeper.cpp b/hotspot/src/share/vm/runtime/sweeper.cpp
index 9034428..d8d42be 100644
--- a/hotspot/src/share/vm/runtime/sweeper.cpp
+++ b/hotspot/src/share/vm/runtime/sweeper.cpp
@@ -129,6 +129,7 @@
nmethod* NMethodSweeper::_current = NULL; // Current nmethod
long NMethodSweeper::_traversals = 0; // Stack scan count, also sweep ID.
+long NMethodSweeper::_total_nof_code_cache_sweeps = 0; // Total number of full sweeps of the code cache
long NMethodSweeper::_time_counter = 0; // Virtual time used to periodically invoke sweeper
long NMethodSweeper::_last_sweep = 0; // Value of _time_counter when the last sweep happened
int NMethodSweeper::_seen = 0; // Nof. nmethod we have currently processed in current pass of CodeCache
@@ -143,13 +144,16 @@
// 1) alive -> not_entrant
// 2) not_entrant -> zombie
// 3) zombie -> marked_for_reclamation
+int NMethodSweeper::_hotness_counter_reset_val = 0;
-int NMethodSweeper::_total_nof_methods_reclaimed = 0; // Accumulated nof methods flushed
-Tickspan NMethodSweeper::_total_time_sweeping; // Accumulated time sweeping
-Tickspan NMethodSweeper::_total_time_this_sweep; // Total time this sweep
-Tickspan NMethodSweeper::_peak_sweep_time; // Peak time for a full sweep
-Tickspan NMethodSweeper::_peak_sweep_fraction_time; // Peak time sweeping one fraction
-int NMethodSweeper::_hotness_counter_reset_val = 0;
+long NMethodSweeper::_total_nof_methods_reclaimed = 0; // Accumulated nof methods flushed
+long NMethodSweeper::_total_nof_c2_methods_reclaimed = 0; // Accumulated nof methods flushed
+size_t NMethodSweeper::_total_flushed_size = 0; // Total number of bytes flushed from the code cache
+Tickspan NMethodSweeper::_total_time_sweeping; // Accumulated time sweeping
+Tickspan NMethodSweeper::_total_time_this_sweep; // Total time this sweep
+Tickspan NMethodSweeper::_peak_sweep_time; // Peak time for a full sweep
+Tickspan NMethodSweeper::_peak_sweep_fraction_time; // Peak time sweeping one fraction
+
class MarkActivationClosure: public CodeBlobClosure {
@@ -257,9 +261,14 @@
// Large ReservedCodeCacheSize: (e.g., 256M + code Cache is 90% full). The formula
// computes: (256 / 16) - 10 = 6.
if (!_should_sweep) {
- int time_since_last_sweep = _time_counter - _last_sweep;
- double wait_until_next_sweep = (ReservedCodeCacheSize / (16 * M)) - time_since_last_sweep -
- CodeCache::reverse_free_ratio();
+ const int time_since_last_sweep = _time_counter - _last_sweep;
+ // ReservedCodeCacheSize has an 'unsigned' type. We need a 'signed' type for max_wait_time,
+ // since 'time_since_last_sweep' can be larger than 'max_wait_time'. If that happens using
+ // an unsigned type would cause an underflow (wait_until_next_sweep becomes a large positive
+ // value) that disables the intended periodic sweeps.
+ const int max_wait_time = ReservedCodeCacheSize / (16 * M);
+ double wait_until_next_sweep = max_wait_time - time_since_last_sweep - CodeCache::reverse_free_ratio();
+ assert(wait_until_next_sweep <= (double)max_wait_time, "Calculation of code cache sweeper interval is incorrect");
if ((wait_until_next_sweep <= 0.0) || !CompileBroker::should_compile_new_jobs()) {
_should_sweep = true;
@@ -287,6 +296,7 @@
// We are done with sweeping the code cache once.
if (_sweep_fractions_left == 0) {
+ _total_nof_code_cache_sweeps++;
_last_sweep = _time_counter;
// Reset flag; temporarily disables sweeper
_should_sweep = false;
@@ -373,6 +383,7 @@
_total_time_sweeping += sweep_time;
_total_time_this_sweep += sweep_time;
_peak_sweep_fraction_time = MAX2(sweep_time, _peak_sweep_fraction_time);
+ _total_flushed_size += freed_memory;
_total_nof_methods_reclaimed += _flushed_count;
EventSweepCodeCache event(UNTIMED);
@@ -504,6 +515,9 @@
tty->print_cr("### Nmethod %3d/" PTR_FORMAT " (marked for reclamation) being flushed", nm->compile_id(), nm);
}
freed_memory = nm->total_size();
+ if (nm->is_compiled_by_c2()) {
+ _total_nof_c2_methods_reclaimed++;
+ }
release_nmethod(nm);
_flushed_count++;
} else {
@@ -542,6 +556,9 @@
SWEEP(nm);
// No inline caches will ever point to osr methods, so we can just remove it
freed_memory = nm->total_size();
+ if (nm->is_compiled_by_c2()) {
+ _total_nof_c2_methods_reclaimed++;
+ }
release_nmethod(nm);
_flushed_count++;
} else {
@@ -629,3 +646,13 @@
xtty->end_elem();
}
}
+
+void NMethodSweeper::print() {
+ ttyLocker ttyl;
+ tty->print_cr("Code cache sweeper statistics:");
+ tty->print_cr(" Total sweep time: %1.0lfms", (double)_total_time_sweeping.value()/1000000);
+ tty->print_cr(" Total number of full sweeps: %ld", _total_nof_code_cache_sweeps);
+ tty->print_cr(" Total number of flushed methods: %ld(%ld C2 methods)", _total_nof_methods_reclaimed,
+ _total_nof_c2_methods_reclaimed);
+ tty->print_cr(" Total size of flushed methods: " SIZE_FORMAT "kB", _total_flushed_size/K);
+}
diff --git a/hotspot/src/share/vm/runtime/sweeper.hpp b/hotspot/src/share/vm/runtime/sweeper.hpp
index 9b11264..abee1ec 100644
--- a/hotspot/src/share/vm/runtime/sweeper.hpp
+++ b/hotspot/src/share/vm/runtime/sweeper.hpp
@@ -54,28 +54,33 @@
// is full.
class NMethodSweeper : public AllStatic {
- static long _traversals; // Stack scan count, also sweep ID.
- static long _time_counter; // Virtual time used to periodically invoke sweeper
- static long _last_sweep; // Value of _time_counter when the last sweep happened
- static nmethod* _current; // Current nmethod
- static int _seen; // Nof. nmethod we have currently processed in current pass of CodeCache
- static int _flushed_count; // Nof. nmethods flushed in current sweep
- static int _zombified_count; // Nof. nmethods made zombie in current sweep
- static int _marked_for_reclamation_count; // Nof. nmethods marked for reclaim in current sweep
+ static long _traversals; // Stack scan count, also sweep ID.
+ static long _total_nof_code_cache_sweeps; // Total number of full sweeps of the code cache
+ static long _time_counter; // Virtual time used to periodically invoke sweeper
+ static long _last_sweep; // Value of _time_counter when the last sweep happened
+ static nmethod* _current; // Current nmethod
+ static int _seen; // Nof. nmethod we have currently processed in current pass of CodeCache
+ static int _flushed_count; // Nof. nmethods flushed in current sweep
+ static int _zombified_count; // Nof. nmethods made zombie in current sweep
+ static int _marked_for_reclamation_count; // Nof. nmethods marked for reclaim in current sweep
- static volatile int _sweep_fractions_left; // Nof. invocations left until we are completed with this pass
- static volatile int _sweep_started; // Flag to control conc sweeper
- static volatile bool _should_sweep; // Indicates if we should invoke the sweeper
- static volatile int _bytes_changed; // Counts the total nmethod size if the nmethod changed from:
- // 1) alive -> not_entrant
- // 2) not_entrant -> zombie
- // 3) zombie -> marked_for_reclamation
+ static volatile int _sweep_fractions_left; // Nof. invocations left until we are completed with this pass
+ static volatile int _sweep_started; // Flag to control conc sweeper
+ static volatile bool _should_sweep; // Indicates if we should invoke the sweeper
+ static volatile int _bytes_changed; // Counts the total nmethod size if the nmethod changed from:
+ // 1) alive -> not_entrant
+ // 2) not_entrant -> zombie
+ // 3) zombie -> marked_for_reclamation
// Stat counters
- static int _total_nof_methods_reclaimed; // Accumulated nof methods flushed
- static Tickspan _total_time_sweeping; // Accumulated time sweeping
- static Tickspan _total_time_this_sweep; // Total time this sweep
- static Tickspan _peak_sweep_time; // Peak time for a full sweep
- static Tickspan _peak_sweep_fraction_time; // Peak time sweeping one fraction
+ static long _total_nof_methods_reclaimed; // Accumulated nof methods flushed
+ static long _total_nof_c2_methods_reclaimed; // Accumulated nof C2-compiled methods flushed
+ static size_t _total_flushed_size; // Total size of flushed methods
+ static int _hotness_counter_reset_val;
+
+ static Tickspan _total_time_sweeping; // Accumulated time sweeping
+ static Tickspan _total_time_this_sweep; // Total time this sweep
+ static Tickspan _peak_sweep_time; // Peak time for a full sweep
+ static Tickspan _peak_sweep_fraction_time; // Peak time sweeping one fraction
static int process_nmethod(nmethod *nm);
static void release_nmethod(nmethod* nm);
@@ -83,8 +88,6 @@
static bool sweep_in_progress();
static void sweep_code_cache();
- static int _hotness_counter_reset_val;
-
public:
static long traversal_count() { return _traversals; }
static int total_nof_methods_reclaimed() { return _total_nof_methods_reclaimed; }
@@ -105,10 +108,10 @@
static void mark_active_nmethods(); // Invoked at the end of each safepoint
static void possibly_sweep(); // Compiler threads call this to sweep
- static int sort_nmethods_by_hotness(nmethod** nm1, nmethod** nm2);
static int hotness_counter_reset_val();
static void report_state_change(nmethod* nm);
static void possibly_enable_sweeper();
+ static void print(); // Printing/debugging
};
#endif // SHARE_VM_RUNTIME_SWEEPER_HPP
diff --git a/hotspot/src/share/vm/runtime/vmStructs.cpp b/hotspot/src/share/vm/runtime/vmStructs.cpp
index 0897c25..c1191a0 100644
--- a/hotspot/src/share/vm/runtime/vmStructs.cpp
+++ b/hotspot/src/share/vm/runtime/vmStructs.cpp
@@ -242,7 +242,7 @@
typedef Hashtable<Klass*, mtClass> KlassHashtable;
typedef HashtableEntry<Klass*, mtClass> KlassHashtableEntry;
typedef TwoOopHashtable<Symbol*, mtClass> SymbolTwoOopHashtable;
-typedef BinaryTreeDictionary<Metablock, FreeList> MetablockTreeDictionary;
+typedef BinaryTreeDictionary<Metablock, FreeList<Metablock> > MetablockTreeDictionary;
//--------------------------------------------------------------------------------
// VM_STRUCTS
diff --git a/hotspot/src/share/vm/services/attachListener.cpp b/hotspot/src/share/vm/services/attachListener.cpp
index 51fdb6f..6ab6c8f 100644
--- a/hotspot/src/share/vm/services/attachListener.cpp
+++ b/hotspot/src/share/vm/services/attachListener.cpp
@@ -282,6 +282,20 @@
return JNI_ERR;
}
}
+
+ if (strncmp(name, "MaxHeapFreeRatio", 17) == 0) {
+ FormatBuffer<80> err_msg("");
+ if (!Arguments::verify_MaxHeapFreeRatio(err_msg, value)) {
+ out->print_cr(err_msg.buffer());
+ return JNI_ERR;
+ }
+ } else if (strncmp(name, "MinHeapFreeRatio", 17) == 0) {
+ FormatBuffer<80> err_msg("");
+ if (!Arguments::verify_MinHeapFreeRatio(err_msg, value)) {
+ out->print_cr(err_msg.buffer());
+ return JNI_ERR;
+ }
+ }
bool res = CommandLineFlags::uintxAtPut((char*)name, &value, Flag::ATTACH_ON_DEMAND);
if (! res) {
out->print_cr("setting flag %s failed", name);
diff --git a/hotspot/src/share/vm/services/management.cpp b/hotspot/src/share/vm/services/management.cpp
index 9585960..7d39a2e 100644
--- a/hotspot/src/share/vm/services/management.cpp
+++ b/hotspot/src/share/vm/services/management.cpp
@@ -1830,6 +1830,18 @@
succeed = CommandLineFlags::intxAtPut(name, &ivalue, Flag::MANAGEMENT);
} else if (flag->is_uintx()) {
uintx uvalue = (uintx)new_value.j;
+
+ if (strncmp(name, "MaxHeapFreeRatio", 17) == 0) {
+ FormatBuffer<80> err_msg("");
+ if (!Arguments::verify_MaxHeapFreeRatio(err_msg, uvalue)) {
+ THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), err_msg.buffer());
+ }
+ } else if (strncmp(name, "MinHeapFreeRatio", 17) == 0) {
+ FormatBuffer<80> err_msg("");
+ if (!Arguments::verify_MinHeapFreeRatio(err_msg, uvalue)) {
+ THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), err_msg.buffer());
+ }
+ }
succeed = CommandLineFlags::uintxAtPut(name, &uvalue, Flag::MANAGEMENT);
} else if (flag->is_uint64_t()) {
uint64_t uvalue = (uint64_t)new_value.j;
diff --git a/hotspot/src/share/vm/trace/trace.xml b/hotspot/src/share/vm/trace/trace.xml
index 218207b..75efeea 100644
--- a/hotspot/src/share/vm/trace/trace.xml
+++ b/hotspot/src/share/vm/trace/trace.xml
@@ -122,6 +122,46 @@
<value type="CLASS" field="definingClassLoader" label="Defining Class Loader"/>
</event>
+ <event id="LongFlagChanged" path="vm/flag/long_changed" label="Long Flag Changed"
+ is_instant="true">
+ <value type="UTF8" field="name" label="Name" />
+ <value type="LONG" field="old_value" label="Old Value" />
+ <value type="LONG" field="new_value" label="New Value" />
+ <value type="FLAGVALUEORIGIN" field="origin" label="Origin" />
+ </event>
+
+ <event id="UnsignedLongFlagChanged" path="vm/flag/ulong_changed" label="Unsigned Long Flag Changed"
+ is_instant="true">
+ <value type="UTF8" field="name" label="Name" />
+ <value type="ULONG" field="old_value" label="Old Value" />
+ <value type="ULONG" field="new_value" label="New Value" />
+ <value type="FLAGVALUEORIGIN" field="origin" label="Origin" />
+ </event>
+
+ <event id="DoubleFlagChanged" path="vm/flag/double_changed" label="Double Flag Changed"
+ is_instant="true">
+ <value type="UTF8" field="name" label="Name" />
+ <value type="DOUBLE" field="old_value" label="Old Value" />
+ <value type="DOUBLE" field="new_value" label="New Value" />
+ <value type="FLAGVALUEORIGIN" field="origin" label="Origin" />
+ </event>
+
+ <event id="BooleanFlagChanged" path="vm/flag/boolean_changed" label="Boolean Flag Changed"
+ is_instant="true">
+ <value type="UTF8" field="name" label="Name" />
+ <value type="BOOLEAN" field="old_value" label="Old Value" />
+ <value type="BOOLEAN" field="new_value" label="New Value" />
+ <value type="FLAGVALUEORIGIN" field="origin" label="Origin" />
+ </event>
+
+ <event id="StringFlagChanged" path="vm/flag/string_changed" label="String Flag Changed"
+ is_instant="true">
+ <value type="UTF8" field="name" label="Name" />
+ <value type="UTF8" field="old_value" label="Old Value" />
+ <value type="UTF8" field="new_value" label="New Value" />
+ <value type="FLAGVALUEORIGIN" field="origin" label="Origin" />
+ </event>
+
<struct id="VirtualSpace">
<value type="ADDRESS" field="start" label="Start Address" description="Start address of the virtual space" />
<value type="ADDRESS" field="committedEnd" label="Committed End Address" description="End address of the committed memory for the virtual space" />
diff --git a/hotspot/src/share/vm/trace/tracetypes.xml b/hotspot/src/share/vm/trace/tracetypes.xml
index ab9a95b..9305d2f 100644
--- a/hotspot/src/share/vm/trace/tracetypes.xml
+++ b/hotspot/src/share/vm/trace/tracetypes.xml
@@ -85,12 +85,6 @@
<value type="UTF8" field="name" label="Name"/>
</content_type>
- <content_type id="StackTrace" hr_name="Stacktrace"
- type="U8" builtin_type="STACKTRACE">
- <value type="BOOLEAN" field="truncated" label="Truncated"/>
- <structarray type="StackFrame" field="frames" label="Stack frames"/>
- </content_type>
-
<content_type id="Class" hr_name="Java class"
type="U8" builtin_type="CLASS">
<value type="CLASS" field="loaderClass" label="ClassLoader"/>
@@ -116,17 +110,6 @@
<value type="UTF8" field="name" label="Name"/>
</content_type>
- <content_type id="FrameType" hr_name="Frame type"
- type="U1" jvm_type="FRAMETYPE">
- <value type="UTF8" field="desc" label="Description"/>
- </content_type>
-
- <struct_type id="StackFrame">
- <value type="METHOD" field="method" label="Java Method"/>
- <value type="INTEGER" field="line" label="Line number"/>
- <value type="FRAMETYPE" field="type" label="Frame type"/>
- </struct_type>
-
<content_type id="GCName" hr_name="GC Name"
type="U1" jvm_type="GCNAME">
<value type="UTF8" field="name" label="name" />
@@ -167,6 +150,11 @@
<value type="UTF8" field="phase" label="phase" />
</content_type>
+ <content_type id="FlagValueOrigin" hr_name="Flag Value Origin"
+ type="U1" jvm_type="FLAGVALUEORIGIN">
+ <value type="UTF8" field="origin" label="origin" />
+ </content_type>
+
</content_types>
@@ -351,6 +339,10 @@
<!-- VMOPERATIONTYPE -->
<primary_type symbol="VMOPERATIONTYPE" datatype="U2" contenttype="VMOPERATIONTYPE"
type="u2" sizeop="sizeof(u2)" />
+
+ <!-- FLAGVALUEORIGIN -->
+ <primary_type symbol="FLAGVALUEORIGIN" datatype="U1"
+ contenttype="FLAGVALUEORIGIN" type="u1" sizeop="sizeof(u1)" />
</primary_types>
</types>
diff --git a/hotspot/src/share/vm/utilities/array.hpp b/hotspot/src/share/vm/utilities/array.hpp
index 9f8e45f..0fbcd94 100644
--- a/hotspot/src/share/vm/utilities/array.hpp
+++ b/hotspot/src/share/vm/utilities/array.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -58,7 +58,7 @@
void initialize(size_t esize, int length) {
assert(length >= 0, "illegal length");
- assert(_data == NULL, "must be new object");
+ assert(StressRewriter || _data == NULL, "must be new object");
_length = length;
_data = resource_allocate_bytes(esize * length);
DEBUG_ONLY(init_nesting();)
diff --git a/hotspot/src/share/vm/utilities/bitMap.cpp b/hotspot/src/share/vm/utilities/bitMap.cpp
index b676048..8431395 100644
--- a/hotspot/src/share/vm/utilities/bitMap.cpp
+++ b/hotspot/src/share/vm/utilities/bitMap.cpp
@@ -107,7 +107,7 @@
while (true) {
intptr_t res = Atomic::cmpxchg_ptr(nw, pw, w);
if (res == w) break;
- w = *pw;
+ w = res;
nw = value ? (w | ~mr) : (w & mr);
}
}
diff --git a/hotspot/src/share/vm/utilities/vmError.cpp b/hotspot/src/share/vm/utilities/vmError.cpp
index bbf9839..4b0953a 100644
--- a/hotspot/src/share/vm/utilities/vmError.cpp
+++ b/hotspot/src/share/vm/utilities/vmError.cpp
@@ -1040,7 +1040,7 @@
OnError = NULL;
}
- static bool skip_replay = false;
+ static bool skip_replay = ReplayCompiles; // Do not overwrite file during replay
if (DumpReplayDataOnError && _thread && _thread->is_Compiler_thread() && !skip_replay) {
skip_replay = true;
ciEnv* env = ciEnv::current();
diff --git a/hotspot/test/compiler/6826736/Test.java b/hotspot/test/compiler/6826736/Test.java
index 63299dd..e1e1e8d2 100644
--- a/hotspot/test/compiler/6826736/Test.java
+++ b/hotspot/test/compiler/6826736/Test.java
@@ -27,7 +27,7 @@
* @bug 6826736
* @summary CMS: core dump with -XX:+UseCompressedOops
*
- * @run main/othervm/timeout=600 -XX:+IgnoreUnrecognizedVMOptions -Xbatch -XX:+ScavengeALot -XX:+UseCompressedOops -XX:HeapBaseMinAddress=32g -XX:CompileThreshold=100 -XX:CompileOnly=Test.test -XX:-BlockLayoutRotateLoops -XX:LoopUnrollLimit=0 Test
+ * @run main/othervm/timeout=600 -XX:+IgnoreUnrecognizedVMOptions -Xbatch -XX:+ScavengeALot -XX:+UseCompressedOops -XX:HeapBaseMinAddress=32g -XX:CompileThreshold=100 -XX:CompileOnly=Test.test -XX:-BlockLayoutRotateLoops -XX:LoopUnrollLimit=0 -Xmx256m -XX:ParallelGCThreads=4 Test
*/
public class Test {
diff --git a/hotspot/test/compiler/7184394/TestAESMain.java b/hotspot/test/compiler/7184394/TestAESMain.java
index 48baf57..ff9e12b 100644
--- a/hotspot/test/compiler/7184394/TestAESMain.java
+++ b/hotspot/test/compiler/7184394/TestAESMain.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2014 Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -39,20 +39,32 @@
System.out.println(iters + " iterations");
TestAESEncode etest = new TestAESEncode();
etest.prepare();
+ // warm-up for 20K iterations
+ System.out.println("Starting encryption warm-up");
+ for (int i=0; i<20000; i++) {
+ etest.run();
+ }
+ System.out.println("Finished encryption warm-up");
long start = System.nanoTime();
for (int i=0; i<iters; i++) {
etest.run();
}
long end = System.nanoTime();
- System.out.println("TestAESEncode runtime was " + (double)((end - start)/1000000000.0) + " ms");
+ System.out.println("TestAESEncode runtime was " + (double)((end - start)/1000000.0) + " ms");
TestAESDecode dtest = new TestAESDecode();
dtest.prepare();
+ // warm-up for 20K iterations
+ System.out.println("Starting decryption warm-up");
+ for (int i=0; i<20000; i++) {
+ dtest.run();
+ }
+ System.out.println("Finished decryption warm-up");
start = System.nanoTime();
for (int i=0; i<iters; i++) {
dtest.run();
}
end = System.nanoTime();
- System.out.println("TestAESDecode runtime was " + (double)((end - start)/1000000000.0) + " ms");
+ System.out.println("TestAESDecode runtime was " + (double)((end - start)/1000000.0) + " ms");
}
}
diff --git a/hotspot/test/compiler/debug/VerifyAdapterSharing.java b/hotspot/test/compiler/debug/VerifyAdapterSharing.java
new file mode 100644
index 0000000..1aac538
--- /dev/null
+++ b/hotspot/test/compiler/debug/VerifyAdapterSharing.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8030783
+ * @summary Regression test for 8026478
+ * @library /testlibrary
+ *
+ */
+import com.oracle.java.testlibrary.*;
+
+public class VerifyAdapterSharing {
+ public static void main(String[] args) throws Exception {
+ ProcessBuilder pb;
+ OutputAnalyzer out;
+
+ pb = ProcessTools.createJavaProcessBuilder("-Xcomp", "-XX:+IgnoreUnrecognizedVMOptions",
+ "-XX:+VerifyAdapterSharing", "-version");
+ out = new OutputAnalyzer(pb.start());
+ out.shouldHaveExitValue(0);
+ }
+}
diff --git a/hotspot/test/compiler/intrinsics/mathexact/sanity/AddExactIntTest.java b/hotspot/test/compiler/intrinsics/mathexact/sanity/AddExactIntTest.java
new file mode 100644
index 0000000..c55f847
--- /dev/null
+++ b/hotspot/test/compiler/intrinsics/mathexact/sanity/AddExactIntTest.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @library /testlibrary /testlibrary/whitebox /compiler/whitebox
+ * @build AddExactIntTest
+ * @run main ClassFileInstaller sun.hotspot.WhiteBox
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
+ * -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
+ * -XX:LogFile=hs_neg.log -XX:-UseMathExactIntrinsics AddExactIntTest
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
+ * -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
+ * -XX:LogFile=hs.log -XX:+UseMathExactIntrinsics AddExactIntTest
+ * @run main Verifier hs_neg.log hs.log
+ */
+
+public class AddExactIntTest {
+
+ public static void main(String[] args) throws Exception {
+ new IntrinsicBase.IntTest(MathIntrinsic.IntIntrinsic.Add).test();
+ }
+}
diff --git a/hotspot/test/compiler/intrinsics/mathexact/sanity/AddExactLongTest.java b/hotspot/test/compiler/intrinsics/mathexact/sanity/AddExactLongTest.java
new file mode 100644
index 0000000..4823f07
--- /dev/null
+++ b/hotspot/test/compiler/intrinsics/mathexact/sanity/AddExactLongTest.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @library /testlibrary /testlibrary/whitebox /compiler/whitebox
+ * @build AddExactLongTest
+ * @run main ClassFileInstaller sun.hotspot.WhiteBox
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
+ * -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
+ * -XX:LogFile=hs_neg.log -XX:-UseMathExactIntrinsics AddExactLongTest
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
+ * -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
+ * -XX:LogFile=hs.log -XX:+UseMathExactIntrinsics AddExactLongTest
+ * @run main Verifier hs_neg.log hs.log
+ */
+
+public class AddExactLongTest {
+
+ public static void main(String[] args) throws Exception {
+ new IntrinsicBase.LongTest(MathIntrinsic.LongIntrinsic.Add).test();
+ }
+}
diff --git a/hotspot/test/compiler/intrinsics/mathexact/sanity/DecrementExactIntTest.java b/hotspot/test/compiler/intrinsics/mathexact/sanity/DecrementExactIntTest.java
new file mode 100644
index 0000000..0b97ab8
--- /dev/null
+++ b/hotspot/test/compiler/intrinsics/mathexact/sanity/DecrementExactIntTest.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @library /testlibrary /testlibrary/whitebox /compiler/whitebox
+ * @build DecrementExactIntTest
+ * @run main ClassFileInstaller sun.hotspot.WhiteBox
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
+ * -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
+ * -XX:LogFile=hs_neg.log -XX:-UseMathExactIntrinsics DecrementExactIntTest
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
+ * -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
+ * -XX:LogFile=hs.log -XX:+UseMathExactIntrinsics DecrementExactIntTest
+ * @run main Verifier hs_neg.log hs.log
+ */
+
+public class DecrementExactIntTest {
+
+ public static void main(String[] args) throws Exception {
+ new IntrinsicBase.IntTest(MathIntrinsic.IntIntrinsic.Decrement).test();
+ }
+}
diff --git a/hotspot/test/compiler/intrinsics/mathexact/sanity/DecrementExactLongTest.java b/hotspot/test/compiler/intrinsics/mathexact/sanity/DecrementExactLongTest.java
new file mode 100644
index 0000000..f2429aa
--- /dev/null
+++ b/hotspot/test/compiler/intrinsics/mathexact/sanity/DecrementExactLongTest.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @library /testlibrary /testlibrary/whitebox /compiler/whitebox
+ * @build DecrementExactLongTest
+ * @run main ClassFileInstaller sun.hotspot.WhiteBox
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
+ * -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
+ * -XX:LogFile=hs_neg.log -XX:-UseMathExactIntrinsics DecrementExactLongTest
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
+ * -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
+ * -XX:LogFile=hs.log -XX:+UseMathExactIntrinsics DecrementExactLongTest
+ * @run main Verifier hs_neg.log hs.log
+ */
+
+public class DecrementExactLongTest {
+
+ public static void main(String[] args) throws Exception {
+ new IntrinsicBase.LongTest(MathIntrinsic.LongIntrinsic.Decrement).test();
+ }
+}
\ No newline at end of file
diff --git a/hotspot/test/compiler/intrinsics/mathexact/sanity/IncrementExactIntTest.java b/hotspot/test/compiler/intrinsics/mathexact/sanity/IncrementExactIntTest.java
new file mode 100644
index 0000000..714f4e2
--- /dev/null
+++ b/hotspot/test/compiler/intrinsics/mathexact/sanity/IncrementExactIntTest.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @library /testlibrary /testlibrary/whitebox /compiler/whitebox
+ * @build IncrementExactIntTest
+ * @run main ClassFileInstaller sun.hotspot.WhiteBox
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
+ * -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
+ * -XX:LogFile=hs_neg.log -XX:-UseMathExactIntrinsics IncrementExactIntTest
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
+ * -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
+ * -XX:LogFile=hs.log -XX:+UseMathExactIntrinsics IncrementExactIntTest
+ * @run main Verifier hs_neg.log hs.log
+ */
+
+public class IncrementExactIntTest {
+
+ public static void main(String[] args) throws Exception {
+ new IntrinsicBase.IntTest(MathIntrinsic.IntIntrinsic.Increment).test();
+ }
+}
diff --git a/hotspot/test/compiler/intrinsics/mathexact/sanity/IncrementExactLongTest.java b/hotspot/test/compiler/intrinsics/mathexact/sanity/IncrementExactLongTest.java
new file mode 100644
index 0000000..19511c4
--- /dev/null
+++ b/hotspot/test/compiler/intrinsics/mathexact/sanity/IncrementExactLongTest.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @library /testlibrary /testlibrary/whitebox /compiler/whitebox
+ * @build IncrementExactLongTest
+ * @run main ClassFileInstaller sun.hotspot.WhiteBox
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
+ * -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
+ * -XX:LogFile=hs_neg.log -XX:-UseMathExactIntrinsics IncrementExactLongTest
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
+ * -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
+ * -XX:LogFile=hs.log -XX:+UseMathExactIntrinsics IncrementExactLongTest
+ * @run main Verifier hs_neg.log hs.log
+ */
+
+public class IncrementExactLongTest {
+
+ public static void main(String[] args) throws Exception {
+ new IntrinsicBase.LongTest(MathIntrinsic.LongIntrinsic.Increment).test();
+ }
+}
diff --git a/hotspot/test/compiler/intrinsics/mathexact/sanity/IntrinsicBase.java b/hotspot/test/compiler/intrinsics/mathexact/sanity/IntrinsicBase.java
new file mode 100644
index 0000000..cecd6ce
--- /dev/null
+++ b/hotspot/test/compiler/intrinsics/mathexact/sanity/IntrinsicBase.java
@@ -0,0 +1,155 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import com.oracle.java.testlibrary.Platform;
+
+import java.io.FileOutputStream;
+import java.lang.reflect.Executable;
+import java.util.Properties;
+
+public abstract class IntrinsicBase extends CompilerWhiteBoxTest {
+ protected String javaVmName;
+ protected String useMathExactIntrinsics;
+
+ protected IntrinsicBase(TestCase testCase) {
+ super(testCase);
+ javaVmName = System.getProperty("java.vm.name");
+ useMathExactIntrinsics = getVMOption("UseMathExactIntrinsics");
+ }
+
+ @Override
+ protected void test() throws Exception {
+ //java.lang.Math should be loaded to allow a compilation of the methods that use Math's method
+ System.out.println("class java.lang.Math should be loaded. Proof: " + Math.class);
+ printEnvironmentInfo();
+
+ int expectedIntrinsicCount = 0;
+
+ switch (MODE) {
+ case "compiled mode":
+ case "mixed mode":
+ if (isServerVM()) {
+ if (TIERED_COMPILATION) {
+ int max_level = TIERED_STOP_AT_LEVEL;
+ expectedIntrinsicCount = (max_level == COMP_LEVEL_MAX) ? 1 : 0;
+ for (int i = CompilerWhiteBoxTest.COMP_LEVEL_SIMPLE; i <= max_level; ++i) {
+ deoptimize();
+ compileAtLevel(i);
+ }
+ } else {
+ expectedIntrinsicCount = 1;
+ deoptimize();
+ compileAtLevel(CompilerWhiteBoxTest.COMP_LEVEL_MAX);
+ }
+ } else {
+ deoptimize();
+ compileAtLevel(CompilerWhiteBoxTest.COMP_LEVEL_SIMPLE);
+ }
+
+ if (!isIntrinsicSupported()) {
+ expectedIntrinsicCount = 0;
+ }
+ break;
+ case "interpreted mode": //test is not applicable in this mode;
+ System.err.println("Warning: This test is not applicable in mode: " + MODE);
+ break;
+ default:
+ throw new RuntimeException("Test bug, unknown VM mode: " + MODE);
+ }
+
+ System.out.println("Expected intrinsic count is " + expectedIntrinsicCount + " name " + getIntrinsicId());
+
+ final FileOutputStream out = new FileOutputStream(getVMOption("LogFile") + ".verify.properties");
+ Properties expectedProps = new Properties();
+ expectedProps.setProperty("intrinsic.name", getIntrinsicId());
+ expectedProps.setProperty("intrinsic.expectedCount", String.valueOf(expectedIntrinsicCount));
+ expectedProps.store(out, null);
+
+ out.close();
+ }
+
+ protected void printEnvironmentInfo() {
+ System.out.println("java.vm.name=" + javaVmName);
+ System.out.println("os.arch=" + Platform.getOsArch());
+ System.out.println("java.vm.info=" + MODE);
+ System.out.println("useMathExactIntrinsics=" + useMathExactIntrinsics);
+ }
+
+ protected void compileAtLevel(int level) {
+ WHITE_BOX.enqueueMethodForCompilation(method, level);
+ waitBackgroundCompilation();
+ checkCompilation(method, level);
+ }
+
+ protected void checkCompilation(Executable executable, int level) {
+ if (!WHITE_BOX.isMethodCompiled(executable)) {
+ throw new RuntimeException("Test bug, expected compilation (level): " + level + ", but not compiled");
+ }
+ final int compilationLevel = WHITE_BOX.getMethodCompilationLevel(executable);
+ if (compilationLevel != level) {
+ if (!(TIERED_COMPILATION && level == COMP_LEVEL_FULL_PROFILE && compilationLevel == COMP_LEVEL_LIMITED_PROFILE)) { //possible case
+ throw new RuntimeException("Test bug, expected compilation (level): " + level + ", but level: " + compilationLevel);
+ }
+ }
+ }
+
+ protected abstract boolean isIntrinsicSupported();
+
+ protected abstract String getIntrinsicId();
+
+ protected boolean isServerVM() {
+ return javaVmName.toLowerCase().contains("server");
+ }
+
+ static class IntTest extends IntrinsicBase {
+ protected IntTest(MathIntrinsic.IntIntrinsic testCase) {
+ super(testCase);
+ }
+
+ @Override
+ protected boolean isIntrinsicSupported() {
+ return isServerVM() && Boolean.valueOf(useMathExactIntrinsics) && (Platform.isX86() || Platform.isX64());
+ }
+
+ @Override
+ protected String getIntrinsicId() {
+ return "_" + testCase.name().toLowerCase() + "ExactI";
+ }
+ }
+
+ static class LongTest extends IntrinsicBase {
+ protected LongTest(MathIntrinsic.LongIntrinsic testCase) {
+ super(testCase);
+ }
+
+ @Override
+ protected boolean isIntrinsicSupported() {
+ return isServerVM() && Boolean.valueOf(useMathExactIntrinsics) && Platform.isX64();
+ }
+
+ @Override
+ protected String getIntrinsicId() {
+ return "_" + testCase.name().toLowerCase() + "ExactL";
+ }
+ }
+}
diff --git a/hotspot/test/compiler/intrinsics/mathexact/sanity/MathIntrinsic.java b/hotspot/test/compiler/intrinsics/mathexact/sanity/MathIntrinsic.java
new file mode 100644
index 0000000..99039f9
--- /dev/null
+++ b/hotspot/test/compiler/intrinsics/mathexact/sanity/MathIntrinsic.java
@@ -0,0 +1,155 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.lang.reflect.Executable;
+import java.util.concurrent.Callable;
+
+public class MathIntrinsic {
+
+ enum IntIntrinsic implements CompilerWhiteBoxTest.TestCase {
+ Add {
+ @Override
+ Object execMathMethod() {
+ return intR = Math.addExact(int1, int2);
+ }
+ },
+ Subtract {
+ @Override
+ Object execMathMethod() {
+ return intR = Math.subtractExact(int1, int2);
+ }
+ },
+ Multiply {
+ @Override
+ Object execMathMethod() {
+ return intR = Math.multiplyExact(int1, int2);
+ }
+ },
+ Increment {
+ @Override
+ Object execMathMethod() {
+ return intR = Math.incrementExact(int1);
+ }
+ },
+ Decrement {
+ @Override
+ Object execMathMethod() {
+ return intR = Math.decrementExact(int1);
+ }
+ },
+ Negate {
+ @Override
+ Object execMathMethod() {
+ return intR = Math.negateExact(int1);
+ }
+ };
+ protected int int1;
+ protected int int2;
+ protected int intR;
+
+ abstract Object execMathMethod();
+
+ @Override
+ public Executable getExecutable() {
+ try {
+ return getClass().getDeclaredMethod("execMathMethod");
+ } catch (NoSuchMethodException e) {
+ throw new RuntimeException("Test bug, no such method: " + e);
+ }
+ }
+
+ @Override
+ public Callable<Integer> getCallable() {
+ return null;
+ }
+
+ @Override
+ public boolean isOsr() {
+ return false;
+ }
+
+ }
+
+ enum LongIntrinsic implements CompilerWhiteBoxTest.TestCase {
+ Add {
+ @Override
+ Object execMathMethod() {
+ return longR = Math.addExact(long1, long2);
+ }
+ },
+ Subtract {
+ @Override
+ Object execMathMethod() {
+ return longR = Math.subtractExact(long1, long2);
+ }
+ },
+ Multiply {
+ @Override
+ Object execMathMethod() {
+ return longR = Math.multiplyExact(long1, long2);
+ }
+ },
+ Increment {
+ @Override
+ Object execMathMethod() {
+ return longR = Math.incrementExact(long1);
+ }
+ },
+ Decrement {
+ @Override
+ Object execMathMethod() {
+ return longR = Math.decrementExact(long1);
+ }
+ },
+ Negate {
+ @Override
+ Object execMathMethod() {
+ return longR = Math.negateExact(long1);
+ }
+ };
+ protected long long1;
+ protected long long2;
+ protected long longR;
+
+ abstract Object execMathMethod();
+
+ @Override
+ public Executable getExecutable() {
+ try {
+ return getClass().getDeclaredMethod("execMathMethod");
+ } catch (NoSuchMethodException e) {
+ throw new RuntimeException("Test bug, no such method: " + e);
+ }
+ }
+
+ @Override
+ public Callable<Integer> getCallable() {
+ return null;
+ }
+
+ @Override
+ public boolean isOsr() {
+ return false;
+ }
+ }
+}
diff --git a/hotspot/test/compiler/intrinsics/mathexact/sanity/MultiplyExactIntTest.java b/hotspot/test/compiler/intrinsics/mathexact/sanity/MultiplyExactIntTest.java
new file mode 100644
index 0000000..bd43350
--- /dev/null
+++ b/hotspot/test/compiler/intrinsics/mathexact/sanity/MultiplyExactIntTest.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @library /testlibrary /testlibrary/whitebox /compiler/whitebox
+ * @build MultiplyExactIntTest
+ * @run main ClassFileInstaller sun.hotspot.WhiteBox
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
+ * -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
+ * -XX:LogFile=hs_neg.log -XX:-UseMathExactIntrinsics MultiplyExactIntTest
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
+ * -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
+ * -XX:LogFile=hs.log -XX:+UseMathExactIntrinsics MultiplyExactIntTest
+ * @run main Verifier hs_neg.log hs.log
+ */
+
+public class MultiplyExactIntTest {
+
+ public static void main(String[] args) throws Exception {
+ new IntrinsicBase.IntTest(MathIntrinsic.IntIntrinsic.Multiply).test();
+ }
+}
diff --git a/hotspot/test/compiler/intrinsics/mathexact/sanity/MultiplyExactLongTest.java b/hotspot/test/compiler/intrinsics/mathexact/sanity/MultiplyExactLongTest.java
new file mode 100644
index 0000000..7065110
--- /dev/null
+++ b/hotspot/test/compiler/intrinsics/mathexact/sanity/MultiplyExactLongTest.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @library /testlibrary /testlibrary/whitebox /compiler/whitebox
+ * @build MultiplyExactLongTest
+ * @run main ClassFileInstaller sun.hotspot.WhiteBox
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
+ * -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
+ * -XX:LogFile=hs_neg.log -XX:-UseMathExactIntrinsics MultiplyExactLongTest
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
+ * -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
+ * -XX:LogFile=hs.log -XX:+UseMathExactIntrinsics MultiplyExactLongTest
+ * @run main Verifier hs_neg.log hs.log
+ */
+
+public class MultiplyExactLongTest {
+
+ public static void main(String[] args) throws Exception {
+ new IntrinsicBase.LongTest(MathIntrinsic.LongIntrinsic.Multiply).test();
+ }
+}
diff --git a/hotspot/test/compiler/intrinsics/mathexact/sanity/NegateExactIntTest.java b/hotspot/test/compiler/intrinsics/mathexact/sanity/NegateExactIntTest.java
new file mode 100644
index 0000000..579c290
--- /dev/null
+++ b/hotspot/test/compiler/intrinsics/mathexact/sanity/NegateExactIntTest.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @library /testlibrary /testlibrary/whitebox /compiler/whitebox
+ * @build NegateExactIntTest
+ * @run main ClassFileInstaller sun.hotspot.WhiteBox
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
+ * -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
+ * -XX:LogFile=hs_neg.log -XX:-UseMathExactIntrinsics NegateExactIntTest
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
+ * -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
+ * -XX:LogFile=hs.log -XX:+UseMathExactIntrinsics NegateExactIntTest
+ * @run main Verifier hs_neg.log hs.log
+ */
+
+public class NegateExactIntTest {
+
+ public static void main(String[] args) throws Exception {
+ new IntrinsicBase.IntTest(MathIntrinsic.IntIntrinsic.Negate).test();
+ }
+}
diff --git a/hotspot/test/compiler/intrinsics/mathexact/sanity/NegateExactLongTest.java b/hotspot/test/compiler/intrinsics/mathexact/sanity/NegateExactLongTest.java
new file mode 100644
index 0000000..6f114f6
--- /dev/null
+++ b/hotspot/test/compiler/intrinsics/mathexact/sanity/NegateExactLongTest.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @library /testlibrary /testlibrary/whitebox /compiler/whitebox
+ * @build NegateExactLongTest
+ * @run main ClassFileInstaller sun.hotspot.WhiteBox
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
+ * -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
+ * -XX:LogFile=hs_neg.log -XX:-UseMathExactIntrinsics NegateExactLongTest
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
+ * -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
+ * -XX:LogFile=hs.log -XX:+UseMathExactIntrinsics NegateExactLongTest
+ * @run main Verifier hs_neg.log hs.log
+ */
+
+public class NegateExactLongTest {
+
+ public static void main(String[] args) throws Exception {
+ new IntrinsicBase.LongTest(MathIntrinsic.LongIntrinsic.Negate).test();
+ }
+}
diff --git a/hotspot/test/compiler/intrinsics/mathexact/sanity/SubtractExactIntTest.java b/hotspot/test/compiler/intrinsics/mathexact/sanity/SubtractExactIntTest.java
new file mode 100644
index 0000000..d1eaf39
--- /dev/null
+++ b/hotspot/test/compiler/intrinsics/mathexact/sanity/SubtractExactIntTest.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @library /testlibrary /testlibrary/whitebox /compiler/whitebox
+ * @build SubtractExactIntTest
+ * @run main ClassFileInstaller sun.hotspot.WhiteBox
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
+ * -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
+ * -XX:LogFile=hs_neg.log -XX:-UseMathExactIntrinsics SubtractExactIntTest
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
+ * -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
+ * -XX:LogFile=hs.log -XX:+UseMathExactIntrinsics SubtractExactIntTest
+ * @run main Verifier hs_neg.log hs.log
+
+ */
+
+public class SubtractExactIntTest {
+
+ public static void main(String[] args) throws Exception {
+ new IntrinsicBase.IntTest(MathIntrinsic.IntIntrinsic.Subtract).test();
+ }
+}
diff --git a/hotspot/test/compiler/intrinsics/mathexact/sanity/SubtractExactLongTest.java b/hotspot/test/compiler/intrinsics/mathexact/sanity/SubtractExactLongTest.java
new file mode 100644
index 0000000..fbe8eb1
--- /dev/null
+++ b/hotspot/test/compiler/intrinsics/mathexact/sanity/SubtractExactLongTest.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @library /testlibrary /testlibrary/whitebox /compiler/whitebox
+ * @build SubtractExactLongTest
+ * @run main ClassFileInstaller sun.hotspot.WhiteBox
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
+ * -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
+ * -XX:LogFile=hs_neg.log -XX:-UseMathExactIntrinsics SubtractExactLongTest
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions
+ * -XX:+IgnoreUnrecognizedVMOptions -XX:+WhiteBoxAPI -XX:+LogCompilation
+ * -XX:CompileCommand=compileonly,MathIntrinsic*::execMathMethod
+ * -XX:LogFile=hs.log -XX:+UseMathExactIntrinsics SubtractExactLongTest
+ * @run main Verifier hs_neg.log hs.log
+ */
+
+public class SubtractExactLongTest {
+
+ public static void main(String[] args) throws Exception {
+ new IntrinsicBase.LongTest(MathIntrinsic.LongIntrinsic.Subtract).test();
+ }
+}
diff --git a/hotspot/test/compiler/intrinsics/mathexact/sanity/Verifier.java b/hotspot/test/compiler/intrinsics/mathexact/sanity/Verifier.java
new file mode 100644
index 0000000..7b26d64
--- /dev/null
+++ b/hotspot/test/compiler/intrinsics/mathexact/sanity/Verifier.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.io.BufferedReader;
+import java.io.FileReader;
+import java.util.Properties;
+
+public class Verifier {
+
+ public static void main(String[] args) throws Exception {
+ if (args.length == 0)
+ throw new RuntimeException("Test bug, nothing to verify");
+ for (String hsLogFile : args) {
+ verify(hsLogFile);
+ }
+ }
+
+ private static void verify(String hsLogFile) throws Exception {
+ System.out.println("Verifying " + hsLogFile);
+
+ final Properties expectedProperties = new Properties();
+ final FileReader reader = new FileReader(hsLogFile + ".verify.properties");
+ expectedProperties.load(reader);
+ reader.close();
+
+ int fullMatchCnt = 0;
+ int suspectCnt = 0;
+ final String intrinsicId = expectedProperties.getProperty("intrinsic.name");
+ final String prefix = "<intrinsic id='";
+ final String prefixWithId = prefix + intrinsicId + "'";
+ final int expectedCount = Integer.parseInt(expectedProperties.getProperty("intrinsic.expectedCount"));
+
+ BufferedReader r = new BufferedReader(new FileReader(hsLogFile));
+ String s;
+ while ((s = r.readLine()) != null) {
+ if (s.startsWith(prefix)) {
+ if (s.startsWith(prefixWithId)) {
+ fullMatchCnt++;
+ } else {
+ suspectCnt++;
+ System.out.println("WARNING: Other intrinsic detected " + s);
+ }
+ }
+ }
+ r.close();
+
+ System.out.println("Intrinsic " + intrinsicId + " verification, expected: " + expectedCount + ", matched: " + fullMatchCnt + ", suspected: " + suspectCnt);
+ if (expectedCount != fullMatchCnt)
+ throw new RuntimeException("Unexpected count of intrinsic " + prefixWithId + " expected:" + expectedCount + ", matched: " + fullMatchCnt + ", suspected: " + suspectCnt);
+ }
+}
diff --git a/hotspot/test/compiler/startup/SmallCodeCacheStartup.java b/hotspot/test/compiler/startup/SmallCodeCacheStartup.java
index 74b2b76..7a9a11a 100644
--- a/hotspot/test/compiler/startup/SmallCodeCacheStartup.java
+++ b/hotspot/test/compiler/startup/SmallCodeCacheStartup.java
@@ -37,7 +37,6 @@
pb = ProcessTools.createJavaProcessBuilder("-XX:ReservedCodeCacheSize=3m", "-XX:CICompilerCount=64", "-version");
out = new OutputAnalyzer(pb.start());
- out.shouldContain("no space to run compiler");
out.shouldHaveExitValue(0);
}
}
diff --git a/hotspot/test/compiler/tiered/NonTieredLevelsTest.java b/hotspot/test/compiler/tiered/NonTieredLevelsTest.java
index 28fd24d..715d32a 100644
--- a/hotspot/test/compiler/tiered/NonTieredLevelsTest.java
+++ b/hotspot/test/compiler/tiered/NonTieredLevelsTest.java
@@ -30,7 +30,7 @@
* @run main ClassFileInstaller sun.hotspot.WhiteBox
* @run main/othervm -Xbootclasspath/a:. -XX:-TieredCompilation
* -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI
- * -XX:CompileCommand=compileonly,TestCase$Helper::*
+ * -XX:CompileCommand=compileonly,SimpleTestCase$Helper::*
* NonTieredLevelsTest
* @summary Verify that only one level can be used
* @author igor.ignatyev@oracle.com
@@ -59,9 +59,7 @@
+ "TieredCompilation. Skip test.");
return;
}
- for (TestCase test : TestCase.values()) {
- new NonTieredLevelsTest(test).runTest();
- }
+ CompilerWhiteBoxTest.main(NonTieredLevelsTest::new, args);
}
private NonTieredLevelsTest(TestCase testCase) {
@@ -80,7 +78,7 @@
checkLevel(AVAILABLE_COMP_LEVEL, compLevel);
int bci = WHITE_BOX.getMethodEntryBci(method);
deoptimize();
- if (!testCase.isOsr) {
+ if (!testCase.isOsr()) {
for (int level = 1; level <= COMP_LEVEL_MAX; ++level) {
if (IS_AVAILABLE_COMPLEVEL.test(level)) {
testAvailableLevel(level, bci);
@@ -94,3 +92,4 @@
}
}
}
+
diff --git a/hotspot/test/compiler/tiered/TieredLevelsTest.java b/hotspot/test/compiler/tiered/TieredLevelsTest.java
index 9d3112a..675a394 100644
--- a/hotspot/test/compiler/tiered/TieredLevelsTest.java
+++ b/hotspot/test/compiler/tiered/TieredLevelsTest.java
@@ -28,7 +28,7 @@
* @run main ClassFileInstaller sun.hotspot.WhiteBox
* @run main/othervm -Xbootclasspath/a:. -XX:+TieredCompilation
* -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI
- * -XX:CompileCommand=compileonly,TestCase$Helper::*
+ * -XX:CompileCommand=compileonly,SimpleTestCase$Helper::*
* TieredLevelsTest
* @summary Verify that all levels < 'TieredStopAtLevel' can be used
* @author igor.ignatyev@oracle.com
@@ -40,9 +40,7 @@
+ "TieredCompilation. Skip test.");
return;
}
- for (TestCase test : TestCase.values()) {
- new TieredLevelsTest(test).runTest();
- }
+ CompilerWhiteBoxTest.main(TieredLevelsTest::new, args);
}
private TieredLevelsTest(TestCase testCase) {
diff --git a/hotspot/test/compiler/types/TestMeetTopArrayExactConstantArray.java b/hotspot/test/compiler/types/TestMeetTopArrayExactConstantArray.java
new file mode 100644
index 0000000..56b19b3
--- /dev/null
+++ b/hotspot/test/compiler/types/TestMeetTopArrayExactConstantArray.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8027571
+ * @summary meet of TopPTR exact array with constant array is not symmetric
+ * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:-UseOnStackReplacement -XX:TypeProfileLevel=222 -XX:+UnlockExperimentalVMOptions -XX:+UseTypeSpeculation -XX:-BackgroundCompilation TestMeetTopArrayExactConstantArray
+ *
+ */
+
+public class TestMeetTopArrayExactConstantArray {
+
+ static class A {
+ }
+
+ static class B {
+ }
+
+ static class C extends A {
+ }
+
+ static class D extends C {
+ }
+
+ final static B[] b = new B[10];
+
+ static void m0(Object[] o) {
+ if (o.getClass() == Object[].class) {
+ }
+ }
+
+ static void m1(Object[] o, boolean cond) {
+ if (cond) {
+ o = b;
+ }
+ m0(o);
+ }
+
+ static void m2(Object[] o, boolean cond1, boolean cond2) {
+ if (cond1) {
+ m1(o, cond2);
+ }
+ }
+
+ static void m3(C[] o, boolean cond1, boolean cond2, boolean cond3) {
+ if (cond1) {
+ m2(o, cond2, cond3);
+ }
+ }
+
+ static public void main(String[] args) {
+ A[] a = new A[10];
+ D[] d = new D[10];
+ Object[] o = new Object[10];
+ for (int i = 0; i < 5000; i++) {
+ // record in profiling that the if in m0 succeeds
+ m0(o);
+ // record some profiling for m2 and m1
+ m2(a, true, (i%2) == 0);
+ // record some profiling for m3 and conflicting profile for m2
+ m3(d, true, false, (i%2) == 0);
+ }
+
+ // get m3 compiled. The if in m0 will be optimized because of argument profiling in m3
+ C[] c = new C[10];
+ for (int i = 0; i < 20000; i++) {
+ m3(c, true, false, (i%2) == 0);
+ }
+ // make m3 not entrant and the if in m0 fail
+ m3(c, true, true, false);
+ m3(c, true, true, false);
+ m3(c, true, true, false);
+ m3(c, true, true, false);
+
+ // make m3 recompile, this time with if the not optimized
+ // on entry to m3, argument o is of type C[], profiled C[]
+ // on entry to m1, argument o is of type C[], speculative C[] exact, profiled A[]. Speculative becomes AnyNull
+ // after the if in m1, speculative type of o becomes constant from final field b
+ // the true if branch in m0 does a join between the type of o of speculative type constant from final field b and exact klass Object[]
+ for (int i = 0; i < 20000; i++) {
+ m3(c, true, false, (i%2) == 0);
+ }
+
+ System.out.println("TEST PASSED");
+ }
+}
diff --git a/hotspot/test/compiler/types/TestSpeculationFailedHigherEqual.java b/hotspot/test/compiler/types/TestSpeculationFailedHigherEqual.java
new file mode 100644
index 0000000..9579dce
--- /dev/null
+++ b/hotspot/test/compiler/types/TestSpeculationFailedHigherEqual.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8027422
+ * @summary type methods shouldn't always operate on speculative part
+ * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:TypeProfileLevel=222 -XX:+UnlockExperimentalVMOptions -XX:+UseTypeSpeculation -XX:-BackgroundCompilation TestSpeculationFailedHigherEqual
+ *
+ */
+
+public class TestSpeculationFailedHigherEqual {
+
+ static class A {
+ void m() {}
+ int i;
+ }
+
+ static class C extends A {
+ }
+
+ static C c;
+
+ static A m1(A a, boolean cond) {
+ // speculative type for a is C not null
+ if (cond ) {
+ a = c;
+ }
+ // speculative type for a is C (may be null)
+ int i = a.i;
+ return a;
+ }
+
+ static public void main(String[] args) {
+ C c = new C();
+ TestSpeculationFailedHigherEqual.c = c;
+ for (int i = 0; i < 20000; i++) {
+ m1(c, i%2 == 0);
+ }
+
+ System.out.println("TEST PASSED");
+ }
+}
diff --git a/hotspot/test/compiler/types/TypeSpeculation.java b/hotspot/test/compiler/types/TypeSpeculation.java
index e47de92..0a9c8e9 100644
--- a/hotspot/test/compiler/types/TypeSpeculation.java
+++ b/hotspot/test/compiler/types/TypeSpeculation.java
@@ -25,7 +25,7 @@
* @test
* @bug 8024070
* @summary Test that type speculation doesn't cause incorrect execution
- * @run main/othervm -XX:-UseOnStackReplacement -XX:-BackgroundCompilation -XX:TypeProfileLevel=222 TypeSpeculation
+ * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:-UseOnStackReplacement -XX:-BackgroundCompilation -XX:TypeProfileLevel=222 -XX:+UnlockExperimentalVMOptions -XX:+UseTypeSpeculation TypeSpeculation
*
*/
@@ -398,6 +398,133 @@
return true;
}
+ // java/lang/Object:AnyNull:exact *,iid=top
+ // meets
+ // stable:bottom[int:max..0]:NotNull *
+ static void test10_4(Object o) {
+ }
+
+ static void test10_3(Object o, boolean b) {
+ if (b) {
+ test10_4(o);
+ }
+ }
+
+ static void test10_2(Object o, boolean b1, boolean b2) {
+ if (b1) {
+ test10_3(o, b2);
+ }
+ }
+
+ static void test10_1(B[] b, boolean b1, boolean b2) {
+ test10_2(b, b1, b2);
+ }
+
+ static boolean test10() {
+ Object o = new Object();
+ A[] a = new A[10];
+ B[] b = new B[10];
+ B[] c = new C[10];
+ for (int i = 0; i < 20000; i++) {
+ test10_1(b, false, false);
+ test10_1(c, false, false);
+ test10_2(a, true, false);
+ test10_3(o, true);
+ }
+ return true;
+ }
+
+ // stable:TypeSpeculation$B:TopPTR *,iid=top[int:max..0]:TopPTR *,iid=top
+ // meets
+ // java/lang/Object:AnyNull:exact *,iid=top
+ static void test11_3(Object o) {
+ }
+
+ static void test11_2(Object o, boolean b) {
+ if (b) {
+ test11_3(o);
+ }
+ }
+
+ static void test11_1(B[] b, boolean bb) {
+ test11_2(b, bb);
+ }
+
+ static boolean test11() {
+ Object o = new Object();
+ B[] b = new B[10];
+ B[] c = new C[10];
+ for (int i = 0; i < 20000; i++) {
+ test11_1(b, false);
+ test11_1(c, false);
+ test11_2(o, true);
+ }
+ return true;
+ }
+
+ // TypeSpeculation$I *
+ // meets
+ // java/lang/Object:AnyNull *,iid=top
+ static void test12_3(Object o) {
+ }
+
+ static void test12_2(Object o, boolean b) {
+ if (b) {
+ test12_3(o);
+ }
+ }
+
+ static void test12_1(I i, boolean b) {
+ test12_2(i, b);
+ }
+
+ static boolean test12() {
+ Object o = new Object();
+ B b = new B();
+ C c = new C();
+ for (int i = 0; i < 20000; i++) {
+ test12_1(b, false);
+ test12_1(c, false);
+ test12_2(o, true);
+ }
+ return true;
+ }
+
+ // stable:bottom[int:max..0]:NotNull *
+ // meets
+ // stable:TypeSpeculation$A:TopPTR *,iid=top[int:max..0]:AnyNull:exact *,iid=top
+ static Object test13_3(Object o, boolean b) {
+ Object oo;
+ if (b) {
+ oo = o;
+ } else {
+ oo = new A[10];
+ }
+ return oo;
+ }
+
+ static void test13_2(Object o, boolean b1, boolean b2) {
+ if (b1) {
+ test13_3(o, b2);
+ }
+ }
+
+ static void test13_1(B[] b, boolean b1, boolean b2) {
+ test13_2(b, b1, b2);
+ }
+
+ static boolean test13() {
+ A[] a = new A[10];
+ B[] b = new B[10];
+ B[] c = new C[10];
+ for (int i = 0; i < 20000; i++) {
+ test13_1(b, false, false);
+ test13_1(c, false, false);
+ test13_2(a, true, (i%2) == 0);
+ }
+ return true;
+ }
+
static public void main(String[] args) {
boolean success = true;
@@ -419,6 +546,14 @@
success = test9() && success;
+ success = test10() && success;
+
+ success = test11() && success;
+
+ success = test12() && success;
+
+ success = test13() && success;
+
if (success) {
System.out.println("TEST PASSED");
} else {
diff --git a/hotspot/test/compiler/uncommontrap/StackOverflowGuardPagesOff.java b/hotspot/test/compiler/uncommontrap/StackOverflowGuardPagesOff.java
new file mode 100644
index 0000000..4ad409b
--- /dev/null
+++ b/hotspot/test/compiler/uncommontrap/StackOverflowGuardPagesOff.java
@@ -0,0 +1,355 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8029383
+ * @summary stack overflow if callee is marked for deoptimization causes crash
+ * @run main/othervm -XX:TieredStopAtLevel=1 -XX:-BackgroundCompilation -XX:CompileCommand=dontinline,StackOverflowGuardPagesOff::m1 -XX:CompileCommand=exclude,StackOverflowGuardPagesOff::m2 -Xss256K -XX:-UseOnStackReplacement StackOverflowGuardPagesOff
+ *
+ */
+
+// This test calls m2 recursively until a stack overflow. Then calls
+// m3 that calls m1. m1 triggers B's class loading, as a result m1 and
+// m3 needs to be deoptimized. Deoptimization of m1 causes a stack
+// overflow exception to be thrown which is propagated to m3 in the
+// deopt blob. If the guard pages are no enabled, the stack bang in
+// the deopt blob triggers a crash.
+public class StackOverflowGuardPagesOff {
+
+ static class A {
+ void m() {}
+ }
+
+ static class B extends A {
+ void m() {}
+ }
+
+ static void m1(boolean deopt, A a) {
+ long l0, l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12,
+ l13, l14, l15, l16, l17, l18, l19, l20, l21, l22, l23, l24,
+ l25, l26, l27, l28, l29, l30, l31, l32, l33, l34, l35, l36,
+ l37, l38, l39, l40, l41, l42, l43, l44, l45, l46, l47, l48,
+ l49, l50, l51, l52, l53, l54, l55, l56, l57, l58, l59, l60,
+ l61, l62, l63, l64, l65, l66, l67, l68, l69, l70, l71, l72,
+ l73, l74, l75, l76, l77, l78, l79, l80, l81, l82, l83, l84,
+ l85, l86, l87, l88, l89, l90, l91, l92, l93, l94, l95, l96,
+ l97, l98, l99, l100, l101, l102, l103, l104, l105, l106, l107,
+ l108, l109, l110, l111, l112, l113, l114, l115, l116, l117,
+ l118, l119, l120, l121, l122, l123, l124, l125, l126, l127,
+ l128, l129, l130, l131, l132, l133, l134, l135, l136, l137,
+ l138, l139, l140, l141, l142, l143, l144, l145, l146, l147,
+ l148, l149, l150, l151, l152, l153, l154, l155, l156, l157,
+ l158, l159, l160, l161, l162, l163, l164, l165, l166, l167,
+ l168, l169, l170, l171, l172, l173, l174, l175, l176, l177,
+ l178, l179, l180, l181, l182, l183, l184, l185, l186, l187,
+ l188, l189, l190, l191, l192, l193, l194, l195, l196, l197,
+ l198, l199, l200, l201, l202, l203, l204, l205, l206, l207,
+ l208, l209, l210, l211, l212, l213, l214, l215, l216, l217,
+ l218, l219, l220, l221, l222, l223, l224, l225, l226, l227,
+ l228, l229, l230, l231, l232, l233, l234, l235, l236, l237,
+ l238, l239, l240, l241, l242, l243, l244, l245, l246, l247,
+ l248, l249, l250, l251, l252, l253, l254, l255, l256, l257,
+ l258, l259, l260, l261, l262, l263, l264, l265, l266, l267,
+ l268, l269, l270, l271, l272, l273, l274, l275, l276, l277,
+ l278, l279, l280, l281, l282, l283, l284, l285, l286, l287,
+ l288, l289, l290, l291, l292, l293, l294, l295, l296, l297,
+ l298, l299, l300, l301, l302, l303, l304, l305, l306, l307,
+ l308, l309, l310, l311, l312, l313, l314, l315, l316, l317,
+ l318, l319, l320, l321, l322, l323, l324, l325, l326, l327,
+ l328, l329, l330, l331, l332, l333, l334, l335, l336, l337,
+ l338, l339, l340, l341, l342, l343, l344, l345, l346, l347,
+ l348, l349, l350, l351, l352, l353, l354, l355, l356, l357,
+ l358, l359, l360, l361, l362, l363, l364, l365, l366, l367,
+ l368, l369, l370, l371, l372, l373, l374, l375, l376, l377,
+ l378, l379, l380, l381, l382, l383, l384, l385, l386, l387,
+ l388, l389, l390, l391, l392, l393, l394, l395, l396, l397,
+ l398, l399, l400, l401, l402, l403, l404, l405, l406, l407,
+ l408, l409, l410, l411, l412, l413, l414, l415, l416, l417,
+ l418, l419, l420, l421, l422, l423, l424, l425, l426, l427,
+ l428, l429, l430, l431, l432, l433, l434, l435, l436, l437,
+ l438, l439, l440, l441, l442, l443, l444, l445, l446, l447,
+ l448, l449, l450, l451, l452, l453, l454, l455, l456, l457,
+ l458, l459, l460, l461, l462, l463, l464, l465, l466, l467,
+ l468, l469, l470, l471, l472, l473, l474, l475, l476, l477,
+ l478, l479, l480, l481, l482, l483, l484, l485, l486, l487,
+ l488, l489, l490, l491, l492, l493, l494, l495, l496, l497,
+ l498, l499, l500, l501, l502, l503, l504, l505, l506, l507,
+ l508, l509, l510, l511;
+
+ long ll0, ll1, ll2, ll3, ll4, ll5, ll6, ll7, ll8, ll9, ll10, ll11, ll12,
+ ll13, ll14, ll15, ll16, ll17, ll18, ll19, ll20, ll21, ll22, ll23, ll24,
+ ll25, ll26, ll27, ll28, ll29, ll30, ll31, ll32, ll33, ll34, ll35, ll36,
+ ll37, ll38, ll39, ll40, ll41, ll42, ll43, ll44, ll45, ll46, ll47, ll48,
+ ll49, ll50, ll51, ll52, ll53, ll54, ll55, ll56, ll57, ll58, ll59, ll60,
+ ll61, ll62, ll63, ll64, ll65, ll66, ll67, ll68, ll69, ll70, ll71, ll72,
+ ll73, ll74, ll75, ll76, ll77, ll78, ll79, ll80, ll81, ll82, ll83, ll84,
+ ll85, ll86, ll87, ll88, ll89, ll90, ll91, ll92, ll93, ll94, ll95, ll96,
+ ll97, ll98, ll99, ll100, ll101, ll102, ll103, ll104, ll105, ll106, ll107,
+ ll108, ll109, ll110, ll111, ll112, ll113, ll114, ll115, ll116, ll117,
+ ll118, ll119, ll120, ll121, ll122, ll123, ll124, ll125, ll126, ll127,
+ ll128, ll129, ll130, ll131, ll132, ll133, ll134, ll135, ll136, ll137,
+ ll138, ll139, ll140, ll141, ll142, ll143, ll144, ll145, ll146, ll147,
+ ll148, ll149, ll150, ll151, ll152, ll153, ll154, ll155, ll156, ll157,
+ ll158, ll159, ll160, ll161, ll162, ll163, ll164, ll165, ll166, ll167,
+ ll168, ll169, ll170, ll171, ll172, ll173, ll174, ll175, ll176, ll177,
+ ll178, ll179, ll180, ll181, ll182, ll183, ll184, ll185, ll186, ll187,
+ ll188, ll189, ll190, ll191, ll192, ll193, ll194, ll195, ll196, ll197,
+ ll198, ll199, ll200, ll201, ll202, ll203, ll204, ll205, ll206, ll207,
+ ll208, ll209, ll210, ll211, ll212, ll213, ll214, ll215, ll216, ll217,
+ ll218, ll219, ll220, ll221, ll222, ll223, ll224, ll225, ll226, ll227,
+ ll228, ll229, ll230, ll231, ll232, ll233, ll234, ll235, ll236, ll237,
+ ll238, ll239, ll240, ll241, ll242, ll243, ll244, ll245, ll246, ll247,
+ ll248, ll249, ll250, ll251, ll252, ll253, ll254, ll255, ll256, ll257,
+ ll258, ll259, ll260, ll261, ll262, ll263, ll264, ll265, ll266, ll267,
+ ll268, ll269, ll270, ll271, ll272, ll273, ll274, ll275, ll276, ll277,
+ ll278, ll279, ll280, ll281, ll282, ll283, ll284, ll285, ll286, ll287,
+ ll288, ll289, ll290, ll291, ll292, ll293, ll294, ll295, ll296, ll297,
+ ll298, ll299, ll300, ll301, ll302, ll303, ll304, ll305, ll306, ll307,
+ ll308, ll309, ll310, ll311, ll312, ll313, ll314, ll315, ll316, ll317,
+ ll318, ll319, ll320, ll321, ll322, ll323, ll324, ll325, ll326, ll327,
+ ll328, ll329, ll330, ll331, ll332, ll333, ll334, ll335, ll336, ll337,
+ ll338, ll339, ll340, ll341, ll342, ll343, ll344, ll345, ll346, ll347,
+ ll348, ll349, ll350, ll351, ll352, ll353, ll354, ll355, ll356, ll357,
+ ll358, ll359, ll360, ll361, ll362, ll363, ll364, ll365, ll366, ll367,
+ ll368, ll369, ll370, ll371, ll372, ll373, ll374, ll375, ll376, ll377,
+ ll378, ll379, ll380, ll381, ll382, ll383, ll384, ll385, ll386, ll387,
+ ll388, ll389, ll390, ll391, ll392, ll393, ll394, ll395, ll396, ll397,
+ ll398, ll399, ll400, ll401, ll402, ll403, ll404, ll405, ll406, ll407,
+ ll408, ll409, ll410, ll411, ll412, ll413, ll414, ll415, ll416, ll417,
+ ll418, ll419, ll420, ll421, ll422, ll423, ll424, ll425, ll426, ll427,
+ ll428, ll429, ll430, ll431, ll432, ll433, ll434, ll435, ll436, ll437,
+ ll438, ll439, ll440, ll441, ll442, ll443, ll444, ll445, ll446, ll447,
+ ll448, ll449, ll450, ll451, ll452, ll453, ll454, ll455, ll456, ll457,
+ ll458, ll459, ll460, ll461, ll462, ll463, ll464, ll465, ll466, ll467,
+ ll468, ll469, ll470, ll471, ll472, ll473, ll474, ll475, ll476, ll477,
+ ll478, ll479, ll480, ll481, ll482, ll483, ll484, ll485, ll486, ll487,
+ ll488, ll489, ll490, ll491, ll492, ll493, ll494, ll495, ll496, ll497,
+ ll498, ll499, ll500, ll501, ll502, ll503, ll504, ll505, ll506, ll507,
+ ll508, ll509, ll510, ll511;
+
+ a.m();
+
+ if (deopt) {
+ do_load = true;
+ while (!load_done);
+ }
+ }
+
+ static void m2(boolean deopt, A a) {
+ long l0, l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12,
+ l13, l14, l15, l16, l17, l18, l19, l20, l21, l22, l23, l24,
+ l25, l26, l27, l28, l29, l30, l31, l32, l33, l34, l35, l36,
+ l37, l38, l39, l40, l41, l42, l43, l44, l45, l46, l47, l48,
+ l49, l50, l51, l52, l53, l54, l55, l56, l57, l58, l59, l60,
+ l61, l62, l63, l64, l65, l66, l67, l68, l69, l70, l71, l72,
+ l73, l74, l75, l76, l77, l78, l79, l80, l81, l82, l83, l84,
+ l85, l86, l87, l88, l89, l90, l91, l92, l93, l94, l95, l96,
+ l97, l98, l99, l100, l101, l102, l103, l104, l105, l106, l107,
+ l108, l109, l110, l111, l112, l113, l114, l115, l116, l117,
+ l118, l119, l120, l121, l122, l123, l124, l125, l126, l127,
+ l128, l129, l130, l131, l132, l133, l134, l135, l136, l137,
+ l138, l139, l140, l141, l142, l143, l144, l145, l146, l147,
+ l148, l149, l150, l151, l152, l153, l154, l155, l156, l157,
+ l158, l159, l160, l161, l162, l163, l164, l165, l166, l167,
+ l168, l169, l170, l171, l172, l173, l174, l175, l176, l177,
+ l178, l179, l180, l181, l182, l183, l184, l185, l186, l187,
+ l188, l189, l190, l191, l192, l193, l194, l195, l196, l197,
+ l198, l199, l200, l201, l202, l203, l204, l205, l206, l207,
+ l208, l209, l210, l211, l212, l213, l214, l215, l216, l217,
+ l218, l219, l220, l221, l222, l223, l224, l225, l226, l227,
+ l228, l229, l230, l231, l232, l233, l234, l235, l236, l237,
+ l238, l239, l240, l241, l242, l243, l244, l245, l246, l247,
+ l248, l249, l250, l251, l252, l253, l254, l255, l256, l257,
+ l258, l259, l260, l261, l262, l263, l264, l265, l266, l267,
+ l268, l269, l270, l271, l272, l273, l274, l275, l276, l277,
+ l278, l279, l280, l281, l282, l283, l284, l285, l286, l287,
+ l288, l289, l290, l291, l292, l293, l294, l295, l296, l297,
+ l298, l299, l300, l301, l302, l303, l304, l305, l306, l307,
+ l308, l309, l310, l311, l312, l313, l314, l315, l316, l317,
+ l318, l319, l320, l321, l322, l323, l324, l325, l326, l327,
+ l328, l329, l330, l331, l332, l333, l334, l335, l336, l337,
+ l338, l339, l340, l341, l342, l343, l344, l345, l346, l347,
+ l348, l349, l350, l351, l352, l353, l354, l355, l356, l357,
+ l358, l359, l360, l361, l362, l363, l364, l365, l366, l367,
+ l368, l369, l370, l371, l372, l373, l374, l375, l376, l377,
+ l378, l379, l380, l381, l382, l383, l384, l385, l386, l387,
+ l388, l389, l390, l391, l392, l393, l394, l395, l396, l397,
+ l398, l399, l400, l401, l402, l403, l404, l405, l406, l407,
+ l408, l409, l410, l411, l412, l413, l414, l415, l416, l417,
+ l418, l419, l420, l421, l422, l423, l424, l425, l426, l427,
+ l428, l429, l430, l431, l432, l433, l434, l435, l436, l437,
+ l438, l439, l440, l441, l442, l443, l444, l445, l446, l447,
+ l448, l449, l450, l451, l452, l453, l454, l455, l456, l457,
+ l458, l459, l460, l461, l462, l463, l464, l465, l466, l467,
+ l468, l469, l470, l471, l472, l473, l474, l475, l476, l477,
+ l478, l479, l480, l481, l482, l483, l484, l485, l486, l487,
+ l488, l489, l490, l491, l492, l493, l494, l495, l496, l497,
+ l498, l499, l500, l501, l502, l503, l504, l505, l506, l507,
+ l508, l509, l510, l511;
+
+ try {
+ m2(deopt, a);
+ } catch (StackOverflowError e) {
+ m3(deopt, a);
+ }
+ }
+
+ static void m3(boolean deopt, A a) {
+ long l0, l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12,
+ l13, l14, l15, l16, l17, l18, l19, l20, l21, l22, l23, l24,
+ l25, l26, l27, l28, l29, l30, l31, l32, l33, l34, l35, l36,
+ l37, l38, l39, l40, l41, l42, l43, l44, l45, l46, l47, l48,
+ l49, l50, l51, l52, l53, l54, l55, l56, l57, l58, l59, l60,
+ l61, l62, l63, l64, l65, l66, l67, l68, l69, l70, l71, l72,
+ l73, l74, l75, l76, l77, l78, l79, l80, l81, l82, l83, l84,
+ l85, l86, l87, l88, l89, l90, l91, l92, l93, l94, l95, l96,
+ l97, l98, l99, l100, l101, l102, l103, l104, l105, l106, l107,
+ l108, l109, l110, l111, l112, l113, l114, l115, l116, l117,
+ l118, l119, l120, l121, l122, l123, l124, l125, l126, l127,
+ l128, l129, l130, l131, l132, l133, l134, l135, l136, l137,
+ l138, l139, l140, l141, l142, l143, l144, l145, l146, l147,
+ l148, l149, l150, l151, l152, l153, l154, l155, l156, l157,
+ l158, l159, l160, l161, l162, l163, l164, l165, l166, l167,
+ l168, l169, l170, l171, l172, l173, l174, l175, l176, l177,
+ l178, l179, l180, l181, l182, l183, l184, l185, l186, l187,
+ l188, l189, l190, l191, l192, l193, l194, l195, l196, l197,
+ l198, l199, l200, l201, l202, l203, l204, l205, l206, l207,
+ l208, l209, l210, l211, l212, l213, l214, l215, l216, l217,
+ l218, l219, l220, l221, l222, l223, l224, l225, l226, l227,
+ l228, l229, l230, l231, l232, l233, l234, l235, l236, l237,
+ l238, l239, l240, l241, l242, l243, l244, l245, l246, l247,
+ l248, l249, l250, l251, l252, l253, l254, l255, l256, l257,
+ l258, l259, l260, l261, l262, l263, l264, l265, l266, l267,
+ l268, l269, l270, l271, l272, l273, l274, l275, l276, l277,
+ l278, l279, l280, l281, l282, l283, l284, l285, l286, l287,
+ l288, l289, l290, l291, l292, l293, l294, l295, l296, l297,
+ l298, l299, l300, l301, l302, l303, l304, l305, l306, l307,
+ l308, l309, l310, l311, l312, l313, l314, l315, l316, l317,
+ l318, l319, l320, l321, l322, l323, l324, l325, l326, l327,
+ l328, l329, l330, l331, l332, l333, l334, l335, l336, l337,
+ l338, l339, l340, l341, l342, l343, l344, l345, l346, l347,
+ l348, l349, l350, l351, l352, l353, l354, l355, l356, l357,
+ l358, l359, l360, l361, l362, l363, l364, l365, l366, l367,
+ l368, l369, l370, l371, l372, l373, l374, l375, l376, l377,
+ l378, l379, l380, l381, l382, l383, l384, l385, l386, l387,
+ l388, l389, l390, l391, l392, l393, l394, l395, l396, l397,
+ l398, l399, l400, l401, l402, l403, l404, l405, l406, l407,
+ l408, l409, l410, l411, l412, l413, l414, l415, l416, l417,
+ l418, l419, l420, l421, l422, l423, l424, l425, l426, l427,
+ l428, l429, l430, l431, l432, l433, l434, l435, l436, l437,
+ l438, l439, l440, l441, l442, l443, l444, l445, l446, l447,
+ l448, l449, l450, l451, l452, l453, l454, l455, l456, l457,
+ l458, l459, l460, l461, l462, l463, l464, l465, l466, l467,
+ l468, l469, l470, l471, l472, l473, l474, l475, l476, l477,
+ l478, l479, l480, l481, l482, l483, l484, l485, l486, l487,
+ l488, l489, l490, l491, l492, l493, l494, l495, l496, l497,
+ l498, l499, l500, l501, l502, l503, l504, l505, l506, l507,
+ l508, l509, l510, l511;
+
+ long ll0, ll1, ll2, ll3, ll4, ll5, ll6, ll7, ll8, ll9, ll10, ll11, ll12,
+ ll13, ll14, ll15, ll16, ll17, ll18, ll19, ll20, ll21, ll22, ll23, ll24,
+ ll25, ll26, ll27, ll28, ll29, ll30, ll31, ll32, ll33, ll34, ll35, ll36,
+ ll37, ll38, ll39, ll40, ll41, ll42, ll43, ll44, ll45, ll46, ll47, ll48,
+ ll49, ll50, ll51, ll52, ll53, ll54, ll55, ll56, ll57, ll58, ll59, ll60,
+ ll61, ll62, ll63, ll64, ll65, ll66, ll67, ll68, ll69, ll70, ll71, ll72,
+ ll73, ll74, ll75, ll76, ll77, ll78, ll79, ll80, ll81, ll82, ll83, ll84,
+ ll85, ll86, ll87, ll88, ll89, ll90, ll91, ll92, ll93, ll94, ll95, ll96,
+ ll97, ll98, ll99, ll100, ll101, ll102, ll103, ll104, ll105, ll106, ll107,
+ ll108, ll109, ll110, ll111, ll112, ll113, ll114, ll115, ll116, ll117,
+ ll118, ll119, ll120, ll121, ll122, ll123, ll124, ll125, ll126, ll127,
+ ll128, ll129, ll130, ll131, ll132, ll133, ll134, ll135, ll136, ll137,
+ ll138, ll139, ll140, ll141, ll142, ll143, ll144, ll145, ll146, ll147,
+ ll148, ll149, ll150, ll151, ll152, ll153, ll154, ll155, ll156, ll157,
+ ll158, ll159, ll160, ll161, ll162, ll163, ll164, ll165, ll166, ll167,
+ ll168, ll169, ll170, ll171, ll172, ll173, ll174, ll175, ll176, ll177,
+ ll178, ll179, ll180, ll181, ll182, ll183, ll184, ll185, ll186, ll187,
+ ll188, ll189, ll190, ll191, ll192, ll193, ll194, ll195, ll196, ll197,
+ ll198, ll199, ll200, ll201, ll202, ll203, ll204, ll205, ll206, ll207,
+ ll208, ll209, ll210, ll211, ll212, ll213, ll214, ll215, ll216, ll217,
+ ll218, ll219, ll220, ll221, ll222, ll223, ll224, ll225, ll226, ll227,
+ ll228, ll229, ll230, ll231, ll232, ll233, ll234, ll235, ll236, ll237,
+ ll238, ll239, ll240, ll241, ll242, ll243, ll244, ll245, ll246, ll247,
+ ll248, ll249, ll250, ll251, ll252, ll253, ll254, ll255, ll256, ll257,
+ ll258, ll259, ll260, ll261, ll262, ll263, ll264, ll265, ll266, ll267,
+ ll268, ll269, ll270, ll271, ll272, ll273, ll274, ll275, ll276, ll277,
+ ll278, ll279, ll280, ll281, ll282, ll283, ll284, ll285, ll286, ll287,
+ ll288, ll289, ll290, ll291, ll292, ll293, ll294, ll295, ll296, ll297,
+ ll298, ll299, ll300, ll301, ll302, ll303, ll304, ll305, ll306, ll307,
+ ll308, ll309, ll310, ll311, ll312, ll313, ll314, ll315, ll316, ll317,
+ ll318, ll319, ll320, ll321, ll322, ll323, ll324, ll325, ll326, ll327,
+ ll328, ll329, ll330, ll331, ll332, ll333, ll334, ll335, ll336, ll337,
+ ll338, ll339, ll340, ll341, ll342, ll343, ll344, ll345, ll346, ll347,
+ ll348, ll349, ll350, ll351, ll352, ll353, ll354, ll355, ll356, ll357,
+ ll358, ll359, ll360, ll361, ll362, ll363, ll364, ll365, ll366, ll367,
+ ll368, ll369, ll370, ll371, ll372, ll373, ll374, ll375, ll376, ll377,
+ ll378, ll379, ll380, ll381, ll382, ll383, ll384, ll385, ll386, ll387,
+ ll388, ll389, ll390, ll391, ll392, ll393, ll394, ll395, ll396, ll397,
+ ll398, ll399, ll400, ll401, ll402, ll403, ll404, ll405, ll406, ll407,
+ ll408, ll409, ll410, ll411, ll412, ll413, ll414, ll415, ll416, ll417,
+ ll418, ll419, ll420, ll421, ll422, ll423, ll424, ll425, ll426, ll427,
+ ll428, ll429, ll430, ll431, ll432, ll433, ll434, ll435, ll436, ll437,
+ ll438, ll439, ll440, ll441, ll442, ll443, ll444, ll445, ll446, ll447,
+ ll448, ll449, ll450, ll451, ll452, ll453, ll454, ll455, ll456, ll457,
+ ll458, ll459, ll460, ll461, ll462, ll463, ll464, ll465, ll466, ll467,
+ ll468, ll469, ll470, ll471, ll472, ll473, ll474, ll475, ll476, ll477,
+ ll478, ll479, ll480, ll481, ll482, ll483, ll484, ll485, ll486, ll487,
+ ll488, ll489, ll490, ll491, ll492, ll493, ll494, ll495, ll496, ll497,
+ ll498, ll499, ll500, ll501, ll502, ll503, ll504, ll505, ll506, ll507,
+ ll508, ll509, ll510, ll511;
+
+ a.m();
+
+ m1(deopt, a);
+ }
+
+ // Used for synchronization betwen main thread and thread
+ // responsible for class loading
+ static volatile boolean thread_started = false;
+ static volatile boolean do_load = false;
+ static volatile boolean load_done = false;
+
+ static public void main(String[] args) {
+ // This thread does the loading of B. If m1 does it, the class
+ // loading can cause stack overflows.
+ Thread thread = new Thread() {
+ public void run() {
+ thread_started = true;
+ while(!do_load);
+ new B();
+ load_done = true;
+ }
+ };
+ thread.start();
+ while(!thread_started);
+ // get m3 and m1 compiled
+ A a = new A();
+ for (int i = 0; i < 5000; i++) {
+ m3(false, a);
+ m1(false, a);
+ }
+ m2(true, a);
+
+ System.out.println("TEST PASSED");
+ }
+}
diff --git a/hotspot/test/compiler/whitebox/ClearMethodStateTest.java b/hotspot/test/compiler/whitebox/ClearMethodStateTest.java
index 3f66a5a..89fff68 100644
--- a/hotspot/test/compiler/whitebox/ClearMethodStateTest.java
+++ b/hotspot/test/compiler/whitebox/ClearMethodStateTest.java
@@ -21,25 +21,25 @@
* questions.
*/
+import java.util.function.Function;
+
/*
* @test ClearMethodStateTest
* @bug 8006683 8007288 8022832
* @library /testlibrary /testlibrary/whitebox
* @build ClearMethodStateTest
* @run main ClassFileInstaller sun.hotspot.WhiteBox
- * @run main/othervm -Xbootclasspath/a:. -Xmixed -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:CompileCommand=compileonly,TestCase$Helper::* ClearMethodStateTest
+ * @run main/othervm -Xbootclasspath/a:. -Xmixed -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:CompileCommand=compileonly,SimpleTestCase$Helper::* ClearMethodStateTest
* @summary testing of WB::clearMethodState()
* @author igor.ignatyev@oracle.com
*/
public class ClearMethodStateTest extends CompilerWhiteBoxTest {
public static void main(String[] args) throws Exception {
- for (TestCase test : TestCase.values()) {
- new ClearMethodStateTest(test).runTest();
- }
+ CompilerWhiteBoxTest.main(ClearMethodStateTest::new, args);
}
- public ClearMethodStateTest(TestCase testCase) {
+ private ClearMethodStateTest(TestCase testCase) {
super(testCase);
// to prevent inlining of #method
WHITE_BOX.testSetDontInlineMethod(method, true);
@@ -63,7 +63,7 @@
deoptimize();
checkNotCompiled();
- if (testCase.isOsr) {
+ if (testCase.isOsr()) {
// part test isn't applicable for OSR test case
return;
}
diff --git a/hotspot/test/compiler/whitebox/CompilerWhiteBoxTest.java b/hotspot/test/compiler/whitebox/CompilerWhiteBoxTest.java
index 5265947..e47231e 100644
--- a/hotspot/test/compiler/whitebox/CompilerWhiteBoxTest.java
+++ b/hotspot/test/compiler/whitebox/CompilerWhiteBoxTest.java
@@ -31,6 +31,7 @@
import java.lang.reflect.Method;
import java.util.Objects;
import java.util.concurrent.Callable;
+import java.util.function.Function;
/**
* Abstract class for WhiteBox testing of JIT.
@@ -50,7 +51,7 @@
protected static int COMP_LEVEL_FULL_PROFILE = 3;
/** {@code CompLevel::CompLevel_full_optimization} -- C2 or Shark */
protected static int COMP_LEVEL_FULL_OPTIMIZATION = 4;
- /** Maximal value for CompLeveL */
+ /** Maximal value for CompLevel */
protected static int COMP_LEVEL_MAX = COMP_LEVEL_FULL_OPTIMIZATION;
/** Instance of WhiteBox */
@@ -75,8 +76,7 @@
/** count of invocation to triger OSR compilation */
protected static final long BACKEDGE_THRESHOLD;
/** Value of {@code java.vm.info} (interpreted|mixed|comp mode) */
- protected static final String MODE
- = System.getProperty("java.vm.info");
+ protected static final String MODE = System.getProperty("java.vm.info");
static {
if (TIERED_COMPILATION) {
@@ -133,6 +133,20 @@
return compLevel == COMP_LEVEL_FULL_OPTIMIZATION;
}
+ protected static void main(
+ Function<TestCase, CompilerWhiteBoxTest> constructor,
+ String[] args) {
+ if (args.length == 0) {
+ for (TestCase test : SimpleTestCase.values()) {
+ constructor.apply(test).runTest();
+ }
+ } else {
+ for (String name : args) {
+ constructor.apply(SimpleTestCase.valueOf(name)).runTest();
+ }
+ }
+ }
+
/** tested method */
protected final Executable method;
protected final TestCase testCase;
@@ -145,7 +159,7 @@
protected CompilerWhiteBoxTest(TestCase testCase) {
Objects.requireNonNull(testCase);
System.out.println("TEST CASE:" + testCase.name());
- method = testCase.executable;
+ method = testCase.getExecutable();
this.testCase = testCase;
}
@@ -204,7 +218,7 @@
if (WHITE_BOX.getMethodCompilationLevel(method, true) != 0) {
throw new RuntimeException(method + " osr_comp_level must be == 0");
}
- }
+ }
/**
* Checks, that {@linkplain #method} is compiled.
@@ -221,44 +235,46 @@
method, System.currentTimeMillis() - start);
return;
}
- if (!WHITE_BOX.isMethodCompiled(method, testCase.isOsr)) {
+ if (!WHITE_BOX.isMethodCompiled(method, testCase.isOsr())) {
throw new RuntimeException(method + " must be "
- + (testCase.isOsr ? "osr_" : "") + "compiled");
+ + (testCase.isOsr() ? "osr_" : "") + "compiled");
}
- if (WHITE_BOX.getMethodCompilationLevel(method, testCase.isOsr) == 0) {
+ if (WHITE_BOX.getMethodCompilationLevel(method, testCase.isOsr())
+ == 0) {
throw new RuntimeException(method
- + (testCase.isOsr ? " osr_" : " ")
+ + (testCase.isOsr() ? " osr_" : " ")
+ "comp_level must be != 0");
}
}
protected final void deoptimize() {
- WHITE_BOX.deoptimizeMethod(method, testCase.isOsr);
- if (testCase.isOsr) {
+ WHITE_BOX.deoptimizeMethod(method, testCase.isOsr());
+ if (testCase.isOsr()) {
WHITE_BOX.deoptimizeMethod(method, false);
}
}
protected final int getCompLevel() {
- return WHITE_BOX.getMethodCompilationLevel(method, testCase.isOsr);
+ return WHITE_BOX.getMethodCompilationLevel(method, testCase.isOsr());
}
protected final boolean isCompilable() {
return WHITE_BOX.isMethodCompilable(method, COMP_LEVEL_ANY,
- testCase.isOsr);
+ testCase.isOsr());
}
protected final boolean isCompilable(int compLevel) {
- return WHITE_BOX.isMethodCompilable(method, compLevel, testCase.isOsr);
+ return WHITE_BOX
+ .isMethodCompilable(method, compLevel, testCase.isOsr());
}
protected final void makeNotCompilable() {
WHITE_BOX.makeMethodNotCompilable(method, COMP_LEVEL_ANY,
- testCase.isOsr);
+ testCase.isOsr());
}
protected final void makeNotCompilable(int compLevel) {
- WHITE_BOX.makeMethodNotCompilable(method, compLevel, testCase.isOsr);
+ WHITE_BOX.makeMethodNotCompilable(method, compLevel, testCase.isOsr());
}
/**
@@ -298,7 +314,7 @@
WHITE_BOX.isMethodCompiled(method, true));
System.out.printf("\tosr_comp_level:\t%d%n",
WHITE_BOX.getMethodCompilationLevel(method, true));
- System.out.printf("\tin_queue:\t%b%n",
+ System.out.printf("\tin_queue:\t%b%n",
WHITE_BOX.isMethodQueuedForCompilation(method));
System.out.printf("compile_queues_size:\t%d%n%n",
WHITE_BOX.getCompileQueuesSize());
@@ -311,13 +327,13 @@
/**
* Tries to trigger compilation of {@linkplain #method} by call
- * {@linkplain #testCase.callable} enough times.
+ * {@linkplain TestCase#getCallable()} enough times.
*
* @return accumulated result
* @see #compile(int)
*/
protected final int compile() {
- if (testCase.isOsr) {
+ if (testCase.isOsr()) {
return compile(1);
} else {
return compile(THRESHOLD);
@@ -326,7 +342,7 @@
/**
* Tries to trigger compilation of {@linkplain #method} by call
- * {@linkplain #testCase.callable} specified times.
+ * {@linkplain TestCase#getCallable()} specified times.
*
* @param count invocation count
* @return accumulated result
@@ -336,7 +352,7 @@
Integer tmp;
for (int i = 0; i < count; ++i) {
try {
- tmp = testCase.callable.call();
+ tmp = testCase.getCallable().call();
} catch (Exception e) {
tmp = null;
}
@@ -347,19 +363,32 @@
}
return result;
}
+
+ /**
+ * Utility interface provides tested method and object to invoke it.
+ */
+ public interface TestCase {
+ /** the name of test case */
+ String name();
+
+ /** tested method */
+ Executable getExecutable();
+
+ /** object to invoke {@linkplain #getExecutable()} */
+ Callable<Integer> getCallable();
+
+ /** flag for OSR test case */
+ boolean isOsr();
+ }
}
-/**
- * Utility structure containing tested method and object to invoke it.
- */
-enum TestCase {
+enum SimpleTestCase implements CompilerWhiteBoxTest.TestCase {
/** constructor test case */
CONSTRUCTOR_TEST(Helper.CONSTRUCTOR, Helper.CONSTRUCTOR_CALLABLE, false),
/** method test case */
METOD_TEST(Helper.METHOD, Helper.METHOD_CALLABLE, false),
/** static method test case */
STATIC_TEST(Helper.STATIC, Helper.STATIC_CALLABLE, false),
-
/** OSR constructor test case */
OSR_CONSTRUCTOR_TEST(Helper.OSR_CONSTRUCTOR,
Helper.OSR_CONSTRUCTOR_CALLABLE, true),
@@ -368,20 +397,32 @@
/** OSR static method test case */
OSR_STATIC_TEST(Helper.OSR_STATIC, Helper.OSR_STATIC_CALLABLE, true);
- /** tested method */
- final Executable executable;
- /** object to invoke {@linkplain #executable} */
- final Callable<Integer> callable;
- /** flag for OSR test case */
- final boolean isOsr;
+ private final Executable executable;
+ private final Callable<Integer> callable;
+ private final boolean isOsr;
- private TestCase(Executable executable, Callable<Integer> callable,
+ private SimpleTestCase(Executable executable, Callable<Integer> callable,
boolean isOsr) {
this.executable = executable;
this.callable = callable;
this.isOsr = isOsr;
}
+ @Override
+ public Executable getExecutable() {
+ return executable;
+ }
+
+ @Override
+ public Callable<Integer> getCallable() {
+ return callable;
+ }
+
+ @Override
+ public boolean isOsr() {
+ return isOsr;
+ }
+
private static class Helper {
private static final Callable<Integer> CONSTRUCTOR_CALLABLE
@@ -436,7 +477,6 @@
}
};
-
private static final Constructor CONSTRUCTOR;
private static final Constructor OSR_CONSTRUCTOR;
private static final Method METHOD;
diff --git a/hotspot/test/compiler/whitebox/DeoptimizeAllTest.java b/hotspot/test/compiler/whitebox/DeoptimizeAllTest.java
index 61d8b59..350c99c 100644
--- a/hotspot/test/compiler/whitebox/DeoptimizeAllTest.java
+++ b/hotspot/test/compiler/whitebox/DeoptimizeAllTest.java
@@ -27,19 +27,17 @@
* @library /testlibrary /testlibrary/whitebox
* @build DeoptimizeAllTest
* @run main ClassFileInstaller sun.hotspot.WhiteBox
- * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:CompileCommand=compileonly,TestCase$Helper::* DeoptimizeAllTest
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:CompileCommand=compileonly,SimpleTestCase$Helper::* DeoptimizeAllTest
* @summary testing of WB::deoptimizeAll()
* @author igor.ignatyev@oracle.com
*/
public class DeoptimizeAllTest extends CompilerWhiteBoxTest {
public static void main(String[] args) throws Exception {
- for (TestCase test : TestCase.values()) {
- new DeoptimizeAllTest(test).runTest();
- }
+ CompilerWhiteBoxTest.main(DeoptimizeAllTest::new, args);
}
- public DeoptimizeAllTest(TestCase testCase) {
+ private DeoptimizeAllTest(TestCase testCase) {
super(testCase);
// to prevent inlining of #method
WHITE_BOX.testSetDontInlineMethod(method, true);
@@ -53,7 +51,7 @@
*/
@Override
protected void test() throws Exception {
- if (testCase.isOsr && CompilerWhiteBoxTest.MODE.startsWith(
+ if (testCase.isOsr() && CompilerWhiteBoxTest.MODE.startsWith(
"compiled ")) {
System.err.printf("Warning: %s is not applicable in %s%n",
testCase.name(), CompilerWhiteBoxTest.MODE);
diff --git a/hotspot/test/compiler/whitebox/DeoptimizeMethodTest.java b/hotspot/test/compiler/whitebox/DeoptimizeMethodTest.java
index 8ac065b..565a5b9 100644
--- a/hotspot/test/compiler/whitebox/DeoptimizeMethodTest.java
+++ b/hotspot/test/compiler/whitebox/DeoptimizeMethodTest.java
@@ -27,19 +27,17 @@
* @library /testlibrary /testlibrary/whitebox
* @build DeoptimizeMethodTest
* @run main ClassFileInstaller sun.hotspot.WhiteBox
- * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:CompileCommand=compileonly,TestCase$Helper::* DeoptimizeMethodTest
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:CompileCommand=compileonly,SimpleTestCase$Helper::* DeoptimizeMethodTest
* @summary testing of WB::deoptimizeMethod()
* @author igor.ignatyev@oracle.com
*/
public class DeoptimizeMethodTest extends CompilerWhiteBoxTest {
public static void main(String[] args) throws Exception {
- for (TestCase test : TestCase.values()) {
- new DeoptimizeMethodTest(test).runTest();
- }
+ CompilerWhiteBoxTest.main(DeoptimizeMethodTest::new, args);
}
- public DeoptimizeMethodTest(TestCase testCase) {
+ private DeoptimizeMethodTest(TestCase testCase) {
super(testCase);
// to prevent inlining of #method
WHITE_BOX.testSetDontInlineMethod(method, true);
@@ -53,7 +51,7 @@
*/
@Override
protected void test() throws Exception {
- if (testCase.isOsr && CompilerWhiteBoxTest.MODE.startsWith(
+ if (testCase.isOsr() && CompilerWhiteBoxTest.MODE.startsWith(
"compiled ")) {
System.err.printf("Warning: %s is not applicable in %s%n",
testCase.name(), CompilerWhiteBoxTest.MODE);
diff --git a/hotspot/test/compiler/whitebox/EnqueueMethodForCompilationTest.java b/hotspot/test/compiler/whitebox/EnqueueMethodForCompilationTest.java
index 6d14d92..d9139dd3 100644
--- a/hotspot/test/compiler/whitebox/EnqueueMethodForCompilationTest.java
+++ b/hotspot/test/compiler/whitebox/EnqueueMethodForCompilationTest.java
@@ -27,19 +27,17 @@
* @library /testlibrary /testlibrary/whitebox
* @build EnqueueMethodForCompilationTest
* @run main ClassFileInstaller sun.hotspot.WhiteBox
- * @run main/othervm/timeout=600 -Xbootclasspath/a:. -Xmixed -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:CompileCommand=compileonly,TestCase$Helper::* EnqueueMethodForCompilationTest
+ * @run main/othervm/timeout=600 -Xbootclasspath/a:. -Xmixed -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:CompileCommand=compileonly,SimpleTestCase$Helper::* EnqueueMethodForCompilationTest
* @summary testing of WB::enqueueMethodForCompilation()
* @author igor.ignatyev@oracle.com
*/
public class EnqueueMethodForCompilationTest extends CompilerWhiteBoxTest {
public static void main(String[] args) throws Exception {
- for (TestCase test : TestCase.values()) {
- new EnqueueMethodForCompilationTest(test).runTest();
- }
+ CompilerWhiteBoxTest.main(EnqueueMethodForCompilationTest::new, args);
}
- public EnqueueMethodForCompilationTest(TestCase testCase) {
+ private EnqueueMethodForCompilationTest(TestCase testCase) {
super(testCase);
// to prevent inlining of #method
WHITE_BOX.testSetDontInlineMethod(method, true);
diff --git a/hotspot/test/compiler/whitebox/IsMethodCompilableTest.java b/hotspot/test/compiler/whitebox/IsMethodCompilableTest.java
index a17fcb8..bd5916a 100644
--- a/hotspot/test/compiler/whitebox/IsMethodCompilableTest.java
+++ b/hotspot/test/compiler/whitebox/IsMethodCompilableTest.java
@@ -27,7 +27,7 @@
* @library /testlibrary /testlibrary/whitebox
* @build IsMethodCompilableTest
* @run main ClassFileInstaller sun.hotspot.WhiteBox
- * @run main/othervm/timeout=2400 -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:CompileCommand=compileonly,TestCase$Helper::* IsMethodCompilableTest
+ * @run main/othervm/timeout=2400 -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:CompileCommand=compileonly,SimpleTestCase$Helper::* IsMethodCompilableTest
* @summary testing of WB::isMethodCompilable()
* @author igor.ignatyev@oracle.com
*/
@@ -48,12 +48,10 @@
}
public static void main(String[] args) throws Exception {
- for (TestCase test : TestCase.values()) {
- new IsMethodCompilableTest(test).runTest();
- }
+ CompilerWhiteBoxTest.main(IsMethodCompilableTest::new, args);
}
- public IsMethodCompilableTest(TestCase testCase) {
+ private IsMethodCompilableTest(TestCase testCase) {
super(testCase);
// to prevent inlining of #method
WHITE_BOX.testSetDontInlineMethod(method, true);
@@ -68,7 +66,7 @@
*/
@Override
protected void test() throws Exception {
- if (testCase.isOsr && CompilerWhiteBoxTest.MODE.startsWith(
+ if (testCase.isOsr() && CompilerWhiteBoxTest.MODE.startsWith(
"compiled ")) {
System.err.printf("Warning: %s is not applicable in %s%n",
testCase.name(), CompilerWhiteBoxTest.MODE);
@@ -89,7 +87,7 @@
for (long i = 0L, n = PER_METHOD_RECOMPILATION_CUTOFF - 1; i < n; ++i) {
compileAndDeoptimize();
}
- if (!testCase.isOsr && !isCompilable()) {
+ if (!testCase.isOsr() && !isCompilable()) {
// in osr test case count of deopt maybe more than iterations
throw new RuntimeException(method + " is not compilable after "
+ (PER_METHOD_RECOMPILATION_CUTOFF - 1) + " iterations");
@@ -102,7 +100,7 @@
&& isCompilable(); ++i) {
compileAndDeoptimize();
}
- if (!testCase.isOsr && i != PER_METHOD_RECOMPILATION_CUTOFF) {
+ if (!testCase.isOsr() && i != PER_METHOD_RECOMPILATION_CUTOFF) {
// in osr test case count of deopt maybe more than iterations
throw new RuntimeException(method + " is not compilable after "
+ i + " iterations, but must only after "
diff --git a/hotspot/test/compiler/whitebox/MakeMethodNotCompilableTest.java b/hotspot/test/compiler/whitebox/MakeMethodNotCompilableTest.java
index 6a1e361..cbd65da 100644
--- a/hotspot/test/compiler/whitebox/MakeMethodNotCompilableTest.java
+++ b/hotspot/test/compiler/whitebox/MakeMethodNotCompilableTest.java
@@ -27,26 +27,17 @@
* @library /testlibrary /testlibrary/whitebox
* @build MakeMethodNotCompilableTest
* @run main ClassFileInstaller sun.hotspot.WhiteBox
- * @run main/othervm/timeout=2400 -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:CompileCommand=compileonly,TestCase$Helper::* MakeMethodNotCompilableTest
+ * @run main/othervm/timeout=2400 -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:CompileCommand=compileonly,SimpleTestCase$Helper::* MakeMethodNotCompilableTest
* @summary testing of WB::makeMethodNotCompilable()
* @author igor.ignatyev@oracle.com
*/
public class MakeMethodNotCompilableTest extends CompilerWhiteBoxTest {
private int bci;
public static void main(String[] args) throws Exception {
- if (args.length == 0) {
- for (TestCase test : TestCase.values()) {
- new MakeMethodNotCompilableTest(test).runTest();
- }
- } else {
- for (String name : args) {
- new MakeMethodNotCompilableTest(
- TestCase.valueOf(name)).runTest();
- }
- }
+ CompilerWhiteBoxTest.main(MakeMethodNotCompilableTest::new, args);
}
- public MakeMethodNotCompilableTest(TestCase testCase) {
+ private MakeMethodNotCompilableTest(TestCase testCase) {
super(testCase);
// to prevent inlining of #method
WHITE_BOX.testSetDontInlineMethod(method, true);
@@ -62,7 +53,7 @@
*/
@Override
protected void test() throws Exception {
- if (testCase.isOsr && CompilerWhiteBoxTest.MODE.startsWith(
+ if (testCase.isOsr() && CompilerWhiteBoxTest.MODE.startsWith(
"compiled ")) {
System.err.printf("Warning: %s is not applicable in %s%n",
testCase.name(), CompilerWhiteBoxTest.MODE);
diff --git a/hotspot/test/compiler/whitebox/SetDontInlineMethodTest.java b/hotspot/test/compiler/whitebox/SetDontInlineMethodTest.java
index e2bff37..ae42d53 100644
--- a/hotspot/test/compiler/whitebox/SetDontInlineMethodTest.java
+++ b/hotspot/test/compiler/whitebox/SetDontInlineMethodTest.java
@@ -27,19 +27,17 @@
* @library /testlibrary /testlibrary/whitebox
* @build SetDontInlineMethodTest
* @run main ClassFileInstaller sun.hotspot.WhiteBox
- * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:CompileCommand=compileonly,TestCase$Helper::* SetDontInlineMethodTest
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:CompileCommand=compileonly,SimpleTestCase$Helper::* SetDontInlineMethodTest
* @summary testing of WB::testSetDontInlineMethod()
* @author igor.ignatyev@oracle.com
*/
public class SetDontInlineMethodTest extends CompilerWhiteBoxTest {
public static void main(String[] args) throws Exception {
- for (TestCase test : TestCase.values()) {
- new SetDontInlineMethodTest(test).runTest();
- }
+ CompilerWhiteBoxTest.main(SetDontInlineMethodTest::new, args);
}
- public SetDontInlineMethodTest(TestCase testCase) {
+ private SetDontInlineMethodTest(TestCase testCase) {
super(testCase);
}
diff --git a/hotspot/test/compiler/whitebox/SetForceInlineMethodTest.java b/hotspot/test/compiler/whitebox/SetForceInlineMethodTest.java
index 5aa90c3..086d7c2 100644
--- a/hotspot/test/compiler/whitebox/SetForceInlineMethodTest.java
+++ b/hotspot/test/compiler/whitebox/SetForceInlineMethodTest.java
@@ -27,19 +27,17 @@
* @library /testlibrary /testlibrary/whitebox
* @build SetForceInlineMethodTest
* @run main ClassFileInstaller sun.hotspot.WhiteBox
- * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:CompileCommand=compileonly,TestCase$Helper::* SetForceInlineMethodTest
+ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:CompileCommand=compileonly,SimpleTestCase$Helper::* SetForceInlineMethodTest
* @summary testing of WB::testSetForceInlineMethod()
* @author igor.ignatyev@oracle.com
*/
public class SetForceInlineMethodTest extends CompilerWhiteBoxTest {
public static void main(String[] args) throws Exception {
- for (TestCase test : TestCase.values()) {
- new SetForceInlineMethodTest(test).runTest();
- }
+ CompilerWhiteBoxTest.main(SetForceInlineMethodTest::new, args);
}
- public SetForceInlineMethodTest(TestCase testCase) {
+ private SetForceInlineMethodTest(TestCase testCase) {
super(testCase);
}
diff --git a/hotspot/test/gc/TestVerifySilently.java b/hotspot/test/gc/TestVerifySilently.java
new file mode 100644
index 0000000..deefd48
--- /dev/null
+++ b/hotspot/test/gc/TestVerifySilently.java
@@ -0,0 +1,84 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/* @test TestVerifySilently.java
+ * @key gc
+ * @bug 8032771
+ * @summary Test silent verification.
+ * @library /testlibrary
+ */
+
+import com.oracle.java.testlibrary.OutputAnalyzer;
+import com.oracle.java.testlibrary.ProcessTools;
+import java.util.ArrayList;
+import java.util.Collections;
+
+class RunSystemGC {
+ public static void main(String args[]) throws Exception {
+ System.gc();
+ }
+}
+
+
+public class TestVerifySilently {
+ private static String[] getTestJavaOpts() {
+ String testVmOptsStr = System.getProperty("test.java.opts");
+ if (!testVmOptsStr.isEmpty()) {
+ return testVmOptsStr.split(" ");
+ } else {
+ return new String[] {};
+ }
+ }
+
+ private static OutputAnalyzer runTest(boolean verifySilently) throws Exception {
+ ArrayList<String> vmOpts = new ArrayList();
+
+ Collections.addAll(vmOpts, getTestJavaOpts());
+ Collections.addAll(vmOpts, new String[] {"-XX:+UnlockDiagnosticVMOptions",
+ "-XX:+VerifyDuringStartup",
+ "-XX:+VerifyBeforeGC",
+ "-XX:+VerifyAfterGC",
+ "-XX:" + (verifySilently ? "+":"-") + "VerifySilently",
+ RunSystemGC.class.getName()});
+ ProcessBuilder pb =
+ ProcessTools.createJavaProcessBuilder(vmOpts.toArray(new String[vmOpts.size()]));
+ OutputAnalyzer output = new OutputAnalyzer(pb.start());
+
+ System.out.println("Output:\n" + output.getOutput());
+ return output;
+ }
+
+
+ public static void main(String args[]) throws Exception {
+
+ OutputAnalyzer output;
+
+ output = runTest(false);
+ output.shouldContain("[Verifying");
+ output.shouldHaveExitValue(0);
+
+ output = runTest(true);
+ output.shouldNotContain("[Verifying");
+ output.shouldHaveExitValue(0);
+ }
+}
diff --git a/hotspot/test/gc/g1/TestStringSymbolTableStats.java b/hotspot/test/gc/g1/TestStringSymbolTableStats.java
new file mode 100644
index 0000000..f95aea8
--- /dev/null
+++ b/hotspot/test/gc/g1/TestStringSymbolTableStats.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test TestStringSymbolTableStats.java
+ * @bug 8027476 8027455
+ * @summary Ensure that the G1TraceStringSymbolTableScrubbing prints the expected message.
+ * @key gc
+ * @library /testlibrary
+ */
+
+import com.oracle.java.testlibrary.ProcessTools;
+import com.oracle.java.testlibrary.OutputAnalyzer;
+
+public class TestStringSymbolTableStats {
+ public static void main(String[] args) throws Exception {
+
+ ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UseG1GC",
+ "-XX:+UnlockExperimentalVMOptions",
+ "-XX:+G1TraceStringSymbolTableScrubbing",
+ SystemGCTest.class.getName());
+
+ OutputAnalyzer output = new OutputAnalyzer(pb.start());
+
+ System.out.println("Output:\n" + output.getOutput());
+
+ output.shouldContain("Cleaned string and symbol table");
+ output.shouldHaveExitValue(0);
+ }
+
+ static class SystemGCTest {
+ public static void main(String [] args) {
+ System.out.println("Calling System.gc()");
+ System.gc();
+ }
+ }
+}
diff --git a/hotspot/test/runtime/7158988/FieldMonitor.java b/hotspot/test/runtime/7158988/FieldMonitor.java
index 5421f62..9b16fc3 100644
--- a/hotspot/test/runtime/7158988/FieldMonitor.java
+++ b/hotspot/test/runtime/7158988/FieldMonitor.java
@@ -34,10 +34,6 @@
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.Reader;
-import java.io.Writer;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -56,6 +52,7 @@
import com.sun.jdi.event.EventSet;
import com.sun.jdi.event.ModificationWatchpointEvent;
import com.sun.jdi.event.VMDeathEvent;
+import com.sun.jdi.event.VMStartEvent;
import com.sun.jdi.event.VMDisconnectEvent;
import com.sun.jdi.request.ClassPrepareRequest;
import com.sun.jdi.request.EventRequest;
@@ -71,24 +68,10 @@
public static void main(String[] args)
throws IOException, InterruptedException {
- StringBuffer sb = new StringBuffer();
-
- for (int i=0; i < args.length; i++) {
- sb.append(' ');
- sb.append(args[i]);
- }
//VirtualMachine vm = launchTarget(sb.toString());
VirtualMachine vm = launchTarget(CLASS_NAME);
System.out.println("Vm launched");
- // set watch field on already loaded classes
- List<ReferenceType> referenceTypes = vm
- .classesByName(CLASS_NAME);
- for (ReferenceType refType : referenceTypes) {
- addFieldWatch(vm, refType);
- }
- // watch for loaded classes
- addClassWatch(vm);
// process events
EventQueue eventQueue = vm.eventQueue();
@@ -104,13 +87,15 @@
errThread.start();
outThread.start();
-
- vm.resume();
boolean connected = true;
+ int watched = 0;
while (connected) {
EventSet eventSet = eventQueue.remove();
for (Event event : eventSet) {
- if (event instanceof VMDeathEvent
+ System.out.println("FieldMonitor-main receives: "+event);
+ if (event instanceof VMStartEvent) {
+ addClassWatch(vm);
+ } else if (event instanceof VMDeathEvent
|| event instanceof VMDisconnectEvent) {
// exit
connected = false;
@@ -122,17 +107,17 @@
.referenceType();
addFieldWatch(vm, refType);
} else if (event instanceof ModificationWatchpointEvent) {
+ watched++;
System.out.println("sleep for 500 ms");
Thread.sleep(500);
- System.out.println("resume...");
ModificationWatchpointEvent modEvent = (ModificationWatchpointEvent) event;
System.out.println("old="
+ modEvent.valueCurrent());
System.out.println("new=" + modEvent.valueToBe());
- System.out.println();
}
}
+ System.out.println("resume...");
eventSet.resume();
}
// Shutdown begins when event thread terminates
@@ -142,6 +127,10 @@
} catch (InterruptedException exc) {
// we don't interrupt
}
+
+ if (watched != 11) { // init + 10 modifications in TestPostFieldModification class
+ throw new Error("Expected to receive 11 times ModificationWatchpointEvent, but got "+watched);
+ }
}
/**
diff --git a/hotspot/test/runtime/CommandLine/CompilerConfigFileWarning.java b/hotspot/test/runtime/CommandLine/CompilerConfigFileWarning.java
index 1f18944..e5df0c9 100644
--- a/hotspot/test/runtime/CommandLine/CompilerConfigFileWarning.java
+++ b/hotspot/test/runtime/CommandLine/CompilerConfigFileWarning.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -33,8 +33,7 @@
public class CompilerConfigFileWarning {
public static void main(String[] args) throws Exception {
- String vmVersion = System.getProperty("java.vm.version");
- if (vmVersion.toLowerCase().contains("debug") || vmVersion.toLowerCase().contains("jvmg")) {
+ if (Platform.isDebugBuild()) {
System.out.println("Skip on debug builds since we'll always read the file there");
return;
}
diff --git a/hotspot/test/runtime/CommandLine/ConfigFileWarning.java b/hotspot/test/runtime/CommandLine/ConfigFileWarning.java
index 470808e..b81da59 100644
--- a/hotspot/test/runtime/CommandLine/ConfigFileWarning.java
+++ b/hotspot/test/runtime/CommandLine/ConfigFileWarning.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -33,8 +33,7 @@
public class ConfigFileWarning {
public static void main(String[] args) throws Exception {
- String vmVersion = System.getProperty("java.vm.version");
- if (vmVersion.toLowerCase().contains("debug") || vmVersion.toLowerCase().contains("jvmg")) {
+ if (Platform.isDebugBuild()) {
System.out.println("Skip on debug builds since we'll always read the file there");
return;
}
diff --git a/hotspot/test/runtime/CommandLine/VMOptionWarning.java b/hotspot/test/runtime/CommandLine/VMOptionWarning.java
new file mode 100644
index 0000000..164cec0
--- /dev/null
+++ b/hotspot/test/runtime/CommandLine/VMOptionWarning.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8027314
+ * @summary Warn if diagnostic or experimental vm option is used and -XX:+UnlockDiagnosticVMOptions or -XX:+UnlockExperimentalVMOptions, respectively, isn't specified. Warn if develop or notproduct vm option is used with product version of VM.
+ * @library /testlibrary
+ */
+
+import com.oracle.java.testlibrary.*;
+
+public class VMOptionWarning {
+ public static void main(String[] args) throws Exception {
+ ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+PredictedLoadedClassCount", "-version");
+ OutputAnalyzer output = new OutputAnalyzer(pb.start());
+ output.shouldContain("Error: VM option 'PredictedLoadedClassCount' is experimental and must be enabled via -XX:+UnlockExperimentalVMOptions.");
+
+ if (Platform.isDebugBuild()) {
+ System.out.println("Skip the rest of the tests on debug builds since diagnostic, develop, and notproduct options are available on debug builds.");
+ return;
+ }
+
+ pb = ProcessTools.createJavaProcessBuilder("-XX:+PrintInlining", "-version");
+ output = new OutputAnalyzer(pb.start());
+ output.shouldContain("Error: VM option 'PrintInlining' is diagnostic and must be enabled via -XX:+UnlockDiagnosticVMOptions.");
+
+ pb = ProcessTools.createJavaProcessBuilder("-XX:+TraceJNICalls", "-version");
+ output = new OutputAnalyzer(pb.start());
+ output.shouldContain("Error: VM option 'TraceJNICalls' is develop and is available only in debug version of VM.");
+
+ pb = ProcessTools.createJavaProcessBuilder("-XX:+TraceJVMCalls", "-version");
+ output = new OutputAnalyzer(pb.start());
+ output.shouldContain("Error: VM option 'TraceJVMCalls' is notproduct and is available only in debug version of VM.");
+ }
+}
diff --git a/hotspot/test/runtime/NMT/CommandLineDetail.java b/hotspot/test/runtime/NMT/CommandLineDetail.java
index d993316ba..0151b48 100644
--- a/hotspot/test/runtime/NMT/CommandLineDetail.java
+++ b/hotspot/test/runtime/NMT/CommandLineDetail.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -24,7 +24,7 @@
/*
* @test
* @key nmt
- * @summary Running with NMT detail should not result in an error or warning
+ * @summary Running with NMT detail should not result in an error
* @library /testlibrary
*/
@@ -39,7 +39,6 @@
"-version");
OutputAnalyzer output = new OutputAnalyzer(pb.start());
output.shouldNotContain("error");
- output.shouldNotContain("warning");
output.shouldHaveExitValue(0);
}
}
diff --git a/hotspot/test/runtime/NMT/CommandLineSummary.java b/hotspot/test/runtime/NMT/CommandLineSummary.java
index b8415d1..9680c34 100644
--- a/hotspot/test/runtime/NMT/CommandLineSummary.java
+++ b/hotspot/test/runtime/NMT/CommandLineSummary.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -24,7 +24,7 @@
/*
* @test
* @key nmt
- * @summary Running with NMT summary should not result in an error or warning
+ * @summary Running with NMT summary should not result in an error
* @library /testlibrary
*/
@@ -39,7 +39,6 @@
"-version");
OutputAnalyzer output = new OutputAnalyzer(pb.start());
output.shouldNotContain("error");
- output.shouldNotContain("warning");
output.shouldHaveExitValue(0);
}
}
diff --git a/hotspot/test/runtime/NMT/CommandLineTurnOffNMT.java b/hotspot/test/runtime/NMT/CommandLineTurnOffNMT.java
index e8d950c..7b8f8be 100644
--- a/hotspot/test/runtime/NMT/CommandLineTurnOffNMT.java
+++ b/hotspot/test/runtime/NMT/CommandLineTurnOffNMT.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -24,7 +24,7 @@
/*
* @test
* @key nmt
- * @summary Turning off NMT should not result in an error or warning
+ * @summary Turning off NMT should not result in an error
* @library /testlibrary
*/
@@ -38,7 +38,6 @@
"-version");
OutputAnalyzer output = new OutputAnalyzer(pb.start());
output.shouldNotContain("error");
- output.shouldNotContain("warning");
output.shouldHaveExitValue(0);
}
}
diff --git a/hotspot/test/runtime/NMT/PrintNMTStatistics.java b/hotspot/test/runtime/NMT/PrintNMTStatistics.java
index 96bc2f3..fc039d6 100644
--- a/hotspot/test/runtime/NMT/PrintNMTStatistics.java
+++ b/hotspot/test/runtime/NMT/PrintNMTStatistics.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2014 Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -64,7 +64,6 @@
OutputAnalyzer output = new OutputAnalyzer(pb.start());
output.shouldContain("Java Heap (reserved=");
output.shouldNotContain("error");
- output.shouldNotContain("warning");
output.shouldHaveExitValue(0);
}
}
diff --git a/hotspot/test/runtime/PerfMemDestroy/PerfMemDestroy.java b/hotspot/test/runtime/PerfMemDestroy/PerfMemDestroy.java
new file mode 100644
index 0000000..02e4d04
--- /dev/null
+++ b/hotspot/test/runtime/PerfMemDestroy/PerfMemDestroy.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8030955
+ * @summary Allow multiple calls to PerfMemory::destroy() without asserting.
+ * @library /testlibrary
+ * @run main PerfMemDestroy
+ */
+
+import com.oracle.java.testlibrary.*;
+
+public class PerfMemDestroy {
+ public static void main(String args[]) throws Throwable {
+ ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+PerfAllowAtExitRegistration", "-version");
+ OutputAnalyzer output = new OutputAnalyzer(pb.start());
+ output.shouldHaveExitValue(0);
+ }
+}
diff --git a/hotspot/test/runtime/finalStatic/FinalStatic.java b/hotspot/test/runtime/finalStatic/FinalStatic.java
new file mode 100644
index 0000000..314b192
--- /dev/null
+++ b/hotspot/test/runtime/finalStatic/FinalStatic.java
@@ -0,0 +1,142 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8028553
+ * @summary Test that VerifyError is not thrown when 'overriding' a static method.
+ * @run main FinalStatic
+ */
+
+import java.lang.reflect.*;
+import jdk.internal.org.objectweb.asm.ClassWriter;
+import jdk.internal.org.objectweb.asm.MethodVisitor;
+import jdk.internal.org.objectweb.asm.Opcodes;
+
+/*
+ * class A { static final int m() {return FAIL; } }
+ * class B extends A { int m() { return PASS; } }
+ * class FinalStatic {
+ * public static void main () {
+ * Object b = new B();
+ * b.m();
+ * }
+ * }
+ */
+public class FinalStatic {
+
+ static final String CLASS_NAME_A = "A";
+ static final String CLASS_NAME_B = "B";
+ static final int FAILED = 0;
+ static final int EXPECTED = 1234;
+
+ static class TestClassLoader extends ClassLoader implements Opcodes {
+
+ @Override
+ public Class findClass(String name) throws ClassNotFoundException {
+ byte[] b;
+ try {
+ b = loadClassData(name);
+ } catch (Throwable th) {
+ // th.printStackTrace();
+ throw new ClassNotFoundException("Loading error", th);
+ }
+ return defineClass(name, b, 0, b.length);
+ }
+
+ private byte[] loadClassData(String name) throws Exception {
+ ClassWriter cw = new ClassWriter(0);
+ MethodVisitor mv;
+ switch (name) {
+ case CLASS_NAME_A:
+ cw.visit(52, ACC_SUPER | ACC_PUBLIC, CLASS_NAME_A, null, "java/lang/Object", null);
+ {
+ mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null);
+ mv.visitCode();
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V");
+ mv.visitInsn(RETURN);
+ mv.visitMaxs(1, 1);
+ mv.visitEnd();
+
+ mv = cw.visitMethod(ACC_FINAL | ACC_STATIC, "m", "()I", null, null);
+ mv.visitCode();
+ mv.visitLdcInsn(FAILED);
+ mv.visitInsn(IRETURN);
+ mv.visitMaxs(1, 1);
+ mv.visitEnd();
+ }
+ break;
+ case CLASS_NAME_B:
+ cw.visit(52, ACC_SUPER | ACC_PUBLIC, CLASS_NAME_B, null, CLASS_NAME_A, null);
+ {
+ mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null);
+ mv.visitCode();
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitMethodInsn(INVOKESPECIAL, CLASS_NAME_A, "<init>", "()V");
+ mv.visitInsn(RETURN);
+ mv.visitMaxs(1, 1);
+ mv.visitEnd();
+
+ mv = cw.visitMethod(ACC_PUBLIC, "m", "()I", null, null);
+ mv.visitCode();
+ mv.visitLdcInsn(EXPECTED);
+ mv.visitInsn(IRETURN);
+ mv.visitMaxs(1, 1);
+ mv.visitEnd();
+
+ }
+ break;
+ default:
+ break;
+ }
+ cw.visitEnd();
+
+ return cw.toByteArray();
+ }
+ }
+
+ public static void main(String[] args) throws Exception {
+ TestClassLoader tcl = new TestClassLoader();
+ Class<?> a = tcl.loadClass(CLASS_NAME_A);
+ Class<?> b = tcl.loadClass(CLASS_NAME_B);
+ Object inst = b.newInstance();
+ Method[] meths = b.getDeclaredMethods();
+
+ Method m = meths[0];
+ int mod = m.getModifiers();
+ if ((mod & Modifier.FINAL) != 0) {
+ throw new Exception("FAILED: " + m + " is FINAL");
+ }
+ if ((mod & Modifier.STATIC) != 0) {
+ throw new Exception("FAILED: " + m + " is STATIC");
+ }
+
+ m.setAccessible(true);
+ if (!m.invoke(inst).equals(EXPECTED)) {
+ throw new Exception("FAILED: " + EXPECTED + " from " + m);
+ }
+
+ System.out.println("Passed.");
+ }
+}
diff --git a/hotspot/test/runtime/lambda-features/InvokespecialInterface.java b/hotspot/test/runtime/lambda-features/InvokespecialInterface.java
new file mode 100644
index 0000000..80c2618
--- /dev/null
+++ b/hotspot/test/runtime/lambda-features/InvokespecialInterface.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+
+/*
+ * @test
+ * @bug 8032024
+ * @bug 8025937
+ * @bug 8033528
+ * @summary [JDK 8] Test invokespecial and invokeinterface with the same JVM_CONSTANT_InterfaceMethodref
+ * @run main/othervm -XX:+StressRewriter InvokespecialInterface
+ */
+import java.util.function.*;
+import java.util.*;
+
+interface I {
+ default void imethod() { System.out.println("I::imethod"); }
+}
+
+class C implements I {
+ public void foo() { I.super.imethod(); } // invokespecial InterfaceMethod
+ public void bar() { I i = this; i.imethod(); } // invokeinterface same
+ public void doSomeInvokedynamic() {
+ String str = "world";
+ Supplier<String> foo = ()->"hello, "+str;
+ String res = foo.get();
+ System.out.println(res);
+ }
+}
+
+public class InvokespecialInterface {
+ public static void main(java.lang.String[] unused) {
+ // need to create C and call I::foo()
+ C c = new C();
+ c.foo();
+ c.bar();
+ c.doSomeInvokedynamic();
+ }
+};
+
+
diff --git a/hotspot/test/runtime/lambda-features/TestConcreteClassWithAbstractMethod.java b/hotspot/test/runtime/lambda-features/TestConcreteClassWithAbstractMethod.java
new file mode 100644
index 0000000..0fd1a42
--- /dev/null
+++ b/hotspot/test/runtime/lambda-features/TestConcreteClassWithAbstractMethod.java
@@ -0,0 +1,181 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+
+/*
+ * @test
+ * @bug 8032010
+ * @summary method lookup on an abstract method in a concrete class should be successful
+ * @run main TestConcreteClassWithAbstractMethod
+ */
+
+import jdk.internal.org.objectweb.asm.ClassWriter;
+import jdk.internal.org.objectweb.asm.MethodVisitor;
+
+import static jdk.internal.org.objectweb.asm.Opcodes.*;
+
+/*
+ * class T1 { public int m() {} }
+ * class T2 { public abstract int m(); }
+ * class T3 { public int m() {} }
+ *
+ * Call site: T3.test() { invokevirtual T2.m() }
+ * T3.m() should be invoked
+ */
+public class TestConcreteClassWithAbstractMethod {
+ static final String classT1 = "p1.T1";
+ static final String classT2 = "p1.T2";
+ static final String classT3 = "p1.T3";
+
+ static final String callerName = classT3;
+
+ public static void main(String[] args) throws Exception {
+ ClassLoader cl = new ClassLoader() {
+ public Class<?> loadClass(String name) throws ClassNotFoundException {
+ if (findLoadedClass(name) != null) {
+ return findLoadedClass(name);
+ }
+
+ if (classT1.equals(name)) {
+ byte[] classFile = dumpT1();
+ return defineClass(classT1, classFile, 0, classFile.length);
+ }
+ if (classT2.equals(name)) {
+ byte[] classFile = dumpT2();
+ return defineClass(classT2, classFile, 0, classFile.length);
+ }
+ if (classT3.equals(name)) {
+ byte[] classFile = dumpT3();
+ return defineClass(classT3, classFile, 0, classFile.length);
+ }
+
+ return super.loadClass(name);
+ }
+ };
+
+ cl.loadClass(classT1);
+ cl.loadClass(classT2);
+ cl.loadClass(classT3);
+
+ //cl.loadClass(callerName).getDeclaredMethod("m");
+ cl.loadClass(callerName).newInstance();
+
+ int result = (Integer)cl.loadClass(callerName).getDeclaredMethod("test").invoke(null);
+ System.out.println(""+result);
+ }
+
+ public static byte[] dumpT1() {
+ ClassWriter cw = new ClassWriter(0);
+ MethodVisitor mv;
+
+ cw.visit(52, ACC_PUBLIC | ACC_SUPER, "p1/T1", null, "java/lang/Object", null);
+ {
+ mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null);
+ mv.visitCode();
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V", false);
+ mv.visitInsn(RETURN);
+ mv.visitMaxs(1, 1);
+ mv.visitEnd();
+ }
+ {
+ mv = cw.visitMethod(ACC_PUBLIC, "m", "()I", null, null);
+ mv.visitCode();
+ mv.visitFieldInsn(GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;");
+ mv.visitLdcInsn("p1/T1.m()");
+ mv.visitMethodInsn(INVOKEVIRTUAL, "java/io/PrintStream", "print", "(Ljava/lang/String;)V", false);
+ mv.visitIntInsn(BIPUSH, 3);
+ mv.visitInsn(IRETURN);
+ mv.visitMaxs(2, 1);
+ mv.visitEnd();
+ }
+ cw.visitEnd();
+
+ return cw.toByteArray();
+ }
+
+ public static byte[] dumpT2() {
+ ClassWriter cw = new ClassWriter(0);
+ MethodVisitor mv;
+
+ cw.visit(52, ACC_PUBLIC | ACC_SUPER, "p1/T2", null, "p1/T1", null);
+ {
+ mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null);
+ mv.visitCode();
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitMethodInsn(INVOKESPECIAL, "p1/T1", "<init>", "()V", false);
+ mv.visitInsn(RETURN);
+ mv.visitMaxs(1, 1);
+ mv.visitEnd();
+ }
+ {
+ mv = cw.visitMethod(ACC_PUBLIC + ACC_ABSTRACT, "m", "()I", null, null);
+ mv.visitEnd();
+ }
+ cw.visitEnd();
+
+ return cw.toByteArray();
+ }
+
+ public static byte[] dumpT3() {
+ ClassWriter cw = new ClassWriter(0);
+ MethodVisitor mv;
+
+ cw.visit(52, ACC_PUBLIC + ACC_SUPER, "p1/T3", null, "p1/T2", null);
+
+ {
+ mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null);
+ mv.visitCode();
+ mv.visitVarInsn(ALOAD, 0);
+ mv.visitMethodInsn(INVOKESPECIAL, "p1/T2", "<init>", "()V", false);
+ mv.visitInsn(RETURN);
+ mv.visitMaxs(1, 1);
+ mv.visitEnd();
+ }
+ {
+ mv = cw.visitMethod(ACC_PUBLIC, "m", "()I", null, null);
+ mv.visitCode();
+ mv.visitFieldInsn(GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;");
+ mv.visitLdcInsn("p1/T3.m()");
+ mv.visitMethodInsn(INVOKEVIRTUAL, "java/io/PrintStream", "print", "(Ljava/lang/String;)V", false);
+ mv.visitIntInsn(BIPUSH, 2);
+ mv.visitInsn(IRETURN);
+ mv.visitMaxs(2, 1);
+ mv.visitEnd();
+ }
+ {
+ mv = cw.visitMethod(ACC_PUBLIC + ACC_STATIC, "test", "()I", null, null);
+ mv.visitCode();
+ mv.visitTypeInsn(NEW, "p1/T3");
+ mv.visitInsn(DUP);
+ mv.visitMethodInsn(INVOKESPECIAL, "p1/T3", "<init>", "()V", false);
+ mv.visitMethodInsn(INVOKEVIRTUAL, "p1/T2", "m", "()I", false);
+ mv.visitInsn(IRETURN);
+ mv.visitMaxs(3, 2);
+ mv.visitEnd();
+ }
+ cw.visitEnd();
+
+ return cw.toByteArray();
+ }
+}
diff --git a/hotspot/test/serviceability/jvmti/TestRedefineWithUnresolvedClass.java b/hotspot/test/serviceability/jvmti/TestRedefineWithUnresolvedClass.java
new file mode 100644
index 0000000..4f929c4
--- /dev/null
+++ b/hotspot/test/serviceability/jvmti/TestRedefineWithUnresolvedClass.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @summary Redefine a class with an UnresolvedClass reference in the constant pool.
+ * @bug 8035150
+ * @library /testlibrary
+ * @build UnresolvedClassAgent com.oracle.java.testlibrary.ProcessTools com.oracle.java.testlibrary.OutputAnalyzer
+ * @run main TestRedefineWithUnresolvedClass
+ */
+
+import java.io.File;
+import java.util.Arrays;
+
+import com.oracle.java.testlibrary.OutputAnalyzer;
+import com.oracle.java.testlibrary.ProcessTools;
+
+public class TestRedefineWithUnresolvedClass {
+
+ final static String slash = File.separator;
+ final static String testClasses = System.getProperty("test.classes") + slash;
+
+ public static void main(String... args) throws Throwable {
+ // delete this class to cause a NoClassDefFoundError
+ File unresolved = new File(testClasses, "MyUnresolvedClass.class");
+ if (unresolved.exists() && !unresolved.delete()) {
+ throw new Exception("Could not delete: " + unresolved);
+ }
+
+ // build the javaagent
+ buildJar("UnresolvedClassAgent");
+
+ // launch a VM with the javaagent
+ launchTest();
+ }
+
+ private static void buildJar(String jarName) throws Throwable {
+ String testSrc = System.getProperty("test.src", "?") + slash;
+
+ String jarPath = String.format("%s%s.jar", testClasses, jarName);
+ String manifestPath = String.format("%s%s.mf", testSrc, jarName);
+ String className = String.format("%s.class", jarName);
+
+ String[] args = new String[] {"-cfm", jarPath, manifestPath, "-C", testClasses, className};
+
+ System.out.println("Running jar " + Arrays.toString(args));
+ sun.tools.jar.Main jarTool = new sun.tools.jar.Main(System.out, System.err, "jar");
+ if (!jarTool.run(args)) {
+ throw new Exception("jar failed: args=" + Arrays.toString(args));
+ }
+ }
+
+ private static void launchTest() throws Throwable {
+ String[] args = {
+ "-javaagent:" + testClasses + "UnresolvedClassAgent.jar",
+ "-Dtest.classes=" + testClasses,
+ "UnresolvedClassAgent" };
+ OutputAnalyzer output = ProcessTools.executeTestJvm(args);
+ output.shouldHaveExitValue(0);
+ }
+}
diff --git a/hotspot/test/serviceability/jvmti/UnresolvedClassAgent.java b/hotspot/test/serviceability/jvmti/UnresolvedClassAgent.java
new file mode 100644
index 0000000..efe7b25
--- /dev/null
+++ b/hotspot/test/serviceability/jvmti/UnresolvedClassAgent.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.io.DataInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.lang.instrument.ClassDefinition;
+import java.lang.instrument.Instrumentation;
+
+/*
+ * This class is present during compilation, but will be deleted before execution.
+ */
+class MyUnresolvedClass {
+ static void bar() {
+ }
+}
+
+class MyRedefinedClass {
+ static void foo() {
+ MyUnresolvedClass.bar();
+ }
+}
+
+public class UnresolvedClassAgent {
+ public static void main(String... args) {
+ }
+
+ public static void premain(String args, Instrumentation inst) throws Exception {
+ try {
+ MyRedefinedClass.foo();
+ } catch(NoClassDefFoundError err) {
+ System.out.println("NoClassDefFoundError (expected)");
+ }
+
+ File f = new File(System.getProperty("test.classes"), "MyRedefinedClass.class");
+ byte[] buf = new byte[(int)f.length()];
+ try (DataInputStream dis = new DataInputStream(new FileInputStream(f))) {
+ dis.readFully(buf);
+ }
+ ClassDefinition cd = new ClassDefinition(MyRedefinedClass.class, buf);
+ inst.redefineClasses(new ClassDefinition[] {cd});
+
+ try {
+ MyRedefinedClass.foo();
+ } catch(NoClassDefFoundError err) {
+ System.out.println("NoClassDefFoundError (expected again)");
+ }
+ }
+}
diff --git a/hotspot/test/serviceability/jvmti/UnresolvedClassAgent.mf b/hotspot/test/serviceability/jvmti/UnresolvedClassAgent.mf
new file mode 100644
index 0000000..5570570
--- /dev/null
+++ b/hotspot/test/serviceability/jvmti/UnresolvedClassAgent.mf
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+Premain-Class: UnresolvedClassAgent
+Can-Redefine-Classes: true
diff --git a/hotspot/test/serviceability/sa/jmap-hashcode/Test8028623.java b/hotspot/test/serviceability/sa/jmap-hashcode/Test8028623.java
new file mode 100644
index 0000000..bd743ab
--- /dev/null
+++ b/hotspot/test/serviceability/sa/jmap-hashcode/Test8028623.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8028623
+ * @summary Test hashing of extended characters in Serviceability Agent.
+ * @library /testlibrary
+ * @compile -encoding utf8 Test8028623.java
+ * @run main Test8028623
+ */
+
+import com.oracle.java.testlibrary.JDKToolLauncher;
+import com.oracle.java.testlibrary.OutputBuffer;
+import com.oracle.java.testlibrary.ProcessTools;
+
+import java.io.File;
+
+public class Test8028623 {
+
+ public static int à = 1;
+ public static String dumpFile = "heap.out";
+
+ public static void main (String[] args) {
+
+ System.out.println(Ã);
+
+ try {
+ int pid = ProcessTools.getProcessId();
+ JDKToolLauncher jmap = JDKToolLauncher.create("jmap")
+ .addToolArg("-F")
+ .addToolArg("-dump:live,format=b,file=" + dumpFile)
+ .addToolArg(Integer.toString(pid));
+ ProcessBuilder pb = new ProcessBuilder(jmap.getCommand());
+ OutputBuffer output = ProcessTools.getOutput(pb);
+ Process p = pb.start();
+ int e = p.waitFor();
+ System.out.println("stdout:");
+ System.out.println(output.getStdout());
+ System.out.println("stderr:");
+ System.out.println(output.getStderr());
+
+ if (e != 0) {
+ throw new RuntimeException("jmap returns: " + e);
+ }
+ if (! new File(dumpFile).exists()) {
+ throw new RuntimeException("dump file NOT created: '" + dumpFile + "'");
+ }
+ } catch (Throwable t) {
+ t.printStackTrace();
+ throw new RuntimeException("Test failed with: " + t);
+ }
+ }
+}
diff --git a/hotspot/test/testlibrary/com/oracle/java/testlibrary/ProcessTools.java b/hotspot/test/testlibrary/com/oracle/java/testlibrary/ProcessTools.java
index 56277f0..64b1b9e 100644
--- a/hotspot/test/testlibrary/com/oracle/java/testlibrary/ProcessTools.java
+++ b/hotspot/test/testlibrary/com/oracle/java/testlibrary/ProcessTools.java
@@ -151,11 +151,88 @@
// Reporting
StringBuilder cmdLine = new StringBuilder();
- for (String cmd : args)
- cmdLine.append(cmd).append(' ');
+ for (String cmd : args) {
+ cmdLine.append(cmd).append(' ');
+ }
System.out.println("Command line: [" + cmdLine.toString() + "]");
return new ProcessBuilder(args.toArray(new String[args.size()]));
}
+ /**
+ * Executes a test jvm process, waits for it to finish and returns the process output.
+ * The default jvm options from jtreg, test.vm.opts and test.java.opts, are added.
+ * The java from the test.jdk is used to execute the command.
+ *
+ * The command line will be like:
+ * {test.jdk}/bin/java {test.vm.opts} {test.java.opts} cmds
+ *
+ * @param cmds User specifed arguments.
+ * @return The output from the process.
+ */
+ public static OutputAnalyzer executeTestJvm(String... cmds) throws Throwable {
+ ProcessBuilder pb = createJavaProcessBuilder(Utils.addTestJavaOpts(cmds));
+ return executeProcess(pb);
+ }
+
+ /**
+ * Executes a process, waits for it to finish and returns the process output.
+ * @param pb The ProcessBuilder to execute.
+ * @return The output from the process.
+ */
+ public static OutputAnalyzer executeProcess(ProcessBuilder pb) throws Throwable {
+ OutputAnalyzer output = null;
+ try {
+ output = new OutputAnalyzer(pb.start());
+ return output;
+ } catch (Throwable t) {
+ System.out.println("executeProcess() failed: " + t);
+ throw t;
+ } finally {
+ System.out.println(getProcessLog(pb, output));
+ }
+ }
+
+ /**
+ * Executes a process, waits for it to finish and returns the process output.
+ * @param cmds The command line to execute.
+ * @return The output from the process.
+ */
+ public static OutputAnalyzer executeProcess(String... cmds) throws Throwable {
+ return executeProcess(new ProcessBuilder(cmds));
+ }
+
+ /**
+ * Used to log command line, stdout, stderr and exit code from an executed process.
+ * @param pb The executed process.
+ * @param output The output from the process.
+ */
+ public static String getProcessLog(ProcessBuilder pb, OutputAnalyzer output) {
+ String stderr = output == null ? "null" : output.getStderr();
+ String stdout = output == null ? "null" : output.getStdout();
+ String exitValue = output == null ? "null": Integer.toString(output.getExitValue());
+ StringBuilder logMsg = new StringBuilder();
+ final String nl = System.getProperty("line.separator");
+ logMsg.append("--- ProcessLog ---" + nl);
+ logMsg.append("cmd: " + getCommandLine(pb) + nl);
+ logMsg.append("exitvalue: " + exitValue + nl);
+ logMsg.append("stderr: " + stderr + nl);
+ logMsg.append("stdout: " + stdout + nl);
+ return logMsg.toString();
+ }
+
+ /**
+ * @return The full command line for the ProcessBuilder.
+ */
+ public static String getCommandLine(ProcessBuilder pb) {
+ if (pb == null) {
+ return "null";
+ }
+ StringBuilder cmd = new StringBuilder();
+ for (String s : pb.command()) {
+ cmd.append(s).append(" ");
+ }
+ return cmd.toString().trim();
+ }
+
}
diff --git a/hotspot/test/testlibrary/com/oracle/java/testlibrary/Utils.java b/hotspot/test/testlibrary/com/oracle/java/testlibrary/Utils.java
new file mode 100644
index 0000000..a0031e7
--- /dev/null
+++ b/hotspot/test/testlibrary/com/oracle/java/testlibrary/Utils.java
@@ -0,0 +1,263 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package com.oracle.java.testlibrary;
+
+import static com.oracle.java.testlibrary.Asserts.assertTrue;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.net.InetAddress;
+import java.net.ServerSocket;
+import java.net.UnknownHostException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.regex.Pattern;
+import java.util.regex.Matcher;
+
+/**
+ * Common library for various test helper functions.
+ */
+public final class Utils {
+
+ /**
+ * Returns the sequence used by operating system to separate lines.
+ */
+ public static final String NEW_LINE = System.getProperty("line.separator");
+
+ /**
+ * Returns the value of 'test.vm.opts'system property.
+ */
+ public static final String VM_OPTIONS = System.getProperty("test.vm.opts", "").trim();
+
+ /**
+ * Returns the value of 'test.java.opts'system property.
+ */
+ public static final String JAVA_OPTIONS = System.getProperty("test.java.opts", "").trim();
+
+ /**
+ * Returns the value of 'test.timeout.factor' system property
+ * converted to {@code double}.
+ */
+ public static final double TIMEOUT_FACTOR;
+ static {
+ String toFactor = System.getProperty("test.timeout.factor", "1.0");
+ TIMEOUT_FACTOR = Double.parseDouble(toFactor);
+ }
+
+ private Utils() {
+ // Private constructor to prevent class instantiation
+ }
+
+ /**
+ * Returns the list of VM options.
+ *
+ * @return List of VM options
+ */
+ public static List<String> getVmOptions() {
+ return Arrays.asList(safeSplitString(VM_OPTIONS));
+ }
+
+ /**
+ * Returns the list of VM options with -J prefix.
+ *
+ * @return The list of VM options with -J prefix
+ */
+ public static List<String> getForwardVmOptions() {
+ String[] opts = safeSplitString(VM_OPTIONS);
+ for (int i = 0; i < opts.length; i++) {
+ opts[i] = "-J" + opts[i];
+ }
+ return Arrays.asList(opts);
+ }
+
+ /**
+ * Returns the default JTReg arguments for a jvm running a test.
+ * This is the combination of JTReg arguments test.vm.opts and test.java.opts.
+ * @return An array of options, or an empty array if no opptions.
+ */
+ public static String[] getTestJavaOpts() {
+ List<String> opts = new ArrayList<String>();
+ Collections.addAll(opts, safeSplitString(VM_OPTIONS));
+ Collections.addAll(opts, safeSplitString(JAVA_OPTIONS));
+ return opts.toArray(new String[0]);
+ }
+
+ /**
+ * Combines given arguments with default JTReg arguments for a jvm running a test.
+ * This is the combination of JTReg arguments test.vm.opts and test.java.opts
+ * @return The combination of JTReg test java options and user args.
+ */
+ public static String[] addTestJavaOpts(String... userArgs) {
+ List<String> opts = new ArrayList<String>();
+ Collections.addAll(opts, getTestJavaOpts());
+ Collections.addAll(opts, userArgs);
+ return opts.toArray(new String[0]);
+ }
+
+ /**
+ * Splits a string by white space.
+ * Works like String.split(), but returns an empty array
+ * if the string is null or empty.
+ */
+ private static String[] safeSplitString(String s) {
+ if (s == null || s.trim().isEmpty()) {
+ return new String[] {};
+ }
+ return s.trim().split("\\s+");
+ }
+
+ /**
+ * @return The full command line for the ProcessBuilder.
+ */
+ public static String getCommandLine(ProcessBuilder pb) {
+ StringBuilder cmd = new StringBuilder();
+ for (String s : pb.command()) {
+ cmd.append(s).append(" ");
+ }
+ return cmd.toString();
+ }
+
+ /**
+ * Returns the free port on the local host.
+ * The function will spin until a valid port number is found.
+ *
+ * @return The port number
+ * @throws InterruptedException if any thread has interrupted the current thread
+ * @throws IOException if an I/O error occurs when opening the socket
+ */
+ public static int getFreePort() throws InterruptedException, IOException {
+ int port = -1;
+
+ while (port <= 0) {
+ Thread.sleep(100);
+
+ ServerSocket serverSocket = null;
+ try {
+ serverSocket = new ServerSocket(0);
+ port = serverSocket.getLocalPort();
+ } finally {
+ serverSocket.close();
+ }
+ }
+
+ return port;
+ }
+
+ /**
+ * Returns the name of the local host.
+ *
+ * @return The host name
+ * @throws UnknownHostException if IP address of a host could not be determined
+ */
+ public static String getHostname() throws UnknownHostException {
+ InetAddress inetAddress = InetAddress.getLocalHost();
+ String hostName = inetAddress.getHostName();
+
+ assertTrue((hostName != null && !hostName.isEmpty()),
+ "Cannot get hostname");
+
+ return hostName;
+ }
+
+ /**
+ * Uses "jcmd -l" to search for a jvm pid. This function will wait
+ * forever (until jtreg timeout) for the pid to be found.
+ * @param key Regular expression to search for
+ * @return The found pid.
+ */
+ public static int waitForJvmPid(String key) throws Throwable {
+ final long iterationSleepMillis = 250;
+ System.out.println("waitForJvmPid: Waiting for key '" + key + "'");
+ System.out.flush();
+ while (true) {
+ int pid = tryFindJvmPid(key);
+ if (pid >= 0) {
+ return pid;
+ }
+ Thread.sleep(iterationSleepMillis);
+ }
+ }
+
+ /**
+ * Searches for a jvm pid in the output from "jcmd -l".
+ *
+ * Example output from jcmd is:
+ * 12498 sun.tools.jcmd.JCmd -l
+ * 12254 /tmp/jdk8/tl/jdk/JTwork/classes/com/sun/tools/attach/Application.jar
+ *
+ * @param key A regular expression to search for.
+ * @return The found pid, or -1 if Enot found.
+ * @throws Exception If multiple matching jvms are found.
+ */
+ public static int tryFindJvmPid(String key) throws Throwable {
+ OutputAnalyzer output = null;
+ try {
+ JDKToolLauncher jcmdLauncher = JDKToolLauncher.create("jcmd");
+ jcmdLauncher.addToolArg("-l");
+ output = ProcessTools.executeProcess(jcmdLauncher.getCommand());
+ output.shouldHaveExitValue(0);
+
+ // Search for a line starting with numbers (pid), follwed by the key.
+ Pattern pattern = Pattern.compile("([0-9]+)\\s.*(" + key + ").*\\r?\\n");
+ Matcher matcher = pattern.matcher(output.getStdout());
+
+ int pid = -1;
+ if (matcher.find()) {
+ pid = Integer.parseInt(matcher.group(1));
+ System.out.println("findJvmPid.pid: " + pid);
+ if (matcher.find()) {
+ throw new Exception("Found multiple JVM pids for key: " + key);
+ }
+ }
+ return pid;
+ } catch (Throwable t) {
+ System.out.println(String.format("Utils.findJvmPid(%s) failed: %s", key, t));
+ throw t;
+ }
+ }
+
+ /**
+ * Returns file content as a list of strings
+ *
+ * @param file File to operate on
+ * @return List of strings
+ * @throws IOException
+ */
+ public static List<String> fileAsList(File file) throws IOException {
+ assertTrue(file.exists() && file.isFile(),
+ file.getAbsolutePath() + " does not exist or not a file");
+ List<String> output = new ArrayList<>();
+ try (BufferedReader reader = new BufferedReader(new FileReader(file.getAbsolutePath()))) {
+ while (reader.ready()) {
+ output.add(reader.readLine().replace(NEW_LINE, ""));
+ }
+ }
+ return output;
+ }
+
+}
diff --git a/jaxp/.hgtags b/jaxp/.hgtags
index 59d44ff..e232c93 100644
--- a/jaxp/.hgtags
+++ b/jaxp/.hgtags
@@ -245,9 +245,14 @@
4045edd35e8ba73bfdc23ce8961b9640d4145fe5 jdk8-b121
93bf25903af0a8eaec78d7b1ab85a5b812c9aef2 jdk8-b122
4e35b5b6d2e5e27772d59a70a54e5d04fc801a64 jdk8-b123
+1a28f773c8943113187e393bfd80885dedac3ccd jdk8u20-b00
83bb924238f800db68fb6f60142cc5149d7a9bf6 jdk8-b124
+d987792919e12eafc8b9042b11f9c353d7c428b8 jdk8u20-b01
83bb924238f800db68fb6f60142cc5149d7a9bf6 jdk8-b125
390cc275c04c4d7c8a14a895e9bcdc57621af966 jdk8-b126
b68cdb63a70bca7aad284946107d5d8dd1dbc663 jdk8-b127
b1839922f10c0c88dea683590fa093d1d382046c jdk8-b128
b7752cea7c813fb8b1d3bf2e05e8f93331cc7f1d jdk8-b129
+de9ec1246a0c5c0b32ce3818386019fd4a6fceaa jdk8u20-b02
+47cdfe271b1e97e5906eb1b96cd7d15f0717a118 jdk8u20-b03
+f6742d0cf71201f1ffd0584c1f2990df343bc5eb jdk8u20-b04
diff --git a/jaxp/.jcheck/conf b/jaxp/.jcheck/conf
index 6d0dbe4..5bd24b1 100644
--- a/jaxp/.jcheck/conf
+++ b/jaxp/.jcheck/conf
@@ -1 +1,2 @@
project=jdk8
+bugids=dup
diff --git a/jaxp/src/javax/xml/stream/XMLEventFactory.java b/jaxp/src/javax/xml/stream/XMLEventFactory.java
index 7d54321..548feeb 100644
--- a/jaxp/src/javax/xml/stream/XMLEventFactory.java
+++ b/jaxp/src/javax/xml/stream/XMLEventFactory.java
@@ -157,8 +157,9 @@
* <li>
* If {@code factoryId} is "javax.xml.stream.XMLEventFactory",
* use the service-provider loading facilities, defined by the
- * {@link java.util.ServiceLoader} class, to attempt to locate and load an
- * implementation of the service using the specified {@code ClassLoader}.
+ * {@link java.util.ServiceLoader} class, to attempt to {@linkplain
+ * java.util.ServiceLoader#load(java.lang.Class, java.lang.ClassLoader) locate and load}
+ * an implementation of the service using the specified {@code ClassLoader}.
* If {@code classLoader} is null, the {@linkplain
* java.util.ServiceLoader#load(java.lang.Class) default loading mechanism} will apply:
* That is, the service-provider loading facility will use the {@linkplain
diff --git a/jaxp/src/javax/xml/stream/XMLInputFactory.java b/jaxp/src/javax/xml/stream/XMLInputFactory.java
index 2275ad7..20af7a0 100644
--- a/jaxp/src/javax/xml/stream/XMLInputFactory.java
+++ b/jaxp/src/javax/xml/stream/XMLInputFactory.java
@@ -247,8 +247,9 @@
* <li>
* If {@code factoryId} is "javax.xml.stream.XMLInputFactory",
* use the service-provider loading facilities, defined by the
- * {@link java.util.ServiceLoader} class, to attempt to locate and load an
- * implementation of the service using the specified {@code ClassLoader}.
+ * {@link java.util.ServiceLoader} class, to attempt to {@linkplain
+ * java.util.ServiceLoader#load(java.lang.Class, java.lang.ClassLoader) locate and load}
+ * an implementation of the service using the specified {@code ClassLoader}.
* If {@code classLoader} is null, the {@linkplain
* java.util.ServiceLoader#load(java.lang.Class) default loading mechanism} will apply:
* That is, the service-provider loading facility will use the {@linkplain
diff --git a/jaxp/src/javax/xml/stream/XMLOutputFactory.java b/jaxp/src/javax/xml/stream/XMLOutputFactory.java
index df99723..e875ac2 100644
--- a/jaxp/src/javax/xml/stream/XMLOutputFactory.java
+++ b/jaxp/src/javax/xml/stream/XMLOutputFactory.java
@@ -221,8 +221,9 @@
* <li>
* If {@code factoryId} is "javax.xml.stream.XMLOutputFactory",
* use the service-provider loading facilities, defined by the
- * {@link java.util.ServiceLoader} class, to attempt to locate and load an
- * implementation of the service using the specified {@code ClassLoader}.
+ * {@link java.util.ServiceLoader} class, to attempt to {@linkplain
+ * java.util.ServiceLoader#load(java.lang.Class, java.lang.ClassLoader) locate and load}
+ * an implementation of the service using the specified {@code ClassLoader}.
* If {@code classLoader} is null, the {@linkplain
* java.util.ServiceLoader#load(java.lang.Class) default loading mechanism} will apply:
* That is, the service-provider loading facility will use the {@linkplain
diff --git a/jaxws/.hgtags b/jaxws/.hgtags
index fbd4ca3..fd7343f 100644
--- a/jaxws/.hgtags
+++ b/jaxws/.hgtags
@@ -245,9 +245,14 @@
32050ab53c8a8e4cb09f04b88db78258a480fb61 jdk8-b121
bc622ba563f9316f981c11c3a260f4c3fdc5ef07 jdk8-b122
91f5c542ccad330efc0d281362dd6f33f2039746 jdk8-b123
+241e4effed6d4702815f54efdfb34ebd5c3990f6 jdk8u20-b00
ef71ecbcd7bc014b1be39a6d1b3a1fb663772c14 jdk8-b124
+ac679298539a4bc6c23e1ce00acabf10d1d93fe2 jdk8u20-b01
ef71ecbcd7bc014b1be39a6d1b3a1fb663772c14 jdk8-b125
7193a007a159ef9401b672af5c36c5b95e6e2943 jdk8-b126
8e46fe36e17595c24ccdbde7b34e3cbfb6056b42 jdk8-b127
de172acc095bb1045f40d1c9f532b7350343d19e jdk8-b128
aabc90596123d4eb7e576ecb0e7a843a9415d8eb jdk8-b129
+ba061957b8bdb5f04e58154b27405fbf6fe3c71f jdk8u20-b02
+337a3a4086235e926e1d684bf4d0b2add70d6f55 jdk8u20-b03
+579caba2483ee3c9e32d87b31ab46e86f1aa9cd3 jdk8u20-b04
diff --git a/jaxws/.jcheck/conf b/jaxws/.jcheck/conf
index 6d0dbe4..5bd24b1 100644
--- a/jaxws/.jcheck/conf
+++ b/jaxws/.jcheck/conf
@@ -1 +1,2 @@
project=jdk8
+bugids=dup
diff --git a/jdk/.hgtags b/jdk/.hgtags
index c1ba094..f002823 100644
--- a/jdk/.hgtags
+++ b/jdk/.hgtags
@@ -245,9 +245,14 @@
ce05e132b1370fe8a66ab9373014d12328c591c4 jdk8-b121
e1499442453b6b70af6c2b496fa6d364f68c1d12 jdk8-b122
484e16c0a040efeccbe449d163e9c185e6c2b4db jdk8-b123
+13b28cffa140d8637d37273e3791b484191965bb jdk8u20-b00
ae303640bc1cca06f1c6ac887e6b523ceeb425a6 jdk8-b124
+435a8a2f6d33ae28f3de5e40b6cfb552451ea348 jdk8u20-b01
ae303640bc1cca06f1c6ac887e6b523ceeb425a6 jdk8-b125
a9088d517f2fa9919886d3d95023c518b59172b8 jdk8-b126
fbf251b8ef8a4a2aa1fd58efc8d0d5c8e2fd582b jdk8-b127
f644211c59fd7c1d0c81239c55b31e1d377d7650 jdk8-b128
80568a19aab7300bc92baf2dc225be929f5b03ed jdk8-b129
+9543b632ab87368c887d8b29b21157ebb44228d0 jdk8u20-b02
+5a9f04957f826ce23639479c9791c7d8fd282b01 jdk8u20-b03
+c347889445c1153f11aaa56092d44a911e497454 jdk8u20-b04
diff --git a/jdk/.jcheck/conf b/jdk/.jcheck/conf
index 6d0dbe4..5bd24b1 100644
--- a/jdk/.jcheck/conf
+++ b/jdk/.jcheck/conf
@@ -1 +1,2 @@
project=jdk8
+bugids=dup
diff --git a/jdk/make/CompileDemos.gmk b/jdk/make/CompileDemos.gmk
index cbd83c0..c0b1b71 100644
--- a/jdk/make/CompileDemos.gmk
+++ b/jdk/make/CompileDemos.gmk
@@ -195,9 +195,6 @@
$(JDK_OUTPUTDIR)/demo/nbproject/%: $(JDK_TOPDIR)/src/closed/share/demo/nbproject/%
$(call install-file)
$(CHMOD) -f ug+w $@
- ifeq ($(OPENJDK_TARGET_OS), solaris)
- $(RM) -r $(JDK_OUTPUTDIR)/demo/nbproject/jfc/SwingApplet
- endif
endif
##################################################################################################
@@ -365,9 +362,16 @@
##################################################################################################
# The netbeans project files are copied into the demo directory.
-BUILD_DEMOS += $(patsubst $(JDK_TOPDIR)/src/share/demo/nbproject/%, \
+ifeq ($(OPENJDK_TARGET_OS), solaris)
+ BUILD_DEMOS += $(patsubst $(JDK_TOPDIR)/src/share/demo/nbproject/%, \
+ $(JDK_OUTPUTDIR)/demo/nbproject/%, \
+ $(filter-out $(JDK_TOPDIR)/src/share/demo/nbproject/jfc/SwingApplet%, \
+ $(call CacheFind, $(JDK_TOPDIR)/src/share/demo/nbproject)))
+else
+ BUILD_DEMOS += $(patsubst $(JDK_TOPDIR)/src/share/demo/nbproject/%, \
$(JDK_OUTPUTDIR)/demo/nbproject/%, \
$(call CacheFind, $(JDK_TOPDIR)/src/share/demo/nbproject))
+endif
$(JDK_OUTPUTDIR)/demo/nbproject/%: $(JDK_TOPDIR)/src/share/demo/nbproject/%
$(call install-file)
diff --git a/jdk/make/data/tzdata/VERSION b/jdk/make/data/tzdata/VERSION
index 1d76989..2f162e0 100644
--- a/jdk/make/data/tzdata/VERSION
+++ b/jdk/make/data/tzdata/VERSION
@@ -21,4 +21,4 @@
# or visit www.oracle.com if you need additional information or have any
# questions.
#
-tzdata2013h
+tzdata2013i
diff --git a/jdk/make/data/tzdata/africa b/jdk/make/data/tzdata/africa
index 0eed8b1..82d14a4 100644
--- a/jdk/make/data/tzdata/africa
+++ b/jdk/make/data/tzdata/africa
@@ -500,14 +500,13 @@
Rule Libya 1997 only - Oct 4 0:00 0 -
Rule Libya 2013 only - Mar lastFri 1:00 1:00 S
Rule Libya 2013 only - Oct lastFri 2:00 0 -
-
-# The 1996 and 1997 entries are from Shanks & Pottenger;
-# the IATA SSIM data contain some obvious errors.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Tripoli 0:52:44 - LMT 1920
1:00 Libya CE%sT 1959
2:00 - EET 1982
1:00 Libya CE%sT 1990 May 4
+# The 1996 and 1997 entries are from Shanks & Pottenger;
+# the IATA SSIM data contain some obvious errors.
2:00 - EET 1996 Sep 30
1:00 Libya CE%sT 1997 Oct 4
2:00 - EET 2012 Nov 10 2:00
diff --git a/jdk/make/data/tzdata/asia b/jdk/make/data/tzdata/asia
index fd278e5..1a8f83d 100644
--- a/jdk/make/data/tzdata/asia
+++ b/jdk/make/data/tzdata/asia
@@ -1403,12 +1403,22 @@
# switch back to standard time this winter, so the will stay on DST
# until about the same time next year (at least).
# http://www.petra.gov.jo/Public_News/Nws_NewsDetails.aspx?NewsID=88950
-#
-# From Paul Eggert (2013-09-21):
-# It's looking like this change will be permanent; see
-# Petra News Agency, Cancelling winter saved Jordan $7 million (2013-02-20)
-# <http://www.albawaba.com/business/jordan-winter-electricity--472005>.
-# So move Jordan to UTC+3 as of the abovementioned date.
+
+# From Steffen Thorsen (2013-12-11):
+# Jordan Times and other sources say that Jordan is going back to
+# UTC+2 on 2013-12-19 at midnight:
+# http://jordantimes.com/govt-decides-to-switch-back-to-wintertime
+# Official, in Arabic:
+# http://www.petra.gov.jo/public_news/Nws_NewsDetails.aspx?Menu_ID=&Site_Id=2&lang=1&NewsID=133230&CatID=14
+# ... Our background/permalink about it
+# http://www.timeanddate.com/news/time/jordan-reverses-dst-decision.html
+# ...
+# http://www.petra.gov.jo/Public_News/Nws_NewsDetails.aspx?lang=2&site_id=1&NewsID=133313&Type=P
+# ... says midnight for the coming one and 1:00 for the ones in the future
+# (and they will use DST again next year, using the normal schedule).
+
+# From Paul Eggert (2013-12-11):
+# As Steffen suggested, consider the past 21-month experiment to be DST.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Jordan 1973 only - Jun 6 0:00 1:00 S
@@ -1438,11 +1448,13 @@
Rule Jordan 2003 only - Oct 24 0:00s 0 -
Rule Jordan 2004 only - Oct 15 0:00s 0 -
Rule Jordan 2005 only - Sep lastFri 0:00s 0 -
-Rule Jordan 2006 2012 - Oct lastFri 0:00s 0 -
+Rule Jordan 2006 2011 - Oct lastFri 0:00s 0 -
+Rule Jordan 2013 only - Dec 20 0:00 0 -
+Rule Jordan 2014 max - Mar lastThu 24:00 1:00 S
+Rule Jordan 2014 max - Oct lastFri 0:00s 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Amman 2:23:44 - LMT 1931
- 2:00 Jordan EE%sT 2012 Oct 26 0:00s
- 3:00 - AST
+ 2:00 Jordan EE%sT
# Kazakhstan
diff --git a/jdk/make/data/tzdata/northamerica b/jdk/make/data/tzdata/northamerica
index b8caf6d..9e551bb 100644
--- a/jdk/make/data/tzdata/northamerica
+++ b/jdk/make/data/tzdata/northamerica
@@ -2688,6 +2688,11 @@
# to DST--and one more hour on 1999-04-04--when the announcers will have
# returned to Baltimore, which switches on that date.)
+# From Steffen Thorsen (2013-11-11):
+# DST start in Cuba in 2004 ... does not follow the same rules as the
+# years before. The correct date should be Sunday 2004-03-28 00:00 ...
+# https://web.archive.org/web/20040402060750/http://www.granma.cu/espanol/2004/marzo/sab27/reloj.html
+
# From Evert van der Veer via Steffen Thorsen (2004-10-28):
# Cuba is not going back to standard time this year.
# From Paul Eggert (2006-03-22):
@@ -2877,7 +2882,8 @@
Rule Cuba 1997 only - Oct 12 0:00s 0 S
Rule Cuba 1998 1999 - Mar lastSun 0:00s 1:00 D
Rule Cuba 1998 2003 - Oct lastSun 0:00s 0 S
-Rule Cuba 2000 2004 - Apr Sun>=1 0:00s 1:00 D
+Rule Cuba 2000 2003 - Apr Sun>=1 0:00s 1:00 D
+Rule Cuba 2004 only - Mar lastSun 0:00s 1:00 D
Rule Cuba 2006 2010 - Oct lastSun 0:00s 0 S
Rule Cuba 2007 only - Mar Sun>=8 0:00s 1:00 D
Rule Cuba 2008 only - Mar Sun>=15 0:00s 1:00 D
diff --git a/jdk/make/lib/Awt2dLibraries.gmk b/jdk/make/lib/Awt2dLibraries.gmk
index 61d893e..d214d02 100644
--- a/jdk/make/lib/Awt2dLibraries.gmk
+++ b/jdk/make/lib/Awt2dLibraries.gmk
@@ -1303,6 +1303,7 @@
LDFLAGS := $(LDFLAGS_JDKLIB) \
$(call SET_SHARED_LIBRARY_ORIGIN), \
LDFLAGS_SUFFIX := $(LIBM) $(LDFLAGS_JDKLIB_SUFFIX), \
+ LDFLAGS_SUFFIX_windows := $(WIN_JAVA_LIB), \
LDFLAGS_SUFFIX_posix := -lm, \
VERSIONINFO_RESOURCE := $(JDK_TOPDIR)/src/windows/resource/version.rc, \
RC_FLAGS := $(RC_FLAGS) \
diff --git a/jdk/make/mapfiles/libjava/mapfile-vers b/jdk/make/mapfiles/libjava/mapfile-vers
index d2d8067..e6fd0f5 100644
--- a/jdk/make/mapfiles/libjava/mapfile-vers
+++ b/jdk/make/mapfiles/libjava/mapfile-vers
@@ -79,7 +79,7 @@
Java_java_io_FileInputStream_close0;
Java_java_io_FileInputStream_initIDs;
Java_java_io_FileInputStream_open;
- Java_java_io_FileInputStream_read;
+ Java_java_io_FileInputStream_read0;
Java_java_io_FileInputStream_readBytes;
Java_java_io_FileInputStream_skip;
Java_java_io_FileOutputStream_close0;
@@ -98,11 +98,11 @@
Java_java_io_RandomAccessFile_initIDs;
Java_java_io_RandomAccessFile_length;
Java_java_io_RandomAccessFile_open;
- Java_java_io_RandomAccessFile_read;
+ Java_java_io_RandomAccessFile_read0;
Java_java_io_RandomAccessFile_readBytes;
Java_java_io_RandomAccessFile_seek0;
Java_java_io_RandomAccessFile_setLength;
- Java_java_io_RandomAccessFile_write;
+ Java_java_io_RandomAccessFile_write0;
Java_java_io_RandomAccessFile_writeBytes;
Java_java_io_UnixFileSystem_canonicalize0;
Java_java_io_UnixFileSystem_checkAccess;
diff --git a/jdk/make/mapfiles/libjfr/mapfile-vers b/jdk/make/mapfiles/libjfr/mapfile-vers
index 8031edc..dea13dd 100644
--- a/jdk/make/mapfiles/libjfr/mapfile-vers
+++ b/jdk/make/mapfiles/libjfr/mapfile-vers
@@ -34,6 +34,7 @@
Java_oracle_jrockit_jfr_VMJFR_getPeriod;
Java_oracle_jrockit_jfr_VMJFR_descriptors;
Java_oracle_jrockit_jfr_VMJFR_redefineClass0;
+ Java_oracle_jrockit_jfr_VMJFR_retransformClasses0;
JNI_OnLoad;
local:
*;
diff --git a/jdk/src/macosx/classes/com/apple/laf/AquaIcon.java b/jdk/src/macosx/classes/com/apple/laf/AquaIcon.java
index fbc38d8..576661b 100644
--- a/jdk/src/macosx/classes/com/apple/laf/AquaIcon.java
+++ b/jdk/src/macosx/classes/com/apple/laf/AquaIcon.java
@@ -295,7 +295,14 @@
}
Image createImage() {
- return AquaUtils.getCImageCreator().createSystemImageFromSelector(selector, getIconWidth(), getIconHeight());
+ int w = getIconWidth();
+ int h = getIconHeight();
+ return new AquaImageFactory.MultiResolutionIconImage(
+ AquaUtils.getCImageCreator().createSystemImageFromSelector(
+ selector, w, h),
+ AquaUtils.getCImageCreator().createSystemImageFromSelector(
+ selector, 2 * w, 2 * h)
+ );
}
}
}
diff --git a/jdk/src/macosx/classes/com/apple/laf/AquaImageFactory.java b/jdk/src/macosx/classes/com/apple/laf/AquaImageFactory.java
index 63ee3cf..5451abd 100644
--- a/jdk/src/macosx/classes/com/apple/laf/AquaImageFactory.java
+++ b/jdk/src/macosx/classes/com/apple/laf/AquaImageFactory.java
@@ -46,6 +46,10 @@
import com.apple.laf.AquaIcon.SystemIcon;
import com.apple.laf.AquaUtils.RecyclableObject;
import com.apple.laf.AquaUtils.RecyclableSingleton;
+import java.util.Arrays;
+import java.util.List;
+import sun.awt.image.MultiResolutionBufferedImage;
+import sun.awt.image.MultiResolutionImage;
public class AquaImageFactory {
public static IconUIResource getConfirmImageIcon() {
@@ -120,28 +124,48 @@
private static final int kAlertIconSize = 64;
static IconUIResource getAppIconCompositedOn(final Image background) {
- final double scaleFactor = 1.0; // revise for HiDPI
- final int kAlertSubIconSize = (int)(kAlertIconSize * 0.5 * scaleFactor);
- final int kAlertSubIconInset = (int)(kAlertIconSize * scaleFactor) - kAlertSubIconSize;
- final Icon smallAppIconScaled = new AquaIcon.CachingScalingIcon(kAlertSubIconSize, kAlertSubIconSize) {
- Image createImage() {
- return getThisApplicationsIcon(kAlertSubIconSize, kAlertSubIconSize);
- }
- };
+ final BufferedImage iconImage = getAppIconImageCompositedOn(background, 1);
- final BufferedImage image = new BufferedImage(kAlertIconSize, kAlertIconSize, BufferedImage.TYPE_INT_ARGB);
+ if (background instanceof MultiResolutionIconImage) {
+ BufferedImage background2x
+ = ((MultiResolutionIconImage) background).resolutionVariant;
+ BufferedImage icon2xImage = getAppIconImageCompositedOn(background2x, 2);
+
+ return new IconUIResource(new ImageIcon(
+ new MultiResolutionIconImage(iconImage, icon2xImage)));
+ }
+ return new IconUIResource(new ImageIcon(iconImage));
+ }
+
+ static BufferedImage getAppIconImageCompositedOn(final Image background, int scaleFactor) {
+
+ final int scaledAlertIconSize = kAlertIconSize * scaleFactor;
+ final int kAlertSubIconSize = (int) (scaledAlertIconSize * 0.5);
+ final int kAlertSubIconInset = scaledAlertIconSize - kAlertSubIconSize;
+ final Icon smallAppIconScaled = new AquaIcon.CachingScalingIcon(
+ kAlertSubIconSize, kAlertSubIconSize) {
+ Image createImage() {
+ return getThisApplicationsIcon(kAlertSubIconSize, kAlertSubIconSize);
+ }
+ };
+
+ final BufferedImage image = new BufferedImage(scaledAlertIconSize,
+ scaledAlertIconSize, BufferedImage.TYPE_INT_ARGB);
final Graphics g = image.getGraphics();
- g.drawImage(background, 0, 0, (int)(kAlertIconSize * scaleFactor), (int)(kAlertIconSize * scaleFactor), null);
+ g.drawImage(background, 0, 0,
+ scaledAlertIconSize, scaledAlertIconSize, null);
if (g instanceof Graphics2D) {
// improves icon rendering quality in Quartz
- ((Graphics2D)g).setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
+ ((Graphics2D) g).setRenderingHint(RenderingHints.KEY_RENDERING,
+ RenderingHints.VALUE_RENDER_QUALITY);
}
- smallAppIconScaled.paintIcon(null, g, kAlertSubIconInset, kAlertSubIconInset);
+ smallAppIconScaled.paintIcon(null, g,
+ kAlertSubIconInset, kAlertSubIconInset);
g.dispose();
- return new IconUIResource(new ImageIcon(image));
+ return image;
}
public static IconUIResource getTreeFolderIcon() {
@@ -207,7 +231,7 @@
@Override
protected Image getInstance() {
- return Toolkit.getDefaultToolkit().getImage("NSImage://" + namedImage);
+ return getNSIcon(namedImage);
}
}
@@ -271,11 +295,27 @@
}
public static Icon getMenuItemCheckIcon() {
- return new InvertableImageIcon(AquaUtils.generateLightenedImage(Toolkit.getDefaultToolkit().getImage("NSImage://NSMenuItemSelection"), 25));
+ return new InvertableImageIcon(AquaUtils.generateLightenedImage(
+ getNSIcon("NSMenuItemSelection"), 25));
}
public static Icon getMenuItemDashIcon() {
- return new InvertableImageIcon(AquaUtils.generateLightenedImage(Toolkit.getDefaultToolkit().getImage("NSImage://NSMenuMixedState"), 25));
+ return new InvertableImageIcon(AquaUtils.generateLightenedImage(
+ getNSIcon("NSMenuMixedState"), 25));
+ }
+
+ private static Image getNSIcon(String imageName) {
+ Image icon = Toolkit.getDefaultToolkit()
+ .getImage("NSImage://" + imageName);
+
+ if (icon instanceof MultiResolutionImage) {
+ return icon;
+ }
+
+ Image icon2x = AquaUtils.getCImageCreator().createImageFromName(
+ imageName, 2 * icon.getWidth(null), 2 * icon.getHeight(null));
+ return new MultiResolutionBufferedImage(
+ BufferedImage.TYPE_INT_ARGB_PRE, 0, icon, icon2x);
}
public static class NineSliceMetrics {
@@ -484,4 +524,29 @@
public static Color getSelectionInactiveForegroundColorUIResource() {
return new SystemColorProxy(LWCToolkit.getAppleColor(LWCToolkit.INACTIVE_SELECTION_FOREGROUND_COLOR));
}
+
+ static class MultiResolutionIconImage extends BufferedImage
+ implements MultiResolutionImage {
+
+ BufferedImage resolutionVariant;
+
+ public MultiResolutionIconImage(BufferedImage image, BufferedImage resolutionVariant) {
+ super(image.getWidth(), image.getHeight(), image.getType());
+ this.resolutionVariant = resolutionVariant;
+ Graphics g = getGraphics();
+ g.drawImage(image, 0, 0, null);
+ g.dispose();
+ }
+
+ @Override
+ public Image getResolutionVariant(int width, int height) {
+ return ((width <= getWidth() && height <= getHeight()))
+ ? this : resolutionVariant;
+ }
+
+ @Override
+ public List<Image> getResolutionVariants() {
+ return Arrays.asList(this, resolutionVariant);
+ }
+ }
}
diff --git a/jdk/src/macosx/classes/com/apple/laf/AquaUtils.java b/jdk/src/macosx/classes/com/apple/laf/AquaUtils.java
index a5f5501..6a52283 100644
--- a/jdk/src/macosx/classes/com/apple/laf/AquaUtils.java
+++ b/jdk/src/macosx/classes/com/apple/laf/AquaUtils.java
@@ -48,6 +48,7 @@
import sun.swing.SwingUtilities2;
import com.apple.laf.AquaImageFactory.SlicedImageControl;
+import sun.awt.image.MultiResolutionBufferedImage;
final class AquaUtils {
@@ -123,6 +124,13 @@
static Image generateLightenedImage(final Image image, final int percent) {
final GrayFilter filter = new GrayFilter(true, percent);
+ return (image instanceof MultiResolutionBufferedImage)
+ ? ((MultiResolutionBufferedImage) image).map(
+ rv -> generateLightenedImage(rv, filter))
+ : generateLightenedImage(image, filter);
+ }
+
+ static Image generateLightenedImage(Image image, ImageFilter filter) {
final ImageProducer prod = new FilteredImageSource(image.getSource(), filter);
return Toolkit.getDefaultToolkit().createImage(prod);
}
diff --git a/jdk/src/macosx/classes/sun/lwawt/macosx/CCustomCursor.java b/jdk/src/macosx/classes/sun/lwawt/macosx/CCustomCursor.java
index 70a0874..8e0ded6 100644
--- a/jdk/src/macosx/classes/sun/lwawt/macosx/CCustomCursor.java
+++ b/jdk/src/macosx/classes/sun/lwawt/macosx/CCustomCursor.java
@@ -38,6 +38,8 @@
Image fImage;
Point fHotspot;
+ int fWidth;
+ int fHeight;
public CCustomCursor(final Image cursor, final Point hotSpot, final String name) throws IndexOutOfBoundsException, HeadlessException {
super(name);
@@ -50,6 +52,7 @@
// Make sure image is fully loaded.
final Component c = new Canvas(); // for its imageUpdate method
final MediaTracker tracker = new MediaTracker(c);
+ // MediaTracker loads resolution variants from MultiResolution Toolkit image
tracker.addImage(fImage, 0);
try {
tracker.waitForAll();
@@ -67,15 +70,15 @@
width = height = 1;
fImage = createTransparentImage(width, height);
} else {
- // Scale image to nearest supported size
+ // Get the nearest supported cursor size
final Dimension nativeSize = toolkit.getBestCursorSize(width, height);
- if (nativeSize.width != width || nativeSize.height != height) {
- fImage = fImage.getScaledInstance(nativeSize.width, nativeSize.height, Image.SCALE_DEFAULT);
- width = nativeSize.width;
- height = nativeSize.height;
- }
+ width = nativeSize.width;
+ height = nativeSize.height;
}
+ fWidth = width;
+ fHeight = height;
+
// NOTE: this was removed for 3169146, but in 1.5 the JCK tests for an exception and fails if one isn't thrown.
// See what JBuilder does.
// Verify that the hotspot is within cursor bounds.
@@ -138,6 +141,7 @@
// failed to do its job. Return null to keep the cursor unchanged.
return 0L;
} else {
+ fCImage.resizeRepresentations(fWidth, fHeight);
return fCImage.ptr;
}
} catch (IllegalArgumentException iae) {
diff --git a/jdk/src/macosx/classes/sun/lwawt/macosx/CImage.java b/jdk/src/macosx/classes/sun/lwawt/macosx/CImage.java
index a861133..5ea172b 100644
--- a/jdk/src/macosx/classes/sun/lwawt/macosx/CImage.java
+++ b/jdk/src/macosx/classes/sun/lwawt/macosx/CImage.java
@@ -31,6 +31,7 @@
import java.util.Arrays;
import java.util.List;
+import sun.awt.image.MultiResolutionImage;
import sun.awt.image.SunWritableRaster;
@@ -44,6 +45,7 @@
private static native void nativeCopyNSImageIntoArray(long image, int[] buffer, int w, int h);
private static native Dimension2D nativeGetNSImageSize(long image);
private static native void nativeSetNSImageSize(long image, double w, double h);
+ private static native void nativeResizeNSImageRepresentations(long image, double w, double h);
static Creator creator = new Creator();
static Creator getCreator() {
@@ -145,6 +147,12 @@
// This is used to create a CImage from a Image
public CImage createFromImage(final Image image) {
+ if (image instanceof MultiResolutionImage) {
+ List<Image> resolutionVariants
+ = ((MultiResolutionImage) image).getResolutionVariants();
+ return createFromImages(resolutionVariants);
+ }
+
int[] buffer = imageToArray(image, true);
if (buffer == null) {
return null;
@@ -223,4 +231,8 @@
if (ptr != 0) nativeSetNSImageSize(ptr, w, h);
return this;
}
+
+ void resizeRepresentations(double w, double h) {
+ if (ptr != 0) nativeResizeNSImageRepresentations(ptr, w, h);
+ }
}
diff --git a/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java b/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java
index f0eebfc..50703d4 100644
--- a/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java
+++ b/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -583,7 +583,12 @@
// setVisible could have changed the native maximized state
deliverZoom(true);
} else {
- switch (((Frame)target).getExtendedState()) {
+ int frameState = ((Frame)target).getExtendedState();
+ if ((frameState & Frame.ICONIFIED) != 0) {
+ // Treat all state bit masks with ICONIFIED bit as ICONIFIED state.
+ frameState = Frame.ICONIFIED;
+ }
+ switch (frameState) {
case Frame.ICONIFIED:
CWrapper.NSWindow.miniaturize(nsWindowPtr);
break;
@@ -788,6 +793,10 @@
if (prevWindowState == windowState) return;
final long nsWindowPtr = getNSWindowPtr();
+ if ((windowState & Frame.ICONIFIED) != 0) {
+ // Treat all state bit masks with ICONIFIED bit as ICONIFIED state.
+ windowState = Frame.ICONIFIED;
+ }
switch (windowState) {
case Frame.ICONIFIED:
if (prevWindowState == Frame.MAXIMIZED_BOTH) {
diff --git a/jdk/src/macosx/classes/sun/lwawt/macosx/LWCToolkit.java b/jdk/src/macosx/classes/sun/lwawt/macosx/LWCToolkit.java
index 959b038..a200f0c 100644
--- a/jdk/src/macosx/classes/sun/lwawt/macosx/LWCToolkit.java
+++ b/jdk/src/macosx/classes/sun/lwawt/macosx/LWCToolkit.java
@@ -35,14 +35,17 @@
import java.awt.im.InputMethodHighlight;
import java.awt.peer.*;
import java.lang.reflect.*;
+import java.net.URL;
import java.security.*;
import java.util.*;
import java.util.concurrent.Callable;
+import java.net.MalformedURLException;
import sun.awt.*;
import sun.lwawt.*;
import sun.lwawt.LWWindowPeer.PeerType;
import sun.security.action.GetBooleanAction;
+import sun.awt.image.MultiResolutionImage;
import sun.util.CoreResourceBundleControl;
@@ -489,9 +492,30 @@
@Override
public Image getImage(final String filename) {
final Image nsImage = checkForNSImage(filename);
- if (nsImage != null) return nsImage;
+ if (nsImage != null) {
+ return nsImage;
+ }
- return super.getImage(filename);
+ if (imageCached(filename)) {
+ return super.getImage(filename);
+ }
+
+ String fileneame2x = getScaledImageName(filename);
+ return (imageExists(fileneame2x))
+ ? getImageWithResolutionVariant(filename, fileneame2x)
+ : super.getImage(filename);
+ }
+
+ @Override
+ public Image getImage(URL url) {
+
+ if (imageCached(url)) {
+ return super.getImage(url);
+ }
+
+ URL url2x = getScaledImageURL(url);
+ return (imageExists(url2x))
+ ? getImageWithResolutionVariant(url, url2x) : super.getImage(url);
}
static final String nsImagePrefix = "NSImage://";
@@ -781,4 +805,36 @@
public boolean enableInputMethodsForTextComponent() {
return true;
}
+
+ private static URL getScaledImageURL(URL url) {
+ try {
+ String scaledImagePath = getScaledImageName(url.getPath());
+ return scaledImagePath == null ? null : new URL(url.getProtocol(),
+ url.getHost(), url.getPort(), scaledImagePath);
+ } catch (MalformedURLException e) {
+ return null;
+ }
+ }
+
+ private static String getScaledImageName(String path) {
+ if (!isValidPath(path)) {
+ return null;
+ }
+
+ int slash = path.lastIndexOf('/');
+ String name = (slash < 0) ? path : path.substring(slash + 1);
+
+ if (name.contains("@2x")) {
+ return null;
+ }
+
+ int dot = name.lastIndexOf('.');
+ String name2x = (dot < 0) ? name + "@2x"
+ : name.substring(0, dot) + "@2x" + name.substring(dot);
+ return (slash < 0) ? name2x : path.substring(0, slash + 1) + name2x;
+ }
+
+ private static boolean isValidPath(String path) {
+ return !path.isEmpty() && !path.endsWith("/") && !path.endsWith(".");
+ }
}
diff --git a/jdk/src/macosx/native/sun/awt/CDataTransferer.m b/jdk/src/macosx/native/sun/awt/CDataTransferer.m
index 5e997bf..09a7e5c 100644
--- a/jdk/src/macosx/native/sun/awt/CDataTransferer.m
+++ b/jdk/src/macosx/native/sun/awt/CDataTransferer.m
@@ -28,6 +28,7 @@
#import <AppKit/AppKit.h>
#import <JavaNativeFoundation/JavaNativeFoundation.h>
+#import "jni_util.h"
#include "ThreadUtilities.h"
@@ -172,7 +173,9 @@
NSData *tiffImage = [imageRep TIFFRepresentation];
jsize tiffSize = (jsize)[tiffImage length]; // #warning 64-bit: -length returns NSUInteger, but NewByteArray takes jsize
returnValue = (*env)->NewByteArray(env, tiffSize);
+ CHECK_NULL_RETURN(returnValue, nil);
jbyte *tiffData = (jbyte *)(*env)->GetPrimitiveArrayCritical(env, returnValue, 0);
+ CHECK_NULL_RETURN(tiffData, nil);
[tiffImage getBytes:tiffData];
(*env)->ReleasePrimitiveArrayCritical(env, returnValue, tiffData, 0); // Do not use JNI_COMMIT, as that will not free the buffer copy when +ProtectJavaHeap is on.
[imageRep release];
@@ -184,12 +187,13 @@
static jobject getImageForByteStream(JNIEnv *env, jbyteArray sourceData)
{
- if (sourceData == NULL) return NULL;
+ CHECK_NULL_RETURN(sourceData, NULL);
jsize sourceSize = (*env)->GetArrayLength(env, sourceData);
if (sourceSize == 0) return NULL;
jbyte *sourceBytes = (*env)->GetPrimitiveArrayCritical(env, sourceData, NULL);
+ CHECK_NULL_RETURN(sourceBytes, NULL);
NSData *rawData = [NSData dataWithBytes:sourceBytes length:sourceSize];
NSImage *newImage = [[NSImage alloc] initWithData:rawData];
@@ -197,8 +201,7 @@
[newImage release];
(*env)->ReleasePrimitiveArrayCritical(env, sourceData, sourceBytes, JNI_ABORT);
-
- if (newImage == nil) return NULL;
+ CHECK_NULL_RETURN(newImage, NULL);
// The ownership of the NSImage is passed to the new CImage jobject. No need to release it.
static JNF_CLASS_CACHE(jc_CImage, "sun/lwawt/macosx/CImage");
@@ -231,7 +234,8 @@
if (filenameCount == 0) return nil;
// Get the java.lang.String class object:
- jclass stringClazz = (*env)->FindClass(env, "java/lang/String"); // can't be null
+ jclass stringClazz = (*env)->FindClass(env, "java/lang/String");
+ CHECK_NULL_RETURN(stringClazz, nil);
jobject jfilenameArray = (*env)->NewObjectArray(env, filenameCount, stringClazz, NULL); // AWT_THREADING Safe (known object)
if ((*env)->ExceptionOccurred(env)) {
(*env)->ExceptionDescribe(env);
diff --git a/jdk/src/macosx/native/sun/awt/CImage.m b/jdk/src/macosx/native/sun/awt/CImage.m
index f92b272..de73198 100644
--- a/jdk/src/macosx/native/sun/awt/CImage.m
+++ b/jdk/src/macosx/native/sun/awt/CImage.m
@@ -320,3 +320,26 @@
JNF_COCOA_EXIT(env);
}
+
+/*
+ * Class: sun_lwawt_macosx_CImage
+ * Method: nativeResizeNSImageRepresentations
+ * Signature: (JDD)V
+ */
+JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CImage_nativeResizeNSImageRepresentations
+(JNIEnv *env, jclass clazz, jlong image, jdouble w, jdouble h)
+{
+ if (!image) return;
+ NSImage *i = (NSImage *)jlong_to_ptr(image);
+
+JNF_COCOA_ENTER(env);
+
+ NSImageRep *imageRep = nil;
+ NSArray *imageRepresentations = [i representations];
+ NSEnumerator *imageEnumerator = [imageRepresentations objectEnumerator];
+ while ((imageRep = [imageEnumerator nextObject]) != nil) {
+ [imageRep setSize:NSMakeSize(w, h)];
+ }
+
+JNF_COCOA_EXIT(env);
+}
diff --git a/jdk/src/macosx/native/sun/awt/CRobot.m b/jdk/src/macosx/native/sun/awt/CRobot.m
index 3ec4f72..69a250c 100644
--- a/jdk/src/macosx/native/sun/awt/CRobot.m
+++ b/jdk/src/macosx/native/sun/awt/CRobot.m
@@ -187,9 +187,8 @@
// volatile, otherwise it warns that it might be clobbered by 'longjmp'
volatile CGPoint point;
- // Translate the device relative point into a valid global CGPoint.
- point.x = mouseLastX + globalDeviceBounds.origin.x;
- point.y = mouseLastY + globalDeviceBounds.origin.y;
+ point.x = mouseLastX;
+ point.y = mouseLastY;
__block CGMouseButton button = kCGMouseButtonLeft;
__block CGEventType type = kCGEventMouseMoved;
diff --git a/jdk/src/macosx/native/sun/awt/LWCToolkit.m b/jdk/src/macosx/native/sun/awt/LWCToolkit.m
index 3300e2d..5e2dd6c 100644
--- a/jdk/src/macosx/native/sun/awt/LWCToolkit.m
+++ b/jdk/src/macosx/native/sun/awt/LWCToolkit.m
@@ -200,13 +200,17 @@
gNumberOfButtons = sun_lwawt_macosx_LWCToolkit_BUTTONS;
jclass inputEventClazz = (*env)->FindClass(env, "java/awt/event/InputEvent");
+ CHECK_NULL(inputEventClazz);
jmethodID getButtonDownMasksID = (*env)->GetStaticMethodID(env, inputEventClazz, "getButtonDownMasks", "()[I");
+ CHECK_NULL(getButtonDownMasksID);
jintArray obj = (jintArray)(*env)->CallStaticObjectMethod(env, inputEventClazz, getButtonDownMasksID);
jint * tmp = (*env)->GetIntArrayElements(env, obj, JNI_FALSE);
+ CHECK_NULL(tmp);
gButtonDownMasks = (jint*)SAFE_SIZE_ARRAY_ALLOC(malloc, sizeof(jint), gNumberOfButtons);
if (gButtonDownMasks == NULL) {
gNumberOfButtons = 0;
+ (*env)->ReleaseIntArrayElements(env, obj, tmp, JNI_ABORT);
JNU_ThrowOutOfMemoryError(env, NULL);
return;
}
@@ -240,7 +244,7 @@
return ((ia & 0xFF) << 24) | ((ir & 0xFF) << 16) | ((ig & 0xFF) << 8) | ((ib & 0xFF) << 0);
}
-void doLoadNativeColors(JNIEnv *env, jintArray jColors, BOOL useAppleColors) {
+BOOL doLoadNativeColors(JNIEnv *env, jintArray jColors, BOOL useAppleColors) {
jint len = (*env)->GetArrayLength(env, jColors);
UInt32 colorsArray[len];
@@ -254,8 +258,12 @@
}];
jint *_colors = (*env)->GetPrimitiveArrayCritical(env, jColors, 0);
+ if (_colors == NULL) {
+ return NO;
+ }
memcpy(_colors, colors, len * sizeof(UInt32));
(*env)->ReleasePrimitiveArrayCritical(env, jColors, _colors, 0);
+ return YES;
}
/**
@@ -267,8 +275,9 @@
(JNIEnv *env, jobject peer, jintArray jSystemColors, jintArray jAppleColors)
{
JNF_COCOA_ENTER(env);
- doLoadNativeColors(env, jSystemColors, NO);
- doLoadNativeColors(env, jAppleColors, YES);
+ if (doLoadNativeColors(env, jSystemColors, NO)) {
+ doLoadNativeColors(env, jAppleColors, YES);
+ }
JNF_COCOA_EXIT(env);
}
diff --git a/jdk/src/share/classes/java/awt/EventQueue.java b/jdk/src/share/classes/java/awt/EventQueue.java
index efe0421..9e2c55a 100644
--- a/jdk/src/share/classes/java/awt/EventQueue.java
+++ b/jdk/src/share/classes/java/awt/EventQueue.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -1093,6 +1093,13 @@
dispatchThread = null;
}
AWTAutoShutdown.getInstance().notifyThreadFree(edt);
+ /*
+ * Event was posted after EDT events pumping had stopped, so start
+ * another EDT to handle this event
+ */
+ if (peekEvent() != null) {
+ initDispatchThread();
+ }
} finally {
pushPopLock.unlock();
}
diff --git a/jdk/src/share/classes/java/awt/MediaTracker.java b/jdk/src/share/classes/java/awt/MediaTracker.java
index f1cbf46..91e074a 100644
--- a/jdk/src/share/classes/java/awt/MediaTracker.java
+++ b/jdk/src/share/classes/java/awt/MediaTracker.java
@@ -28,6 +28,7 @@
import java.awt.Component;
import java.awt.Image;
import java.awt.image.ImageObserver;
+import sun.awt.image.MultiResolutionToolkitImage;
/**
* The <code>MediaTracker</code> class is a utility class to track
@@ -222,10 +223,17 @@
* @param h the height at which the image is rendered
*/
public synchronized void addImage(Image image, int id, int w, int h) {
+ addImageImpl(image, id, w, h);
+ Image rvImage = getResolutionVariant(image);
+ if (rvImage != null) {
+ addImageImpl(rvImage, id, 2 * w, 2 * h);
+ }
+ }
+
+ private void addImageImpl(Image image, int id, int w, int h) {
head = MediaEntry.insert(head,
new ImageMediaEntry(this, image, id, w, h));
}
-
/**
* Flag indicating that media is currently being loaded.
* @see java.awt.MediaTracker#statusAll
@@ -719,6 +727,15 @@
* @since JDK1.1
*/
public synchronized void removeImage(Image image) {
+ removeImageImpl(image);
+ Image rvImage = getResolutionVariant(image);
+ if (rvImage != null) {
+ removeImageImpl(rvImage);
+ }
+ notifyAll(); // Notify in case remaining images are "done".
+ }
+
+ private void removeImageImpl(Image image) {
MediaEntry cur = head;
MediaEntry prev = null;
while (cur != null) {
@@ -735,7 +752,6 @@
}
cur = next;
}
- notifyAll(); // Notify in case remaining images are "done".
}
/**
@@ -750,6 +766,15 @@
* @since JDK1.1
*/
public synchronized void removeImage(Image image, int id) {
+ removeImageImpl(image, id);
+ Image rvImage = getResolutionVariant(image);
+ if (rvImage != null) {
+ removeImageImpl(rvImage, id);
+ }
+ notifyAll(); // Notify in case remaining images are "done".
+ }
+
+ private void removeImageImpl(Image image, int id) {
MediaEntry cur = head;
MediaEntry prev = null;
while (cur != null) {
@@ -766,7 +791,6 @@
}
cur = next;
}
- notifyAll(); // Notify in case remaining images are "done".
}
/**
@@ -783,6 +807,16 @@
*/
public synchronized void removeImage(Image image, int id,
int width, int height) {
+ removeImageImpl(image, id, width, height);
+ Image rvImage = getResolutionVariant(image);
+ if (rvImage != null) {
+ removeImageImpl(rvImage, id, 2 * width, 2 * height);
+
+ }
+ notifyAll(); // Notify in case remaining images are "done".
+ }
+
+ private void removeImageImpl(Image image, int id, int width, int height) {
MediaEntry cur = head;
MediaEntry prev = null;
while (cur != null) {
@@ -801,12 +835,18 @@
}
cur = next;
}
- notifyAll(); // Notify in case remaining images are "done".
}
synchronized void setDone() {
notifyAll();
}
+
+ private static Image getResolutionVariant(Image image) {
+ if (image instanceof MultiResolutionToolkitImage) {
+ return ((MultiResolutionToolkitImage) image).getResolutionVariant();
+ }
+ return null;
+ }
}
abstract class MediaEntry {
diff --git a/jdk/src/share/classes/java/awt/Robot.java b/jdk/src/share/classes/java/awt/Robot.java
index 019d2bc..b431e45 100644
--- a/jdk/src/share/classes/java/awt/Robot.java
+++ b/jdk/src/share/classes/java/awt/Robot.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2009, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -72,9 +72,6 @@
private int autoDelay = 0;
private static int LEGAL_BUTTON_MASK = 0;
- // location of robot's GC, used in mouseMove(), getPixelColor() and captureScreenImage()
- private Point gdLoc;
-
private DirectColorModel screenCapCM = null;
/**
@@ -132,7 +129,6 @@
private void init(GraphicsDevice screen) throws AWTException {
checkRobotAllowed();
- gdLoc = screen.getDefaultConfiguration().getBounds().getLocation();
Toolkit toolkit = Toolkit.getDefaultToolkit();
if (toolkit instanceof ComponentFactory) {
peer = ((ComponentFactory)toolkit).createRobot(this, screen);
@@ -200,7 +196,7 @@
* @param y Y position
*/
public synchronized void mouseMove(int x, int y) {
- peer.mouseMove(gdLoc.x + x, gdLoc.y + y);
+ peer.mouseMove(x, y);
afterEvent();
}
@@ -395,7 +391,7 @@
* @return Color of the pixel
*/
public synchronized Color getPixelColor(int x, int y) {
- Color color = new Color(peer.getRGBPixel(gdLoc.x + x, gdLoc.y + y));
+ Color color = new Color(peer.getRGBPixel(x, y));
return color;
}
@@ -412,10 +408,7 @@
public synchronized BufferedImage createScreenCapture(Rectangle screenRect) {
checkScreenCaptureAllowed();
- // according to the spec, screenRect is relative to robot's GD
- Rectangle translatedRect = new Rectangle(screenRect);
- translatedRect.translate(gdLoc.x, gdLoc.y);
- checkValidRect(translatedRect);
+ checkValidRect(screenRect);
BufferedImage image;
DataBufferInt buffer;
@@ -441,14 +434,14 @@
int pixels[];
int[] bandmasks = new int[3];
- pixels = peer.getRGBPixels(translatedRect);
+ pixels = peer.getRGBPixels(screenRect);
buffer = new DataBufferInt(pixels, pixels.length);
bandmasks[0] = screenCapCM.getRedMask();
bandmasks[1] = screenCapCM.getGreenMask();
bandmasks[2] = screenCapCM.getBlueMask();
- raster = Raster.createPackedRaster(buffer, translatedRect.width, translatedRect.height, translatedRect.width, bandmasks, null);
+ raster = Raster.createPackedRaster(buffer, screenRect.width, screenRect.height, screenRect.width, bandmasks, null);
SunWritableRaster.makeTrackable(buffer);
image = new BufferedImage(screenCapCM, raster, false, null);
diff --git a/jdk/src/share/classes/java/io/FileInputStream.java b/jdk/src/share/classes/java/io/FileInputStream.java
index 3e67fb8..cc6710e 100644
--- a/jdk/src/share/classes/java/io/FileInputStream.java
+++ b/jdk/src/share/classes/java/io/FileInputStream.java
@@ -51,6 +51,12 @@
/* File Descriptor - handle to the open file */
private final FileDescriptor fd;
+ /**
+ * The path of the referenced file
+ * (null if the stream is created with a file descriptor)
+ */
+ private final String path;
+
private FileChannel channel = null;
private final Object closeLock = new Object();
@@ -128,6 +134,7 @@
}
fd = new FileDescriptor();
fd.attach(this);
+ path = name;
open(name);
}
@@ -164,6 +171,7 @@
security.checkRead(fdObj);
}
fd = fdObj;
+ path = null;
/*
* FileDescriptor is being shared by streams.
@@ -186,7 +194,11 @@
* file is reached.
* @exception IOException if an I/O error occurs.
*/
- public native int read() throws IOException;
+ public int read() throws IOException {
+ return read0();
+ }
+
+ private native int read0() throws IOException;
/**
* Reads a subarray as a sequence of bytes.
@@ -345,7 +357,7 @@
public FileChannel getChannel() {
synchronized (this) {
if (channel == null) {
- channel = FileChannelImpl.open(fd, true, false, this);
+ channel = FileChannelImpl.open(fd, path, true, false, this);
}
return channel;
}
diff --git a/jdk/src/share/classes/java/io/FileOutputStream.java b/jdk/src/share/classes/java/io/FileOutputStream.java
index 44f4728..8377261 100644
--- a/jdk/src/share/classes/java/io/FileOutputStream.java
+++ b/jdk/src/share/classes/java/io/FileOutputStream.java
@@ -67,6 +67,12 @@
*/
private FileChannel channel;
+ /**
+ * The path of the referenced file
+ * (null if the stream is created with a file descriptor)
+ */
+ private final String path;
+
private final Object closeLock = new Object();
private volatile boolean closed = false;
@@ -202,6 +208,7 @@
this.fd = new FileDescriptor();
fd.attach(this);
this.append = append;
+ this.path = name;
open(name, append);
}
@@ -239,6 +246,7 @@
}
this.fd = fdObj;
this.append = false;
+ this.path = null;
fd.attach(this);
}
@@ -376,7 +384,7 @@
public FileChannel getChannel() {
synchronized (this) {
if (channel == null) {
- channel = FileChannelImpl.open(fd, false, true, append, this);
+ channel = FileChannelImpl.open(fd, path, false, true, append, this);
}
return channel;
}
diff --git a/jdk/src/share/classes/java/io/RandomAccessFile.java b/jdk/src/share/classes/java/io/RandomAccessFile.java
index c48aa99..58d8c89 100644
--- a/jdk/src/share/classes/java/io/RandomAccessFile.java
+++ b/jdk/src/share/classes/java/io/RandomAccessFile.java
@@ -62,6 +62,12 @@
private FileChannel channel = null;
private boolean rw;
+ /**
+ * The path of the referenced file
+ * (null if the stream is created with a file descriptor)
+ */
+ private final String path;
+
private Object closeLock = new Object();
private volatile boolean closed = false;
@@ -233,6 +239,7 @@
}
fd = new FileDescriptor();
fd.attach(this);
+ path = name;
open(name, imode);
}
@@ -272,7 +279,7 @@
public final FileChannel getChannel() {
synchronized (this) {
if (channel == null) {
- channel = FileChannelImpl.open(fd, true, rw, this);
+ channel = FileChannelImpl.open(fd, path, true, rw, this);
}
return channel;
}
@@ -309,7 +316,11 @@
* @exception IOException if an I/O error occurs. Not thrown if
* end-of-file has been reached.
*/
- public native int read() throws IOException;
+ public int read() throws IOException {
+ return read0();
+ }
+
+ private native int read0() throws IOException;
/**
* Reads a sub array as a sequence of bytes.
@@ -457,7 +468,11 @@
* @param b the {@code byte} to be written.
* @exception IOException if an I/O error occurs.
*/
- public native void write(int b) throws IOException;
+ public void write(int b) throws IOException {
+ write0(b);
+ }
+
+ private native void write0(int b) throws IOException;
/**
* Writes a sub array as a sequence of bytes.
diff --git a/jdk/src/share/classes/java/math/BigInteger.java b/jdk/src/share/classes/java/math/BigInteger.java
index 79291ee..6fa5d42 100644
--- a/jdk/src/share/classes/java/math/BigInteger.java
+++ b/jdk/src/share/classes/java/math/BigInteger.java
@@ -268,7 +268,15 @@
*/
private static final int SCHOENHAGE_BASE_CONVERSION_THRESHOLD = 20;
- //Constructors
+ /**
+ * The threshold value for using squaring code to perform multiplication
+ * of a {@code BigInteger} instance by itself. If the number of ints in
+ * the number are larger than this value, {@code multiply(this)} will
+ * return {@code square()}.
+ */
+ private static final int MULTIPLY_SQUARE_THRESHOLD = 20;
+
+ // Constructors
/**
* Translates a byte array containing the two's-complement binary
@@ -1458,6 +1466,9 @@
/**
* Returns a BigInteger whose value is {@code (this * val)}.
*
+ * @implNote An implementation may offer better algorithmic
+ * performance when {@code val == this}.
+ *
* @param val value to be multiplied by this BigInteger.
* @return {@code this * val}
*/
@@ -1466,6 +1477,11 @@
return ZERO;
int xlen = mag.length;
+
+ if (val == this && xlen > MULTIPLY_SQUARE_THRESHOLD) {
+ return square();
+ }
+
int ylen = val.mag.length;
if ((xlen < KARATSUBA_THRESHOLD) || (ylen < KARATSUBA_THRESHOLD)) {
diff --git a/jdk/src/share/classes/java/net/SocketPermission.java b/jdk/src/share/classes/java/net/SocketPermission.java
index 70b004a..ca2c62b 100644
--- a/jdk/src/share/classes/java/net/SocketPermission.java
+++ b/jdk/src/share/classes/java/net/SocketPermission.java
@@ -235,13 +235,11 @@
private static Debug debug = null;
private static boolean debugInit = false;
- // ephemeral port range for this system
- private static final int ephemeralLow = initEphemeralPorts(
- "low", DEF_EPH_LOW
- );
- private static final int ephemeralHigh = initEphemeralPorts(
- "high", PORT_MAX
- );
+ // lazy initializer
+ private static class EphemeralRange {
+ static final int low = initEphemeralPorts("low", DEF_EPH_LOW);
+ static final int high = initEphemeralPorts("high", PORT_MAX);
+ };
static {
Boolean tmp = java.security.AccessController.doPrivileged(
@@ -1235,6 +1233,9 @@
int policyLow, int policyHigh, int targetLow, int targetHigh
)
{
+ final int ephemeralLow = EphemeralRange.low;
+ final int ephemeralHigh = EphemeralRange.high;
+
if (targetLow == 0) {
// check policy includes ephemeral range
if (!inRange(policyLow, policyHigh, ephemeralLow, ephemeralHigh)) {
diff --git a/jdk/src/share/classes/java/util/Arrays.java b/jdk/src/share/classes/java/util/Arrays.java
index c620c81..914879c 100644
--- a/jdk/src/share/classes/java/util/Arrays.java
+++ b/jdk/src/share/classes/java/util/Arrays.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -1427,12 +1427,14 @@
* found to violate the {@link Comparator} contract
*/
public static <T> void sort(T[] a, Comparator<? super T> c) {
- if (c == null)
- c = NaturalOrder.INSTANCE;
- if (LegacyMergeSort.userRequested)
- legacyMergeSort(a, c);
- else
- TimSort.sort(a, 0, a.length, c, null, 0, 0);
+ if (c == null) {
+ sort(a);
+ } else {
+ if (LegacyMergeSort.userRequested)
+ legacyMergeSort(a, c);
+ else
+ TimSort.sort(a, 0, a.length, c, null, 0, 0);
+ }
}
/** To be removed in a future release. */
@@ -1498,13 +1500,15 @@
*/
public static <T> void sort(T[] a, int fromIndex, int toIndex,
Comparator<? super T> c) {
- if (c == null)
- c = NaturalOrder.INSTANCE;
- rangeCheck(a.length, fromIndex, toIndex);
- if (LegacyMergeSort.userRequested)
- legacyMergeSort(a, fromIndex, toIndex, c);
- else
- TimSort.sort(a, fromIndex, toIndex, c, null, 0, 0);
+ if (c == null) {
+ sort(a, fromIndex, toIndex);
+ } else {
+ rangeCheck(a.length, fromIndex, toIndex);
+ if (LegacyMergeSort.userRequested)
+ legacyMergeSort(a, fromIndex, toIndex, c);
+ else
+ TimSort.sort(a, fromIndex, toIndex, c, null, 0, 0);
+ }
}
/** To be removed in a future release. */
diff --git a/jdk/src/share/classes/java/util/Collections.java b/jdk/src/share/classes/java/util/Collections.java
index 527518e..580f461 100644
--- a/jdk/src/share/classes/java/util/Collections.java
+++ b/jdk/src/share/classes/java/util/Collections.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -121,34 +121,9 @@
*
* <p>The specified list must be modifiable, but need not be resizable.
*
- * <p>Implementation note: This implementation is a stable, adaptive,
- * iterative mergesort that requires far fewer than n lg(n) comparisons
- * when the input array is partially sorted, while offering the
- * performance of a traditional mergesort when the input array is
- * randomly ordered. If the input array is nearly sorted, the
- * implementation requires approximately n comparisons. Temporary
- * storage requirements vary from a small constant for nearly sorted
- * input arrays to n/2 object references for randomly ordered input
- * arrays.
- *
- * <p>The implementation takes equal advantage of ascending and
- * descending order in its input array, and can take advantage of
- * ascending and descending order in different parts of the same
- * input array. It is well-suited to merging two or more sorted arrays:
- * simply concatenate the arrays and sort the resulting array.
- *
- * <p>The implementation was adapted from Tim Peters's list sort for Python
- * (<a href="http://svn.python.org/projects/python/trunk/Objects/listsort.txt">
- * TimSort</a>). It uses techniques from Peter McIlroy's "Optimistic
- * Sorting and Information Theoretic Complexity", in Proceedings of the
- * Fourth Annual ACM-SIAM Symposium on Discrete Algorithms, pp 467-474,
- * January 1993.
- *
- * <p>This implementation dumps the specified list into an array, sorts
- * the array, and iterates over the list resetting each element
- * from the corresponding position in the array. This avoids the
- * n<sup>2</sup> log(n) performance that would result from attempting
- * to sort a linked list in place.
+ * @implNote
+ * This implementation defers to the {@link List#sort(Comparator)}
+ * method using the specified list and a {@code null} comparator.
*
* @param <T> the class of the objects in the list
* @param list the list to be sorted.
@@ -159,16 +134,11 @@
* @throws IllegalArgumentException (optional) if the implementation
* detects that the natural ordering of the list elements is
* found to violate the {@link Comparable} contract
+ * @see List#sort(Comparator)
*/
@SuppressWarnings("unchecked")
public static <T extends Comparable<? super T>> void sort(List<T> list) {
- Object[] a = list.toArray();
- Arrays.sort(a);
- ListIterator<T> i = list.listIterator();
- for (int j=0; j<a.length; j++) {
- i.next();
- i.set((T)a[j]);
- }
+ list.sort(null);
}
/**
@@ -183,34 +153,9 @@
*
* <p>The specified list must be modifiable, but need not be resizable.
*
- * <p>Implementation note: This implementation is a stable, adaptive,
- * iterative mergesort that requires far fewer than n lg(n) comparisons
- * when the input array is partially sorted, while offering the
- * performance of a traditional mergesort when the input array is
- * randomly ordered. If the input array is nearly sorted, the
- * implementation requires approximately n comparisons. Temporary
- * storage requirements vary from a small constant for nearly sorted
- * input arrays to n/2 object references for randomly ordered input
- * arrays.
- *
- * <p>The implementation takes equal advantage of ascending and
- * descending order in its input array, and can take advantage of
- * ascending and descending order in different parts of the same
- * input array. It is well-suited to merging two or more sorted arrays:
- * simply concatenate the arrays and sort the resulting array.
- *
- * <p>The implementation was adapted from Tim Peters's list sort for Python
- * (<a href="http://svn.python.org/projects/python/trunk/Objects/listsort.txt">
- * TimSort</a>). It uses techniques from Peter McIlroy's "Optimistic
- * Sorting and Information Theoretic Complexity", in Proceedings of the
- * Fourth Annual ACM-SIAM Symposium on Discrete Algorithms, pp 467-474,
- * January 1993.
- *
- * <p>This implementation dumps the specified list into an array, sorts
- * the array, and iterates over the list resetting each element
- * from the corresponding position in the array. This avoids the
- * n<sup>2</sup> log(n) performance that would result from attempting
- * to sort a linked list in place.
+ * @implNote
+ * This implementation defers to the {@link List#sort(Comparator)}
+ * method using the specified list and comparator.
*
* @param <T> the class of the objects in the list
* @param list the list to be sorted.
@@ -223,16 +168,11 @@
* list-iterator does not support the {@code set} operation.
* @throws IllegalArgumentException (optional) if the comparator is
* found to violate the {@link Comparator} contract
+ * @see List#sort(Comparator)
*/
@SuppressWarnings({"unchecked", "rawtypes"})
public static <T> void sort(List<T> list, Comparator<? super T> c) {
- Object[] a = list.toArray();
- Arrays.sort(a, (Comparator)c);
- ListIterator<T> i = list.listIterator();
- for (int j=0; j<a.length; j++) {
- i.next();
- i.set((T)a[j]);
- }
+ list.sort(c);
}
@@ -4464,10 +4404,12 @@
* <pre>
* List<String> s = Collections.emptyList();
* </pre>
- * Implementation note: Implementations of this method need not
- * create a separate <tt>List</tt> object for each call. Using this
- * method is likely to have comparable cost to using the like-named
- * field. (Unlike this method, the field does not provide type safety.)
+ *
+ * @implNote
+ * Implementations of this method need not create a separate <tt>List</tt>
+ * object for each call. Using this method is likely to have comparable
+ * cost to using the like-named field. (Unlike this method, the field does
+ * not provide type safety.)
*
* @param <T> type of elements, if there were any, in the list
* @return an empty immutable list
diff --git a/jdk/src/share/classes/java/util/List.java b/jdk/src/share/classes/java/util/List.java
index 5cbd044..80fe4be 100644
--- a/jdk/src/share/classes/java/util/List.java
+++ b/jdk/src/share/classes/java/util/List.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -415,11 +415,49 @@
}
/**
- * Sorts this list using the supplied {@code Comparator} to compare elements.
+ * Sorts this list according to the order induced by the specified
+ * {@link Comparator}.
+ *
+ * <p>All elements in this list must be <i>mutually comparable</i> using the
+ * specified comparator (that is, {@code c.compare(e1, e2)} must not throw
+ * a {@code ClassCastException} for any elements {@code e1} and {@code e2}
+ * in the list).
+ *
+ * <p>If the specified comparator is {@code null} then all elements in this
+ * list must implement the {@link Comparable} interface and the elements'
+ * {@linkplain Comparable natural ordering} should be used.
+ *
+ * <p>This list must be modifiable, but need not be resizable.
*
* @implSpec
- * The default implementation is equivalent to, for this {@code list}:
- * <pre>Collections.sort(list, c)</pre>
+ * The default implementation obtains an array containing all elements in
+ * this list, sorts the array, and iterates over this list resetting each
+ * element from the corresponding position in the array. (This avoids the
+ * n<sup>2</sup> log(n) performance that would result from attempting
+ * to sort a linked list in place.)
+ *
+ * @implNote
+ * This implementation is a stable, adaptive, iterative mergesort that
+ * requires far fewer than n lg(n) comparisons when the input array is
+ * partially sorted, while offering the performance of a traditional
+ * mergesort when the input array is randomly ordered. If the input array
+ * is nearly sorted, the implementation requires approximately n
+ * comparisons. Temporary storage requirements vary from a small constant
+ * for nearly sorted input arrays to n/2 object references for randomly
+ * ordered input arrays.
+ *
+ * <p>The implementation takes equal advantage of ascending and
+ * descending order in its input array, and can take advantage of
+ * ascending and descending order in different parts of the same
+ * input array. It is well-suited to merging two or more sorted arrays:
+ * simply concatenate the arrays and sort the resulting array.
+ *
+ * <p>The implementation was adapted from Tim Peters's list sort for Python
+ * (<a href="http://svn.python.org/projects/python/trunk/Objects/listsort.txt">
+ * TimSort</a>). It uses techniques from Peter McIlroy's "Optimistic
+ * Sorting and Information Theoretic Complexity", in Proceedings of the
+ * Fourth Annual ACM-SIAM Symposium on Discrete Algorithms, pp 467-474,
+ * January 1993.
*
* @param c the {@code Comparator} used to compare list elements.
* A {@code null} value indicates that the elements'
@@ -434,8 +472,15 @@
* contract
* @since 1.8
*/
+ @SuppressWarnings({"unchecked", "rawtypes"})
default void sort(Comparator<? super E> c) {
- Collections.sort(this, c);
+ Object[] a = this.toArray();
+ Arrays.sort(a, (Comparator) c);
+ ListIterator<E> i = this.listIterator();
+ for (Object e : a) {
+ i.next();
+ i.set((E) e);
+ }
}
/**
diff --git a/jdk/src/share/classes/javax/swing/MenuSelectionManager.java b/jdk/src/share/classes/javax/swing/MenuSelectionManager.java
index 1f6ac77..3f83acb 100644
--- a/jdk/src/share/classes/javax/swing/MenuSelectionManager.java
+++ b/jdk/src/share/classes/javax/swing/MenuSelectionManager.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -30,6 +30,7 @@
import javax.swing.event.*;
import sun.awt.AppContext;
+import sun.swing.SwingUtilities2;
/**
* A MenuSelectionManager owns the selection in menu hierarchy.
@@ -60,6 +61,12 @@
if (msm == null) {
msm = new MenuSelectionManager();
context.put(MENU_SELECTION_MANAGER_KEY, msm);
+
+ // installing additional listener if found in the AppContext
+ Object o = context.get(SwingUtilities2.MENU_SELECTION_MANAGER_LISTENER_KEY);
+ if (o != null && o instanceof ChangeListener) {
+ msm.addChangeListener((ChangeListener) o);
+ }
}
return msm;
diff --git a/jdk/src/share/classes/javax/swing/text/html/parser/Parser.java b/jdk/src/share/classes/javax/swing/text/html/parser/Parser.java
index 3843437..7912446 100644
--- a/jdk/src/share/classes/javax/swing/text/html/parser/Parser.java
+++ b/jdk/src/share/classes/javax/swing/text/html/parser/Parser.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -2089,6 +2089,13 @@
// null end tag.
endTag(false);
continue;
+ } else if (textpos == 0) {
+ if (!legalElementContext(dtd.pcdata)) {
+ error("unexpected.pcdata");
+ }
+ if (last.breaksFlow()) {
+ space = false;
+ }
}
break;
diff --git a/jdk/src/share/classes/sun/awt/FontConfiguration.java b/jdk/src/share/classes/sun/awt/FontConfiguration.java
index ff1e758..93e38e0 100644
--- a/jdk/src/share/classes/sun/awt/FontConfiguration.java
+++ b/jdk/src/share/classes/sun/awt/FontConfiguration.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -867,7 +867,7 @@
return descriptors;
}
- private FontDescriptor[] buildFontDescriptors(int fontIndex, int styleIndex) {
+ protected FontDescriptor[] buildFontDescriptors(int fontIndex, int styleIndex) {
String fontName = fontNames[fontIndex];
String styleName = styleNames[styleIndex];
diff --git a/jdk/src/share/classes/sun/awt/SunHints.java b/jdk/src/share/classes/sun/awt/SunHints.java
index 3e0dff5..15c7e54 100644
--- a/jdk/src/share/classes/sun/awt/SunHints.java
+++ b/jdk/src/share/classes/sun/awt/SunHints.java
@@ -172,7 +172,7 @@
}
}
- private static final int NUM_KEYS = 9;
+ private static final int NUM_KEYS = 10;
private static final int VALS_PER_KEY = 8;
/**
@@ -253,6 +253,13 @@
@Native public static final int INTVAL_STROKE_PURE = 2;
/**
+ * Image scaling hint key and values
+ */
+ @Native public static final int INTKEY_RESOLUTION_VARIANT = 9;
+ @Native public static final int INTVAL_RESOLUTION_VARIANT_DEFAULT = 0;
+ @Native public static final int INTVAL_RESOLUTION_VARIANT_OFF = 1;
+ @Native public static final int INTVAL_RESOLUTION_VARIANT_ON = 2;
+ /**
* LCD text contrast control hint key.
* Value is "100" to make discontiguous with the others which
* are all enumerative and are of a different class.
@@ -450,6 +457,24 @@
SunHints.INTVAL_STROKE_PURE,
"Pure stroke conversion for accurate paths");
+ /**
+ * Image resolution variant hint key and value objects
+ */
+ public static final Key KEY_RESOLUTION_VARIANT =
+ new SunHints.Key(SunHints.INTKEY_RESOLUTION_VARIANT,
+ "Global image resolution variant key");
+ public static final Object VALUE_RESOLUTION_VARIANT_DEFAULT =
+ new SunHints.Value(KEY_RESOLUTION_VARIANT,
+ SunHints.INTVAL_RESOLUTION_VARIANT_DEFAULT,
+ "Choose image resolutions based on a default heuristic");
+ public static final Object VALUE_RESOLUTION_VARIANT_OFF =
+ new SunHints.Value(KEY_RESOLUTION_VARIANT,
+ SunHints.INTVAL_RESOLUTION_VARIANT_OFF,
+ "Use only the standard resolution of an image");
+ public static final Object VALUE_RESOLUTION_VARIANT_ON =
+ new SunHints.Value(KEY_RESOLUTION_VARIANT,
+ SunHints.INTVAL_RESOLUTION_VARIANT_ON,
+ "Always use resolution-specific variants of images");
public static class LCDContrastKey extends Key {
diff --git a/jdk/src/share/classes/sun/awt/SunToolkit.java b/jdk/src/share/classes/sun/awt/SunToolkit.java
index 7c5dca7..e290e1a 100644
--- a/jdk/src/share/classes/sun/awt/SunToolkit.java
+++ b/jdk/src/share/classes/sun/awt/SunToolkit.java
@@ -36,6 +36,9 @@
import java.awt.TrayIcon;
import java.awt.SystemTray;
import java.awt.event.InputEvent;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
import java.net.URL;
import java.util.*;
import java.util.concurrent.TimeUnit;
@@ -715,33 +718,7 @@
static final SoftCache imgCache = new SoftCache();
static Image getImageFromHash(Toolkit tk, URL url) {
- SecurityManager sm = System.getSecurityManager();
- if (sm != null) {
- try {
- java.security.Permission perm =
- url.openConnection().getPermission();
- if (perm != null) {
- try {
- sm.checkPermission(perm);
- } catch (SecurityException se) {
- // fallback to checkRead/checkConnect for pre 1.2
- // security managers
- if ((perm instanceof java.io.FilePermission) &&
- perm.getActions().indexOf("read") != -1) {
- sm.checkRead(perm.getName());
- } else if ((perm instanceof
- java.net.SocketPermission) &&
- perm.getActions().indexOf("connect") != -1) {
- sm.checkConnect(url.getHost(), url.getPort());
- } else {
- throw se;
- }
- }
- }
- } catch (java.io.IOException ioe) {
- sm.checkConnect(url.getHost(), url.getPort());
- }
- }
+ checkPermissions(url);
synchronized (imgCache) {
Image img = (Image)imgCache.get(url);
if (img == null) {
@@ -757,10 +734,7 @@
static Image getImageFromHash(Toolkit tk,
String filename) {
- SecurityManager security = System.getSecurityManager();
- if (security != null) {
- security.checkRead(filename);
- }
+ checkPermissions(filename);
synchronized (imgCache) {
Image img = (Image)imgCache.get(filename);
if (img == null) {
@@ -782,15 +756,156 @@
return getImageFromHash(this, url);
}
- public Image createImage(String filename) {
- SecurityManager security = System.getSecurityManager();
- if (security != null) {
- security.checkRead(filename);
+ protected Image getImageWithResolutionVariant(String fileName,
+ String resolutionVariantName) {
+ synchronized (imgCache) {
+ Image image = getImageFromHash(this, fileName);
+ if (image instanceof MultiResolutionImage) {
+ return image;
+ }
+ Image resolutionVariant = getImageFromHash(this, resolutionVariantName);
+ image = createImageWithResolutionVariant(image, resolutionVariant);
+ imgCache.put(fileName, image);
+ return image;
}
+ }
+
+ protected Image getImageWithResolutionVariant(URL url,
+ URL resolutionVariantURL) {
+ synchronized (imgCache) {
+ Image image = getImageFromHash(this, url);
+ if (image instanceof MultiResolutionImage) {
+ return image;
+ }
+ Image resolutionVariant = getImageFromHash(this, resolutionVariantURL);
+ image = createImageWithResolutionVariant(image, resolutionVariant);
+ imgCache.put(url, image);
+ return image;
+ }
+ }
+
+
+ public Image createImage(String filename) {
+ checkPermissions(filename);
return createImage(new FileImageSource(filename));
}
public Image createImage(URL url) {
+ checkPermissions(url);
+ return createImage(new URLImageSource(url));
+ }
+
+ public Image createImage(byte[] data, int offset, int length) {
+ return createImage(new ByteArrayImageSource(data, offset, length));
+ }
+
+ public Image createImage(ImageProducer producer) {
+ return new ToolkitImage(producer);
+ }
+
+ public static Image createImageWithResolutionVariant(Image image,
+ Image resolutionVariant) {
+ return new MultiResolutionToolkitImage(image, resolutionVariant);
+ }
+
+ public int checkImage(Image img, int w, int h, ImageObserver o) {
+ if (!(img instanceof ToolkitImage)) {
+ return ImageObserver.ALLBITS;
+ }
+
+ ToolkitImage tkimg = (ToolkitImage)img;
+ int repbits;
+ if (w == 0 || h == 0) {
+ repbits = ImageObserver.ALLBITS;
+ } else {
+ repbits = tkimg.getImageRep().check(o);
+ }
+ return (tkimg.check(o) | repbits) & checkResolutionVariant(img, w, h, o);
+ }
+
+ public boolean prepareImage(Image img, int w, int h, ImageObserver o) {
+ if (w == 0 || h == 0) {
+ return true;
+ }
+
+ // Must be a ToolkitImage
+ if (!(img instanceof ToolkitImage)) {
+ return true;
+ }
+
+ ToolkitImage tkimg = (ToolkitImage)img;
+ if (tkimg.hasError()) {
+ if (o != null) {
+ o.imageUpdate(img, ImageObserver.ERROR|ImageObserver.ABORT,
+ -1, -1, -1, -1);
+ }
+ return false;
+ }
+ ImageRepresentation ir = tkimg.getImageRep();
+ return ir.prepare(o) & prepareResolutionVariant(img, w, h, o);
+ }
+
+ private int checkResolutionVariant(Image img, int w, int h, ImageObserver o) {
+ ToolkitImage rvImage = getResolutionVariant(img);
+ // Ignore the resolution variant in case of error
+ return (rvImage == null || rvImage.hasError()) ? 0xFFFF :
+ checkImage(rvImage, 2 * w, 2 * h, MultiResolutionToolkitImage.
+ getResolutionVariantObserver(
+ img, o, w, h, 2 * w, 2 * h));
+ }
+
+ private boolean prepareResolutionVariant(Image img, int w, int h,
+ ImageObserver o) {
+
+ ToolkitImage rvImage = getResolutionVariant(img);
+ // Ignore the resolution variant in case of error
+ return rvImage == null || rvImage.hasError() || prepareImage(
+ rvImage, 2 * w, 2 * h,
+ MultiResolutionToolkitImage.getResolutionVariantObserver(
+ img, o, w, h, 2 * w, 2 * h));
+ }
+
+ private static ToolkitImage getResolutionVariant(Image image) {
+ if (image instanceof MultiResolutionToolkitImage) {
+ Image resolutionVariant = ((MultiResolutionToolkitImage) image).
+ getResolutionVariant();
+ if (resolutionVariant instanceof ToolkitImage) {
+ return (ToolkitImage) resolutionVariant;
+ }
+ }
+ return null;
+ }
+
+ protected static boolean imageCached(Object key) {
+ return imgCache.containsKey(key);
+ }
+
+ protected static boolean imageExists(String filename) {
+ checkPermissions(filename);
+ return filename != null && new File(filename).exists();
+ }
+
+ @SuppressWarnings("try")
+ protected static boolean imageExists(URL url) {
+ checkPermissions(url);
+ if (url != null) {
+ try (InputStream is = url.openStream()) {
+ return true;
+ }catch(IOException e){
+ return false;
+ }
+ }
+ return false;
+ }
+
+ private static void checkPermissions(String filename) {
+ SecurityManager security = System.getSecurityManager();
+ if (security != null) {
+ security.checkRead(filename);
+ }
+ }
+
+ private static void checkPermissions(URL url) {
SecurityManager sm = System.getSecurityManager();
if (sm != null) {
try {
@@ -818,52 +933,6 @@
sm.checkConnect(url.getHost(), url.getPort());
}
}
- return createImage(new URLImageSource(url));
- }
-
- public Image createImage(byte[] data, int offset, int length) {
- return createImage(new ByteArrayImageSource(data, offset, length));
- }
-
- public Image createImage(ImageProducer producer) {
- return new ToolkitImage(producer);
- }
-
- public int checkImage(Image img, int w, int h, ImageObserver o) {
- if (!(img instanceof ToolkitImage)) {
- return ImageObserver.ALLBITS;
- }
-
- ToolkitImage tkimg = (ToolkitImage)img;
- int repbits;
- if (w == 0 || h == 0) {
- repbits = ImageObserver.ALLBITS;
- } else {
- repbits = tkimg.getImageRep().check(o);
- }
- return tkimg.check(o) | repbits;
- }
-
- public boolean prepareImage(Image img, int w, int h, ImageObserver o) {
- if (w == 0 || h == 0) {
- return true;
- }
-
- // Must be a ToolkitImage
- if (!(img instanceof ToolkitImage)) {
- return true;
- }
-
- ToolkitImage tkimg = (ToolkitImage)img;
- if (tkimg.hasError()) {
- if (o != null) {
- o.imageUpdate(img, ImageObserver.ERROR|ImageObserver.ABORT,
- -1, -1, -1, -1);
- }
- return false;
- }
- ImageRepresentation ir = tkimg.getImageRep();
- return ir.prepare(o);
}
/**
diff --git a/jdk/src/share/classes/sun/awt/dnd/SunDropTargetContextPeer.java b/jdk/src/share/classes/sun/awt/dnd/SunDropTargetContextPeer.java
index d44a006..c81ce90 100644
--- a/jdk/src/share/classes/sun/awt/dnd/SunDropTargetContextPeer.java
+++ b/jdk/src/share/classes/sun/awt/dnd/SunDropTargetContextPeer.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -627,14 +627,14 @@
if (dropOperation == DnDConstants.ACTION_NONE)
throw new IllegalArgumentException("invalid acceptDrop() action");
- if (dropStatus != STATUS_WAIT) {
+ if (dropStatus == STATUS_WAIT || dropStatus == STATUS_ACCEPT) {
+ currentDA = currentA = mapOperation(dropOperation & currentSA);
+
+ dropStatus = STATUS_ACCEPT;
+ dropComplete = false;
+ } else {
throw new InvalidDnDOperationException("invalid acceptDrop()");
}
-
- currentDA = currentA = mapOperation(dropOperation & currentSA);
-
- dropStatus = STATUS_ACCEPT;
- dropComplete = false;
}
/**
diff --git a/jdk/src/share/classes/sun/awt/image/MultiResolutionBufferedImage.java b/jdk/src/share/classes/sun/awt/image/MultiResolutionBufferedImage.java
new file mode 100644
index 0000000..79f7a3b
--- /dev/null
+++ b/jdk/src/share/classes/sun/awt/image/MultiResolutionBufferedImage.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package sun.awt.image;
+
+import java.awt.Image;
+import java.awt.Graphics;
+import java.awt.image.BufferedImage;
+import java.util.Arrays;
+import java.util.List;
+import java.util.function.Function;
+
+public class MultiResolutionBufferedImage extends BufferedImage
+ implements MultiResolutionImage {
+
+ Image[] resolutionVariants;
+ int baseIndex;
+
+ public MultiResolutionBufferedImage(int imageType, int baseIndex, Image... images) {
+ super(images[baseIndex].getWidth(null), images[baseIndex].getHeight(null),
+ imageType);
+ this.baseIndex = baseIndex;
+ this.resolutionVariants = images;
+ Graphics g = getGraphics();
+ g.drawImage(images[baseIndex], 0, 0, null);
+ g.dispose();
+ images[baseIndex] = this;
+ }
+
+ @Override
+ public Image getResolutionVariant(int width, int height) {
+ for (Image image : resolutionVariants) {
+ if (width <= image.getWidth(null) && height <= image.getHeight(null)) {
+ return image;
+ }
+ }
+ return this;
+ }
+
+ @Override
+ public List<Image> getResolutionVariants() {
+ return Arrays.asList(resolutionVariants);
+ }
+
+ public MultiResolutionBufferedImage map(Function<Image, Image> mapper) {
+ return new MultiResolutionBufferedImage(getType(), baseIndex,
+ Arrays.stream(resolutionVariants).map(mapper)
+ .toArray(length -> new Image[length]));
+ }
+}
diff --git a/jdk/src/share/classes/sun/awt/image/MultiResolutionImage.java b/jdk/src/share/classes/sun/awt/image/MultiResolutionImage.java
new file mode 100644
index 0000000..40be02e
--- /dev/null
+++ b/jdk/src/share/classes/sun/awt/image/MultiResolutionImage.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package sun.awt.image;
+
+import java.awt.Image;
+import java.util.List;
+
+/**
+ * This interface is designed to provide a set of images at various resolutions.
+ *
+ * The <code>MultiResolutionImage</code> interface should be implemented by any
+ * class whose instances are intended to provide image resolution variants
+ * according to the given image width and height.
+ *
+ * For example,
+ * <pre>
+ * {@code
+ * public class ScaledImage extends BufferedImage
+ * implements MultiResolutionImage {
+ *
+ * @Override
+ * public Image getResolutionVariant(int width, int height) {
+ * return ((width <= getWidth() && height <= getHeight()))
+ * ? this : highResolutionImage;
+ * }
+ *
+ * @Override
+ * public List<Image> getResolutionVariants() {
+ * return Arrays.asList(this, highResolutionImage);
+ * }
+ * }
+ * }</pre>
+ *
+ * It is recommended to cache image variants for performance reasons.
+ *
+ * <b>WARNING</b>: This class is an implementation detail. This API may change
+ * between update release, and it may even be removed or be moved in some other
+ * package(s)/class(es).
+ */
+public interface MultiResolutionImage {
+
+ /**
+ * Provides an image with necessary resolution which best fits to the given
+ * image width and height.
+ *
+ * @param width the desired image resolution width.
+ * @param height the desired image resolution height.
+ * @return image resolution variant.
+ *
+ * @since JDK1.8
+ */
+ public Image getResolutionVariant(int width, int height);
+
+ /**
+ * Gets list of all resolution variants including the base image
+ *
+ * @return list of resolution variants.
+ * @since JDK1.8
+ */
+ public List<Image> getResolutionVariants();
+}
diff --git a/jdk/src/share/classes/sun/awt/image/MultiResolutionToolkitImage.java b/jdk/src/share/classes/sun/awt/image/MultiResolutionToolkitImage.java
new file mode 100644
index 0000000..a49c8a7
--- /dev/null
+++ b/jdk/src/share/classes/sun/awt/image/MultiResolutionToolkitImage.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package sun.awt.image;
+
+import java.awt.Image;
+import java.awt.image.ImageObserver;
+import java.util.Arrays;
+import java.util.List;
+import sun.misc.SoftCache;
+
+public class MultiResolutionToolkitImage extends ToolkitImage implements MultiResolutionImage {
+
+ Image resolutionVariant;
+
+ public MultiResolutionToolkitImage(Image lowResolutionImage, Image resolutionVariant) {
+ super(lowResolutionImage.getSource());
+ this.resolutionVariant = resolutionVariant;
+ }
+
+ @Override
+ public Image getResolutionVariant(int width, int height) {
+ return ((width <= getWidth() && height <= getHeight()))
+ ? this : resolutionVariant;
+ }
+
+ public Image getResolutionVariant() {
+ return resolutionVariant;
+ }
+
+ @Override
+ public List<Image> getResolutionVariants() {
+ return Arrays.<Image>asList(this, resolutionVariant);
+ }
+
+ private static final int BITS_INFO = ImageObserver.SOMEBITS
+ | ImageObserver.FRAMEBITS | ImageObserver.ALLBITS;
+
+ private static class ObserverCache {
+
+ static final SoftCache INSTANCE = new SoftCache();
+ }
+
+ public static ImageObserver getResolutionVariantObserver(
+ final Image image, final ImageObserver observer,
+ final int imgWidth, final int imgHeight,
+ final int rvWidth, final int rvHeight) {
+
+ if (observer == null) {
+ return null;
+ }
+
+ synchronized (ObserverCache.INSTANCE) {
+ ImageObserver o = (ImageObserver) ObserverCache.INSTANCE.get(image);
+
+ if (o == null) {
+
+ o = (Image resolutionVariant, int flags,
+ int x, int y, int width, int height) -> {
+
+ if ((flags & (ImageObserver.WIDTH | BITS_INFO)) != 0) {
+ width = (width + 1) / 2;
+ }
+
+ if ((flags & (ImageObserver.HEIGHT | BITS_INFO)) != 0) {
+ height = (height + 1) / 2;
+ }
+
+ if ((flags & BITS_INFO) != 0) {
+ x /= 2;
+ y /= 2;
+ }
+
+ return observer.imageUpdate(
+ image, flags, x, y, width, height);
+ };
+
+ ObserverCache.INSTANCE.put(image, o);
+ }
+ return o;
+ }
+ }
+}
diff --git a/jdk/src/share/classes/sun/font/FontFamily.java b/jdk/src/share/classes/sun/font/FontFamily.java
index aa23436..6a4cd25 100644
--- a/jdk/src/share/classes/sun/font/FontFamily.java
+++ b/jdk/src/share/classes/sun/font/FontFamily.java
@@ -25,6 +25,7 @@
package sun.font;
+import java.io.File;
import java.awt.Font;
import java.util.HashMap;
import java.util.concurrent.ConcurrentHashMap;
@@ -105,8 +106,39 @@
return familyRank;
}
+ private boolean isFromSameSource(Font2D font) {
+ if (!(font instanceof FileFont)) {
+ return false;
+ }
+
+ FileFont existingFont = null;
+ if (plain instanceof FileFont) {
+ existingFont = (FileFont)plain;
+ } else if (bold instanceof FileFont) {
+ existingFont = (FileFont)bold;
+ } else if (italic instanceof FileFont) {
+ existingFont = (FileFont)italic;
+ } else if (bolditalic instanceof FileFont) {
+ existingFont = (FileFont)bolditalic;
+ }
+ // A family isn't created until there's a font.
+ // So if we didn't find a file font it means this
+ // isn't a file-based family.
+ if (existingFont == null) {
+ return false;
+ }
+ File existDir = (new File(existingFont.platName)).getParentFile();
+
+ FileFont newFont = (FileFont)font;
+ File newDir = (new File(newFont.platName)).getParentFile();
+ return java.util.Objects.equals(newDir, existDir);
+ }
+
public void setFont(Font2D font, int style) {
- if (font.getRank() > familyRank) {
+ /* Allow a lower-rank font only if its a file font
+ * from the exact same source as any previous font.
+ */
+ if ((font.getRank() > familyRank) && !isFromSameSource(font)) {
if (FontUtilities.isLogging()) {
FontUtilities.getLogger()
.warning("Rejecting adding " + font +
diff --git a/jdk/src/share/classes/sun/font/SunFontManager.java b/jdk/src/share/classes/sun/font/SunFontManager.java
index 3c63dbe..90b9b5d 100644
--- a/jdk/src/share/classes/sun/font/SunFontManager.java
+++ b/jdk/src/share/classes/sun/font/SunFontManager.java
@@ -763,7 +763,7 @@
if (family == null) {
family = new FontFamily(familyName, false, rank);
family.setFont(f, f.style);
- } else if (family.getRank() >= rank) {
+ } else {
family.setFont(f, f.style);
}
fullNameToFont.put(fontName.toLowerCase(Locale.ENGLISH), f);
@@ -854,7 +854,7 @@
if (family == null) {
family = new FontFamily(familyName, false, rank);
family.setFont(newFont, newFont.style);
- } else if (family.getRank() >= rank) {
+ } else {
family.setFont(newFont, newFont.style);
}
return newFont;
diff --git a/jdk/src/share/classes/sun/java2d/SunGraphics2D.java b/jdk/src/share/classes/sun/java2d/SunGraphics2D.java
index 3921bbc..f66eee6 100644
--- a/jdk/src/share/classes/sun/java2d/SunGraphics2D.java
+++ b/jdk/src/share/classes/sun/java2d/SunGraphics2D.java
@@ -61,6 +61,7 @@
import java.awt.Rectangle;
import java.text.AttributedCharacterIterator;
import java.awt.Font;
+import java.awt.Point;
import java.awt.image.ImageObserver;
import java.awt.Transparency;
import java.awt.font.GlyphVector;
@@ -93,6 +94,13 @@
import sun.misc.PerformanceLogger;
import java.lang.annotation.Native;
+import sun.awt.image.MultiResolutionImage;
+
+import static java.awt.geom.AffineTransform.TYPE_FLIP;
+import static java.awt.geom.AffineTransform.TYPE_MASK_SCALE;
+import static java.awt.geom.AffineTransform.TYPE_TRANSLATION;
+import sun.awt.image.MultiResolutionToolkitImage;
+import sun.awt.image.ToolkitImage;
/**
* This is a the master Graphics2D superclass for all of the Sun
@@ -237,6 +245,7 @@
protected Region devClip; // Actual physical drawable in pixels
private final int devScale; // Actual physical scale factor
+ private int resolutionVariantHint;
// cached state for text rendering
private boolean validFontInfo;
@@ -274,6 +283,7 @@
lcdTextContrast = lcdTextContrastDefaultValue;
interpolationHint = -1;
strokeHint = SunHints.INTVAL_STROKE_DEFAULT;
+ resolutionVariantHint = SunHints.INTVAL_RESOLUTION_VARIANT_DEFAULT;
interpolationType = AffineTransformOp.TYPE_NEAREST_NEIGHBOR;
@@ -1249,6 +1259,10 @@
stateChanged = (strokeHint != newHint);
strokeHint = newHint;
break;
+ case SunHints.INTKEY_RESOLUTION_VARIANT:
+ stateChanged = (resolutionVariantHint != newHint);
+ resolutionVariantHint = newHint;
+ break;
default:
recognized = false;
stateChanged = false;
@@ -1322,6 +1336,9 @@
case SunHints.INTKEY_STROKE_CONTROL:
return SunHints.Value.get(SunHints.INTKEY_STROKE_CONTROL,
strokeHint);
+ case SunHints.INTKEY_RESOLUTION_VARIANT:
+ return SunHints.Value.get(SunHints.INTKEY_RESOLUTION_VARIANT,
+ resolutionVariantHint);
}
return null;
}
@@ -3050,18 +3067,58 @@
}
// end of text rendering methods
- private static boolean isHiDPIImage(final Image img) {
- return SurfaceManager.getImageScale(img) != 1;
+ private boolean isHiDPIImage(final Image img) {
+ return (SurfaceManager.getImageScale(img) != 1) ||
+ (resolutionVariantHint != SunHints.INTVAL_RESOLUTION_VARIANT_OFF
+ && img instanceof MultiResolutionImage);
}
private boolean drawHiDPIImage(Image img, int dx1, int dy1, int dx2,
int dy2, int sx1, int sy1, int sx2, int sy2,
Color bgcolor, ImageObserver observer) {
- final int scale = SurfaceManager.getImageScale(img);
- sx1 = Region.clipScale(sx1, scale);
- sx2 = Region.clipScale(sx2, scale);
- sy1 = Region.clipScale(sy1, scale);
- sy2 = Region.clipScale(sy2, scale);
+
+ if (SurfaceManager.getImageScale(img) != 1) { // Volatile Image
+ final int scale = SurfaceManager.getImageScale(img);
+ sx1 = Region.clipScale(sx1, scale);
+ sx2 = Region.clipScale(sx2, scale);
+ sy1 = Region.clipScale(sy1, scale);
+ sy2 = Region.clipScale(sy2, scale);
+ } else if (img instanceof MultiResolutionImage) {
+ // get scaled destination image size
+
+ int width = img.getWidth(observer);
+ int height = img.getHeight(observer);
+
+ Image resolutionVariant = getResolutionVariant(
+ (MultiResolutionImage) img, width, height,
+ dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2);
+
+ if (resolutionVariant != img && resolutionVariant != null) {
+ // recalculate source region for the resolution variant
+
+ ImageObserver rvObserver = MultiResolutionToolkitImage.
+ getResolutionVariantObserver(img, observer,
+ width, height, -1, -1);
+
+ int rvWidth = resolutionVariant.getWidth(rvObserver);
+ int rvHeight = resolutionVariant.getHeight(rvObserver);
+
+ if (0 < width && 0 < height && 0 < rvWidth && 0 < rvHeight) {
+
+ float widthScale = ((float) rvWidth) / width;
+ float heightScale = ((float) rvHeight) / height;
+
+ sx1 = Region.clipScale(sx1, widthScale);
+ sy1 = Region.clipScale(sy1, heightScale);
+ sx2 = Region.clipScale(sx2, widthScale);
+ sy2 = Region.clipScale(sy2, heightScale);
+
+ observer = rvObserver;
+ img = resolutionVariant;
+ }
+ }
+ }
+
try {
return imagepipe.scaleImage(this, img, dx1, dy1, dx2, dy2, sx1, sy1,
sx2, sy2, bgcolor, observer);
@@ -3081,6 +3138,54 @@
}
}
+ private Image getResolutionVariant(MultiResolutionImage img,
+ int srcWidth, int srcHeight, int dx1, int dy1, int dx2, int dy2,
+ int sx1, int sy1, int sx2, int sy2) {
+
+ if (srcWidth <= 0 || srcHeight <= 0) {
+ return null;
+ }
+
+ int sw = sx2 - sx1;
+ int sh = sy2 - sy1;
+
+ if (sw == 0 || sh == 0) {
+ return null;
+ }
+
+ int type = transform.getType();
+ int dw = dx2 - dx1;
+ int dh = dy2 - dy1;
+ double destRegionWidth;
+ double destRegionHeight;
+
+ if ((type & ~(TYPE_TRANSLATION | TYPE_FLIP)) == 0) {
+ destRegionWidth = dw;
+ destRegionHeight = dh;
+ } else if ((type & ~(TYPE_TRANSLATION | TYPE_FLIP | TYPE_MASK_SCALE)) == 0) {
+ destRegionWidth = dw * transform.getScaleX();
+ destRegionHeight = dh * transform.getScaleY();
+ } else {
+ destRegionWidth = dw * Math.hypot(
+ transform.getScaleX(), transform.getShearY());
+ destRegionHeight = dh * Math.hypot(
+ transform.getShearX(), transform.getScaleY());
+ }
+
+ int destImageWidth = (int) Math.abs(srcWidth * destRegionWidth / sw);
+ int destImageHeight = (int) Math.abs(srcHeight * destRegionHeight / sh);
+
+ Image resolutionVariant
+ = img.getResolutionVariant(destImageWidth, destImageHeight);
+
+ if (resolutionVariant instanceof ToolkitImage
+ && ((ToolkitImage) resolutionVariant).hasError()) {
+ return null;
+ }
+
+ return resolutionVariant;
+ }
+
/**
* Draws an image scaled to x,y,w,h in nonblocking mode with a
* callback object.
diff --git a/jdk/src/share/classes/sun/nio/ch/FileChannelImpl.java b/jdk/src/share/classes/sun/nio/ch/FileChannelImpl.java
index 703f598..bb127e8 100644
--- a/jdk/src/share/classes/sun/nio/ch/FileChannelImpl.java
+++ b/jdk/src/share/classes/sun/nio/ch/FileChannelImpl.java
@@ -29,10 +29,20 @@
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.MappedByteBuffer;
-import java.nio.channels.*;
+import java.nio.channels.ClosedByInterruptException;
+import java.nio.channels.ClosedChannelException;
+import java.nio.channels.FileChannel;
+import java.nio.channels.FileLock;
+import java.nio.channels.FileLockInterruptionException;
+import java.nio.channels.NonReadableChannelException;
+import java.nio.channels.NonWritableChannelException;
+import java.nio.channels.OverlappingFileLockException;
+import java.nio.channels.ReadableByteChannel;
+import java.nio.channels.WritableByteChannel;
+import java.security.AccessController;
import java.util.ArrayList;
import java.util.List;
-import java.security.AccessController;
+
import sun.misc.Cleaner;
import sun.security.action.GetPropertyAction;
@@ -56,13 +66,17 @@
// Required to prevent finalization of creating stream (immutable)
private final Object parent;
+ // The path of the referenced file
+ // (null if the parent stream is created with a file descriptor)
+ private final String path;
+
// Thread-safe set of IDs of native threads, for signalling
private final NativeThreadSet threads = new NativeThreadSet(2);
// Lock for operations involving position and size
private final Object positionLock = new Object();
- private FileChannelImpl(FileDescriptor fd, boolean readable,
+ private FileChannelImpl(FileDescriptor fd, String path, boolean readable,
boolean writable, boolean append, Object parent)
{
this.fd = fd;
@@ -70,23 +84,24 @@
this.writable = writable;
this.append = append;
this.parent = parent;
+ this.path = path;
this.nd = new FileDispatcherImpl(append);
}
// Used by FileInputStream.getChannel() and RandomAccessFile.getChannel()
- public static FileChannel open(FileDescriptor fd,
+ public static FileChannel open(FileDescriptor fd, String path,
boolean readable, boolean writable,
Object parent)
{
- return new FileChannelImpl(fd, readable, writable, false, parent);
+ return new FileChannelImpl(fd, path, readable, writable, false, parent);
}
// Used by FileOutputStream.getChannel
- public static FileChannel open(FileDescriptor fd,
+ public static FileChannel open(FileDescriptor fd, String path,
boolean readable, boolean writable,
boolean append, Object parent)
{
- return new FileChannelImpl(fd, readable, writable, append, parent);
+ return new FileChannelImpl(fd, path, readable, writable, append, parent);
}
private void ensureOpen() throws IOException {
@@ -110,7 +125,7 @@
}
}
- nd.preClose(fd);
+ // signal any threads blocked on this channel
threads.signalAndWait();
if (parent != null) {
diff --git a/jdk/src/share/classes/sun/nio/ch/NativeThreadSet.java b/jdk/src/share/classes/sun/nio/ch/NativeThreadSet.java
index d6d4c5c..5eb90af 100644
--- a/jdk/src/share/classes/sun/nio/ch/NativeThreadSet.java
+++ b/jdk/src/share/classes/sun/nio/ch/NativeThreadSet.java
@@ -82,8 +82,9 @@
// Signals all threads in this set.
//
- void signalAndWait() {
- synchronized (this) {
+ synchronized void signalAndWait() {
+ boolean interrupted = false;
+ while (used > 0) {
int u = used;
int n = elts.length;
for (int i = 0; i < n; i++) {
@@ -96,16 +97,15 @@
break;
}
waitingToEmpty = true;
- boolean interrupted = false;
- while (used > 0) {
- try {
- wait();
- } catch (InterruptedException e) {
- interrupted = true;
- }
+ try {
+ wait(50);
+ } catch (InterruptedException e) {
+ interrupted = true;
+ } finally {
+ waitingToEmpty = false;
}
- if (interrupted)
- Thread.currentThread().interrupt();
}
+ if (interrupted)
+ Thread.currentThread().interrupt();
}
}
diff --git a/jdk/src/share/classes/sun/nio/ch/SimpleAsynchronousFileChannelImpl.java b/jdk/src/share/classes/sun/nio/ch/SimpleAsynchronousFileChannelImpl.java
index d081339..5658480 100644
--- a/jdk/src/share/classes/sun/nio/ch/SimpleAsynchronousFileChannelImpl.java
+++ b/jdk/src/share/classes/sun/nio/ch/SimpleAsynchronousFileChannelImpl.java
@@ -88,7 +88,6 @@
invalidateAllLocks();
// signal any threads blocked on this channel
- nd.preClose(fdObj);
threads.signalAndWait();
// wait until all async I/O operations have completely gracefully
diff --git a/jdk/src/share/classes/sun/security/provider/certpath/AdaptableX509CertSelector.java b/jdk/src/share/classes/sun/security/provider/certpath/AdaptableX509CertSelector.java
index 680795c..d05d22f 100644
--- a/jdk/src/share/classes/sun/security/provider/certpath/AdaptableX509CertSelector.java
+++ b/jdk/src/share/classes/sun/security/provider/certpath/AdaptableX509CertSelector.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -26,13 +26,16 @@
package sun.security.provider.certpath;
import java.io.IOException;
-import java.util.Date;
-
+import java.math.BigInteger;
import java.security.cert.Certificate;
import java.security.cert.X509Certificate;
import java.security.cert.X509CertSelector;
import java.security.cert.CertificateException;
+import java.util.Arrays;
+import java.util.Date;
+import sun.security.util.Debug;
+import sun.security.util.DerInputStream;
import sun.security.util.DerOutputStream;
import sun.security.x509.SerialNumber;
import sun.security.x509.KeyIdentifier;
@@ -40,26 +43,27 @@
/**
* An adaptable X509 certificate selector for forward certification path
- * building.
+ * building. This selector overrides the default X509CertSelector matching
+ * rules for the subjectKeyIdentifier and serialNumber criteria, and adds
+ * additional rules for certificate validity.
*
* @since 1.7
*/
class AdaptableX509CertSelector extends X509CertSelector {
+
+ private static final Debug debug = Debug.getInstance("certpath");
+
// The start date of a validity period.
private Date startDate;
// The end date of a validity period.
private Date endDate;
- // Is subject key identifier sensitive?
- private boolean isSKIDSensitive = false;
+ // The subject key identifier
+ private byte[] ski;
- // Is serial number sensitive?
- private boolean isSNSensitive = false;
-
- AdaptableX509CertSelector() {
- super();
- }
+ // The serial number
+ private BigInteger serial;
/**
* Sets the criterion of the X509Certificate validity period.
@@ -86,51 +90,70 @@
}
/**
- * Parse the authority key identifier extension.
- *
- * If the keyIdentifier field of the extension is non-null, set the
- * subjectKeyIdentifier criterion. If the authorityCertSerialNumber
- * field is non-null, set the serialNumber criterion.
- *
- * Note that we will not set the subject criterion according to the
- * authorityCertIssuer field of the extension. The caller MUST set
- * the subject criterion before call match().
- *
- * @param akidext the authorityKeyIdentifier extension
+ * This selector overrides the subjectKeyIdentifier matching rules of
+ * X509CertSelector, so it throws IllegalArgumentException if this method
+ * is ever called.
*/
- void parseAuthorityKeyIdentifierExtension(
- AuthorityKeyIdentifierExtension akidext) throws IOException {
- if (akidext != null) {
- KeyIdentifier akid = (KeyIdentifier)akidext.get(
- AuthorityKeyIdentifierExtension.KEY_ID);
+ @Override
+ public void setSubjectKeyIdentifier(byte[] subjectKeyID) {
+ throw new IllegalArgumentException();
+ }
+
+ /**
+ * This selector overrides the serialNumber matching rules of
+ * X509CertSelector, so it throws IllegalArgumentException if this method
+ * is ever called.
+ */
+ @Override
+ public void setSerialNumber(BigInteger serial) {
+ throw new IllegalArgumentException();
+ }
+
+ /**
+ * Sets the subjectKeyIdentifier and serialNumber criteria from the
+ * authority key identifier extension.
+ *
+ * The subjectKeyIdentifier criterion is set to the keyIdentifier field
+ * of the extension, or null if it is empty. The serialNumber criterion
+ * is set to the authorityCertSerialNumber field, or null if it is empty.
+ *
+ * Note that we do not set the subject criterion to the
+ * authorityCertIssuer field of the extension. The caller MUST set
+ * the subject criterion before calling match().
+ *
+ * @param ext the authorityKeyIdentifier extension
+ * @throws IOException if there is an error parsing the extension
+ */
+ void setSkiAndSerialNumber(AuthorityKeyIdentifierExtension ext)
+ throws IOException {
+
+ ski = null;
+ serial = null;
+
+ if (ext != null) {
+ KeyIdentifier akid = (KeyIdentifier)ext.get(
+ AuthorityKeyIdentifierExtension.KEY_ID);
if (akid != null) {
- // Do not override the previous setting for initial selection.
- if (isSKIDSensitive || getSubjectKeyIdentifier() == null) {
- DerOutputStream derout = new DerOutputStream();
- derout.putOctetString(akid.getIdentifier());
- super.setSubjectKeyIdentifier(derout.toByteArray());
-
- isSKIDSensitive = true;
- }
+ DerOutputStream derout = new DerOutputStream();
+ derout.putOctetString(akid.getIdentifier());
+ ski = derout.toByteArray();
}
-
- SerialNumber asn = (SerialNumber)akidext.get(
- AuthorityKeyIdentifierExtension.SERIAL_NUMBER);
+ SerialNumber asn = (SerialNumber)ext.get(
+ AuthorityKeyIdentifierExtension.SERIAL_NUMBER);
if (asn != null) {
- // Do not override the previous setting for initial selection.
- if (isSNSensitive || getSerialNumber() == null) {
- super.setSerialNumber(asn.getNumber());
- isSNSensitive = true;
- }
+ serial = asn.getNumber();
}
-
- // the subject criterion should be set by the caller.
+ // the subject criterion should be set by the caller
}
}
/**
* Decides whether a <code>Certificate</code> should be selected.
*
+ * This method overrides the matching rules for the subjectKeyIdentifier
+ * and serialNumber criteria and adds additional rules for certificate
+ * validity.
+ *
* For the purpose of compatibility, when a certificate is of
* version 1 and version 2, or the certificate does not include
* a subject key identifier extension, the selection criterion
@@ -138,12 +161,28 @@
*/
@Override
public boolean match(Certificate cert) {
- if (!(cert instanceof X509Certificate)) {
+ X509Certificate xcert = (X509Certificate)cert;
+
+ // match subject key identifier
+ if (!matchSubjectKeyID(xcert)) {
return false;
}
- X509Certificate xcert = (X509Certificate)cert;
+ // In practice, a CA may replace its root certificate and require that
+ // the existing certificate is still valid, even if the AKID extension
+ // does not match the replacement root certificate fields.
+ //
+ // Conservatively, we only support the replacement for version 1 and
+ // version 2 certificate. As for version 3, the certificate extension
+ // may contain sensitive information (for example, policies), the
+ // AKID need to be respected to seek the exact certificate in case
+ // of key or certificate abuse.
int version = xcert.getVersion();
+ if (serial != null && version > 2) {
+ if (!serial.equals(xcert.getSerialNumber())) {
+ return false;
+ }
+ }
// Check the validity period for version 1 and 2 certificate.
if (version < 3) {
@@ -154,7 +193,6 @@
return false;
}
}
-
if (endDate != null) {
try {
xcert.checkValidity(endDate);
@@ -164,26 +202,50 @@
}
}
- // If no SubjectKeyIdentifier extension, don't bother to check it.
- if (isSKIDSensitive &&
- (version < 3 || xcert.getExtensionValue("2.5.29.14") == null)) {
- setSubjectKeyIdentifier(null);
+
+ if (!super.match(cert)) {
+ return false;
}
- // In practice, a CA may replace its root certificate and require that
- // the existing certificate is still valid, even if the AKID extension
- // does not match the replacement root certificate fields.
- //
- // Conservatively, we only support the replacement for version 1 and
- // version 2 certificate. As for version 2, the certificate extension
- // may contain sensitive information (for example, policies), the
- // AKID need to be respected to seek the exact certificate in case
- // of key or certificate abuse.
- if (isSNSensitive && version < 3) {
- setSerialNumber(null);
- }
+ return true;
+ }
- return super.match(cert);
+ /*
+ * Match on subject key identifier extension value. These matching rules
+ * are identical to X509CertSelector except that if the certificate does
+ * not have a subject key identifier extension, it returns true.
+ */
+ private boolean matchSubjectKeyID(X509Certificate xcert) {
+ if (ski == null) {
+ return true;
+ }
+ try {
+ byte[] extVal = xcert.getExtensionValue("2.5.29.14");
+ if (extVal == null) {
+ if (debug != null) {
+ debug.println("AdaptableX509CertSelector.match: "
+ + "no subject key ID extension");
+ }
+ return true;
+ }
+ DerInputStream in = new DerInputStream(extVal);
+ byte[] certSubjectKeyID = in.getOctetString();
+ if (certSubjectKeyID == null ||
+ !Arrays.equals(ski, certSubjectKeyID)) {
+ if (debug != null) {
+ debug.println("AdaptableX509CertSelector.match: "
+ + "subject key IDs don't match");
+ }
+ return false;
+ }
+ } catch (IOException ex) {
+ if (debug != null) {
+ debug.println("AdaptableX509CertSelector.match: "
+ + "exception in subject key ID check");
+ }
+ return false;
+ }
+ return true;
}
@Override
@@ -198,6 +260,9 @@
copy.endDate = (Date)endDate.clone();
}
+ if (ski != null) {
+ copy.ski = ski.clone();
+ }
return copy;
}
}
diff --git a/jdk/src/share/classes/sun/security/provider/certpath/DistributionPointFetcher.java b/jdk/src/share/classes/sun/security/provider/certpath/DistributionPointFetcher.java
index ecf609b..7f275fb 100644
--- a/jdk/src/share/classes/sun/security/provider/certpath/DistributionPointFetcher.java
+++ b/jdk/src/share/classes/sun/security/provider/certpath/DistributionPointFetcher.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -751,9 +751,7 @@
* issued. [section 5.2.1, RFC 2459]
*/
AuthorityKeyIdentifierExtension crlAKID = crl.getAuthKeyIdExtension();
- if (crlAKID != null) {
- issuerSelector.parseAuthorityKeyIdentifierExtension(crlAKID);
- }
+ issuerSelector.setSkiAndSerialNumber(crlAKID);
matched = issuerSelector.match(cert);
diff --git a/jdk/src/share/classes/sun/security/provider/certpath/ForwardBuilder.java b/jdk/src/share/classes/sun/security/provider/certpath/ForwardBuilder.java
index 9523e9c..16892c4 100644
--- a/jdk/src/share/classes/sun/security/provider/certpath/ForwardBuilder.java
+++ b/jdk/src/share/classes/sun/security/provider/certpath/ForwardBuilder.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -269,7 +269,7 @@
*/
AuthorityKeyIdentifierExtension akidext =
currentState.cert.getAuthorityKeyIdentifierExtension();
- caSelector.parseAuthorityKeyIdentifierExtension(akidext);
+ caSelector.setSkiAndSerialNumber(akidext);
/*
* check the validity period
diff --git a/jdk/src/share/classes/sun/security/provider/certpath/PKIXCertPathValidator.java b/jdk/src/share/classes/sun/security/provider/certpath/PKIXCertPathValidator.java
index 728bc19..c4eaff3 100644
--- a/jdk/src/share/classes/sun/security/provider/certpath/PKIXCertPathValidator.java
+++ b/jdk/src/share/classes/sun/security/provider/certpath/PKIXCertPathValidator.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -103,7 +103,7 @@
*/
try {
X509CertImpl firstCertImpl = X509CertImpl.toImpl(firstCert);
- selector.parseAuthorityKeyIdentifierExtension(
+ selector.setSkiAndSerialNumber(
firstCertImpl.getAuthorityKeyIdentifierExtension());
} catch (CertificateException | IOException e) {
// ignore
diff --git a/jdk/src/share/classes/sun/security/provider/certpath/RevocationChecker.java b/jdk/src/share/classes/sun/security/provider/certpath/RevocationChecker.java
index 19b41f6..f38e7dc 100644
--- a/jdk/src/share/classes/sun/security/provider/certpath/RevocationChecker.java
+++ b/jdk/src/share/classes/sun/security/provider/certpath/RevocationChecker.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -1035,6 +1035,9 @@
boolean signFlag = true;
List<? extends Certificate> cpList =
cpbr.getCertPath().getCertificates();
+ if (cpList.isEmpty()) {
+ return;
+ }
try {
for (int i = cpList.size()-1; i >= 0; i-- ) {
X509Certificate cert = (X509Certificate)cpList.get(i);
diff --git a/jdk/src/share/classes/sun/swing/SwingUtilities2.java b/jdk/src/share/classes/sun/swing/SwingUtilities2.java
index 8b79b5e..f36d433 100644
--- a/jdk/src/share/classes/sun/swing/SwingUtilities2.java
+++ b/jdk/src/share/classes/sun/swing/SwingUtilities2.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -81,6 +81,9 @@
public static final Object LAF_STATE_KEY =
new StringBuffer("LookAndFeel State");
+ public static final Object MENU_SELECTION_MANAGER_LISTENER_KEY =
+ new StringBuffer("MenuSelectionManager listener key");
+
// Maintain a cache of CACHE_SIZE fonts and the left side bearing
// of the characters falling into the range MIN_CHAR_INDEX to
// MAX_CHAR_INDEX. The values in fontCache are created as needed.
diff --git a/jdk/src/share/classes/sun/tools/jconsole/Messages.java b/jdk/src/share/classes/sun/tools/jconsole/Messages.java
index 0a3a63e8..1cbbb76 100644
--- a/jdk/src/share/classes/sun/tools/jconsole/Messages.java
+++ b/jdk/src/share/classes/sun/tools/jconsole/Messages.java
@@ -36,7 +36,7 @@
Resources.initializeMessages(Messages.class, BUNDLE_NAME);
}
// TODO:
- // The names of some of the constants below looks strange.
+ // The names of some of the constants below look strange.
// That's because they were generated programmatically
// from the messages. They should be cleaned up,
// ___ should be removed etc.
@@ -269,6 +269,7 @@
public static String SUMMARY_TAB_TAB_NAME;
public static String SUMMARY_TAB_VM_VERSION;
public static String THREADS;
+ public static String THREAD_TAB_INFO_LABEL_FORMAT;
public static String THREAD_TAB_THREAD_INFO_ACCESSIBLE_NAME;
public static String THREAD_TAB_THREAD_PLOTTER_ACCESSIBLE_NAME;
public static String THREAD_TAB_INITIAL_STACK_TRACE_MESSAGE;
diff --git a/jdk/src/share/classes/sun/tools/jconsole/SummaryTab.java b/jdk/src/share/classes/sun/tools/jconsole/SummaryTab.java
index 3d94a37..79e1743 100644
--- a/jdk/src/share/classes/sun/tools/jconsole/SummaryTab.java
+++ b/jdk/src/share/classes/sun/tools/jconsole/SummaryTab.java
@@ -213,8 +213,8 @@
String[] strings2 = formatKByteStrings(u.getCommitted());
append(Messages.COMMITTED_MEMORY, strings2[0]);
append(Messages.SUMMARY_TAB_PENDING_FINALIZATION_LABEL,
- Messages.SUMMARY_TAB_PENDING_FINALIZATION_VALUE,
- memoryBean.getObjectPendingFinalizationCount());
+ Resources.format(Messages.SUMMARY_TAB_PENDING_FINALIZATION_VALUE,
+ memoryBean.getObjectPendingFinalizationCount()));
append(endTable);
append(newTable);
diff --git a/jdk/src/share/classes/sun/tools/jconsole/ThreadTab.java b/jdk/src/share/classes/sun/tools/jconsole/ThreadTab.java
index 9a15100..d629cb3 100644
--- a/jdk/src/share/classes/sun/tools/jconsole/ThreadTab.java
+++ b/jdk/src/share/classes/sun/tools/jconsole/ThreadTab.java
@@ -66,9 +66,6 @@
private static final Border thinEmptyBorder = new EmptyBorder(2, 2, 2, 2);
- private static final String infoLabelFormat = "ThreadTab.infoLabelFormat";
-
-
/*
Hierarchy of panels and layouts for this tab:
@@ -692,7 +689,7 @@
private void updateThreadsInfo(long tlCount, long tpCount, long ttCount, long timeStamp) {
getPlotter().addValues(timeStamp, tlCount);
- getInfoLabel().setText(Resources.format(infoLabelFormat, tlCount, tpCount, ttCount));
+ getInfoLabel().setText(Resources.format(Messages.THREAD_TAB_INFO_LABEL_FORMAT, tlCount, tpCount, ttCount));
}
}
}
diff --git a/jdk/src/share/classes/sun/tools/jconsole/resources/messages.properties b/jdk/src/share/classes/sun/tools/jconsole/resources/messages.properties
index 8326217..29c8a2d 100644
--- a/jdk/src/share/classes/sun/tools/jconsole/resources/messages.properties
+++ b/jdk/src/share/classes/sun/tools/jconsole/resources/messages.properties
@@ -227,6 +227,7 @@
SUMMARY_TAB_TAB_NAME=VM Summary
SUMMARY_TAB_VM_VERSION={0} version {1}
THREADS=Threads
+THREAD_TAB_INFO_LABEL_FORMAT=<html>Live: {0} Peak: {1} Total: {2}</html>
THREAD_TAB_THREAD_INFO_ACCESSIBLE_NAME=Thread Information
THREAD_TAB_THREAD_PLOTTER_ACCESSIBLE_NAME=Chart for number of threads.
THREAD_TAB_INITIAL_STACK_TRACE_MESSAGE=[No thread selected]
@@ -249,7 +250,7 @@
UNREGISTER=Unregister
UPTIME=Uptime
USAGE_THRESHOLD=Usage Threshold
-REMOTE_TF_USAGE=<b>Usage</b>: <hostname>:<port> OR service:jmx:<protocol>:<sap>
+REMOTE_TF_USAGE=<b>Usage</b>: &<hostname&>:&<port&> OR service:jmx:&<protocol&>:&<sap&>
USED=Used
USERNAME_COLON_=&Username:
USERNAME_ACCESSIBLE_NAME=User Name
diff --git a/jdk/src/share/classes/sun/tools/jconsole/resources/messages_ja.properties b/jdk/src/share/classes/sun/tools/jconsole/resources/messages_ja.properties
index 96ad8758..36cda09 100644
--- a/jdk/src/share/classes/sun/tools/jconsole/resources/messages_ja.properties
+++ b/jdk/src/share/classes/sun/tools/jconsole/resources/messages_ja.properties
@@ -227,6 +227,7 @@
SUMMARY_TAB_TAB_NAME=VM\u30B5\u30DE\u30EA\u30FC
SUMMARY_TAB_VM_VERSION={0}\u30D0\u30FC\u30B8\u30E7\u30F3{1}
THREADS=\u30B9\u30EC\u30C3\u30C9
+THREAD_TAB_INFO_LABEL_FORMAT=<html>\u5B9F\u884C\u4E2D: {0} \u30D4\u30FC\u30AF: {1} \u5408\u8A08: {2}</html>
THREAD_TAB_THREAD_INFO_ACCESSIBLE_NAME=\u30B9\u30EC\u30C3\u30C9\u60C5\u5831
THREAD_TAB_THREAD_PLOTTER_ACCESSIBLE_NAME=\u30B9\u30EC\u30C3\u30C9\u6570\u306E\u30C1\u30E3\u30FC\u30C8\u3002
THREAD_TAB_INITIAL_STACK_TRACE_MESSAGE=[\u30B9\u30EC\u30C3\u30C9\u304C\u9078\u629E\u3055\u308C\u3066\u3044\u307E\u305B\u3093]
@@ -249,7 +250,7 @@
UNREGISTER=\u767B\u9332\u89E3\u9664
UPTIME=\u7A3C\u50CD\u6642\u9593
USAGE_THRESHOLD=\u4F7F\u7528\u3057\u304D\u3044\u5024
-REMOTE_TF_USAGE=<b>\u4F7F\u7528\u65B9\u6CD5</b>: <hostname>:<port>\u307E\u305F\u306Fservice:jmx:<protocol>:<sap>
+REMOTE_TF_USAGE=<b>\u4F7F\u7528\u65B9\u6CD5</b>: &<hostname&>:&<port&>\u307E\u305F\u306Fservice:jmx:&<protocol&>:&<sap&>
USED=\u4F7F\u7528\u6E08
USERNAME_COLON_=\u30E6\u30FC\u30B6\u30FC\u540D(&U):
USERNAME_ACCESSIBLE_NAME=\u30E6\u30FC\u30B6\u30FC\u540D
diff --git a/jdk/src/share/classes/sun/tools/jconsole/resources/messages_zh_CN.properties b/jdk/src/share/classes/sun/tools/jconsole/resources/messages_zh_CN.properties
index eff5155..89e725c 100644
--- a/jdk/src/share/classes/sun/tools/jconsole/resources/messages_zh_CN.properties
+++ b/jdk/src/share/classes/sun/tools/jconsole/resources/messages_zh_CN.properties
@@ -227,6 +227,7 @@
SUMMARY_TAB_TAB_NAME=VM \u6982\u8981
SUMMARY_TAB_VM_VERSION={0}\u7248\u672C {1}
THREADS=\u7EBF\u7A0B
+THREAD_TAB_INFO_LABEL_FORMAT=<html>\u6D3B\u52A8: {0} \u5CF0\u503C: {1} \u603B\u8BA1: {2}</html>
THREAD_TAB_THREAD_INFO_ACCESSIBLE_NAME=\u7EBF\u7A0B\u4FE1\u606F
THREAD_TAB_THREAD_PLOTTER_ACCESSIBLE_NAME=\u8868\u793A\u7EBF\u7A0B\u6570\u7684\u56FE\u8868\u3002
THREAD_TAB_INITIAL_STACK_TRACE_MESSAGE=[\u672A\u9009\u62E9\u7EBF\u7A0B]
@@ -249,7 +250,7 @@
UNREGISTER=\u6CE8\u9500
UPTIME=\u8FD0\u884C\u65F6\u95F4
USAGE_THRESHOLD=\u7528\u6CD5\u9608\u503C
-REMOTE_TF_USAGE=<b>\u7528\u6CD5</b>: <hostname>:<port> \u6216 service:jmx:<protocol>:<sap>
+REMOTE_TF_USAGE=<b>\u7528\u6CD5</b>: &<hostname&>:&<port&> \u6216 service:jmx:&<protocol&>:&<sap&>
USED=\u5DF2\u7528
USERNAME_COLON_=\u7528\u6237\u540D(&U):
USERNAME_ACCESSIBLE_NAME=\u7528\u6237\u540D
diff --git a/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java b/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java
index 876c1e3..2aaa1e7 100644
--- a/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java
+++ b/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -578,7 +578,7 @@
{"Asia/Almaty", new String[] {"Alma-Ata Time", "ALMT",
"Alma-Ata Summer Time", "ALMST",
"Alma-Ata Time", "ALMT"}},
- {"Asia/Amman", ARAST},
+ {"Asia/Amman", EET},
{"Asia/Anadyr", new String[] {"Anadyr Time", "ANAT",
"Anadyr Summer Time", "ANAST",
"Anadyr Time", "ANAT"}},
diff --git a/jdk/src/share/classes/sun/util/resources/TimeZoneNamesBundle.java b/jdk/src/share/classes/sun/util/resources/TimeZoneNamesBundle.java
index ab2d10a..6dcc1ee 100644
--- a/jdk/src/share/classes/sun/util/resources/TimeZoneNamesBundle.java
+++ b/jdk/src/share/classes/sun/util/resources/TimeZoneNamesBundle.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
diff --git a/jdk/src/share/classes/sun/util/resources/de/TimeZoneNames_de.java b/jdk/src/share/classes/sun/util/resources/de/TimeZoneNames_de.java
index 0848ceb..4d25bce 100644
--- a/jdk/src/share/classes/sun/util/resources/de/TimeZoneNames_de.java
+++ b/jdk/src/share/classes/sun/util/resources/de/TimeZoneNames_de.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -578,7 +578,7 @@
{"Asia/Almaty", new String[] {"Alma Ata Zeit", "ALMT",
"Alma-Ata Sommerzeit", "ALMST",
"Alma Ata Zeit", "ALMT"}},
- {"Asia/Amman", ARAST},
+ {"Asia/Amman", EET},
{"Asia/Anadyr", new String[] {"Anadyr Zeit", "ANAT",
"Anadyr Sommerzeit", "ANAST",
"Anadyr Zeit", "ANAT"}},
diff --git a/jdk/src/share/classes/sun/util/resources/es/TimeZoneNames_es.java b/jdk/src/share/classes/sun/util/resources/es/TimeZoneNames_es.java
index a20ba69..07d7732 100644
--- a/jdk/src/share/classes/sun/util/resources/es/TimeZoneNames_es.java
+++ b/jdk/src/share/classes/sun/util/resources/es/TimeZoneNames_es.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -578,7 +578,7 @@
{"Asia/Almaty", new String[] {"Hora de Alma-Ata", "ALMT",
"Hora de verano de Alma-Ata", "ALMST",
"Hora de Alma-Ata", "ALMT"}},
- {"Asia/Amman", ARAST},
+ {"Asia/Amman", EET},
{"Asia/Anadyr", new String[] {"Hora de Anadyr", "ANAT",
"Hora de verano de Anadyr", "ANAST",
"Hora de Anadyr", "ANAT"}},
diff --git a/jdk/src/share/classes/sun/util/resources/fr/TimeZoneNames_fr.java b/jdk/src/share/classes/sun/util/resources/fr/TimeZoneNames_fr.java
index 6b250b9..d15b905 100644
--- a/jdk/src/share/classes/sun/util/resources/fr/TimeZoneNames_fr.java
+++ b/jdk/src/share/classes/sun/util/resources/fr/TimeZoneNames_fr.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -578,7 +578,7 @@
{"Asia/Almaty", new String[] {"Heure d'Alma-Ata", "ALMT",
"Heure d'\u00e9t\u00e9 d'Alma-Ata", "ALMST",
"Heure d'Alma-Ata", "ALMT"}},
- {"Asia/Amman", ARAST},
+ {"Asia/Amman", EET},
{"Asia/Anadyr", new String[] {"Heure d'Anadyr", "ANAT",
"Heure d'\u00e9t\u00e9 d'Anadyr", "ANAST",
"Heure d'Anadyr", "ANAT"}},
diff --git a/jdk/src/share/classes/sun/util/resources/it/TimeZoneNames_it.java b/jdk/src/share/classes/sun/util/resources/it/TimeZoneNames_it.java
index 95caa4a..a07be9a 100644
--- a/jdk/src/share/classes/sun/util/resources/it/TimeZoneNames_it.java
+++ b/jdk/src/share/classes/sun/util/resources/it/TimeZoneNames_it.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -578,7 +578,7 @@
{"Asia/Almaty", new String[] {"Ora di Alma-Ata", "ALMT",
"Ora estiva di Alma-Ata", "ALMST",
"Ora di Alma-Ata", "ALMT"}},
- {"Asia/Amman", ARAST},
+ {"Asia/Amman", EET},
{"Asia/Anadyr", new String[] {"Ora di Anadyr", "ANAT",
"Ora estiva di Anadyr", "ANAST",
"Ora di Anadyr", "ANAT"}},
diff --git a/jdk/src/share/classes/sun/util/resources/ja/TimeZoneNames_ja.java b/jdk/src/share/classes/sun/util/resources/ja/TimeZoneNames_ja.java
index 277d538..5a0f5e70 100644
--- a/jdk/src/share/classes/sun/util/resources/ja/TimeZoneNames_ja.java
+++ b/jdk/src/share/classes/sun/util/resources/ja/TimeZoneNames_ja.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -578,7 +578,7 @@
{"Asia/Almaty", new String[] {"\u30a2\u30eb\u30de\u30a2\u30bf\u6642\u9593", "ALMT",
"\u30a2\u30eb\u30de\u30a2\u30bf\u590f\u6642\u9593", "ALMST",
"\u30A2\u30EB\u30DE\u30A2\u30BF\u6642\u9593", "ALMT"}},
- {"Asia/Amman", ARAST},
+ {"Asia/Amman", EET},
{"Asia/Anadyr", new String[] {"\u30a2\u30ca\u30c9\u30a5\u30a4\u30ea\u6642\u9593", "ANAT",
"\u30a2\u30ca\u30c9\u30a5\u30a4\u30ea\u590f\u6642\u9593", "ANAST",
"\u30A2\u30CA\u30C7\u30A3\u30EA\u6642\u9593", "ANAT"}},
diff --git a/jdk/src/share/classes/sun/util/resources/ko/TimeZoneNames_ko.java b/jdk/src/share/classes/sun/util/resources/ko/TimeZoneNames_ko.java
index 4d28bf3..4d9f395 100644
--- a/jdk/src/share/classes/sun/util/resources/ko/TimeZoneNames_ko.java
+++ b/jdk/src/share/classes/sun/util/resources/ko/TimeZoneNames_ko.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -578,7 +578,7 @@
{"Asia/Almaty", new String[] {"\uc54c\ub9c8\uc544\ud0c0 \uc2dc\uac04", "ALMT",
"\uc54c\ub9c8\uc544\ud0c0 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ALMST",
"\uC54C\uB9C8\uC544\uD0C0 \uD45C\uC900\uC2DC", "ALMT"}},
- {"Asia/Amman", ARAST},
+ {"Asia/Amman", EET},
{"Asia/Anadyr", new String[] {"\uc544\ub098\ub514\ub974 \uc2dc\uac04", "ANAT",
"\uc544\ub098\ub514\ub974 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ANAST",
"\uC544\uB098\uB514\uB9AC \uD45C\uC900\uC2DC", "ANAT"}},
diff --git a/jdk/src/share/classes/sun/util/resources/pt/TimeZoneNames_pt_BR.java b/jdk/src/share/classes/sun/util/resources/pt/TimeZoneNames_pt_BR.java
index 0bebcd9..07b13ae 100644
--- a/jdk/src/share/classes/sun/util/resources/pt/TimeZoneNames_pt_BR.java
+++ b/jdk/src/share/classes/sun/util/resources/pt/TimeZoneNames_pt_BR.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -578,7 +578,7 @@
{"Asia/Almaty", new String[] {"Fuso hor\u00e1rio de Alma-Ata", "ALMT",
"Fuso hor\u00e1rio de ver\u00e3o de Alma-Ata", "ALMST",
"Hor\u00E1rio de Alma-Ata", "ALMT"}},
- {"Asia/Amman", ARAST},
+ {"Asia/Amman", EET},
{"Asia/Anadyr", new String[] {"Fuso hor\u00e1rio de Anadyr", "ANAT",
"Fuso hor\u00e1rio de ver\u00e3o de Anadyr", "ANAST",
"Hor\u00E1rio de Anadyr", "ANAT"}},
diff --git a/jdk/src/share/classes/sun/util/resources/sv/TimeZoneNames_sv.java b/jdk/src/share/classes/sun/util/resources/sv/TimeZoneNames_sv.java
index 35dd226..5dfb716 100644
--- a/jdk/src/share/classes/sun/util/resources/sv/TimeZoneNames_sv.java
+++ b/jdk/src/share/classes/sun/util/resources/sv/TimeZoneNames_sv.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -578,7 +578,7 @@
{"Asia/Almaty", new String[] {"Alma-Ata, normaltid", "ALMT",
"Alma-Ata, sommartid", "ALMST",
"Alma-Ata-tid", "ALMT"}},
- {"Asia/Amman", ARAST},
+ {"Asia/Amman", EET},
{"Asia/Anadyr", new String[] {"Anadyr, normaltid", "ANAT",
"Anadyr, sommartid", "ANAST",
"Anadyr-tid", "ANAT"}},
diff --git a/jdk/src/share/classes/sun/util/resources/zh/TimeZoneNames_zh_CN.java b/jdk/src/share/classes/sun/util/resources/zh/TimeZoneNames_zh_CN.java
index 170edc9..62a946b 100644
--- a/jdk/src/share/classes/sun/util/resources/zh/TimeZoneNames_zh_CN.java
+++ b/jdk/src/share/classes/sun/util/resources/zh/TimeZoneNames_zh_CN.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -578,7 +578,7 @@
{"Asia/Almaty", new String[] {"Alma-Ata \u65f6\u95f4", "ALMT",
"Alma-Ata \u590f\u4ee4\u65f6", "ALMST",
"Alma-Ata \u65F6\u95F4", "ALMT"}},
- {"Asia/Amman", ARAST},
+ {"Asia/Amman", EET},
{"Asia/Anadyr", new String[] {"\u963f\u90a3\u5e95\u6cb3\u65f6\u95f4", "ANAT",
"\u963f\u90a3\u5e95\u6cb3\u590f\u4ee4\u65f6", "ANAST",
"\u963F\u90A3\u5E95\u6CB3\u65F6\u95F4", "ANAT"}},
diff --git a/jdk/src/share/classes/sun/util/resources/zh/TimeZoneNames_zh_TW.java b/jdk/src/share/classes/sun/util/resources/zh/TimeZoneNames_zh_TW.java
index e5e272f..f91da7a 100644
--- a/jdk/src/share/classes/sun/util/resources/zh/TimeZoneNames_zh_TW.java
+++ b/jdk/src/share/classes/sun/util/resources/zh/TimeZoneNames_zh_TW.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -578,7 +578,7 @@
{"Asia/Almaty", new String[] {"Alma-Ata \u6642\u9593", "ALMT",
"Alma-Ata \u590f\u4ee4\u6642\u9593", "ALMST",
"\u963F\u62C9\u6728\u5716\u6642\u9593", "ALMT"}},
- {"Asia/Amman", ARAST},
+ {"Asia/Amman", EET},
{"Asia/Anadyr", new String[] {"\u963f\u90a3\u5e95\u6cb3\u6642\u9593", "ANAT",
"\u963f\u90a3\u5e95\u6cb3\u590f\u4ee4\u6642\u9593", "ANAST",
"\u963F\u90A3\u5E95\u6CB3\u6642\u9593", "ANAT"}},
diff --git a/jdk/src/share/instrument/Reentrancy.c b/jdk/src/share/instrument/Reentrancy.c
index 58cbfdd..0b526c1 100644
--- a/jdk/src/share/instrument/Reentrancy.c
+++ b/jdk/src/share/instrument/Reentrancy.c
@@ -130,6 +130,7 @@
error = confirmingTLSSet ( jvmtienv,
thread,
JPLIS_CURRENTLY_INSIDE_TOKEN);
+ check_phase_ret_false(error);
jplis_assert(error == JVMTI_ERROR_NONE);
if ( error != JVMTI_ERROR_NONE ) {
result = JNI_FALSE;
@@ -158,6 +159,7 @@
error = confirmingTLSSet( jvmtienv,
thread,
JPLIS_CURRENTLY_OUTSIDE_TOKEN);
+ check_phase_ret(error);
jplis_assert(error == JVMTI_ERROR_NONE);
}
diff --git a/jdk/src/share/native/com/sun/java/util/jar/pack/coding.cpp b/jdk/src/share/native/com/sun/java/util/jar/pack/coding.cpp
index 6cedfd8..66ecc1b 100644
--- a/jdk/src/share/native/com/sun/java/util/jar/pack/coding.cpp
+++ b/jdk/src/share/native/com/sun/java/util/jar/pack/coding.cpp
@@ -32,6 +32,8 @@
#include <stdlib.h>
#include <stdarg.h>
+#include "jni_util.h"
+
#include "defines.h"
#include "bytes.h"
#include "utils.h"
@@ -147,7 +149,7 @@
break;
}
coding* ptr = NEW(coding, 1);
- CHECK_NULL_0(ptr);
+ CHECK_NULL_RETURN(ptr, 0);
coding* c = ptr->initFrom(spec);
if (c == null) {
mtrace('f', ptr, 0);
diff --git a/jdk/src/share/native/com/sun/java/util/jar/pack/defines.h b/jdk/src/share/native/com/sun/java/util/jar/pack/defines.h
index b202892..644b9ca 100644
--- a/jdk/src/share/native/com/sun/java/util/jar/pack/defines.h
+++ b/jdk/src/share/native/com/sun/java/util/jar/pack/defines.h
@@ -158,10 +158,6 @@
#define CHECK_(y) _CHECK_DO(aborting(), return y)
#define CHECK_0 _CHECK_DO(aborting(), return 0)
-#define CHECK_NULL(p) _CHECK_DO((p)==null, return)
-#define CHECK_NULL_(y,p) _CHECK_DO((p)==null, return y)
-#define CHECK_NULL_0(p) _CHECK_DO((p)==null, return 0)
-
#define CHECK_COUNT(t) if (t < 0){abort("bad value count");} CHECK
#define STR_TRUE "true"
diff --git a/jdk/src/share/native/com/sun/java/util/jar/pack/zip.cpp b/jdk/src/share/native/com/sun/java/util/jar/pack/zip.cpp
index 2544091..786a832 100644
--- a/jdk/src/share/native/com/sun/java/util/jar/pack/zip.cpp
+++ b/jdk/src/share/native/com/sun/java/util/jar/pack/zip.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -73,8 +73,9 @@
SWAP_BYTES(a & 0xFFFF)
#define GET_INT_HI(a) \
- SWAP_BYTES((a >> 16) & 0xFFFF);
+ SWAP_BYTES((a >> 16) & 0xFFFF)
+static const ushort jarmagic[2] = { SWAP_BYTES(0xCAFE), 0 };
void jar::init(unpacker* u_) {
BYTES_OF(*this).clear();
@@ -105,13 +106,14 @@
header[0] = (ushort)SWAP_BYTES(0x4B50);
header[1] = (ushort)SWAP_BYTES(0x0201);
- header[2] = (ushort)SWAP_BYTES(0xA);
+ header[2] = (ushort)SWAP_BYTES(( store ) ? 0x0A : 0x14);
// required version
- header[3] = (ushort)SWAP_BYTES(0xA);
+ header[3] = (ushort)SWAP_BYTES(( store ) ? 0x0A : 0x14);
- // flags 02 = maximum sub-compression flag
- header[4] = ( store ) ? 0x0 : SWAP_BYTES(0x2);
+ // Flags - UTF-8 compression and separating crc and sizes
+ // into separate headers for deflated file
+ header[4] = ( store ) ? SWAP_BYTES(0x0800) : 0x0808;
// Compression method 8=deflate.
header[5] = ( store ) ? 0x0 : SWAP_BYTES(0x08);
@@ -135,7 +137,8 @@
// Filename length
header[14] = (ushort)SWAP_BYTES(fname_length);
// So called "extra field" length.
- header[15] = 0;
+ // If it's the first record we must add JAR magic sequence
+ header[15] = ( central_directory_count ) ? 0 : (ushort)SWAP_BYTES(4);
// So called "comment" length.
header[16] = 0;
// Disk number start
@@ -155,6 +158,11 @@
// Copy the fname to the header.
central_directory.append(fname, fname_length);
+ // Add jar magic for the first record
+ if (central_directory_count == 0) {
+ central_directory.append((void *)jarmagic, sizeof(jarmagic));
+ }
+
central_directory_count++;
}
@@ -170,10 +178,10 @@
header[1] = (ushort)SWAP_BYTES(0x0403);
// Version
- header[2] = (ushort)SWAP_BYTES(0xA);
+ header[2] = (ushort)SWAP_BYTES(( store ) ? 0x0A : 0x14);
- // flags 02 = maximum sub-compression flag
- header[3] = ( store ) ? 0x0 : SWAP_BYTES(0x2);
+ // General purpose flags - same as in the Central Directory
+ header[3] = ( store ) ? SWAP_BYTES(0x0800) : 0x0808;
// Compression method = deflate
header[4] = ( store ) ? 0x0 : SWAP_BYTES(0x08);
@@ -182,28 +190,51 @@
header[5] = (ushort)GET_INT_LO(dostime);
header[6] = (ushort)GET_INT_HI(dostime);
- // CRC
- header[7] = (ushort)GET_INT_LO(crc);
- header[8] = (ushort)GET_INT_HI(crc);
+ // CRC, 0 if deflated, will come separately in extra header
+ header[7] = ( store ) ? (ushort)GET_INT_LO(crc) : 0;
+ header[8] = ( store ) ? (ushort)GET_INT_HI(crc) : 0;
- // Compressed length:
- header[9] = (ushort)GET_INT_LO(clen);
- header[10] = (ushort)GET_INT_HI(clen);
+ // Compressed length, 0 if deflated
+ header[9] = ( store ) ? (ushort)GET_INT_LO(clen) : 0;
+ header[10] = ( store ) ? (ushort)GET_INT_HI(clen) : 0;
- // Uncompressed length.
- header[11] = (ushort)GET_INT_LO(len);
- header[12] = (ushort)GET_INT_HI(len);
+ // Uncompressed length, 0 if deflated
+ header[11] = ( store ) ? (ushort)GET_INT_LO(len) : 0;
+ header[12] = ( store ) ? (ushort)GET_INT_HI(len) : 0;
// Filename length
header[13] = (ushort)SWAP_BYTES(fname_length);
// So called "extra field" length.
- header[14] = 0;
+ header[14] = ( central_directory_count - 1 ) ? 0 : (ushort)SWAP_BYTES(4);
// Write the LOC header to the output file.
write_data(header, (int)sizeof(header));
// Copy the fname to the header.
write_data((char*)fname, (int)fname_length);
+
+ if (central_directory_count == 1) {
+ // Write JAR magic sequence
+ write_data((void *)jarmagic, (int)sizeof(jarmagic));
+ }
+}
+
+void jar::write_jar_extra(int len, int clen, uint crc) {
+ ushort header[8];
+ // Extra field signature
+ header[0] = (ushort)SWAP_BYTES(0x4B50);
+ header[1] = (ushort)SWAP_BYTES(0x0807);
+ // CRC
+ header[2] = (ushort)GET_INT_LO(crc);
+ header[3] = (ushort)GET_INT_HI(crc);
+ // Compressed length
+ header[4] = (ushort)GET_INT_LO(clen);
+ header[5] = (ushort)GET_INT_HI(clen);
+ // Uncompressed length
+ header[6] = (ushort)GET_INT_LO(len);
+ header[7] = (ushort)GET_INT_HI(len);
+
+ write_data(header, sizeof(header));
}
static const char marker_comment[] = ZIP_ARCHIVE_MARKER_COMMENT;
@@ -212,6 +243,7 @@
bytes mc; mc.set(marker_comment);
ushort header[11];
+ ushort header64[38];
// Create the End of Central Directory structure.
header[0] = (ushort)SWAP_BYTES(0x4B50);
@@ -220,8 +252,8 @@
header[2] = 0;
header[3] = 0;
// Number of entries in central directory.
- header[4] = (ushort)SWAP_BYTES(central_directory_count);
- header[5] = (ushort)SWAP_BYTES(central_directory_count);
+ header[4] = ( central_directory_count >= 0xffff ) ? 0xffff : (ushort)SWAP_BYTES(central_directory_count);
+ header[5] = ( central_directory_count >= 0xffff ) ? 0xffff : (ushort)SWAP_BYTES(central_directory_count);
// Size of the central directory}
header[6] = (ushort)GET_INT_LO((int)central_directory.size());
header[7] = (ushort)GET_INT_HI((int)central_directory.size());
@@ -229,12 +261,71 @@
header[8] = (ushort)GET_INT_LO(output_file_offset);
header[9] = (ushort)GET_INT_HI(output_file_offset);
// zipfile comment length;
- header [10] = (ushort)SWAP_BYTES((int)mc.len);
+ header[10] = (ushort)SWAP_BYTES((int)mc.len);
// Write the central directory.
PRINTCR((2, "Central directory at %d\n", output_file_offset));
write_data(central_directory.b);
+ // If number of records exceeds the 0xFFFF we need to prepend extended
+ // Zip64 End of Central Directory record and its locator to the old
+ // style ECD record
+ if (central_directory_count > 0xFFFF) {
+ // Zip64 END signature
+ header64[0] = (ushort)SWAP_BYTES(0x4B50);
+ header64[1] = (ushort)0x0606;
+ // Size of header (long)
+ header64[2] = (ushort)SWAP_BYTES(44);;
+ header64[3] = 0;
+ header64[4] = 0;
+ header64[5] = 0;
+ // Version produced and required (short)
+ header64[6] = (ushort)SWAP_BYTES(45);
+ header64[7] = (ushort)SWAP_BYTES(45);
+ // Current disk number (int)
+ header64[8] = 0;
+ header64[9] = 0;
+ // Central directory start disk (int)
+ header64[10] = 0;
+ header64[11] = 0;
+ // Count of records on disk (long)
+ header64[12] = (ushort)GET_INT_LO(central_directory_count);
+ header64[13] = (ushort)GET_INT_HI(central_directory_count);
+ header64[14] = 0;
+ header64[15] = 0;
+ // Count of records totally (long)
+ header64[16] = (ushort)GET_INT_LO(central_directory_count);
+ header64[17] = (ushort)GET_INT_HI(central_directory_count);
+ header64[18] = 0;
+ header64[19] = 0;
+ // Length of the central directory (long)
+ header64[20] = header[6];
+ header64[21] = header[7];
+ header64[22] = 0;
+ header64[23] = 0;
+ // Offset of central directory (long)
+ header64[24] = header[8];
+ header64[25] = header[9];
+ header64[26] = 0;
+ header64[27] = 0;
+ // Zip64 end of central directory locator
+ // Locator signature
+ header64[28] = (ushort)SWAP_BYTES(0x4B50);
+ header64[29] = (ushort)SWAP_BYTES(0x0706);
+ // Start disk number (int)
+ header64[30] = 0;
+ header64[31] = 0;
+ // Offset of zip64 END record (long)
+ header64[32] = (ushort)GET_INT_LO(output_file_offset);
+ header64[33] = (ushort)GET_INT_HI(output_file_offset);
+ header64[34] = 0;
+ header64[35] = 0;
+ // Total number of disks (int)
+ header64[36] = (ushort)SWAP_BYTES(1);
+ header64[37] = 0;
+ write_data(header64, (int)sizeof(header64));
+ }
+
// Write the End of Central Directory structure.
PRINTCR((2, "end-of-directory at %d\n", output_file_offset));
write_data(header, (int)sizeof(header));
@@ -286,6 +377,8 @@
if (deflate) {
write_data(deflated.b);
+ // Write deflated information in extra header
+ write_jar_extra(len, clen, crc);
} else {
write_data(head);
write_data(tail);
@@ -368,7 +461,7 @@
// NOTE: the window size should always be -MAX_WBITS normally -15.
// unzip/zipup.c and java/Deflater.c
- int error = deflateInit2(&zs, Z_BEST_COMPRESSION, Z_DEFLATED,
+ int error = deflateInit2(&zs, Z_DEFAULT_COMPRESSION, Z_DEFLATED,
-MAX_WBITS, 8, Z_DEFAULT_STRATEGY);
if (error != Z_OK) {
switch (error) {
@@ -414,7 +507,8 @@
error = deflate(&zs, Z_FINISH);
}
if (error == Z_STREAM_END) {
- if (len > (int)zs.total_out ) {
+ if ((int)zs.total_out > 0) {
+ // Even if compressed size is bigger than uncompressed, write it
PRINTCR((2, "deflate compressed data %d -> %d\n", len, zs.total_out));
deflated.b.len = zs.total_out;
deflateEnd(&zs);
diff --git a/jdk/src/share/native/com/sun/java/util/jar/pack/zip.h b/jdk/src/share/native/com/sun/java/util/jar/pack/zip.h
index d7c6b34..14ffc9d 100644
--- a/jdk/src/share/native/com/sun/java/util/jar/pack/zip.h
+++ b/jdk/src/share/native/com/sun/java/util/jar/pack/zip.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -40,7 +40,7 @@
// Private members
fillbytes central_directory;
- ushort central_directory_count;
+ uint central_directory_count;
uint output_file_offset;
fillbytes deflated; // temporary buffer
@@ -74,6 +74,7 @@
int len, int clen, uLong crc);
void write_jar_header(const char* fname, bool store, int modtime,
int len, int clen, unsigned int crc);
+ void write_jar_extra(int len, int clen, unsigned int crc);
void write_central_directory();
uLong dostime(int y, int n, int d, int h, int m, int s);
uLong get_dostime(int modtime);
diff --git a/jdk/src/share/native/common/jni_util.h b/jdk/src/share/native/common/jni_util.h
index 4180756..0242d71 100644
--- a/jdk/src/share/native/common/jni_util.h
+++ b/jdk/src/share/native/common/jni_util.h
@@ -278,7 +278,54 @@
#define IS_NULL(obj) ((obj) == NULL)
#define JNU_IsNull(env,obj) ((obj) == NULL)
+/************************************************************************
+ * Miscellaneous utilities used by the class libraries to return from
+ * a function if a value is NULL or an exception is pending.
+ */
+#define CHECK_NULL(x) \
+ do { \
+ if ((x) == NULL) { \
+ return; \
+ } \
+ } while (0) \
+
+#define CHECK_NULL_RETURN(x, y) \
+ do { \
+ if ((x) == NULL) { \
+ return (y); \
+ } \
+ } while (0) \
+
+#ifdef __cplusplus
+#define JNU_CHECK_EXCEPTION(env) \
+ do { \
+ if ((env)->ExceptionCheck()) { \
+ return; \
+ } \
+ } while (0) \
+
+#define JNU_CHECK_EXCEPTION_RETURN(env, y) \
+ do { \
+ if ((env)->ExceptionCheck()) { \
+ return (y); \
+ } \
+ } while (0)
+#else
+#define JNU_CHECK_EXCEPTION(env) \
+ do { \
+ if ((*env)->ExceptionCheck(env)) { \
+ return; \
+ } \
+ } while (0) \
+
+#define JNU_CHECK_EXCEPTION_RETURN(env, y) \
+ do { \
+ if ((*env)->ExceptionCheck(env)) { \
+ return (y); \
+ } \
+ } while (0)
+#endif /* __cplusplus */
/************************************************************************
* Debugging utilities
*/
diff --git a/jdk/src/share/native/java/io/FileInputStream.c b/jdk/src/share/native/java/io/FileInputStream.c
index 52e2cdd..092ddbf 100644
--- a/jdk/src/share/native/java/io/FileInputStream.c
+++ b/jdk/src/share/native/java/io/FileInputStream.c
@@ -62,7 +62,7 @@
}
JNIEXPORT jint JNICALL
-Java_java_io_FileInputStream_read(JNIEnv *env, jobject this) {
+Java_java_io_FileInputStream_read0(JNIEnv *env, jobject this) {
return readSingle(env, this, fis_fd);
}
diff --git a/jdk/src/share/native/java/io/RandomAccessFile.c b/jdk/src/share/native/java/io/RandomAccessFile.c
index 3251db8..53b5f1a 100644
--- a/jdk/src/share/native/java/io/RandomAccessFile.c
+++ b/jdk/src/share/native/java/io/RandomAccessFile.c
@@ -64,7 +64,7 @@
}
JNIEXPORT jint JNICALL
-Java_java_io_RandomAccessFile_read(JNIEnv *env, jobject this) {
+Java_java_io_RandomAccessFile_read0(JNIEnv *env, jobject this) {
return readSingle(env, this, raf_fd);
}
@@ -75,7 +75,7 @@
}
JNIEXPORT void JNICALL
-Java_java_io_RandomAccessFile_write(JNIEnv *env, jobject this, jint byte) {
+Java_java_io_RandomAccessFile_write0(JNIEnv *env, jobject this, jint byte) {
writeSingle(env, this, byte, JNI_FALSE, raf_fd);
}
diff --git a/jdk/src/share/native/java/net/net_util.h b/jdk/src/share/native/java/net/net_util.h
index ab440c8..8286a85 100644
--- a/jdk/src/share/native/java/net/net_util.h
+++ b/jdk/src/share/native/java/net/net_util.h
@@ -42,9 +42,6 @@
#define NET_ERROR(env, ex, msg) \
{ if (!(*env)->ExceptionOccurred(env)) JNU_ThrowByName(env, ex, msg) }
-#define CHECK_NULL(x) if ((x) == NULL) return;
-#define CHECK_NULL_RETURN(x, y) if ((x) == NULL) return y;
-
/************************************************************************
* Cached field IDs
*
diff --git a/jdk/src/share/native/sun/awt/splashscreen/splashscreen_gfx_impl.h b/jdk/src/share/native/sun/awt/splashscreen/splashscreen_gfx_impl.h
index 10574ad..536b935 100644
--- a/jdk/src/share/native/sun/awt/splashscreen/splashscreen_gfx_impl.h
+++ b/jdk/src/share/native/sun/awt/splashscreen/splashscreen_gfx_impl.h
@@ -189,7 +189,11 @@
PUT(rgbquad_t, ptr, value);
break;
case 3: /* not supported, LSB or MSB should always be specified */
- *(int *) 0 = 0; /* crash */
+ PUT(byte_t, ptr, 0xff); /* Put a stub value */
+ INCP(byte_t, ptr);
+ PUT(byte_t, ptr, 0xff);
+ INCP(byte_t, ptr);
+ PUT(byte_t, ptr, 0xff);
break;
case 2:
PUT(word_t, ptr, value);
@@ -253,7 +257,7 @@
value = GET(rgbquad_t, ptr);
break;
case 3: /* not supported, LSB or MSB should always be specified */
- *(int *) 0 = 0;
+ value = 0xFFFFFFFF; /*return a stub value */
break;
case 2:
value = (rgbquad_t) GET(word_t, ptr);
diff --git a/jdk/src/share/native/sun/misc/Version.c b/jdk/src/share/native/sun/misc/Version.c
index 7edba49..214f4d2 100644
--- a/jdk/src/share/native/sun/misc/Version.c
+++ b/jdk/src/share/native/sun/misc/Version.c
@@ -90,10 +90,15 @@
(*func_p)(env, &info, sizeof(info));
setStaticIntField(env, cls, "jvm_major_version", JVM_VERSION_MAJOR(info.jvm_version));
+ JNU_CHECK_EXCEPTION_RETURN(env, JNI_FALSE);
setStaticIntField(env, cls, "jvm_minor_version", JVM_VERSION_MINOR(info.jvm_version));
+ JNU_CHECK_EXCEPTION_RETURN(env, JNI_FALSE);
setStaticIntField(env, cls, "jvm_micro_version", JVM_VERSION_MICRO(info.jvm_version));
+ JNU_CHECK_EXCEPTION_RETURN(env, JNI_FALSE);
setStaticIntField(env, cls, "jvm_build_number", JVM_VERSION_BUILD(info.jvm_version));
+ JNU_CHECK_EXCEPTION_RETURN(env, JNI_FALSE);
setStaticIntField(env, cls, "jvm_update_version", info.update_version);
+ JNU_CHECK_EXCEPTION_RETURN(env, JNI_FALSE);
jvm_special_version = info.special_update_version;
return JNI_TRUE;
@@ -116,10 +121,15 @@
JDK_GetVersionInfo0(&info, sizeof(info));
setStaticIntField(env, cls, "jdk_major_version", JDK_VERSION_MAJOR(info.jdk_version));
+ JNU_CHECK_EXCEPTION(env);
setStaticIntField(env, cls, "jdk_minor_version", JDK_VERSION_MINOR(info.jdk_version));
+ JNU_CHECK_EXCEPTION(env);
setStaticIntField(env, cls, "jdk_micro_version", JDK_VERSION_MICRO(info.jdk_version));
+ JNU_CHECK_EXCEPTION(env);
setStaticIntField(env, cls, "jdk_build_number", JDK_VERSION_BUILD(info.jdk_version));
+ JNU_CHECK_EXCEPTION(env);
setStaticIntField(env, cls, "jdk_update_version", info.update_version);
+ JNU_CHECK_EXCEPTION(env);
jdk_special_version = info.special_update_version;
}
diff --git a/jdk/src/solaris/classes/sun/font/FcFontConfiguration.java b/jdk/src/solaris/classes/sun/font/FcFontConfiguration.java
index e33e08a..1aff478 100644
--- a/jdk/src/solaris/classes/sun/font/FcFontConfiguration.java
+++ b/jdk/src/solaris/classes/sun/font/FcFontConfiguration.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -33,6 +33,7 @@
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.util.HashMap;
import java.util.HashSet;
@@ -173,8 +174,16 @@
}
@Override
- public FontDescriptor[] getFontDescriptors(String fontName, int style) {
- return new FontDescriptor[0];
+ protected FontDescriptor[] buildFontDescriptors(int fontIndex, int styleIndex) {
+ CompositeFontDescriptor[] cfi = get2DCompositeFontInfo();
+ int idx = fontIndex * NUM_STYLES + styleIndex;
+ String[] componentFaceNames = cfi[idx].getComponentFaceNames();
+ FontDescriptor[] ret = new FontDescriptor[componentFaceNames.length];
+ for (int i = 0; i < componentFaceNames.length; i++) {
+ ret[i] = new FontDescriptor(componentFaceNames[i], StandardCharsets.UTF_8.newEncoder(), new int[0]);
+ }
+
+ return ret;
}
@Override
@@ -250,10 +259,12 @@
}
String[] fileNames = new String[numFonts];
+ String[] faceNames = new String[numFonts];
int index;
for (index = 0; index < fcFonts.length; index++) {
fileNames[index] = fcFonts[index].fontFile;
+ faceNames[index] = fcFonts[index].familyName;
}
if (installedFallbackFontFiles != null) {
@@ -266,7 +277,7 @@
= new CompositeFontDescriptor(
faceName,
1,
- null,
+ faceNames,
fileNames,
null, null);
}
diff --git a/jdk/src/solaris/classes/sun/nio/fs/SolarisUserDefinedFileAttributeView.java b/jdk/src/solaris/classes/sun/nio/fs/SolarisUserDefinedFileAttributeView.java
index e8e756c..d5edf3f 100644
--- a/jdk/src/solaris/classes/sun/nio/fs/SolarisUserDefinedFileAttributeView.java
+++ b/jdk/src/solaris/classes/sun/nio/fs/SolarisUserDefinedFileAttributeView.java
@@ -149,7 +149,7 @@
int afd = openat(fd, nameAsBytes(file,name), (O_RDONLY|O_XATTR), 0);
// wrap with channel
- FileChannel fc = UnixChannelFactory.newFileChannel(afd, true, false);
+ FileChannel fc = UnixChannelFactory.newFileChannel(afd, file.toString(), true, false);
// read to EOF (nothing we can do if I/O error occurs)
try {
@@ -190,7 +190,7 @@
UnixFileModeAttribute.ALL_PERMISSIONS);
// wrap with channel
- FileChannel fc = UnixChannelFactory.newFileChannel(afd, false, true);
+ FileChannel fc = UnixChannelFactory.newFileChannel(afd, file.toString(), false, true);
// write value (nothing we can do if I/O error occurs)
try {
diff --git a/jdk/src/solaris/classes/sun/nio/fs/UnixChannelFactory.java b/jdk/src/solaris/classes/sun/nio/fs/UnixChannelFactory.java
index d18a466..c6f074e 100644
--- a/jdk/src/solaris/classes/sun/nio/fs/UnixChannelFactory.java
+++ b/jdk/src/solaris/classes/sun/nio/fs/UnixChannelFactory.java
@@ -100,10 +100,10 @@
/**
* Constructs a file channel from an existing (open) file descriptor
*/
- static FileChannel newFileChannel(int fd, boolean reading, boolean writing) {
+ static FileChannel newFileChannel(int fd, String path, boolean reading, boolean writing) {
FileDescriptor fdObj = new FileDescriptor();
fdAccess.set(fdObj, fd);
- return FileChannelImpl.open(fdObj, reading, writing, null);
+ return FileChannelImpl.open(fdObj, path, reading, writing, null);
}
/**
@@ -134,7 +134,7 @@
throw new IllegalArgumentException("APPEND + TRUNCATE_EXISTING not allowed");
FileDescriptor fdObj = open(dfd, path, pathForPermissionCheck, flags, mode);
- return FileChannelImpl.open(fdObj, flags.read, flags.write, flags.append, null);
+ return FileChannelImpl.open(fdObj, path.toString(), flags.read, flags.write, flags.append, null);
}
/**
diff --git a/jdk/src/solaris/classes/sun/print/CUPSPrinter.java b/jdk/src/solaris/classes/sun/print/CUPSPrinter.java
index 1327307..a54316e 100644
--- a/jdk/src/solaris/classes/sun/print/CUPSPrinter.java
+++ b/jdk/src/solaris/classes/sun/print/CUPSPrinter.java
@@ -252,6 +252,7 @@
try {
return urlConnection.getOutputStream();
} catch (Exception e) {
+ IPPPrintService.debug_println(debugPrefix+e);
}
return null;
}
@@ -282,6 +283,9 @@
if (responseMap != null && responseMap.length > 0) {
defaultMap = responseMap[0];
+ } else {
+ IPPPrintService.debug_println(debugPrefix+
+ " empty response map for GET_DEFAULT.");
}
if (defaultMap == null) {
@@ -310,7 +314,10 @@
if (attribClass != null) {
printerInfo[0] = attribClass.getStringValue();
- attribClass = (AttributeClass)defaultMap.get("device-uri");
+ attribClass = (AttributeClass)
+ defaultMap.get("printer-uri-supported");
+ IPPPrintService.debug_println(debugPrefix+
+ "printer-uri-supported="+attribClass);
if (attribClass != null) {
printerInfo[1] = attribClass.getStringValue();
} else {
diff --git a/jdk/src/solaris/classes/sun/print/IPPPrintService.java b/jdk/src/solaris/classes/sun/print/IPPPrintService.java
index 855b1a9..28d6e1c 100644
--- a/jdk/src/solaris/classes/sun/print/IPPPrintService.java
+++ b/jdk/src/solaris/classes/sun/print/IPPPrintService.java
@@ -1906,9 +1906,8 @@
new HashMap[respList.size()]);
} else {
debug_println(debugPrefix+
- "readIPPResponse client error, IPP status code-"
- +Integer.toHexString(response[2])+" & "
- +Integer.toHexString(response[3]));
+ "readIPPResponse client error, IPP status code: 0x"+
+ toHex(response[2]) + toHex(response[3]));
return null;
}
@@ -1921,6 +1920,10 @@
}
}
+ private static String toHex(byte v) {
+ String s = Integer.toHexString(v&0xff);
+ return (s.length() == 2) ? s : "0"+s;
+ }
public String toString() {
return "IPP Printer : " + getName();
diff --git a/jdk/src/solaris/classes/sun/print/UnixPrintServiceLookup.java b/jdk/src/solaris/classes/sun/print/UnixPrintServiceLookup.java
index 5e33086..a3a10e8 100644
--- a/jdk/src/solaris/classes/sun/print/UnixPrintServiceLookup.java
+++ b/jdk/src/solaris/classes/sun/print/UnixPrintServiceLookup.java
@@ -238,9 +238,25 @@
String[] printers = null; // array of printer names
String[] printerURIs = null; //array of printer URIs
- getDefaultPrintService();
+ try {
+ getDefaultPrintService();
+ } catch (Throwable t) {
+ IPPPrintService.debug_println(debugPrefix+
+ "Exception getting default printer : " + t);
+ }
if (CUPSPrinter.isCupsRunning()) {
- printerURIs = CUPSPrinter.getAllPrinters();
+ try {
+ printerURIs = CUPSPrinter.getAllPrinters();
+ IPPPrintService.debug_println("CUPS URIs = " + printerURIs);
+ if (printerURIs != null) {
+ for (int p = 0; p < printerURIs.length; p++) {
+ IPPPrintService.debug_println("URI="+printerURIs[p]);
+ }
+ }
+ } catch (Throwable t) {
+ IPPPrintService.debug_println(debugPrefix+
+ "Exception getting all CUPS printers : " + t);
+ }
if ((printerURIs != null) && (printerURIs.length > 0)) {
printers = new String[printerURIs.length];
for (int i=0; i<printerURIs.length; i++) {
@@ -595,8 +611,10 @@
(CUPSPrinter.isCupsRunning()));
if (CUPSPrinter.isCupsRunning()) {
String[] printerInfo = CUPSPrinter.getDefaultPrinter();
- defaultPrinter = printerInfo[0];
- psuri = printerInfo[1];
+ if (printerInfo != null && printerInfo.length >= 2) {
+ defaultPrinter = printerInfo[0];
+ psuri = printerInfo[1];
+ }
} else {
if (isMac() || isSysV()) {
defaultPrinter = getDefaultPrinterNameSysV();
diff --git a/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c b/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c
index 3568756..86c3a70 100644
--- a/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c
+++ b/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c
@@ -517,6 +517,8 @@
} else if (ret == JVM_IO_ERR) {
if (errno == EBADF) {
JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed");
+ } else if (errno == ENOMEM) {
+ JNU_ThrowOutOfMemoryError(env, "NET_Timeout native heap allocation failed");
} else {
NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "Peek failed");
}
@@ -617,15 +619,18 @@
"Receive timed out");
return -1;
} else if (ret == JVM_IO_ERR) {
+ if (errno == ENOMEM) {
+ JNU_ThrowOutOfMemoryError(env, "NET_Timeout native heap allocation failed");
#ifdef __linux__
- if (errno == EBADF) {
+ } else if (errno == EBADF) {
JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed");
} else {
NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "Receive failed");
- }
#else
- JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed");
+ } else {
+ JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed");
#endif
+ }
return -1;
} else if (ret == JVM_IO_INTR) {
JNU_ThrowByName(env, JNU_JAVAIOPKG "InterruptedIOException",
@@ -835,15 +840,18 @@
JNU_ThrowByName(env, JNU_JAVANETPKG "SocketTimeoutException",
"Receive timed out");
} else if (ret == JVM_IO_ERR) {
+ if (errno == ENOMEM) {
+ JNU_ThrowOutOfMemoryError(env, "NET_Timeout native heap allocation failed");
#ifdef __linux__
- if (errno == EBADF) {
+ } else if (errno == EBADF) {
JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed");
} else {
NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "Receive failed");
- }
#else
- JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed");
+ } else {
+ JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed");
#endif
+ }
} else if (ret == JVM_IO_INTR) {
JNU_ThrowByName(env, JNU_JAVAIOPKG "InterruptedIOException",
"operation interrupted");
diff --git a/jdk/src/solaris/native/java/net/PlainSocketImpl.c b/jdk/src/solaris/native/java/net/PlainSocketImpl.c
index b6f78b9..5fed070 100644
--- a/jdk/src/solaris/native/java/net/PlainSocketImpl.c
+++ b/jdk/src/solaris/native/java/net/PlainSocketImpl.c
@@ -708,7 +708,6 @@
} else {
ret = NET_Timeout(fd, timeout);
}
-
if (ret == 0) {
JNU_ThrowByName(env, JNU_JAVANETPKG "SocketTimeoutException",
"Accept timed out");
@@ -716,6 +715,8 @@
} else if (ret == JVM_IO_ERR) {
if (errno == EBADF) {
JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed");
+ } else if (errno == ENOMEM) {
+ JNU_ThrowOutOfMemoryError(env, "NET_Timeout native heap allocation failed");
} else {
NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "Accept failed");
}
diff --git a/jdk/src/solaris/native/java/net/SocketInputStream.c b/jdk/src/solaris/native/java/net/SocketInputStream.c
index ccee03c..8643262 100644
--- a/jdk/src/solaris/native/java/net/SocketInputStream.c
+++ b/jdk/src/solaris/native/java/net/SocketInputStream.c
@@ -108,6 +108,8 @@
} else if (nread == JVM_IO_ERR) {
if (errno == EBADF) {
JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed");
+ } else if (errno == ENOMEM) {
+ JNU_ThrowOutOfMemoryError(env, "NET_Timeout native heap allocation failed");
} else {
NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
"select/poll failed");
diff --git a/jdk/src/solaris/native/java/net/bsd_close.c b/jdk/src/solaris/native/java/net/bsd_close.c
index f314357..5ec3bea 100644
--- a/jdk/src/solaris/native/java/net/bsd_close.c
+++ b/jdk/src/solaris/native/java/net/bsd_close.c
@@ -25,6 +25,7 @@
#include <stdio.h>
#include <stdlib.h>
+#include <sys/param.h>
#include <signal.h>
#include <pthread.h>
#include <sys/types.h>
@@ -35,7 +36,6 @@
#include <sys/uio.h>
#include <unistd.h>
#include <errno.h>
-
#include <sys/poll.h>
/*
@@ -347,6 +347,10 @@
int NET_Timeout(int s, long timeout) {
long prevtime = 0, newtime;
struct timeval t, *tp = &t;
+ fd_set fds;
+ fd_set* fdsp = NULL;
+ int allocated = 0;
+ threadEntry_t self;
fdEntry_t *fdEntry = getFdEntry(s);
/*
@@ -376,20 +380,29 @@
t.tv_usec = 0;
}
+ if (s < FD_SETSIZE) {
+ fdsp = &fds;
+ FD_ZERO(fdsp);
+ } else {
+ int length = (howmany(s+1, NFDBITS)) * sizeof(int);
+ fdsp = (fd_set *) calloc(1, length);
+ if (fdsp == NULL) {
+ return -1; // errno will be set to ENOMEM
+ }
+ allocated = 1;
+ }
+ FD_SET(s, fdsp);
+
for(;;) {
- fd_set rfds;
int rv;
- threadEntry_t self;
/*
* call select on the fd. If interrupted by our wakeup signal
* errno will be set to EBADF.
*/
- FD_ZERO(&rfds);
- FD_SET(s, &rfds);
startOp(fdEntry, &self);
- rv = select(s+1, &rfds, 0, 0, tp);
+ rv = select(s+1, fdsp, 0, 0, tp);
endOp(fdEntry, &self);
/*
@@ -403,6 +416,8 @@
newtime = now.tv_sec * 1000 + now.tv_usec / 1000;
timeout -= newtime - prevtime;
if (timeout <= 0) {
+ if (allocated != 0)
+ free(fdsp);
return 0;
}
prevtime = newtime;
@@ -410,6 +425,8 @@
t.tv_usec = (timeout % 1000) * 1000;
}
} else {
+ if (allocated != 0)
+ free(fdsp);
return rv;
}
diff --git a/jdk/src/solaris/native/java/net/linux_close.c b/jdk/src/solaris/native/java/net/linux_close.c
index 38d9986..2d3dfe2 100644
--- a/jdk/src/solaris/native/java/net/linux_close.c
+++ b/jdk/src/solaris/native/java/net/linux_close.c
@@ -34,7 +34,6 @@
#include <sys/uio.h>
#include <unistd.h>
#include <errno.h>
-
#include <sys/poll.h>
/*
diff --git a/jdk/src/solaris/native/sun/awt/awt_LoadLibrary.c b/jdk/src/solaris/native/sun/awt/awt_LoadLibrary.c
index 2838cba..7692d01 100644
--- a/jdk/src/solaris/native/sun/awt/awt_LoadLibrary.c
+++ b/jdk/src/solaris/native/sun/awt/awt_LoadLibrary.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -109,7 +109,7 @@
jvm = vm;
/* Get address of this library and the directory containing it. */
- dladdr((void *)JNI_OnLoad, &dlinfo);
+ dladdr((void *)AWT_OnLoad, &dlinfo);
realpath((char *)dlinfo.dli_fname, buf);
len = strlen(buf);
p = strrchr(buf, '/');
diff --git a/jdk/src/solaris/native/sun/awt/gtk2_interface.c b/jdk/src/solaris/native/sun/awt/gtk2_interface.c
index efe0797..cfcef70 100644
--- a/jdk/src/solaris/native/sun/awt/gtk2_interface.c
+++ b/jdk/src/solaris/native/sun/awt/gtk2_interface.c
@@ -32,6 +32,7 @@
#include "java_awt_Transparency.h"
#include "jvm_md.h"
#include "sizecalc.h"
+#include <jni_util.h>
#define GTK2_LIB_VERSIONED VERSIONED_JNI_LIB_NAME("gtk-x11-2.0", "0")
#define GTK2_LIB JNI_LIB_NAME("gtk-x11-2.0")
@@ -456,13 +457,19 @@
const gchar * const * schemes = NULL;
jclass cls_action = (*env)->FindClass(env, "java/awt/Desktop$Action");
+ CHECK_NULL(cls_action);
jclass cls_xDesktopPeer = (*env)->FindClass(env, "sun/awt/X11/XDesktopPeer");
+ CHECK_NULL(cls_xDesktopPeer);
jfieldID fld_supportedActions = (*env)->GetStaticFieldID(env, cls_xDesktopPeer, "supportedActions", "Ljava/util/List;");
+ CHECK_NULL(fld_supportedActions);
jobject supportedActions = (*env)->GetStaticObjectField(env, cls_xDesktopPeer, fld_supportedActions);
jclass cls_arrayList = (*env)->FindClass(env, "java/util/ArrayList");
+ CHECK_NULL(cls_arrayList);
jmethodID mid_arrayListAdd = (*env)->GetMethodID(env, cls_arrayList, "add", "(Ljava/lang/Object;)Z");
+ CHECK_NULL(mid_arrayListAdd);
jmethodID mid_arrayListClear = (*env)->GetMethodID(env, cls_arrayList, "clear", "()V");
+ CHECK_NULL(mid_arrayListClear);
(*env)->CallVoidMethod(env, supportedActions, mid_arrayListClear);
diff --git a/jdk/src/solaris/native/sun/nio/ch/NativeThread.c b/jdk/src/solaris/native/sun/nio/ch/NativeThread.c
index 79a91a0..5e2a78b 100644
--- a/jdk/src/solaris/native/sun/nio/ch/NativeThread.c
+++ b/jdk/src/solaris/native/sun/nio/ch/NativeThread.c
@@ -32,27 +32,32 @@
#include "sun_nio_ch_NativeThread.h"
#include "nio_util.h"
-
#ifdef __linux__
-#include <pthread.h>
-#include <sys/signal.h>
-
-/* Also defined in src/solaris/native/java/net/linux_close.c */
-#define INTERRUPT_SIGNAL (__SIGRTMAX - 2)
+ #include <pthread.h>
+ #include <sys/signal.h>
+ /* Also defined in net/linux_close.c */
+ #define INTERRUPT_SIGNAL (__SIGRTMAX - 2)
+#elif __solaris__
+ #include <thread.h>
+ #include <signal.h>
+ #define INTERRUPT_SIGNAL (SIGRTMAX - 2)
+#elif _ALLBSD_SOURCE
+ #include <pthread.h>
+ #include <signal.h>
+ /* Also defined in net/bsd_close.c */
+ #define INTERRUPT_SIGNAL SIGIO
+#else
+ #error "missing platform-specific definition here"
+#endif
static void
nullHandler(int sig)
{
}
-#endif
-
-
JNIEXPORT void JNICALL
Java_sun_nio_ch_NativeThread_init(JNIEnv *env, jclass cl)
{
-#ifdef __linux__
-
/* Install the null handler for INTERRUPT_SIGNAL. This might overwrite the
* handler previously installed by java/net/linux_close.c, but that's okay
* since neither handler actually does anything. We install our own
@@ -67,25 +72,27 @@
sigemptyset(&sa.sa_mask);
if (sigaction(INTERRUPT_SIGNAL, &sa, &osa) < 0)
JNU_ThrowIOExceptionWithLastError(env, "sigaction");
-
-#endif
}
JNIEXPORT jlong JNICALL
Java_sun_nio_ch_NativeThread_current(JNIEnv *env, jclass cl)
{
-#ifdef __linux__
- return (long)pthread_self();
+#ifdef __solaris__
+ return (jlong)thr_self();
#else
- return -1;
+ return (jlong)pthread_self();
#endif
}
JNIEXPORT void JNICALL
Java_sun_nio_ch_NativeThread_signal(JNIEnv *env, jclass cl, jlong thread)
{
-#ifdef __linux__
- if (pthread_kill((pthread_t)thread, INTERRUPT_SIGNAL))
- JNU_ThrowIOExceptionWithLastError(env, "Thread signal failed");
+ int ret;
+#ifdef __solaris__
+ ret = thr_kill((thread_t)thread, INTERRUPT_SIGNAL);
+#else
+ ret = pthread_kill((pthread_t)thread, INTERRUPT_SIGNAL);
#endif
+ if (ret != 0)
+ JNU_ThrowIOExceptionWithLastError(env, "Thread signal failed");
}
diff --git a/jdk/src/windows/bin/java_md.c b/jdk/src/windows/bin/java_md.c
index 4078ecc..d08f2bf 100644
--- a/jdk/src/windows/bin/java_md.c
+++ b/jdk/src/windows/bin/java_md.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -179,7 +179,7 @@
int wanted = running;
char** argv = *pargv;
- for (i = 0; i < *pargc ; i++) {
+ for (i = 1; i < *pargc ; i++) {
if (JLI_StrCmp(argv[i], "-J-d64") == 0 || JLI_StrCmp(argv[i], "-d64") == 0) {
wanted = 64;
continue;
@@ -188,6 +188,11 @@
wanted = 32;
continue;
}
+
+ if (IsJavaArgs() && argv[i][0] != '-')
+ continue;
+ if (argv[i][0] != '-')
+ break;
}
if (running != wanted) {
JLI_ReportErrorMessage(JRE_ERROR2, wanted);
diff --git a/jdk/src/windows/classes/sun/nio/fs/WindowsChannelFactory.java b/jdk/src/windows/classes/sun/nio/fs/WindowsChannelFactory.java
index d9b1489..46d063c 100644
--- a/jdk/src/windows/classes/sun/nio/fs/WindowsChannelFactory.java
+++ b/jdk/src/windows/classes/sun/nio/fs/WindowsChannelFactory.java
@@ -25,19 +25,22 @@
package sun.nio.fs;
-import java.nio.file.*;
-import java.nio.channels.*;
import java.io.FileDescriptor;
import java.io.IOException;
-import java.util.*;
+import java.nio.channels.AsynchronousFileChannel;
+import java.nio.channels.FileChannel;
+import java.nio.file.LinkOption;
+import java.nio.file.OpenOption;
+import java.nio.file.StandardOpenOption;
+import java.util.Set;
import com.sun.nio.file.ExtendedOpenOption;
+import sun.misc.JavaIOFileDescriptorAccess;
+import sun.misc.SharedSecrets;
import sun.nio.ch.FileChannelImpl;
import sun.nio.ch.ThreadPool;
import sun.nio.ch.WindowsAsynchronousFileChannelImpl;
-import sun.misc.SharedSecrets;
-import sun.misc.JavaIOFileDescriptorAccess;
import static sun.nio.fs.WindowsNativeDispatcher.*;
import static sun.nio.fs.WindowsConstants.*;
@@ -157,7 +160,7 @@
throw new IllegalArgumentException("APPEND + TRUNCATE_EXISTING not allowed");
FileDescriptor fdObj = open(pathForWindows, pathToCheck, flags, pSecurityDescriptor);
- return FileChannelImpl.open(fdObj, flags.read, flags.write, flags.append, null);
+ return FileChannelImpl.open(fdObj, pathForWindows, flags.read, flags.write, flags.append, null);
}
/**
diff --git a/jdk/src/windows/native/sun/security/krb5/NativeCreds.c b/jdk/src/windows/native/sun/security/krb5/NativeCreds.c
index f24e79a..7431333 100644
--- a/jdk/src/windows/native/sun/security/krb5/NativeCreds.c
+++ b/jdk/src/windows/native/sun/security/krb5/NativeCreds.c
@@ -388,7 +388,7 @@
jobject ticketFlags, startTime, endTime, krbCreds = NULL;
jobject authTime, renewTillTime, hostAddresses = NULL;
KERB_EXTERNAL_TICKET *msticket;
- int found_in_cache = 0;
+ int found = 0;
FILETIME Now, EndTime, LocalEndTime;
int i, netypes;
@@ -476,7 +476,7 @@
if (CompareFileTime(&Now, &LocalEndTime) < 0) {
for (i=0; i<netypes; i++) {
if (etypes[i] == msticket->SessionKey.KeyType) {
- found_in_cache = 1;
+ found = 1;
if (native_debug) {
printf("LSA: Valid etype found: %d\n", etypes[i]);
}
@@ -486,7 +486,7 @@
}
}
- if (!found_in_cache) {
+ if (!found) {
if (native_debug) {
printf("LSA: MS TGT in cache is invalid/not supported; request new ticket\n");
}
@@ -529,6 +529,14 @@
// got the native MS Kerberos TGT
msticket = &(pTicketResponse->Ticket);
+
+ if (msticket->SessionKey.KeyType != etypes[i]) {
+ if (native_debug) {
+ printf("LSA: Response etype is %d for %d. Retry.\n", msticket->SessionKey.KeyType, etypes[i]);
+ }
+ continue;
+ }
+ found = 1;
break;
}
}
@@ -583,6 +591,10 @@
} KERB_CRYPTO_KEY, *PKERB_CRYPTO_KEY;
*/
+ if (!found) {
+ break;
+ }
+
// Build a com.sun.security.krb5.Ticket
ticket = BuildTicket(env, msticket->EncodedTicket,
msticket->EncodedTicketSize);
diff --git a/jdk/test/ProblemList.txt b/jdk/test/ProblemList.txt
index 7c83f52..1d9efbc 100644
--- a/jdk/test/ProblemList.txt
+++ b/jdk/test/ProblemList.txt
@@ -183,11 +183,6 @@
# 6963118
java/nio/channels/Selector/Wakeup.java windows-all
-# 7133499, 7133497
-java/nio/channels/AsyncCloseAndInterrupt.java macosx-all
-java/nio/channels/AsynchronousFileChannel/Lock.java macosx-all
-java/nio/channels/FileChannel/Transfer.java macosx-all
-
# 7141822
java/nio/channels/DatagramChannel/ChangingAddress.java macosx-all
@@ -263,9 +258,6 @@
# jdk_tools
-# 7132203
-sun/jvmstat/monitor/MonitoredVm/CR6672135.java generic-all
-
# 8028474
sun/jvmstat/monitor/MonitoredVm/MonitorVmStartTerminate.sh generic-all
@@ -280,12 +272,6 @@
# jdk_jdi
-# Filed 6952105
-com/sun/jdi/SuspendThreadTest.java generic-all
-
-# Filed 6653793
-com/sun/jdi/RedefineCrossEvent.java generic-all
-
############################################################################
# jdk_util
diff --git a/jdk/test/com/sun/jdi/BadHandshakeTest.java b/jdk/test/com/sun/jdi/BadHandshakeTest.java
index 8e35442..35afb33 100644
--- a/jdk/test/com/sun/jdi/BadHandshakeTest.java
+++ b/jdk/test/com/sun/jdi/BadHandshakeTest.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -85,7 +85,7 @@
success.set(line.contains("Listening for transport dt_socket at address:"));
return true;
},
- 1500,
+ Integer.MAX_VALUE,
TimeUnit.MILLISECONDS
);
diff --git a/jdk/test/com/sun/jdi/ExclusiveBind.java b/jdk/test/com/sun/jdi/ExclusiveBind.java
index 3389ee2..d53efd8 100644
--- a/jdk/test/com/sun/jdi/ExclusiveBind.java
+++ b/jdk/test/com/sun/jdi/ExclusiveBind.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -25,57 +25,28 @@
* @bug 4531526
* @summary Test that more than one debuggee cannot bind to same port
* at the same time.
+ * @library /lib/testlibrary
*
+ * @build jdk.testlibrary.ProcessTools jdk.testlibrary.JDKToolLauncher jdk.testlibrary.Utils
* @build VMConnection ExclusiveBind HelloWorld
* @run main ExclusiveBind
*/
-import java.io.InputStream;
-import java.io.IOException;
-import java.io.File;
import java.net.ServerSocket;
import com.sun.jdi.Bootstrap;
import com.sun.jdi.VirtualMachine;
import com.sun.jdi.connect.Connector;
import com.sun.jdi.connect.AttachingConnector;
+
+import java.util.ArrayList;
import java.util.Map;
import java.util.List;
import java.util.Iterator;
+import java.util.concurrent.TimeUnit;
+
+import jdk.testlibrary.ProcessTools;
+import jdk.testlibrary.Utils;
public class ExclusiveBind {
-
- /*
- * Helper class to direct process output to the parent
- * System.out
- */
- static class IOHandler implements Runnable {
- InputStream in;
-
- IOHandler(InputStream in) {
- this.in = in;
- }
-
- static void handle(InputStream in) {
- IOHandler handler = new IOHandler(in);
- Thread thr = new Thread(handler);
- thr.setDaemon(true);
- thr.start();
- }
-
- public void run() {
- try {
- byte b[] = new byte[100];
- for (;;) {
- int n = in.read(b);
- if (n < 0) return;
- for (int i=0; i<n; i++) {
- System.out.print((char)b[i]);
- }
- }
- } catch (IOException ioe) { }
- }
-
- }
-
/*
* Find a connector by name
*/
@@ -95,25 +66,23 @@
* Launch (in server mode) a debuggee with the given address and
* suspend mode.
*/
- private static Process launch(String address, boolean suspend, String class_name) throws IOException {
- String exe = System.getProperty("java.home") + File.separator + "bin" +
- File.separator + "java";
- String cmd = exe + " " + VMConnection.getDebuggeeVMOptions() +
- " -agentlib:jdwp=transport=dt_socket,server=y,suspend=";
- if (suspend) {
- cmd += "y";
- } else {
- cmd += "n";
+ private static ProcessBuilder prepareLauncher(String address, boolean suspend, String class_name) throws Exception {
+ List<String> args = new ArrayList<>();
+ for(String dbgOption : VMConnection.getDebuggeeVMOptions().split(" ")) {
+ args.add(dbgOption);
}
- cmd += ",address=" + address + " " + class_name;
+ String lib = "-agentlib:jdwp=transport=dt_socket,server=y,suspend=";
+ if (suspend) {
+ lib += "y";
+ } else {
+ lib += "n";
+ }
+ lib += ",address=" + address;
- System.out.println("Starting: " + cmd);
+ args.add(lib);
+ args.add(class_name);
- Process p = Runtime.getRuntime().exec(cmd);
- IOHandler.handle(p.getInputStream());
- IOHandler.handle(p.getErrorStream());
-
- return p;
+ return ProcessTools.createJavaProcessBuilder(args.toArray(new String[args.size()]));
}
/*
@@ -132,16 +101,21 @@
String address = String.valueOf(port);
// launch the first debuggee
- Process process1 = launch(address, true, "HelloWorld");
-
- // give first debuggee time to suspend
- Thread.currentThread().sleep(5000);
+ ProcessBuilder process1 = prepareLauncher(address, true, "HelloWorld");
+ // start the debuggee and wait for the "ready" message
+ Process p = ProcessTools.startProcess(
+ "process1",
+ process1,
+ line -> line.equals("Listening for transport dt_socket at address: " + address),
+ Math.round(5000 * Utils.TIMEOUT_FACTOR),
+ TimeUnit.MILLISECONDS
+ );
// launch a second debuggee with the same address
- Process process2 = launch(address, false, "HelloWorld");
+ ProcessBuilder process2 = prepareLauncher(address, false, "HelloWorld");
// get exit status from second debuggee
- int exitCode = process2.waitFor();
+ int exitCode = ProcessTools.startProcess("process2", process2).waitFor();
// clean-up - attach to first debuggee and resume it
AttachingConnector conn = (AttachingConnector)findConnector("com.sun.jdi.SocketAttach");
diff --git a/jdk/test/java/awt/Cursor/MultiResolutionCursorTest/MultiResolutionCursorTest.html b/jdk/test/java/awt/Cursor/MultiResolutionCursorTest/MultiResolutionCursorTest.html
new file mode 100644
index 0000000..85e187d
--- /dev/null
+++ b/jdk/test/java/awt/Cursor/MultiResolutionCursorTest/MultiResolutionCursorTest.html
@@ -0,0 +1,32 @@
+<!--
+ Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ This code is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License version 2 only, as
+ published by the Free Software Foundation.
+
+ This code is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ version 2 for more details (a copy is included in the LICENSE file that
+ accompanied this code).
+
+ You should have received a copy of the GNU General Public License version
+ 2 along with this work; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+
+ Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ or visit www.oracle.com if you need additional information or have any
+ questions.
+-->
+
+<html>
+ <head>
+ <title>High resolution custom cursor test, bug ID 8028212</title>
+ </head>
+ <body>
+ <applet CODE="MultiResolutionCursorTest.class" WIDTH=300 HEIGHT=100></applet>
+ <p> See the dialog box (usually in upper left corner) for instructions</p>
+</body>
+</html>
\ No newline at end of file
diff --git a/jdk/test/java/awt/Cursor/MultiResolutionCursorTest/MultiResolutionCursorTest.java b/jdk/test/java/awt/Cursor/MultiResolutionCursorTest/MultiResolutionCursorTest.java
new file mode 100644
index 0000000..9507bb4
--- /dev/null
+++ b/jdk/test/java/awt/Cursor/MultiResolutionCursorTest/MultiResolutionCursorTest.java
@@ -0,0 +1,266 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Cursor;
+import java.awt.Dialog;
+import java.awt.Frame;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.Image;
+import java.awt.Label;
+import java.awt.Point;
+import java.awt.TextArea;
+import java.awt.Toolkit;
+import java.awt.image.BufferedImage;
+import java.util.LinkedList;
+import java.util.List;
+import javax.swing.JApplet;
+import sun.awt.OSInfo;
+import sun.awt.image.MultiResolutionImage;
+
+/**
+ * @test
+ * @bug 8028212
+ * @summary [macosx] Custom Cursor HiDPI support
+ * @author Alexander Scherbatiy
+ * @run applet/manual=yesno MultiResolutionCursorTest.html
+ */
+public class MultiResolutionCursorTest extends JApplet {
+ //Declare things used in the test, like buttons and labels here
+
+ static final int sizes[] = {16, 32, 128};
+ static final Color colors[] = {Color.WHITE, Color.RED, Color.GREEN, Color.BLUE};
+
+ public void init() {
+ //Create instructions for the user here, as well as set up
+ // the environment -- set the layout manager, add buttons,
+ // etc.
+ this.setLayout(new BorderLayout());
+
+ if (OSInfo.getOSType().equals(OSInfo.OSType.MACOSX)) {
+ String[] instructions = {
+ "Verify that high resolution custom cursor is used"
+ + " on HiDPI displays.",
+ "1) Run the test on Retina display or enable the Quartz Debug"
+ + " and select the screen resolution with (HiDPI) label",
+ "2) Move the cursor to the Test Frame",
+ "3) Check that cursor has red, green or blue color",
+ "If so, press PASS, else press FAIL."
+ };
+ Sysout.createDialogWithInstructions(instructions);
+
+ } else {
+ String[] instructions = {
+ "This test is not applicable to the current platform. Press PASS."
+ };
+ Sysout.createDialogWithInstructions(instructions);
+ }
+ }//End init()
+
+ public void start() {
+ //Get things going. Request focus, set size, et cetera
+ setSize(200, 200);
+ setVisible(true);
+ validate();
+
+ final Image image = new MultiResolutionCursor();
+
+ int center = sizes[0] / 2;
+ Cursor cursor = Toolkit.getDefaultToolkit().createCustomCursor(
+ image, new Point(center, center), "multi-resolution cursor");
+
+ Frame frame = new Frame("Test Frame");
+ frame.setSize(300, 300);
+ frame.setLocation(300, 50);
+ frame.add(new Label("Move cursor here"));
+ frame.setCursor(cursor);
+ frame.setVisible(true);
+ }// start()
+
+
+ static class MultiResolutionCursor extends BufferedImage implements MultiResolutionImage {
+
+ List<Image> highResolutionImages;
+
+ public MultiResolutionCursor() {
+ super(sizes[0], sizes[0], BufferedImage.TYPE_INT_RGB);
+
+ draw(getGraphics(), 0);
+ highResolutionImages = new LinkedList<>();
+ highResolutionImages.add(this);
+
+ for (int i = 1; i < sizes.length; i++) {
+ BufferedImage highResolutionImage =
+ new BufferedImage(sizes[i], sizes[i], BufferedImage.TYPE_INT_RGB);
+ draw(highResolutionImage.getGraphics(), i);
+ highResolutionImages.add(highResolutionImage);
+ }
+ }
+
+ @Override
+ public Image getResolutionVariant(int width, int height) {
+
+ for (int i = 0; i < sizes.length; i++) {
+ Image image = highResolutionImages.get(i);
+ int w = image.getWidth(null);
+ int h = image.getHeight(null);
+
+ if (width <= w && height <= h) {
+ return image;
+ }
+ }
+
+ return highResolutionImages.get(highResolutionImages.size() - 1);
+ }
+
+ void draw(Graphics graphics, int index) {
+ Graphics2D g2 = (Graphics2D) graphics;
+ Color color = colors[index];
+ g2.setColor(color);
+ g2.fillRect(0, 0, sizes[index], sizes[index]);
+ }
+
+ @Override
+ public List<Image> getResolutionVariants() {
+ return highResolutionImages;
+ }
+ }
+}// class BlockedWindowTest
+
+/* Place other classes related to the test after this line */
+/**
+ * **************************************************
+ * Standard Test Machinery DO NOT modify anything below -- it's a standard chunk
+ * of code whose purpose is to make user interaction uniform, and thereby make
+ * it simpler to read and understand someone else's test.
+ * **************************************************
+ */
+/**
+ * This is part of the standard test machinery. It creates a dialog (with the
+ * instructions), and is the interface for sending text messages to the user. To
+ * print the instructions, send an array of strings to Sysout.createDialog
+ * WithInstructions method. Put one line of instructions per array entry. To
+ * display a message for the tester to see, simply call Sysout.println with the
+ * string to be displayed. This mimics System.out.println but works within the
+ * test harness as well as standalone.
+ */
+class Sysout {
+
+ private static TestDialog dialog;
+
+ public static void createDialogWithInstructions(String[] instructions) {
+ dialog = new TestDialog(new Frame(), "Instructions");
+ dialog.printInstructions(instructions);
+ dialog.setVisible(true);
+ println("Any messages for the tester will display here.");
+ }
+
+ public static void createDialog() {
+ dialog = new TestDialog(new Frame(), "Instructions");
+ String[] defInstr = {"Instructions will appear here. ", ""};
+ dialog.printInstructions(defInstr);
+ dialog.setVisible(true);
+ println("Any messages for the tester will display here.");
+ }
+
+ public static void printInstructions(String[] instructions) {
+ dialog.printInstructions(instructions);
+ }
+
+ public static void println(String messageIn) {
+ dialog.displayMessage(messageIn);
+ }
+}// Sysout class
+
+/**
+ * This is part of the standard test machinery. It provides a place for the test
+ * instructions to be displayed, and a place for interactive messages to the
+ * user to be displayed. To have the test instructions displayed, see Sysout. To
+ * have a message to the user be displayed, see Sysout. Do not call anything in
+ * this dialog directly.
+ */
+class TestDialog extends Dialog {
+
+ TextArea instructionsText;
+ TextArea messageText;
+ int maxStringLength = 80;
+
+ //DO NOT call this directly, go through Sysout
+ public TestDialog(Frame frame, String name) {
+ super(frame, name);
+ int scrollBoth = TextArea.SCROLLBARS_BOTH;
+ instructionsText = new TextArea("", 15, maxStringLength, scrollBoth);
+ add("North", instructionsText);
+
+ messageText = new TextArea("", 5, maxStringLength, scrollBoth);
+ add("Center", messageText);
+
+ pack();
+
+ setVisible(true);
+ }// TestDialog()
+
+ //DO NOT call this directly, go through Sysout
+ public void printInstructions(String[] instructions) {
+ //Clear out any current instructions
+ instructionsText.setText("");
+
+ //Go down array of instruction strings
+
+ String printStr, remainingStr;
+ for (int i = 0; i < instructions.length; i++) {
+ //chop up each into pieces maxSringLength long
+ remainingStr = instructions[ i];
+ while (remainingStr.length() > 0) {
+ //if longer than max then chop off first max chars to print
+ if (remainingStr.length() >= maxStringLength) {
+ //Try to chop on a word boundary
+ int posOfSpace = remainingStr.lastIndexOf(' ', maxStringLength - 1);
+
+ if (posOfSpace <= 0) {
+ posOfSpace = maxStringLength - 1;
+ }
+
+ printStr = remainingStr.substring(0, posOfSpace + 1);
+ remainingStr = remainingStr.substring(posOfSpace + 1);
+ } //else just print
+ else {
+ printStr = remainingStr;
+ remainingStr = "";
+ }
+
+ instructionsText.append(printStr + "\n");
+
+ }// while
+
+ }// for
+
+ }//printInstructions()
+
+ //DO NOT call this directly, go through Sysout
+ public void displayMessage(String messageIn) {
+ messageText.append(messageIn + "\n");
+ System.out.println(messageIn);
+ }
+}// Te
\ No newline at end of file
diff --git a/jdk/test/java/awt/DataFlavor/MissedHtmlAndRtfBug/InterprocessMessages.java b/jdk/test/java/awt/DataFlavor/MissedHtmlAndRtfBug/InterprocessMessages.java
index d66982d..587db43 100644
--- a/jdk/test/java/awt/DataFlavor/MissedHtmlAndRtfBug/InterprocessMessages.java
+++ b/jdk/test/java/awt/DataFlavor/MissedHtmlAndRtfBug/InterprocessMessages.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -24,5 +24,6 @@
interface InterprocessMessages {
final static int EXECUTION_IS_SUCCESSFULL = 0;
final static int DATA_IS_CORRUPTED = 212;
+ final static int NO_DROP_HAPPENED = 112;
}
diff --git a/jdk/test/java/awt/DataFlavor/MissedHtmlAndRtfBug/MissedHtmlAndRtfBug.html b/jdk/test/java/awt/DataFlavor/MissedHtmlAndRtfBug/MissedHtmlAndRtfBug.html
index af168b4..7f2a48d 100644
--- a/jdk/test/java/awt/DataFlavor/MissedHtmlAndRtfBug/MissedHtmlAndRtfBug.html
+++ b/jdk/test/java/awt/DataFlavor/MissedHtmlAndRtfBug/MissedHtmlAndRtfBug.html
@@ -1,5 +1,5 @@
<!--
- Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
This code is free software; you can redistribute it and/or modify it
@@ -24,7 +24,7 @@
<html>
<!--
@test
- @bug 8005932
+ @bug 8005932 8017456
@summary Java 7 on mac os x only provides text clipboard formats
@author mikhail.cherkasov@oracle.com
@library ../../regtesthelpers
diff --git a/jdk/test/java/awt/DataFlavor/MissedHtmlAndRtfBug/MissedHtmlAndRtfBug.java b/jdk/test/java/awt/DataFlavor/MissedHtmlAndRtfBug/MissedHtmlAndRtfBug.java
index 598426f..4c303cc 100644
--- a/jdk/test/java/awt/DataFlavor/MissedHtmlAndRtfBug/MissedHtmlAndRtfBug.java
+++ b/jdk/test/java/awt/DataFlavor/MissedHtmlAndRtfBug/MissedHtmlAndRtfBug.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -21,17 +21,6 @@
* questions.
*/
-/*
- @bug 8005932
- @summary Java 7 on mac os x only provides text clipboard formats
- @author mikhail.cherkasov@oracle.com
- @library ../../regtesthelpers
- @library ../../regtesthelpers/process
- @build Util
- @build ProcessResults ProcessCommunicator
- @run applet/othervm MissedHtmlAndRtfBug.html
-*/
-
import java.awt.*;
import java.awt.datatransfer.DataFlavor;
import java.awt.event.*;
@@ -47,6 +36,7 @@
import static java.lang.Thread.sleep;
public class MissedHtmlAndRtfBug extends Applet {
+
public void init() {
setLayout(new BorderLayout());
}//End init()
@@ -82,9 +72,6 @@
args.add(concatStrings(DataFlavorSearcher.RICH_TEXT_NAMES));
ProcessResults processResults =
-// ProcessCommunicator.executeChildProcess(this.getClass(), "/Users/mcherkasov/ws/clipboard/DataFlover/out/production/DataFlover" +
-// " -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005 ",
-// args.toArray(new String[0]));
ProcessCommunicator.executeChildProcess(this.getClass(),
"." + File.separator + System.getProperty("java.class.path"), args.toArray(new String[]{}));
@@ -117,6 +104,13 @@
throw new RuntimeException("TEST IS FAILED: Target has received" +
" corrupted data.");
}
+ if (InterprocessMessages.NO_DROP_HAPPENED ==
+ processResults.getExitValue()) {
+ processResults.printProcessErrorOutput(System.err);
+ throw new RuntimeException("Error. Drop did not happen." +
+ " Target frame is possibly covered by a window of other application." +
+ " Please, rerun the test with all windows minimized.");
+ }
processResults.verifyStdErr(System.err);
processResults.verifyProcessExitValue(System.err);
processResults.printProcessStandartOutput(System.out);
@@ -184,7 +178,7 @@
}
}
- public static void main(String[] args) {
+ public static void main(String[] args) throws InterruptedException {
Point dragSourcePoint = new Point(InterprocessArguments.DRAG_SOURCE_POINT_X_ARGUMENT.extractInt(args),
InterprocessArguments.DRAG_SOURCE_POINT_Y_ARGUMENT.extractInt(args));
Point targetFrameLocation = new Point(InterprocessArguments.TARGET_FRAME_X_POSITION_ARGUMENT.extractInt(args),
@@ -197,6 +191,8 @@
} catch (InterruptedException e) {
e.printStackTrace();
}
+ sleep(5000);
+ System.exit(InterprocessMessages.NO_DROP_HAPPENED);
}
diff --git a/jdk/test/java/awt/EventDispatchThread/EDTShutdownTest/EDTShutdownTest.java b/jdk/test/java/awt/EventDispatchThread/EDTShutdownTest/EDTShutdownTest.java
new file mode 100644
index 0000000..7a671b7
--- /dev/null
+++ b/jdk/test/java/awt/EventDispatchThread/EDTShutdownTest/EDTShutdownTest.java
@@ -0,0 +1,100 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ @test
+ @bug 8031694
+ @summary [macosx] TwentyThousandTest test intermittently hangs
+ @author Oleg Pekhovskiy
+ @run main EDTShutdownTest
+ */
+
+import java.awt.EventQueue;
+import java.awt.Toolkit;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import sun.awt.AWTAccessor;
+
+public class EDTShutdownTest {
+
+ private static boolean passed = false;
+
+ public static void main(String[] args) {
+ // Force EDT start with InvocationEvent
+ EventQueue.invokeLater(() -> {
+ // EventQueue is empty now
+ EventQueue queue = Toolkit.getDefaultToolkit()
+ .getSystemEventQueue();
+ Thread thread = AWTAccessor.getEventQueueAccessor()
+ .getDispatchThread(queue);
+ try {
+ /*
+ * Clear EventDispatchThread.doDispatch flag to break message
+ * loop in EventDispatchThread.pumpEventsForFilter()
+ */
+ Method stopDispatching = thread.getClass()
+ .getDeclaredMethod("stopDispatching", null);
+ stopDispatching.setAccessible(true);
+ stopDispatching.invoke(thread, null);
+
+ /*
+ * Post another InvocationEvent that must be handled by another
+ * instance of EDT
+ */
+ EventQueue.invokeLater(() -> {
+ passed = true;
+ });
+ }
+ catch (InvocationTargetException | NoSuchMethodException
+ | IllegalAccessException e) {
+ }
+ });
+
+ // Wait for EDT shutdown
+ EventQueue queue = Toolkit.getDefaultToolkit().getSystemEventQueue();
+ Thread thread = AWTAccessor.getEventQueueAccessor()
+ .getDispatchThread(queue);
+ try {
+ thread.join();
+
+ /*
+ * Wait for another EDT instance to handle the InvocationEvent
+ * and shutdown
+ */
+ thread = AWTAccessor.getEventQueueAccessor()
+ .getDispatchThread(queue);
+ if (thread != null) {
+ thread.join();
+ }
+ }
+ catch (InterruptedException e) {
+ }
+
+ if (passed) {
+ System.out.println("Test PASSED!");
+ }
+ else {
+ throw new RuntimeException("Test FAILED!");
+ }
+ }
+}
diff --git a/jdk/test/java/awt/Frame/ExceptionOnSetExtendedStateTest/ExceptionOnSetExtendedStateTest.java b/jdk/test/java/awt/Frame/ExceptionOnSetExtendedStateTest/ExceptionOnSetExtendedStateTest.java
new file mode 100644
index 0000000..b0f3c63
--- /dev/null
+++ b/jdk/test/java/awt/Frame/ExceptionOnSetExtendedStateTest/ExceptionOnSetExtendedStateTest.java
@@ -0,0 +1,103 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/* @test
+ @bug 8032078
+ @summary Frame.setExtendedState throws RuntimeException, if
+ windowState=ICONIFIED|MAXIMIZED_BOTH, on OS X
+ @author Anton Litvinov
+*/
+
+import java.awt.*;
+
+import sun.awt.SunToolkit;
+
+public class ExceptionOnSetExtendedStateTest {
+ private static final int[] frameStates = { Frame.NORMAL, Frame.ICONIFIED, Frame.MAXIMIZED_BOTH };
+ private static final SunToolkit toolkit = (SunToolkit)Toolkit.getDefaultToolkit();
+
+ private static boolean validatePlatform() {
+ String osName = System.getProperty("os.name");
+ if (osName == null) {
+ throw new RuntimeException("Name of the current OS could not be retrieved.");
+ }
+ return osName.startsWith("Mac");
+ }
+
+ private static void testStateChange(int oldState, int newState, boolean decoratedFrame) {
+ System.out.println(String.format(
+ "testStateChange: oldState='%d', newState='%d', decoratedFrame='%b'",
+ oldState, newState, decoratedFrame));
+
+ Frame frame = new Frame("ExceptionOnSetExtendedStateTest");
+ frame.setSize(200, 200);
+ frame.setUndecorated(!decoratedFrame);
+ frame.setVisible(true);
+ toolkit.realSync();
+
+ frame.setExtendedState(oldState);
+ sleep(1000);
+ frame.setExtendedState(newState);
+
+ boolean stateWasNotChanged = true;
+ int currentState = 0;
+ for (int i = 0; (i < 3) && stateWasNotChanged; i++) {
+ sleep(1000);
+ currentState = frame.getExtendedState();
+ if ((currentState == newState) ||
+ (((newState & Frame.ICONIFIED) != 0) && ((currentState & Frame.ICONIFIED) != 0))) {
+ stateWasNotChanged = false;
+ }
+ }
+ frame.dispose();
+
+ if (stateWasNotChanged) {
+ throw new RuntimeException(String.format(
+ "Frame state was not changed. currentState='%d'", currentState));
+ }
+ }
+
+ private static void sleep(int millis) {
+ try {
+ Thread.sleep(millis);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ public static void main(String[] args) {
+ if (!validatePlatform()) {
+ System.out.println("This test is only for OS X.");
+ return;
+ }
+
+ // Verify that changing states of decorated/undecorated frame to/from supported states
+ // and the state bit mask ICONIFIED | MAXIMIZED_BOTH does not raise RuntimeException.
+ for (int i = 0; i < frameStates.length; i++) {
+ testStateChange(frameStates[i], Frame.ICONIFIED | Frame.MAXIMIZED_BOTH, true);
+ testStateChange(frameStates[i], Frame.ICONIFIED | Frame.MAXIMIZED_BOTH, false);
+ testStateChange(Frame.ICONIFIED | Frame.MAXIMIZED_BOTH, frameStates[i], true);
+ testStateChange(Frame.ICONIFIED | Frame.MAXIMIZED_BOTH, frameStates[i], false);
+ }
+ }
+}
diff --git a/jdk/test/java/awt/Multiscreen/MultiScreenLocationTest/MultiScreenLocationTest.java b/jdk/test/java/awt/Multiscreen/MultiScreenLocationTest/MultiScreenLocationTest.java
new file mode 100644
index 0000000..6937a10
--- /dev/null
+++ b/jdk/test/java/awt/Multiscreen/MultiScreenLocationTest/MultiScreenLocationTest.java
@@ -0,0 +1,110 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ @test
+ @bug 8013116
+ @summary Robot moves mouse to point which differs from set in mouseMove on
+ Unity shell
+ @author Oleg Pekhovskiy
+ @library ../../regtesthelpers
+ @build Util
+ @run main MultiScreenLocationTest
+ */
+
+import java.awt.AWTException;
+import java.awt.Color;
+import java.awt.Frame;
+import java.awt.GraphicsConfiguration;
+import java.awt.GraphicsDevice;
+import java.awt.GraphicsEnvironment;
+import java.awt.MouseInfo;
+import java.awt.Point;
+import java.awt.Rectangle;
+import java.awt.Robot;
+import java.awt.image.BufferedImage;
+import test.java.awt.regtesthelpers.Util;
+
+public class MultiScreenLocationTest {
+ private static final Point mouseOffset = new Point(150, 150);
+ private static final Point frameOffset = new Point(100, 100);
+ private static final Color color = Color.YELLOW;
+
+ private static String getErrorText(final String name, int screen)
+ {
+ return name + " test failed on Screen #" + screen + "!";
+ }
+
+ public static void main(String[] args) throws AWTException
+ {
+ GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
+ GraphicsDevice[] gds = ge.getScreenDevices();
+ if (gds.length < 2) {
+ System.out.println("It's a multiscreen test... skipping!");
+ return;
+ }
+
+ for (int i = 0; i < gds.length; ++i) {
+ GraphicsDevice gd = gds[i];
+ GraphicsConfiguration gc = gd.getDefaultConfiguration();
+ Rectangle screen = gc.getBounds();
+ Robot robot = new Robot(gd);
+
+ // check Robot.mouseMove()
+ robot.mouseMove(screen.x + mouseOffset.x, screen.y + mouseOffset.y);
+ Point mouse = MouseInfo.getPointerInfo().getLocation();
+ Point point = screen.getLocation();
+ point.translate(mouseOffset.x, mouseOffset.y);
+ if (!point.equals(mouse)) {
+ throw new RuntimeException(getErrorText("Robot.mouseMove", i));
+ }
+
+ // check Robot.getPixelColor()
+ Frame frame = new Frame(gc);
+ frame.setUndecorated(true);
+ frame.setSize(100, 100);
+ frame.setLocation(screen.x + frameOffset.x, screen.y + frameOffset.y);
+ frame.setBackground(color);
+ frame.setVisible(true);
+ robot.waitForIdle();
+ Rectangle bounds = frame.getBounds();
+ if (!Util.testBoundsColor(bounds, color, 5, 1000, robot)) {
+ throw new RuntimeException(getErrorText("Robot.getPixelColor", i));
+ }
+
+ // check Robot.createScreenCapture()
+ BufferedImage image = robot.createScreenCapture(bounds);
+ int rgb = color.getRGB();
+ if (image.getRGB(0, 0) != rgb
+ || image.getRGB(image.getWidth() - 1, 0) != rgb
+ || image.getRGB(image.getWidth() - 1, image.getHeight() - 1) != rgb
+ || image.getRGB(0, image.getHeight() - 1) != rgb) {
+ throw new RuntimeException(
+ getErrorText("Robot.createScreenCapture", i));
+ }
+ frame.dispose();
+ }
+
+ System.out.println("Test PASSED!");
+ }
+}
diff --git a/jdk/test/java/awt/dnd/AcceptDropMultipleTimes/AcceptDropMultipleTimes.java b/jdk/test/java/awt/dnd/AcceptDropMultipleTimes/AcceptDropMultipleTimes.java
new file mode 100644
index 0000000..b8bfb44
--- /dev/null
+++ b/jdk/test/java/awt/dnd/AcceptDropMultipleTimes/AcceptDropMultipleTimes.java
@@ -0,0 +1,103 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/**
+ * @test
+ * @bug 8029979
+ * @summary Checks if acceptDrop() can be called several times
+ * @library ../../regtesthelpers
+ * @build Util
+ * @compile AcceptDropMultipleTimes.java
+ * @run main/othervm AcceptDropMultipleTimes
+ * @author anthony.petrov@oracle.com
+ */
+
+import test.java.awt.regtesthelpers.Util;
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.datatransfer.*;
+import java.awt.dnd.*;
+import java.awt.event.InputEvent;
+
+public class AcceptDropMultipleTimes {
+
+ private static final int FRAME_SIZE = 100;
+ private static final int FRAME_LOCATION = 100;
+
+ private static volatile Frame f;
+
+ private static void initAndShowUI() {
+ f = new Frame("Test frame");
+ f.setBounds(FRAME_LOCATION, FRAME_LOCATION, FRAME_SIZE, FRAME_SIZE);
+
+ final DraggablePanel dragSource = new DraggablePanel();
+ dragSource.setBackground(Color.yellow);
+ DropTarget dt = new DropTarget(dragSource, new DropTargetAdapter() {
+ @Override public void drop(DropTargetDropEvent dtde) {
+ // The first call always succeeds
+ dtde.acceptDrop(DnDConstants.ACTION_COPY);
+
+ // The second call should succeed if the fix works
+ dtde.acceptDrop(DnDConstants.ACTION_MOVE);
+
+ dtde.dropComplete(true);
+ }
+ });
+ dragSource.setDropTarget(dt);
+ f.add(dragSource);
+
+ f.setVisible(true);
+ }
+
+ public static void main(String[] args) throws Throwable {
+ try {
+
+ SwingUtilities.invokeAndWait(() -> initAndShowUI());
+
+ Robot r = new Robot();
+ Util.waitForIdle(r);
+ Util.drag(r,
+ new Point(FRAME_LOCATION + FRAME_SIZE / 3, FRAME_LOCATION + FRAME_SIZE / 3),
+ new Point(FRAME_LOCATION + FRAME_SIZE / 3 * 2, FRAME_LOCATION + FRAME_SIZE / 3 * 2),
+ InputEvent.BUTTON1_MASK);
+ Util.waitForIdle(r);
+ } finally {
+ if (f != null) {
+ f.dispose();
+ }
+ }
+ }
+
+ private static class DraggablePanel extends Panel implements DragGestureListener {
+
+ public DraggablePanel() {
+ (new DragSource()).createDefaultDragGestureRecognizer(this, DnDConstants.ACTION_COPY, this);
+ }
+
+ @Override
+ public void dragGestureRecognized(DragGestureEvent dge) {
+ dge.startDrag(Cursor.getDefaultCursor(), new StringSelection("test"));
+ }
+ }
+}
diff --git a/jdk/test/java/awt/image/MultiResolutionImageTest.java b/jdk/test/java/awt/image/MultiResolutionImageTest.java
new file mode 100644
index 0000000..21864f9
--- /dev/null
+++ b/jdk/test/java/awt/image/MultiResolutionImageTest.java
@@ -0,0 +1,620 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.awt.Color;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.Image;
+import java.awt.Toolkit;
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.lang.reflect.Method;
+import java.net.URL;
+import javax.imageio.ImageIO;
+import sun.awt.OSInfo;
+import sun.awt.SunHints;
+import java.awt.MediaTracker;
+import java.awt.geom.AffineTransform;
+import java.awt.image.ImageObserver;
+import java.util.Arrays;
+import java.util.List;
+import javax.swing.JPanel;
+import sun.awt.SunToolkit;
+import sun.awt.image.MultiResolutionImage;
+
+/**
+ * @test
+ * @bug 8011059
+ * @author Alexander Scherbatiy
+ * @summary [macosx] Make JDK demos look perfect on retina displays
+ * @run main MultiResolutionImageTest CUSTOM
+ * @run main MultiResolutionImageTest TOOLKIT_PREPARE
+ * @run main MultiResolutionImageTest TOOLKIT_LOAD
+ * @run main MultiResolutionImageTest TOOLKIT
+ */
+public class MultiResolutionImageTest {
+
+ private static final int IMAGE_WIDTH = 300;
+ private static final int IMAGE_HEIGHT = 200;
+ private static final Color COLOR_1X = Color.GREEN;
+ private static final Color COLOR_2X = Color.BLUE;
+ private static final String IMAGE_NAME_1X = "image.png";
+ private static final String IMAGE_NAME_2X = "image@2x.png";
+
+ public static void main(String[] args) throws Exception {
+
+ System.out.println("args: " + args.length);
+
+ if (args.length == 0) {
+ throw new RuntimeException("Not found a test");
+ }
+
+ String test = args[0];
+
+ System.out.println("TEST: " + test);
+ System.out.println("CHECK OS: " + checkOS());
+
+ if ("CUSTOM".equals(test)) {
+ testCustomMultiResolutionImage();
+ } else if (checkOS()) {
+ switch (test) {
+ case "CUSTOM":
+ break;
+ case "TOOLKIT_PREPARE":
+ testToolkitMultiResolutionImagePrepare();
+ break;
+ case "TOOLKIT_LOAD":
+ testToolkitMultiResolutionImageLoad();
+ break;
+ case "TOOLKIT":
+ testToolkitMultiResolutionImage();
+ testImageNameTo2xParsing();
+ break;
+ default:
+ throw new RuntimeException("Unknown test: " + test);
+ }
+ }
+ }
+
+ static boolean checkOS() {
+ return OSInfo.getOSType() == OSInfo.OSType.MACOSX;
+ }
+
+ public static void testCustomMultiResolutionImage() {
+ testCustomMultiResolutionImage(false);
+ testCustomMultiResolutionImage(true);
+ }
+
+ public static void testCustomMultiResolutionImage(boolean enableImageScaling) {
+
+ Image image = new MultiResolutionBufferedImage();
+
+ // Same image size
+ BufferedImage bufferedImage = new BufferedImage(IMAGE_WIDTH, IMAGE_HEIGHT,
+ BufferedImage.TYPE_INT_RGB);
+ Graphics2D g2d = (Graphics2D) bufferedImage.getGraphics();
+ setImageScalingHint(g2d, enableImageScaling);
+ g2d.drawImage(image, 0, 0, null);
+ checkColor(bufferedImage.getRGB(3 * IMAGE_WIDTH / 4, 3 * IMAGE_HEIGHT / 4), false);
+
+ // Twice image size
+ bufferedImage = new BufferedImage(2 * IMAGE_WIDTH, 2 * IMAGE_HEIGHT,
+ BufferedImage.TYPE_INT_RGB);
+ g2d = (Graphics2D) bufferedImage.getGraphics();
+ setImageScalingHint(g2d, enableImageScaling);
+ g2d.drawImage(image, 0, 0, 2 * IMAGE_WIDTH, 2 * IMAGE_HEIGHT, 0, 0, IMAGE_WIDTH, IMAGE_HEIGHT, null);
+ checkColor(bufferedImage.getRGB(3 * IMAGE_WIDTH / 2, 3 * IMAGE_HEIGHT / 2), enableImageScaling);
+
+ // Scale 2x
+ bufferedImage = new BufferedImage(2 * IMAGE_WIDTH, 2 * IMAGE_HEIGHT, BufferedImage.TYPE_INT_RGB);
+ g2d = (Graphics2D) bufferedImage.getGraphics();
+ setImageScalingHint(g2d, enableImageScaling);
+ g2d.scale(2, 2);
+ g2d.drawImage(image, 0, 0, IMAGE_WIDTH, IMAGE_HEIGHT, null);
+ checkColor(bufferedImage.getRGB(3 * IMAGE_WIDTH / 2, 3 * IMAGE_HEIGHT / 2), enableImageScaling);
+
+ // Rotate
+ bufferedImage = new BufferedImage(IMAGE_WIDTH, IMAGE_HEIGHT,
+ BufferedImage.TYPE_INT_RGB);
+ g2d = (Graphics2D) bufferedImage.getGraphics();
+ setImageScalingHint(g2d, enableImageScaling);
+ g2d.drawImage(image, 0, 0, null);
+ g2d.rotate(Math.PI / 4);
+ checkColor(bufferedImage.getRGB(3 * IMAGE_WIDTH / 4, 3 * IMAGE_HEIGHT / 4), false);
+
+ // Scale 2x and Rotate
+ bufferedImage = new BufferedImage(2 * IMAGE_WIDTH, 2 * IMAGE_HEIGHT, BufferedImage.TYPE_INT_RGB);
+ g2d = (Graphics2D) bufferedImage.getGraphics();
+ setImageScalingHint(g2d, enableImageScaling);
+ g2d.scale(-2, 2);
+ g2d.rotate(-Math.PI / 10);
+ g2d.drawImage(image, -IMAGE_WIDTH, 0, IMAGE_WIDTH, IMAGE_HEIGHT, null);
+ checkColor(bufferedImage.getRGB(3 * IMAGE_WIDTH / 2, 3 * IMAGE_HEIGHT / 2), enableImageScaling);
+
+ // General Transform
+ bufferedImage = new BufferedImage(2 * IMAGE_WIDTH, 2 * IMAGE_HEIGHT, BufferedImage.TYPE_INT_RGB);
+ g2d = (Graphics2D) bufferedImage.getGraphics();
+ setImageScalingHint(g2d, enableImageScaling);
+ float delta = 0.05f;
+ float cos = 1 - delta * delta / 2;
+ float sin = 1 + delta;
+ AffineTransform transform = new AffineTransform(2 * cos, 0.1, 0.3, -2 * sin, 10, -5);
+ g2d.setTransform(transform);
+ g2d.drawImage(image, 0, -IMAGE_HEIGHT, IMAGE_WIDTH, IMAGE_HEIGHT, null);
+ checkColor(bufferedImage.getRGB(3 * IMAGE_WIDTH / 2, 3 * IMAGE_HEIGHT / 2), enableImageScaling);
+
+ int D = 10;
+ // From Source to small Destination region
+ bufferedImage = new BufferedImage(IMAGE_WIDTH, IMAGE_HEIGHT, BufferedImage.TYPE_INT_RGB);
+ g2d = (Graphics2D) bufferedImage.getGraphics();
+ setImageScalingHint(g2d, enableImageScaling);
+ g2d.drawImage(image, IMAGE_WIDTH / 2, IMAGE_HEIGHT / 2, IMAGE_WIDTH - D, IMAGE_HEIGHT - D,
+ D, D, IMAGE_WIDTH - D, IMAGE_HEIGHT - D, null);
+ checkColor(bufferedImage.getRGB(3 * IMAGE_WIDTH / 4, 3 * IMAGE_HEIGHT / 4), false);
+
+ // From Source to large Destination region
+ bufferedImage = new BufferedImage(2 * IMAGE_WIDTH, 2 * IMAGE_HEIGHT, BufferedImage.TYPE_INT_RGB);
+ g2d = (Graphics2D) bufferedImage.getGraphics();
+ setImageScalingHint(g2d, enableImageScaling);
+ g2d.drawImage(image, D, D, 2 * IMAGE_WIDTH - D, 2 * IMAGE_HEIGHT - D,
+ IMAGE_WIDTH / 2, IMAGE_HEIGHT / 2, IMAGE_WIDTH - D, IMAGE_HEIGHT - D, null);
+ checkColor(bufferedImage.getRGB(3 * IMAGE_WIDTH / 2, 3 * IMAGE_HEIGHT / 2), enableImageScaling);
+ }
+
+ static class MultiResolutionBufferedImage extends BufferedImage
+ implements MultiResolutionImage {
+
+ Image highResolutionImage;
+
+ public MultiResolutionBufferedImage() {
+ super(IMAGE_WIDTH, IMAGE_HEIGHT, BufferedImage.TYPE_INT_RGB);
+ highResolutionImage = new BufferedImage(
+ 2 * IMAGE_WIDTH, 2 * IMAGE_HEIGHT, BufferedImage.TYPE_INT_RGB);
+ draw(getGraphics(), 1);
+ draw(highResolutionImage.getGraphics(), 2);
+ }
+
+ void draw(Graphics graphics, float resolution) {
+ Graphics2D g2 = (Graphics2D) graphics;
+ g2.scale(resolution, resolution);
+ g2.setColor((resolution == 1) ? COLOR_1X : COLOR_2X);
+ g2.fillRect(0, 0, IMAGE_WIDTH, IMAGE_HEIGHT);
+ }
+
+ @Override
+ public Image getResolutionVariant(int width, int height) {
+ return ((width <= getWidth() && height <= getHeight()))
+ ? this : highResolutionImage;
+ }
+
+ @Override
+ public List<Image> getResolutionVariants() {
+ return Arrays.asList(this, highResolutionImage);
+ }
+ }
+
+ static void testToolkitMultiResolutionImagePrepare() throws Exception {
+
+ generateImages();
+
+ File imageFile = new File(IMAGE_NAME_1X);
+ String fileName = imageFile.getAbsolutePath();
+
+ Image image = Toolkit.getDefaultToolkit().getImage(fileName);
+
+ SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
+ toolkit.prepareImage(image, IMAGE_WIDTH, IMAGE_HEIGHT, new LoadImageObserver(image));
+
+ testToolkitMultiResolutionImageLoad(image);
+ }
+
+ static void testToolkitMultiResolutionImageLoad() throws Exception {
+
+ generateImages();
+
+ File imageFile = new File(IMAGE_NAME_1X);
+ String fileName = imageFile.getAbsolutePath();
+ Image image = Toolkit.getDefaultToolkit().getImage(fileName);
+ testToolkitMultiResolutionImageLoad(image);
+ }
+
+ static void testToolkitMultiResolutionImageLoad(Image image) throws Exception {
+
+ MediaTracker tracker = new MediaTracker(new JPanel());
+ tracker.addImage(image, 0);
+ tracker.waitForID(0);
+ if (tracker.isErrorAny()) {
+ throw new RuntimeException("Error during image loading");
+ }
+ tracker.removeImage(image, 0);
+
+ testImageLoaded(image);
+
+ int w = image.getWidth(null);
+ int h = image.getHeight(null);
+
+ Image resolutionVariant = ((MultiResolutionImage) image)
+ .getResolutionVariant(2 * w, 2 * h);
+
+ if (image == resolutionVariant) {
+ throw new RuntimeException("Resolution variant is not loaded");
+ }
+
+ testImageLoaded(resolutionVariant);
+ }
+
+ static void testImageLoaded(Image image) {
+
+ SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
+
+ int flags = toolkit.checkImage(image, IMAGE_WIDTH, IMAGE_WIDTH, new SilentImageObserver());
+ if ((flags & (ImageObserver.FRAMEBITS | ImageObserver.ALLBITS)) == 0) {
+ throw new RuntimeException("Image is not loaded!");
+ }
+ }
+
+ static class SilentImageObserver implements ImageObserver {
+
+ @Override
+ public boolean imageUpdate(Image img, int infoflags, int x, int y, int width, int height) {
+ throw new RuntimeException("Observer should not be called!");
+ }
+ }
+
+ static class LoadImageObserver implements ImageObserver {
+
+ Image image;
+
+ public LoadImageObserver(Image image) {
+ this.image = image;
+ }
+
+ @Override
+ public boolean imageUpdate(Image img, int infoflags, int x, int y, int width, int height) {
+
+ if (image != img) {
+ throw new RuntimeException("Original image is not passed to the observer");
+ }
+
+ if ((infoflags & ImageObserver.WIDTH) != 0) {
+ if (width != IMAGE_WIDTH) {
+ throw new RuntimeException("Original width is not passed to the observer");
+ }
+ }
+
+ if ((infoflags & ImageObserver.HEIGHT) != 0) {
+ if (height != IMAGE_HEIGHT) {
+ throw new RuntimeException("Original height is not passed to the observer");
+ }
+ }
+
+ return (infoflags & ALLBITS) == 0;
+ }
+
+ }
+
+ static void testToolkitMultiResolutionImage() throws Exception {
+
+ generateImages();
+
+ File imageFile = new File(IMAGE_NAME_1X);
+ String fileName = imageFile.getAbsolutePath();
+ URL url = imageFile.toURI().toURL();
+ testToolkitMultiResolutionImageChache(fileName, url);
+
+ Image image = Toolkit.getDefaultToolkit().getImage(fileName);
+ testToolkitImageObserver(image);
+ testToolkitMultiResolutionImage(image, false);
+ testToolkitMultiResolutionImage(image, true);
+
+ image = Toolkit.getDefaultToolkit().getImage(url);
+ testToolkitImageObserver(image);
+ testToolkitMultiResolutionImage(image, false);
+ testToolkitMultiResolutionImage(image, true);
+ }
+
+ static void testToolkitMultiResolutionImageChache(String fileName, URL url) {
+
+ Image img1 = Toolkit.getDefaultToolkit().getImage(fileName);
+ if (!(img1 instanceof MultiResolutionImage)) {
+ throw new RuntimeException("Not a MultiResolutionImage");
+ }
+
+ Image img2 = Toolkit.getDefaultToolkit().getImage(fileName);
+ if (img1 != img2) {
+ throw new RuntimeException("Image is not cached");
+ }
+
+ img1 = Toolkit.getDefaultToolkit().getImage(url);
+ if (!(img1 instanceof MultiResolutionImage)) {
+ throw new RuntimeException("Not a MultiResolutionImage");
+ }
+
+ img2 = Toolkit.getDefaultToolkit().getImage(url);
+ if (img1 != img2) {
+ throw new RuntimeException("Image is not cached");
+ }
+ }
+
+ static void testToolkitMultiResolutionImage(Image image, boolean enableImageScaling)
+ throws Exception {
+
+ MediaTracker tracker = new MediaTracker(new JPanel());
+ tracker.addImage(image, 0);
+ tracker.waitForID(0);
+ if (tracker.isErrorAny()) {
+ throw new RuntimeException("Error during image loading");
+ }
+
+ final BufferedImage bufferedImage1x = new BufferedImage(IMAGE_WIDTH, IMAGE_HEIGHT,
+ BufferedImage.TYPE_INT_RGB);
+ Graphics2D g1x = (Graphics2D) bufferedImage1x.getGraphics();
+ setImageScalingHint(g1x, false);
+ g1x.drawImage(image, 0, 0, null);
+ checkColor(bufferedImage1x.getRGB(3 * IMAGE_WIDTH / 4, 3 * IMAGE_HEIGHT / 4), false);
+
+ Image resolutionVariant = ((MultiResolutionImage) image).
+ getResolutionVariant(2 * IMAGE_WIDTH, 2 * IMAGE_HEIGHT);
+
+ if (resolutionVariant == null) {
+ throw new RuntimeException("Resolution variant is null");
+ }
+
+ MediaTracker tracker2x = new MediaTracker(new JPanel());
+ tracker2x.addImage(resolutionVariant, 0);
+ tracker2x.waitForID(0);
+ if (tracker2x.isErrorAny()) {
+ throw new RuntimeException("Error during scalable image loading");
+ }
+
+ final BufferedImage bufferedImage2x = new BufferedImage(2 * IMAGE_WIDTH,
+ 2 * IMAGE_HEIGHT, BufferedImage.TYPE_INT_RGB);
+ Graphics2D g2x = (Graphics2D) bufferedImage2x.getGraphics();
+ setImageScalingHint(g2x, enableImageScaling);
+ g2x.drawImage(image, 0, 0, 2 * IMAGE_WIDTH, 2 * IMAGE_HEIGHT, 0, 0, IMAGE_WIDTH, IMAGE_HEIGHT, null);
+ checkColor(bufferedImage2x.getRGB(3 * IMAGE_WIDTH / 2, 3 * IMAGE_HEIGHT / 2), enableImageScaling);
+
+ if (!(image instanceof MultiResolutionImage)) {
+ throw new RuntimeException("Not a MultiResolutionImage");
+ }
+
+ MultiResolutionImage multiResolutionImage = (MultiResolutionImage) image;
+
+ Image image1x = multiResolutionImage.getResolutionVariant(IMAGE_WIDTH, IMAGE_HEIGHT);
+ Image image2x = multiResolutionImage.getResolutionVariant(2 * IMAGE_WIDTH, 2 * IMAGE_HEIGHT);
+
+ if (image1x.getWidth(null) * 2 != image2x.getWidth(null)
+ || image1x.getHeight(null) * 2 != image2x.getHeight(null)) {
+ throw new RuntimeException("Wrong resolution variant size");
+ }
+ }
+
+ static void testToolkitImageObserver(final Image image) {
+
+ ImageObserver observer = new ImageObserver() {
+
+ @Override
+ public boolean imageUpdate(Image img, int infoflags, int x, int y, int width, int height) {
+
+ if (img != image) {
+ throw new RuntimeException("Wrong image in observer");
+ }
+
+ if ((infoflags & (ImageObserver.ERROR | ImageObserver.ABORT)) != 0) {
+ throw new RuntimeException("Error during image loading");
+ }
+
+ return (infoflags & ImageObserver.ALLBITS) == 0;
+
+ }
+ };
+
+ final BufferedImage bufferedImage2x = new BufferedImage(2 * IMAGE_WIDTH,
+ 2 * IMAGE_HEIGHT, BufferedImage.TYPE_INT_RGB);
+ Graphics2D g2x = (Graphics2D) bufferedImage2x.getGraphics();
+ setImageScalingHint(g2x, true);
+
+ g2x.drawImage(image, 0, 0, 2 * IMAGE_WIDTH, 2 * IMAGE_HEIGHT, 0, 0, IMAGE_WIDTH, IMAGE_HEIGHT, observer);
+
+ }
+
+ static void setImageScalingHint(Graphics2D g2d, boolean enableImageScaling) {
+ g2d.setRenderingHint(SunHints.KEY_RESOLUTION_VARIANT, enableImageScaling
+ ? SunHints.VALUE_RESOLUTION_VARIANT_ON
+ : SunHints.VALUE_RESOLUTION_VARIANT_OFF);
+ }
+
+ static void checkColor(int rgb, boolean isImageScaled) {
+
+ if (!isImageScaled && COLOR_1X.getRGB() != rgb) {
+ throw new RuntimeException("Wrong 1x color: " + new Color(rgb));
+ }
+
+ if (isImageScaled && COLOR_2X.getRGB() != rgb) {
+ throw new RuntimeException("Wrong 2x color" + new Color(rgb));
+ }
+ }
+
+ static void generateImages() throws Exception {
+ if (!new File(IMAGE_NAME_1X).exists()) {
+ generateImage(1);
+ }
+
+ if (!new File(IMAGE_NAME_2X).exists()) {
+ generateImage(2);
+ }
+ }
+
+ static void generateImage(int scale) throws Exception {
+ BufferedImage image = new BufferedImage(scale * IMAGE_WIDTH, scale * IMAGE_HEIGHT,
+ BufferedImage.TYPE_INT_RGB);
+ Graphics g = image.getGraphics();
+ g.setColor(scale == 1 ? COLOR_1X : COLOR_2X);
+ g.fillRect(0, 0, scale * IMAGE_WIDTH, scale * IMAGE_HEIGHT);
+ File file = new File(scale == 1 ? IMAGE_NAME_1X : IMAGE_NAME_2X);
+ ImageIO.write(image, "png", file);
+ }
+
+ static void testImageNameTo2xParsing() throws Exception {
+
+ for (String[] testNames : TEST_FILE_NAMES) {
+ String testName = testNames[0];
+ String goldenName = testNames[1];
+ String resultName = getTestScaledImageName(testName);
+
+ if (!isValidPath(testName) && resultName == null) {
+ continue;
+ }
+
+ if (goldenName.equals(resultName)) {
+ continue;
+ }
+
+ throw new RuntimeException("Test name " + testName
+ + ", result name: " + resultName);
+ }
+
+ for (URL[] testURLs : TEST_URLS) {
+ URL testURL = testURLs[0];
+ URL goldenURL = testURLs[1];
+ URL resultURL = getTestScaledImageURL(testURL);
+
+ if (!isValidPath(testURL.getPath()) && resultURL == null) {
+ continue;
+ }
+
+ if (goldenURL.equals(resultURL)) {
+ continue;
+ }
+
+ throw new RuntimeException("Test url: " + testURL
+ + ", result url: " + resultURL);
+ }
+
+ }
+
+ static URL getTestScaledImageURL(URL url) throws Exception {
+ Method method = getScalableImageMethod("getScaledImageURL", URL.class);
+ return (URL) method.invoke(null, url);
+ }
+
+ static String getTestScaledImageName(String name) throws Exception {
+ Method method = getScalableImageMethod("getScaledImageName", String.class);
+ return (String) method.invoke(null, name);
+ }
+
+ private static boolean isValidPath(String path) {
+ return !path.isEmpty() && !path.endsWith("/") && !path.endsWith(".")
+ && !path.contains("@2x");
+ }
+
+ private static Method getScalableImageMethod(String name,
+ Class... parameterTypes) throws Exception {
+ Toolkit toolkit = Toolkit.getDefaultToolkit();
+ Method method = toolkit.getClass().getDeclaredMethod(name, parameterTypes);
+ method.setAccessible(true);
+ return method;
+ }
+ private static final String[][] TEST_FILE_NAMES;
+ private static final URL[][] TEST_URLS;
+
+ static {
+ TEST_FILE_NAMES = new String[][]{
+ {"", null},
+ {".", null},
+ {"..", null},
+ {"/", null},
+ {"/.", null},
+ {"dir/", null},
+ {"dir/.", null},
+ {"aaa@2x.png", null},
+ {"/dir/aaa@2x.png", null},
+ {"image", "image@2x"},
+ {"image.ext", "image@2x.ext"},
+ {"image.aaa.ext", "image.aaa@2x.ext"},
+ {"dir/image", "dir/image@2x"},
+ {"dir/image.ext", "dir/image@2x.ext"},
+ {"dir/image.aaa.ext", "dir/image.aaa@2x.ext"},
+ {"dir/aaa.bbb/image", "dir/aaa.bbb/image@2x"},
+ {"dir/aaa.bbb/image.ext", "dir/aaa.bbb/image@2x.ext"},
+ {"dir/aaa.bbb/image.ccc.ext", "dir/aaa.bbb/image.ccc@2x.ext"},
+ {"/dir/image", "/dir/image@2x"},
+ {"/dir/image.ext", "/dir/image@2x.ext"},
+ {"/dir/image.aaa.ext", "/dir/image.aaa@2x.ext"},
+ {"/dir/aaa.bbb/image", "/dir/aaa.bbb/image@2x"},
+ {"/dir/aaa.bbb/image.ext", "/dir/aaa.bbb/image@2x.ext"},
+ {"/dir/aaa.bbb/image.ccc.ext", "/dir/aaa.bbb/image.ccc@2x.ext"}
+ };
+ try {
+ TEST_URLS = new URL[][]{
+ // file
+ {new URL("file:/aaa"), new URL("file:/aaa@2x")},
+ {new URL("file:/aaa.ext"), new URL("file:/aaa@2x.ext")},
+ {new URL("file:/aaa.bbb.ext"), new URL("file:/aaa.bbb@2x.ext")},
+ {new URL("file:/ccc/aaa.bbb.ext"),
+ new URL("file:/ccc/aaa.bbb@2x.ext")},
+ {new URL("file:/ccc.ddd/aaa.bbb.ext"),
+ new URL("file:/ccc.ddd/aaa.bbb@2x.ext")},
+ {new URL("file:///~/image"), new URL("file:///~/image@2x")},
+ {new URL("file:///~/image.ext"),
+ new URL("file:///~/image@2x.ext")},
+ // http
+ {new URL("http://www.test.com"), null},
+ {new URL("http://www.test.com/"), null},
+ {new URL("http://www.test.com///"), null},
+ {new URL("http://www.test.com/image"),
+ new URL("http://www.test.com/image@2x")},
+ {new URL("http://www.test.com/image.ext"),
+ new URL("http://www.test.com/image@2x.ext")},
+ {new URL("http://www.test.com/dir/image"),
+ new URL("http://www.test.com/dir/image@2x")},
+ {new URL("http://www.test.com:80/dir/image.aaa.ext"),
+ new URL("http://www.test.com:80/dir/image.aaa@2x.ext")},
+ {new URL("http://www.test.com:8080/dir/image.aaa.ext"),
+ new URL("http://www.test.com:8080/dir/image.aaa@2x.ext")},
+ // jar
+ {new URL("jar:file:/dir/Java2D.jar!/image"),
+ new URL("jar:file:/dir/Java2D.jar!/image@2x")},
+ {new URL("jar:file:/dir/Java2D.jar!/image.aaa.ext"),
+ new URL("jar:file:/dir/Java2D.jar!/image.aaa@2x.ext")},
+ {new URL("jar:file:/dir/Java2D.jar!/images/image"),
+ new URL("jar:file:/dir/Java2D.jar!/images/image@2x")},
+ {new URL("jar:file:/dir/Java2D.jar!/images/image.ext"),
+ new URL("jar:file:/dir/Java2D.jar!/images/image@2x.ext")},
+ {new URL("jar:file:/aaa.bbb/Java2D.jar!/images/image.ext"),
+ new URL("jar:file:/aaa.bbb/Java2D.jar!/images/image@2x.ext")},
+ {new URL("jar:file:/dir/Java2D.jar!/aaa.bbb/image.ext"),
+ new URL("jar:file:/dir/Java2D.jar!/aaa.bbb/image@2x.ext")},};
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ static class PreloadedImageObserver implements ImageObserver {
+
+ @Override
+ public boolean imageUpdate(Image img, int infoflags, int x, int y, int width, int height) {
+ throw new RuntimeException("Image should be already preloaded");
+ }
+ }
+}
diff --git a/jdk/test/java/awt/regtesthelpers/Util.java b/jdk/test/java/awt/regtesthelpers/Util.java
index 2a606bc..95ad563 100644
--- a/jdk/test/java/awt/regtesthelpers/Util.java
+++ b/jdk/test/java/awt/regtesthelpers/Util.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2006, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2006, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -51,6 +51,7 @@
import java.awt.IllegalComponentStateException;
import java.awt.AWTException;
import java.awt.AWTEvent;
+import java.awt.Color;
import java.awt.event.InputEvent;
import java.awt.event.WindowAdapter;
@@ -184,6 +185,57 @@
}
}
+ /**
+ * Tests whether screen pixel has the expected color performing several
+ * attempts. This method is useful for asynchronous window manager where
+ * it's impossible to determine when drawing actually takes place.
+ *
+ * @param x X position of pixel
+ * @param y Y position of pixel
+ * @param color expected color
+ * @param attempts number of attempts to undertake
+ * @param delay delay before each attempt
+ * @param robot a robot to use for retrieving pixel color
+ * @return true if pixel color matches the color expected, otherwise false
+ */
+ public static boolean testPixelColor(int x, int y, final Color color, int attempts, int delay, final Robot robot) {
+ while (attempts-- > 0) {
+ robot.delay(delay);
+ Color screen = robot.getPixelColor(x, y);
+ if (screen.equals(color)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Tests whether the area within boundaries has the expected color
+ * performing several attempts. This method is useful for asynchronous
+ * window manager where it's impossible to determine when drawing actually
+ * takes place.
+ *
+ * @param bounds position of area
+ * @param color expected color
+ * @param attempts number of attempts to undertake
+ * @param delay delay before each attempt
+ * @param robot a robot to use for retrieving pixel color
+ * @return true if area color matches the color expected, otherwise false
+ */
+ public static boolean testBoundsColor(final Rectangle bounds, final Color color, int attempts, int delay, final Robot robot) {
+ int right = bounds.x + bounds.width - 1;
+ int bottom = bounds.y + bounds.height - 1;
+ while (attempts-- > 0) {
+ if (testPixelColor(bounds.x, bounds.y, color, 1, delay, robot)
+ && testPixelColor(right, bounds.y, color, 1, 0, robot)
+ && testPixelColor(right, bottom, color, 1, 0, robot)
+ && testPixelColor(bounds.x, bottom, color, 1, 0, robot)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
public static void waitForIdle(final Robot robot) {
// we do not use robot for now, use SunToolkit.realSync() instead
((sun.awt.SunToolkit)Toolkit.getDefaultToolkit()).realSync();
diff --git a/jdk/test/java/lang/ClassLoader/Assert.sh b/jdk/test/java/lang/ClassLoader/Assert.sh
index 00822b6..24dadd1 100644
--- a/jdk/test/java/lang/ClassLoader/Assert.sh
+++ b/jdk/test/java/lang/ClassLoader/Assert.sh
@@ -23,6 +23,21 @@
#
+OS=`uname -s`
+case "$OS" in
+ SunOS | Linux | Darwin )
+ FS="/"
+ CHMOD="${FS}bin${FS}chmod"
+ ;;
+ Windows* | CYGWIN* )
+ CHMOD="chmod"
+ ;;
+ * )
+ echo "Unrecognized system!"
+ exit 1;
+ ;;
+esac
+
if [ "${TESTSRC}" = "" ]
then
echo "TESTSRC not set. Test cannot execute. Failed."
@@ -50,6 +65,7 @@
cp ${TESTSRC}/Assert.java .
cp -R ${TESTSRC}/package1 .
cp -R ${TESTSRC}/package2 .
+${CHMOD} -R u+w *
${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} Assert.java
diff --git a/jdk/test/java/lang/instrument/DaemonThread/DummyAgent.java b/jdk/test/java/lang/instrument/DaemonThread/DummyAgent.java
new file mode 100644
index 0000000..64b4d59
--- /dev/null
+++ b/jdk/test/java/lang/instrument/DaemonThread/DummyAgent.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2014 Goldman Sachs.
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.lang.instrument.ClassFileTransformer;
+import java.lang.instrument.IllegalClassFormatException;
+import java.lang.instrument.Instrumentation;
+import java.security.ProtectionDomain;
+
+public class DummyAgent implements ClassFileTransformer {
+ @Override
+ public byte[] transform(ClassLoader loader, String className,
+ Class<?> classBeingRedefined, ProtectionDomain protectionDomain,
+ byte[] classfileBuffer) throws IllegalClassFormatException {
+
+ /* The Daemon Thread bug is timing dependent and you want the transform method
+ * to return ASAP - so just return the buffer will be fine
+ */
+ return classfileBuffer;
+ }
+
+ public static void premain(String agentArgs, Instrumentation inst) {
+ inst.addTransformer(new DummyAgent(), false);
+ }
+
+}
diff --git a/jdk/test/java/lang/instrument/DaemonThread/DummyClass.java b/jdk/test/java/lang/instrument/DaemonThread/DummyClass.java
new file mode 100644
index 0000000..18d671a
--- /dev/null
+++ b/jdk/test/java/lang/instrument/DaemonThread/DummyClass.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright 2014 Goldman Sachs.
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/* Just a dummy class for loading */
+public class DummyClass {
+}
diff --git a/jdk/test/java/lang/instrument/DaemonThread/TestDaemonThread.java b/jdk/test/java/lang/instrument/DaemonThread/TestDaemonThread.java
new file mode 100644
index 0000000..20c9077
--- /dev/null
+++ b/jdk/test/java/lang/instrument/DaemonThread/TestDaemonThread.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2014 Goldman Sachs.
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+/* @test
+ * @bug 7142035
+ * @summary Assert in java.lang.instrument agents during shutdown when classloading occurs after shutdown
+ * @library /lib/testlibrary
+ *
+ * @build DummyAgent DummyClass TestDaemonThreadLauncher TestDaemonThread
+ * @run shell ../MakeJAR3.sh DummyAgent
+ * @run main TestDaemonThreadLauncher /timeout=240
+ *
+ */
+import java.io.File;
+import java.net.URL;
+import java.net.URLClassLoader;
+
+public class TestDaemonThread implements Runnable{
+ File classpath;
+
+ public TestDaemonThread(File classpath) {
+ this.classpath = classpath;
+ }
+
+ @Override
+ public void run() {
+
+
+ try {
+ URL u = this.getClass().getClassLoader().getResource("DummyClass.class");
+ String path = u.getPath();
+ String parent = u.getPath().substring(0, path.lastIndexOf('/')+1);
+ URL parentURL = new URL(u, parent);
+ System.out.println(parentURL);
+ /* Load lots of class by creating multiple classloaders */
+ for(;;) {
+ ClassLoader cl = new URLClassLoader(new URL[] {parentURL}, null);
+ cl.loadClass("DummyClass");
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ public static void main(String[] args) throws Exception {
+ Thread t = new Thread(new TestDaemonThread(new File(args[0])));
+ /* The important part of the bug is that a Daemon thread can continue to load classes after shutdown */
+ t.setDaemon(true);
+ t.start();
+ Thread.sleep(200);
+ }
+}
diff --git a/jdk/test/java/lang/instrument/DaemonThread/TestDaemonThreadLauncher.java b/jdk/test/java/lang/instrument/DaemonThread/TestDaemonThreadLauncher.java
new file mode 100644
index 0000000..9660bbf
--- /dev/null
+++ b/jdk/test/java/lang/instrument/DaemonThread/TestDaemonThreadLauncher.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2014 Goldman Sachs.
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+import jdk.testlibrary.JDKToolLauncher;
+import jdk.testlibrary.OutputAnalyzer;
+import jdk.testlibrary.ProcessTools;
+
+import java.io.IOException;
+import java.nio.file.Path;
+
+public class TestDaemonThreadLauncher {
+
+ private static ProcessBuilder processBuilder = new ProcessBuilder();
+
+ public static void main(String args[]) throws Exception {
+ for(int i=0; i<50; i++) {
+ ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-javaagent:DummyAgent.jar", "TestDaemonThread", ".");
+ OutputAnalyzer analyzer = new OutputAnalyzer(pb.start());
+ analyzer.shouldNotContain("ASSERTION FAILED");
+ }
+ }
+}
diff --git a/jdk/test/java/lang/management/MemoryMXBean/MemoryManagement.java b/jdk/test/java/lang/management/MemoryMXBean/MemoryManagement.java
index d9c8d47..4077d2a 100644
--- a/jdk/test/java/lang/management/MemoryMXBean/MemoryManagement.java
+++ b/jdk/test/java/lang/management/MemoryMXBean/MemoryManagement.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -23,9 +23,9 @@
/*
* @test
- * @bug 4530538
+ * @bug 4530538 6980984
* @summary Basic unit test of memory management testing:
- * 1) setUsatgeThreshold() and getUsageThreshold()
+ * 1) setUsageThreshold() and getUsageThreshold()
* 2) test low memory detection on the old generation.
*
* @author Mandy Chung
@@ -40,16 +40,18 @@
import javax.management.openmbean.CompositeData;
public class MemoryManagement {
- private static MemoryMXBean mm = ManagementFactory.getMemoryMXBean();
- private static List pools = ManagementFactory.getMemoryPoolMXBeans();
- private static List managers = ManagementFactory.getMemoryManagerMXBeans();
- private static MemoryPoolMXBean mpool = null;
- private static boolean trace = false;
- private static boolean testFailed = false;
+ private static final MemoryMXBean mm = ManagementFactory.getMemoryMXBean();
+ private static final List pools =
+ Collections.synchronizedList(ManagementFactory.getMemoryPoolMXBeans());
+ private static final List managers =
+ Collections.synchronizedList(ManagementFactory.getMemoryManagerMXBeans());
+ private static volatile MemoryPoolMXBean mpool = null;
+ private static volatile boolean trace = false;
+ private static volatile boolean testFailed = false;
private static final int NUM_CHUNKS = 2;
- private static long chunkSize;
+ private static volatile long chunkSize;
+ private static volatile int listenerInvoked = 0;
- private static int listenerInvoked = 0;
static class SensorListener implements NotificationListener {
public void handleNotification(Notification notif, Object handback) {
String type = notif.getType();
@@ -101,7 +103,13 @@
// Now set threshold
MemoryUsage mu = mpool.getUsage();
- chunkSize = (mu.getMax() - mu.getUsed()) / 20;
+ long max = mu.getMax();
+ if (max != -1) {
+ chunkSize = (max - mu.getUsed()) / 20;
+ } else { // 6980984
+ System.gc();
+ chunkSize = Runtime.getRuntime().freeMemory()/20;
+ }
newThreshold = mu.getUsed() + (chunkSize * NUM_CHUNKS);
System.out.println("Setting threshold for " + mpool.getName() +
diff --git a/jdk/test/java/lang/management/ThreadMXBean/Locks.java b/jdk/test/java/lang/management/ThreadMXBean/Locks.java
index 9bc147d..e65d363 100644
--- a/jdk/test/java/lang/management/ThreadMXBean/Locks.java
+++ b/jdk/test/java/lang/management/ThreadMXBean/Locks.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -27,18 +27,19 @@
* @summary Basic unit test of ThreadInfo.getLockName()
* and ThreadInfo.getLockOwnerName()
* @author Mandy Chung
+ * @author Jaroslav Bachorik
*
- * @build ThreadExecutionSynchronizer
* @run main/othervm Locks
*/
import java.lang.management.*;
+import java.util.concurrent.Phaser;
public class Locks {
- private static Object objA = new Object();
- private static Object objB = new Object();
- private static Object objC = new Object();
- private static ThreadMXBean tm = ManagementFactory.getThreadMXBean();
+ private static final Object objA = new Object();
+ private static final Object objB = new Object();
+ private static final Object objC = new Object();
+ private static final ThreadMXBean tm = ManagementFactory.getThreadMXBean();
private static boolean testFailed = false;
@@ -46,48 +47,62 @@
if (lock == null) return null;
return lock.getClass().getName() + '@' +
- Integer.toHexString(System.identityHashCode(lock));
+ Integer.toHexString(System.identityHashCode(lock));
+ }
+
+ private static void assertNoLock(Thread t) {
+ long tid = t.getId();
+ ThreadInfo info = tm.getThreadInfo(tid);
+ String result = info.getLockName();
+
+ if (result != null) {
+ throw new RuntimeException("Thread " + t.getName() + " is not supposed to hold any lock. " +
+ "Currently owning lock: " + result);
+ }
}
private static void checkBlockedObject(Thread t, Object lock, Thread owner,
Thread.State expectedState) {
- ThreadInfo info = tm.getThreadInfo(t.getId());
+ long tid = t.getId();
+ ThreadInfo info = tm.getThreadInfo(tid);
String result = info.getLockName();
String expectedLock = (lock != null ? getLockName(lock) : null);
String expectedOwner = (owner != null ? owner.getName() : null);
if (lock != null) {
- if (expectedState ==Thread.State.BLOCKED) {
+ if (expectedState == Thread.State.BLOCKED) {
int retryCount=0;
while(info.getThreadState() != Thread.State.BLOCKED) {
if (retryCount++ > 500) {
throw new RuntimeException("Thread " + t.getName() +
- " is expected to block on " + expectedLock +
- " but got " + result +
- " Thread.State = " + info.getThreadState());
+ " is expected to block on " + expectedLock +
+ " but got " + result +
+ " Thread.State = " + info.getThreadState());
}
goSleep(100);
+ info = tm.getThreadInfo(tid);
+ result = info.getLockName();
}
}
if (expectedState == Thread.State.WAITING &&
- info.getThreadState() != Thread.State.WAITING) {
+ info.getThreadState() != Thread.State.WAITING) {
throw new RuntimeException("Thread " + t.getName() +
- " is expected to wait on " + expectedLock +
- " but got " + result +
- " Thread.State = " + info.getThreadState());
+ " is expected to wait on " + expectedLock +
+ " but got " + result +
+ " Thread.State = " + info.getThreadState());
}
}
if ((result != null && !result.equals(expectedLock)) ||
- (result == null && expectedLock != null)) {
+ (result == null && expectedLock != null)) {
throw new RuntimeException("Thread " + t.getName() + " is blocked on " +
- expectedLock + " but got " + result);
+ expectedLock + " but got " + result);
}
result = info.getLockOwnerName();
if ((result != null && !result.equals(expectedOwner)) ||
- (result == null && expectedOwner != null)) {
+ (result == null && expectedOwner != null)) {
throw new RuntimeException("Owner of " + lock + " should be " +
- expectedOwner + " but got " + result);
+ expectedOwner + " but got " + result);
}
}
@@ -100,53 +115,49 @@
}
}
- static ThreadExecutionSynchronizer thrsync = new ThreadExecutionSynchronizer();
- static ThreadExecutionSynchronizer thrsync1 = new ThreadExecutionSynchronizer();
+ private static volatile int dummyCounter = 0;
static class LockAThread extends Thread {
- public LockAThread() {
+ private final Phaser p;
+ public LockAThread(Phaser p) {
super("LockAThread");
+ this.p = p;
}
public void run() {
synchronized(objA) {
- // stop here for LockBThread to hold objB
- thrsync.waitForSignal();
-
- System.out.println("LockAThread about to block on objB");
- synchronized(objB) {};
+ // stop here for LockBThread to hold objB
+ System.out.println("LockAThread about to block on objB");
+ p.arriveAndAwaitAdvance(); // Phase 1 (blocking)
+ synchronized(objB) {
+ dummyCounter++;
+ };
}
+ p.arriveAndAwaitAdvance(); // Phase 2 (blocking)
System.out.println("LockAThread about to exit");
- // The state could be anything. The expected state value
- // passed with this method is not verified.
- checkBlockedObject(this, null, null, Thread.State.TERMINATED);
+ // Make sure the current thread is not holding any lock
+ assertNoLock(this);
}
}
static class LockBThread extends Thread {
- public LockBThread() {
+ private final Phaser p;
+ public LockBThread(Phaser p) {
super("LockBThread");
+ this.p = p;
}
public void run() {
synchronized(objB) {
- // signal waiting LockAThread.
- thrsync.signal();
-
- System.out.println("LockBThread about to block on objC");
- // Signal main thread about to block on objC
- thrsync1.signal();
- synchronized(objC) {};
+ System.out.println("LockBThread about to block on objC");
+ p.arriveAndAwaitAdvance(); // Phase 1 (blocking)
+ // Signal main thread about to block on objC
+ synchronized(objC) {
+ dummyCounter++;
+ };
}
+ p.arriveAndAwaitAdvance(); // Phase 2 (blocking)
System.out.println("LockBThread about to exit");
- // The state could be anything. The expected state value
- // passed with this method is not verified.
- checkBlockedObject(this, null, null, Thread.State.TERMINATED);
- }
-
- public void aboutToLockC() {
- // Stop here till LockBThread about to blocked
- // for lock objC.
- thrsync1.waitForSignal();
- goSleep(500);
+ // Make sure the current thread is not holding any lock
+ assertNoLock(this);
}
}
@@ -154,32 +165,36 @@
private static Object ready = new Object();
private static CheckerThread checker;
static class WaitingThread extends Thread {
- public WaitingThread() {
+ private final Phaser p;
+ public WaitingThread(Phaser p) {
super("WaitingThread");
+ this.p = p;
}
public void run() {
synchronized(objC) {
- System.out.println("WaitingThread about to wait on objC");
- try {
- // Signal checker thread, about to wait on objC.
- thrsync.signal();
- objC.wait();
- } catch (InterruptedException e) {
- e.printStackTrace();
- testFailed = true;
- }
+ System.out.println("WaitingThread about to wait on objC");
+ try {
+ // Signal checker thread, about to wait on objC.
+ p.arriveAndAwaitAdvance(); // Phase 1 (waiting)
+ objC.wait();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ testFailed = true;
+ }
- // block until CheckerThread finishes checking
- System.out.println("WaitingThread about to block on ready");
- // signal checker thread that it is about acquire
- // object ready.
- thrsync.signal();
- synchronized(ready) {};
+ // block until CheckerThread finishes checking
+ System.out.println("WaitingThread about to block on ready");
+ // signal checker thread that it is about acquire
+ // object ready.
+ p.arriveAndAwaitAdvance(); // Phase 2 (waiting)
+ synchronized(ready) {
+ dummyCounter++;
+ };
}
synchronized(objC) {
try {
// signal checker thread, about to wait on objC
- thrsync.signal();
+ p.arriveAndAwaitAdvance(); // Phase 3 (waiting)
objC.wait();
} catch (InterruptedException e) {
e.printStackTrace();
@@ -190,21 +205,23 @@
}
}
static class CheckerThread extends Thread {
- public CheckerThread() {
+ private final Phaser p;
+ public CheckerThread(Phaser p) {
super("CheckerThread");
+ this.p = p;
}
private void waitForState(Thread.State state) {
- thrsync.waitForSignal();
- while (waiter.getState() != state) {
- goSleep(10);
+ p.arriveAndAwaitAdvance();
+ while (!waiter.isInterrupted() && waiter.getState() != state) {
+ goSleep(10);
}
}
public void run() {
synchronized (ready) {
// wait until WaitingThread about to wait for objC
- waitForState(Thread.State.WAITING);
+ waitForState(Thread.State.WAITING); // Phase 1 (waiting)
checkBlockedObject(waiter, objC, null, Thread.State.WAITING);
synchronized (objC) {
@@ -213,13 +230,13 @@
// wait for waiter thread to about to enter
// synchronized object ready.
- waitForState(Thread.State.BLOCKED);
+ waitForState(Thread.State.BLOCKED); // Phase 2 (waiting)
checkBlockedObject(waiter, ready, this, Thread.State.BLOCKED);
}
// wait for signal from waiting thread that it is about
// wait for objC.
- waitForState(Thread.State.WAITING);
+ waitForState(Thread.State.WAITING); // Phase 3 (waiting)
synchronized(objC) {
checkBlockedObject(waiter, objC, Thread.currentThread(), Thread.State.WAITING);
objC.notify();
@@ -235,24 +252,24 @@
LockAThread t1;
LockBThread t2;
+ Phaser p = new Phaser(3);
synchronized(objC) {
- // The state could be anything. The expected state value
- // passed with this method is not verified.
- checkBlockedObject(mainThread, null, null, Thread.State.RUNNABLE);
+ // Make sure the main thread is not holding any lock
+ assertNoLock(mainThread);
// Test deadlock case
// t1 holds lockA and attempts to lock B
// t2 holds lockB and attempts to lock C
- t1 = new LockAThread();
+
+ t1 = new LockAThread(p);
t1.start();
- t2 = new LockBThread();
+ t2 = new LockBThread(p);
t2.start();
- t2.aboutToLockC();
-
- checkBlockedObject(t1, objB, t2, Thread.State.BLOCKED);
+ p.arriveAndAwaitAdvance(); // Phase 1 (blocking)
checkBlockedObject(t2, objC, mainThread, Thread.State.BLOCKED);
+ checkBlockedObject(t1, objB, t2, Thread.State.BLOCKED);
long[] expectedThreads = new long[3];
expectedThreads[0] = t1.getId(); // blocked on lockB
@@ -260,13 +277,14 @@
expectedThreads[2] = mainThread.getId(); // owner of lockC
findThreadsBlockedOn(objB, expectedThreads);
}
- goSleep(100);
+ p.arriveAndAwaitAdvance(); // Phase 2 (blocking)
+ p = new Phaser(2);
// Test Object.wait() case
- waiter = new WaitingThread();
+ waiter = new WaitingThread(p);
waiter.start();
- checker = new CheckerThread();
+ checker = new CheckerThread(p);
checker.start();
try {
@@ -284,7 +302,7 @@
}
private static ThreadInfo findOwnerInfo(ThreadInfo[] infos, String lock)
- throws Exception {
+ throws Exception {
ThreadInfo ownerInfo = null;
for (int i = 0; i < infos.length; i++) {
String blockedLock = infos[i].getLockName();
@@ -292,7 +310,7 @@
long threadId = infos[i].getLockOwnerId();
if (threadId == -1) {
throw new RuntimeException("TEST FAILED: " +
- lock + " expected to have owner");
+ lock + " expected to have owner");
}
for (int j = 0; j < infos.length; j++) {
if (infos[j].getThreadId() == threadId) {
@@ -305,7 +323,7 @@
return ownerInfo;
}
private static void findThreadsBlockedOn(Object o, long[] expectedThreads)
- throws Exception {
+ throws Exception {
String lock = getLockName(o);
// Check with ThreadInfo with no stack trace (i.e. no safepoint)
ThreadInfo[] infos = tm.getThreadInfo(tm.getAllThreadIds());
@@ -317,14 +335,14 @@
}
private static void doCheck(ThreadInfo[] infos, String lock, long[] expectedThreads)
- throws Exception {
+ throws Exception {
ThreadInfo ownerInfo = null;
// Find the thread who is blocking on lock
for (int i = 0; i < infos.length; i++) {
String blockedLock = infos[i].getLockName();
if (lock.equals(blockedLock)) {
System.out.print(infos[i].getThreadName() +
- " blocked on " + blockedLock);
+ " blocked on " + blockedLock);
ownerInfo = infos[i];
}
}
@@ -336,7 +354,7 @@
ownerInfo = findOwnerInfo(infos, lock);
threads[count++] = ownerInfo.getThreadId();
System.out.println(" Owner = " + ownerInfo.getThreadName() +
- " id = " + ownerInfo.getThreadId());
+ " id = " + ownerInfo.getThreadId());
lock = ownerInfo.getLockName();
System.out.print(ownerInfo.getThreadName() + " Id = " +
ownerInfo.getThreadId() +
@@ -346,13 +364,13 @@
if (count != expectedThreads.length) {
throw new RuntimeException("TEST FAILED: " +
- "Expected chain of threads not matched; current count =" + count);
+ "Expected chain of threads not matched; current count =" + count);
}
for (int i = 0; i < count; i++) {
if (threads[i] != expectedThreads[i]) {
System.out.println("TEST FAILED: " +
- "Unexpected thread in the chain " + threads[i] +
- " expected to be " + expectedThreads[i]);
+ "Unexpected thread in the chain " + threads[i] +
+ " expected to be " + expectedThreads[i]);
}
}
}
diff --git a/jdk/test/java/lang/management/ThreadMXBean/SynchronizationStatistics.java b/jdk/test/java/lang/management/ThreadMXBean/SynchronizationStatistics.java
index f18b13c..6986adc 100644
--- a/jdk/test/java/lang/management/ThreadMXBean/SynchronizationStatistics.java
+++ b/jdk/test/java/lang/management/ThreadMXBean/SynchronizationStatistics.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -27,45 +27,28 @@
* @summary Basic unit test of the synchronization statistics support:
*
* @author Mandy Chung
+ * @author Jaroslav Bachorik
*
- * @ignore 6309226
- * @build Semaphore
* @run main/othervm SynchronizationStatistics
*/
import java.lang.management.*;
+import java.util.concurrent.Phaser;
public class SynchronizationStatistics {
- private static ThreadMXBean mbean = ManagementFactory.getThreadMXBean();
-
- private static boolean blockedTimeCheck =
- mbean.isThreadContentionMonitoringSupported();
- private static boolean trace = false;
-
- private static Object lockA = new Object();
- private static Object lockB = new Object();
- private static Object lockC = new Object();
- private static Object lockD = new Object();
- private static Object waiter = new Object();
- private static volatile boolean testFailed = false;
-
- private static Object go = new Object();
-
- private static void goSleep(long ms) {
- try {
- Thread.sleep(ms);
- } catch (InterruptedException e) {
- e.printStackTrace();
- System.out.println("Unexpected exception.");
- testFailed = true;
+ private static class LockerThread extends Thread {
+ public LockerThread(Runnable r) {
+ super(r, "LockerThread");
}
}
- public static void main(String args[]) throws Exception {
- if (args.length > 0 && args[0].equals("trace")) {
- trace = true;
- }
+ private static final ThreadMXBean mbean = ManagementFactory.getThreadMXBean();
+ private static final boolean blockedTimeCheck =
+ mbean.isThreadContentionMonitoringSupported();
+
+
+ public static void main(String args[]) throws Exception {
if (blockedTimeCheck) {
mbean.setThreadContentionMonitoringEnabled(true);
}
@@ -75,457 +58,317 @@
"Thread Contention Monitoring is not enabled");
}
- Examiner examiner = new Examiner("Examiner");
- BlockedThread blocked = new BlockedThread("BlockedThread");
- examiner.setThread(blocked);
-
- // Start the threads and check them in Blocked and Waiting states
- examiner.start();
-
- // wait until the examiner acquires all the locks and waiting
- // for the BlockedThread to start
- examiner.waitUntilWaiting();
-
- System.out.println("Checking the thread state for the examiner thread " +
- "is waiting to begin.");
-
- // The Examiner should be waiting to be notified by the BlockedThread
- checkThreadState(examiner, Thread.State.WAITING);
-
- System.out.println("Now starting the blocked thread");
- blocked.start();
-
- try {
- examiner.join();
- blocked.join();
- } catch (InterruptedException e) {
- e.printStackTrace();
- System.out.println("Unexpected exception.");
- testFailed = true;
- }
-
- if (testFailed)
- throw new RuntimeException("TEST FAILED.");
+ testBlockingOnSimpleMonitor();
+ testBlockingOnNestedMonitor();
+ testWaitingOnSimpleMonitor();
+ testMultiWaitingOnSimpleMonitor();
+ testWaitingOnNestedMonitor();
System.out.println("Test passed.");
}
- private static String INDENT = " ";
- private static void printStack(Thread t, StackTraceElement[] stack) {
- System.out.println(INDENT + t +
- " stack: (length = " + stack.length + ")");
- if (t != null) {
- for (int j = 0; j < stack.length; j++) {
- System.out.println(INDENT + stack[j]);
+ private static LockerThread newLockerThread(Runnable r) {
+ LockerThread t = new LockerThread(r);
+ t.setDaemon(true);
+ return t;
+ }
+
+ private static void waitForThreadState(Thread t, Thread.State state) throws InterruptedException {
+ while (!t.isInterrupted() && t.getState() != state) {
+ Thread.sleep(3);
+ }
+ }
+
+ /**
+ * Tests that blocking on a single monitor properly increases the
+ * blocked count at least by 1. Also asserts that the correct lock name is provided.
+ */
+ private static void testBlockingOnSimpleMonitor() throws Exception {
+ System.out.println("testBlockingOnSimpleMonitor");
+ final Object lock1 = new Object();
+ final Phaser p = new Phaser(2);
+ LockerThread lt = newLockerThread(new Runnable() {
+ @Override
+ public void run() {
+ p.arriveAndAwaitAdvance(); // phase[1]
+ synchronized(lock1) {
+ System.out.println("[LockerThread obtained Lock1]");
+ p.arriveAndAwaitAdvance(); // phase[2]
+ }
+ p.arriveAndAwaitAdvance(); // phase[3]
}
- System.out.println();
+ });
+
+ lt.start();
+ long tid = lt.getId();
+ ThreadInfo ti = mbean.getThreadInfo(tid);
+ String lockName = null;
+ synchronized(lock1) {
+ p.arriveAndAwaitAdvance(); // phase[1]
+ waitForThreadState(lt, Thread.State.BLOCKED);
+ lockName = mbean.getThreadInfo(tid).getLockName();
}
+
+ p.arriveAndAwaitAdvance(); // phase[2]
+ testBlocked(ti, mbean.getThreadInfo(tid), lockName, lock1);
+ p.arriveAndDeregister(); // phase[3]
+
+ lt.join();
+
+ System.out.println("OK");
}
- private static void checkThreadState(Thread thread, Thread.State s)
- throws Exception {
+ /**
+ * Tests that blocking on a nested monitor properly increases the
+ * blocked count at least by 1 - it is not affected by the nesting depth.
+ * Also asserts that the correct lock name is provided.
+ */
+ private static void testBlockingOnNestedMonitor() throws Exception {
+ System.out.println("testBlockingOnNestedMonitor");
+ final Object lock1 = new Object();
+ final Object lock2 = new Object();
- ThreadInfo ti = mbean.getThreadInfo(thread.getId());
- if (ti.getThreadState() != s) {
- ThreadInfo info = mbean.getThreadInfo(thread.getId(),
- Integer.MAX_VALUE);
- System.out.println(INDENT + "TEST FAILED:");
- printStack(thread, info.getStackTrace());
- System.out.println(INDENT + "Thread state: " + info.getThreadState());
-
- throw new RuntimeException("TEST FAILED: " +
- "Thread state for " + thread + " returns " + ti.getThreadState() +
- ". Expected to be " + s);
- }
- }
-
- private static void checkThreadState(Thread thread,
- Thread.State s1, Thread.State s2)
- throws Exception {
-
- ThreadInfo ti = mbean.getThreadInfo(thread.getId());
- if (ti.getThreadState() != s1 && ti.getThreadState() != s2) {
- throw new RuntimeException("TEST FAILED: " +
- "Thread state for " + thread + " returns " + ti.getThreadState() +
- ". Expected to be " + s1 + " or " + s2);
- }
- }
-
- static class StatThread extends Thread {
- private long blockingBaseTime = 0;
- private long totalWaitTime = 0;
- private long totalBlockedEnterTime = 0;
-
- StatThread(String name) {
- super(name);
- }
-
- void addWaitTime(long ns) {
- totalWaitTime = totalWaitTime + ns;
- }
- void addBlockedEnterTime(long ns) {
- totalBlockedEnterTime = totalBlockedEnterTime + ns;
- }
- void setBlockingBaseTime(long time) {
- blockingBaseTime = time;
- }
-
- long totalBlockedTimeMs() {
- return totalBlockedEnterTime / 1000000;
- }
-
- long totalBlockedTimeMs(long now) {
- long t = totalBlockedEnterTime + (now - blockingBaseTime);
- return t / 1000000;
- }
-
- long totalWaitTimeMs() {
- return totalWaitTime / 1000000;
- }
-
- long totalWaitTimeMs(long now) {
- long t = totalWaitTime + (now - blockingBaseTime);
- return t / 1000000;
- }
- }
-
- static class BlockedThread extends StatThread {
- private Semaphore handshake = new Semaphore();
- BlockedThread(String name) {
- super(name);
- }
- void waitUntilBlocked() {
- handshake.semaP();
-
- // give a chance for the examiner thread to really wait
- goSleep(20);
- }
-
- void waitUntilWaiting() {
- waitUntilBlocked();
- }
-
- boolean hasWaitersForBlocked() {
- return (handshake.getWaiterCount() > 0);
- }
-
- private void notifyWaiter() {
- // wait until the examiner waits on the semaphore
- while (handshake.getWaiterCount() == 0) {
- goSleep(20);
- }
- handshake.semaV();
- }
-
- private void waitObj(long ms) {
- synchronized (waiter) {
- try {
- // notify examinerabout to wait on a monitor
- notifyWaiter();
-
- long base = System.nanoTime();
- setBlockingBaseTime(base);
- waiter.wait(ms);
- long now = System.nanoTime();
- addWaitTime(now - base);
- } catch (Exception e) {
- e.printStackTrace();
- System.out.println("Unexpected exception.");
- testFailed = true;
+ final Phaser p = new Phaser(2);
+ LockerThread lt = newLockerThread(new Runnable() {
+ @Override
+ public void run() {
+ p.arriveAndAwaitAdvance(); // phase[1]
+ synchronized(lock1) {
+ System.out.println("[LockerThread obtained Lock1]");
+ p.arriveAndAwaitAdvance(); // phase[2]
+ p.arriveAndAwaitAdvance(); // phase[3]
+ synchronized(lock2) {
+ System.out.println("[LockerThread obtained Lock2]");
+ p.arriveAndAwaitAdvance(); // phase[4]
+ }
+ p.arriveAndAwaitAdvance(); // phase[5]
}
}
+ });
+
+ lt.start();
+ long tid = lt.getId();
+ ThreadInfo ti = mbean.getThreadInfo(tid);
+ ThreadInfo ti1 = null;
+ String lockName = null;
+ synchronized(lock1) {
+ p.arriveAndAwaitAdvance(); // phase[1]
+ waitForThreadState(lt, Thread.State.BLOCKED);
+ lockName = mbean.getThreadInfo(tid).getLockName();
}
+ p.arriveAndAwaitAdvance(); // phase[2]
- private void test() {
- // notify examiner about to block on lockA
- notifyWaiter();
+ ti1 = mbean.getThreadInfo(tid);
+ testBlocked(ti, ti1, lockName, lock1);
+ ti = ti1;
- long base = System.nanoTime();
- setBlockingBaseTime(base);
- synchronized (lockA) {
- long now = System.nanoTime();
- addBlockedEnterTime(now - base);
-
- A(); // Expected blocked count = 1
- }
- E();
+ synchronized(lock2) {
+ p.arriveAndAwaitAdvance(); // phase [3]
+ waitForThreadState(lt, Thread.State.BLOCKED);
+ lockName = mbean.getThreadInfo(tid).getLockName();
}
- private void A() {
- // notify examiner about to block on lockB
- notifyWaiter();
+ p.arriveAndAwaitAdvance(); // phase [4]
+ testBlocked(ti, mbean.getThreadInfo(tid), lockName, lock2);
+ p.arriveAndDeregister();
- long base = System.nanoTime();
- setBlockingBaseTime(base);
- synchronized (lockB) {
- long now = System.nanoTime();
- addBlockedEnterTime(now - base);
+ lt.join();
- B(); // Expected blocked count = 2
+ System.out.println("OK");
+ }
+
+ /**
+ * Tests that waiting on a single monitor properly increases the waited
+ * count by 1 and the waited time by a positive number.
+ */
+ private static void testWaitingOnSimpleMonitor() throws Exception {
+ System.out.println("testWaitingOnSimpleMonitor");
+ final Object lock1 = new Object();
+ final Phaser p = new Phaser(2);
+ LockerThread lt = newLockerThread(new Runnable() {
+ @Override
+ public void run() {
+ p.arriveAndAwaitAdvance(); // phase[1]
+ synchronized(lock1) {
+ System.out.println("[LockerThread obtained Lock1]");
+ try {
+ lock1.wait(300);
+ } catch (InterruptedException ex) {
+ // ignore
+ }
+ p.arriveAndAwaitAdvance(); // phase[2]
+ }
+ p.arriveAndAwaitAdvance(); // phase[3]
}
+ });
+
+ lt.start();
+ ThreadInfo ti1 = mbean.getThreadInfo(lt.getId());
+ synchronized(lock1) {
+ p.arriveAndAwaitAdvance(); // phase[1]
+ waitForThreadState(lt, Thread.State.BLOCKED);
}
- private void B() {
- // notify examiner about to block on lockC
- notifyWaiter();
+ p.arriveAndAwaitAdvance(); // phase[2]
- long base = System.nanoTime();
- setBlockingBaseTime(base);
- synchronized (lockC) {
- long now = System.nanoTime();
- addBlockedEnterTime(now - base);
+ ThreadInfo ti2 = mbean.getThreadInfo(lt.getId());
+ p.arriveAndDeregister(); // phase[3]
- C(); // Expected blocked count = 3
+ lt.join();
+
+ testWaited(ti1, ti2, 1);
+ System.out.println("OK");
+ }
+
+ /**
+ * Tests that waiting multiple times on the same monitor subsequently
+ * increases the waited count by the number of subsequent calls and the
+ * waited time by a positive number.
+ */
+ private static void testMultiWaitingOnSimpleMonitor() throws Exception {
+ System.out.println("testWaitingOnMultipleMonitors");
+ final Object lock1 = new Object();
+
+ final Phaser p = new Phaser(2);
+ LockerThread lt = newLockerThread(new Runnable() {
+ @Override
+ public void run() {
+ p.arriveAndAwaitAdvance(); // phase[1]
+ synchronized(lock1) {
+ System.out.println("[LockerThread obtained Lock1]");
+ for (int i = 0; i < 3; i++) {
+ try {
+ lock1.wait(300);
+ } catch (InterruptedException ex) {
+ // ignore
+ }
+ p.arriveAndAwaitAdvance(); // phase[2-4]
+ }
+ }
+ p.arriveAndAwaitAdvance(); // phase[5]
}
+ });
+
+ lt.start();
+ ThreadInfo ti1 = mbean.getThreadInfo(lt.getId());
+ synchronized(lock1) {
+ p.arriveAndAwaitAdvance(); //phase[1]
+ waitForThreadState(lt, Thread.State.BLOCKED);
}
- private void C() {
- // notify examiner about to block on lockD
- notifyWaiter();
+ int phase = p.getPhase();
+ while ((p.arriveAndAwaitAdvance() - phase) < 3); // phase[2-4]
- long base = System.nanoTime();
- setBlockingBaseTime(base);
- synchronized (lockD) {
- long now = System.nanoTime();
- addBlockedEnterTime(now - base);
+ ThreadInfo ti2 = mbean.getThreadInfo(lt.getId());
+ p.arriveAndDeregister(); // phase[5]
- D(); // Expected blocked count = 4
- }
- }
- private void D() {
- goSleep(50);
- }
- private void E() {
- final int WAIT = 1000;
- waitObj(WAIT);
- waitObj(WAIT);
- waitObj(WAIT);
- }
+ lt.join();
+ testWaited(ti1, ti2, 3);
+ System.out.println("OK");
+ }
- public void run() {
- test();
- } // run()
- } // BlockedThread
+ /**
+ * Tests that waiting on monitors places in nested synchronized blocks
+ * properly increases the waited count by the number of times the "lock.wait()"
+ * was invoked and the waited time by a positive number.
+ */
+ private static void testWaitingOnNestedMonitor() throws Exception {
+ System.out.println("testWaitingOnNestedMonitor");
+ final Object lock1 = new Object();
+ final Object lock2 = new Object();
+ final Object lock3 = new Object();
- static int blockedCount = 0;
- static int waitedCount = 0;
- static class Examiner extends StatThread {
- private BlockedThread blockedThread;
- private Semaphore semaphore = new Semaphore();
+ final Phaser p = new Phaser(2);
+ LockerThread lt = newLockerThread(new Runnable() {
+ @Override
+ public void run() {
+ p.arriveAndAwaitAdvance(); // phase[1]
+ synchronized(lock1) {
+ System.out.println("[LockerThread obtained Lock1]");
+ try {
+ lock1.wait(300);
+ } catch (InterruptedException ex) {
+ // ignore
+ }
- Examiner(String name) {
- super(name);
- }
-
- public void setThread(BlockedThread thread) {
- blockedThread = thread;
- }
-
- private void blockedTimeRangeCheck(StatThread t,
- long blockedTime,
- long nowNano)
- throws Exception {
- long expected = t.totalBlockedTimeMs(nowNano);
-
- // accept 5% range
- timeRangeCheck(blockedTime, expected, 5);
- }
- private void waitedTimeRangeCheck(StatThread t,
- long waitedTime,
- long nowNano)
- throws Exception {
- long expected = t.totalWaitTimeMs(nowNano);
-
- // accept 5% range
- timeRangeCheck(waitedTime, expected, 5);
- }
-
- private void timeRangeCheck(long time, long expected, int percent)
- throws Exception {
-
- double diff = expected - time;
-
- if (trace) {
- System.out.println(" Time = " + time +
- " expected = " + expected +
- ". Diff = " + diff);
-
- }
- // throw an exception if blockedTime and expectedTime
- // differs > percent%
- if (diff < 0) {
- diff = diff * -1;
- }
-
- long range = (expected * percent) / 100;
- // minimum range = 2 ms
- if (range < 2) {
- range = 2;
- }
- if (diff > range) {
- throw new RuntimeException("TEST FAILED: " +
- "Time returned = " + time +
- " expected = " + expected + ". Diff = " + diff);
- }
- }
- private void checkInfo(StatThread t, Thread.State s, Object lock,
- String lockName, int bcount, int wcount)
- throws Exception {
-
- String action = "ERROR";
- if (s == Thread.State.WAITING || s == Thread.State.TIMED_WAITING) {
- action = "wait on ";
- } else if (s == Thread.State.BLOCKED) {
- action = "block on ";
- }
- System.out.println(t + " expected to " + action + lockName +
- " with blocked count = " + bcount +
- " and waited count = " + wcount);
-
- long now = System.nanoTime();
- ThreadInfo info = mbean.getThreadInfo(t.getId());
- if (info.getThreadState() != s) {
- printStack(t, info.getStackTrace());
- throw new RuntimeException("TEST FAILED: " +
- "Thread state returned is " + info.getThreadState() +
- ". Expected to be " + s);
- }
-
- if (info.getLockName() == null ||
- !info.getLockName().equals(lock.toString())) {
- throw new RuntimeException("TEST FAILED: " +
- "getLockName() returned " + info.getLockName() +
- ". Expected to be " + lockName + " - " + lock.toString());
- }
-
- if (info.getBlockedCount() != bcount) {
- throw new RuntimeException("TEST FAILED: " +
- "Blocked Count returned is " + info.getBlockedCount() +
- ". Expected to be " + bcount);
- }
- if (info.getWaitedCount() != wcount) {
- throw new RuntimeException("TEST FAILED: " +
- "Waited Count returned is " + info.getWaitedCount() +
- ". Expected to be " + wcount);
- }
-
- String lockObj = info.getLockName();
- if (lockObj == null || !lockObj.equals(lock.toString())) {
- throw new RuntimeException("TEST FAILED: " +
- "Object blocked on is " + lockObj +
- ". Expected to be " + lock.toString());
- }
-
- if (!blockedTimeCheck) {
- return;
- }
- long blockedTime = info.getBlockedTime();
- if (blockedTime < 0) {
- throw new RuntimeException("TEST FAILED: " +
- "Blocked time returned is negative = " + blockedTime);
- }
-
- if (s == Thread.State.BLOCKED) {
- blockedTimeRangeCheck(t, blockedTime, now);
- } else {
- timeRangeCheck(blockedTime, t.totalBlockedTimeMs(), 5);
- }
-
- long waitedTime = info.getWaitedTime();
- if (waitedTime < 0) {
- throw new RuntimeException("TEST FAILED: " +
- "Waited time returned is negative = " + waitedTime);
- }
- if (s == Thread.State.WAITING || s == Thread.State.TIMED_WAITING) {
- waitedTimeRangeCheck(t, waitedTime, now);
- } else {
- timeRangeCheck(waitedTime, t.totalWaitTimeMs(), 5);
- }
-
- }
-
- private void examine() {
- try {
- synchronized (lockD) {
- synchronized (lockC) {
- synchronized (lockB) {
- synchronized (lockA) {
- // notify main thread to continue
- semaphore.semaV();
-
- // wait until BlockedThread has started
- blockedThread.waitUntilBlocked();
-
- blockedCount++;
- checkInfo(blockedThread, Thread.State.BLOCKED,
- lockA, "lockA",
- blockedCount, waitedCount);
- }
-
- // wait until BlockedThread to block on lockB
- blockedThread.waitUntilBlocked();
-
- blockedCount++;
- checkInfo(blockedThread, Thread.State.BLOCKED,
- lockB, "lockB",
- blockedCount, waitedCount);
+ p.arriveAndAwaitAdvance(); // phase[2]
+ synchronized(lock2) {
+ System.out.println("[LockerThread obtained Lock2]");
+ try {
+ lock2.wait(300);
+ } catch (InterruptedException ex) {
+ // ignore
}
- // wait until BlockedThread to block on lockC
- blockedThread.waitUntilBlocked();
-
- blockedCount++;
- checkInfo(blockedThread, Thread.State.BLOCKED,
- lockC, "lockC",
- blockedCount, waitedCount);
+ p.arriveAndAwaitAdvance(); // phase[3]
+ synchronized(lock3) {
+ System.out.println("[LockerThread obtained Lock3]");
+ try {
+ lock3.wait(300);
+ } catch (InterruptedException ex) {
+ // ignore
+ }
+ p.arriveAndAwaitAdvance(); // phase[4]
+ }
}
- // wait until BlockedThread to block on lockD
- blockedThread.waitUntilBlocked();
- blockedCount++;
-
- checkInfo(blockedThread, Thread.State.BLOCKED,
- lockD, "lockD",
- blockedCount, waitedCount);
}
-
- // wait until BlockedThread about to call E()
- // BlockedThread will wait on waiter for 3 times
- blockedThread.waitUntilWaiting();
-
- waitedCount++;
- checkInfo(blockedThread, Thread.State.TIMED_WAITING,
- waiter, "waiter", blockedCount, waitedCount);
-
- blockedThread.waitUntilWaiting();
-
- waitedCount++;
- checkInfo(blockedThread, Thread.State.TIMED_WAITING,
- waiter, "waiter", blockedCount, waitedCount);
-
- blockedThread.waitUntilWaiting();
-
- waitedCount++;
- checkInfo(blockedThread, Thread.State.TIMED_WAITING,
- waiter, "waiter", blockedCount, waitedCount);
-
- } catch (Exception e) {
- e.printStackTrace();
- System.out.println("Unexpected exception.");
- testFailed = true;
+ p.arriveAndAwaitAdvance(); // phase[5]
}
+ });
+
+ lt.start();
+ ThreadInfo ti1 = mbean.getThreadInfo(lt.getId());
+ synchronized(lock1) {
+ p.arriveAndAwaitAdvance(); // phase[1]
+ waitForThreadState(lt, Thread.State.BLOCKED);
}
- public void run() {
- examine();
- } // run()
-
- public void waitUntilWaiting() {
- semaphore.semaP();
-
- // wait until the examiner is waiting for
- while (!blockedThread.hasWaitersForBlocked()) {
- goSleep(50);
- }
- // give a chance for the examiner thread to really wait
- goSleep(20);
-
+ synchronized(lock2) {
+ p.arriveAndAwaitAdvance(); // phase[2]
+ waitForThreadState(lt, Thread.State.BLOCKED);
}
- } // Examiner
+
+ synchronized(lock3) {
+ p.arriveAndAwaitAdvance(); // phase[3]
+ waitForThreadState(lt, Thread.State.BLOCKED);
+ }
+
+ p.arriveAndAwaitAdvance(); // phase[4]
+ ThreadInfo ti2 = mbean.getThreadInfo(lt.getId());
+ p.arriveAndDeregister(); // phase[5]
+
+ lt.join();
+ testWaited(ti1, ti2, 3);
+ System.out.println("OK");
+ }
+
+ private static void testWaited(ThreadInfo ti1, ThreadInfo ti2, int waited) throws Error {
+ long waitCntDiff = ti2.getWaitedCount() - ti1.getWaitedCount();
+ long waitTimeDiff = ti2.getWaitedTime() - ti1.getWaitedTime();
+ if (waitCntDiff < waited) {
+ throw new Error("Unexpected diff in waited count. Expecting at least "
+ + waited + " , got " + waitCntDiff);
+ }
+ if (waitTimeDiff <= 0) {
+ throw new Error("Unexpected diff in waited time. Expecting increasing " +
+ "value, got " + waitTimeDiff + "ms");
+ }
+ }
+
+ private static void testBlocked(ThreadInfo ti1, ThreadInfo ti2,
+ String lockName, final Object lock)
+ throws Error {
+ long blkCntDiff = ti2.getBlockedCount() - ti1.getBlockedCount();
+ long blkTimeDiff = ti2.getBlockedTime() - ti1.getBlockedTime();
+ if (blkCntDiff < 1) {
+ throw new Error("Unexpected diff in blocked count. Expecting at least 1, " +
+ "got " + blkCntDiff);
+ }
+ if (blkTimeDiff < 0) {
+ throw new Error("Unexpected diff in blocked time. Expecting a positive " +
+ "number, got " + blkTimeDiff);
+ }
+ if (!lockName.equals(lock.toString())) {
+ throw new Error("Unexpected blocked monitor name. Expecting " +
+ lock.toString() + ", got " +
+ lockName);
+ }
+ }
}
diff --git a/jdk/test/java/lang/management/ThreadMXBean/ThreadBlockedCount.java b/jdk/test/java/lang/management/ThreadMXBean/ThreadBlockedCount.java
index 1cd9032..7fed519 100644
--- a/jdk/test/java/lang/management/ThreadMXBean/ThreadBlockedCount.java
+++ b/jdk/test/java/lang/management/ThreadMXBean/ThreadBlockedCount.java
@@ -26,177 +26,127 @@
* @bug 4530538
* @summary Basic unit test of ThreadInfo.getBlockedCount()
* @author Alexei Guibadoulline and Mandy Chung
- *
- * @build ThreadExecutionSynchronizer
+ * @author Jaroslav Bachorik
* @run main ThreadBlockedCount
*/
import java.lang.management.*;
+import java.util.concurrent.Phaser;
public class ThreadBlockedCount {
- final static long EXPECTED_BLOCKED_COUNT = 3;
+ final static long EXPECTED_BLOCKED_COUNT = 3;
final static int DEPTH = 10;
- private static ThreadMXBean mbean
+ private static final ThreadMXBean mbean
= ManagementFactory.getThreadMXBean();
- private static Object a = new Object();
- private static Object b = new Object();
- private static Object c = new Object();
- private static boolean aNotified = false;
- private static boolean bNotified = false;
- private static boolean cNotified = false;
- private static Object blockedObj1 = new Object();
- private static Object blockedObj2 = new Object();
- private static Object blockedObj3 = new Object();
- private static volatile boolean testFailed = false;
+ private static final Object a = new Object();
+ private static final Object b = new Object();
+ private static final Object c = new Object();
+
+ private static final Object blockedObj1 = new Object();
+ private static final Object blockedObj2 = new Object();
+ private static final Object blockedObj3 = new Object();
+ private static volatile boolean testOk = true;
private static BlockingThread blocking;
private static BlockedThread blocked;
- private static ThreadExecutionSynchronizer thrsync;
-
-
public static void main(String args[]) throws Exception {
- // Create the BlockingThread before BlockedThread
- // to make sure BlockingThread enter the lock before BlockedThread
- thrsync = new ThreadExecutionSynchronizer();
-
- blocking = new BlockingThread();
- blocking.start();
-
- blocked = new BlockedThread();
- blocked.start();
-
- try {
- blocking.join();
- blocked.join();
- } catch (InterruptedException e) {
- System.err.println("Unexpected exception.");
- e.printStackTrace(System.err);
- throw e;
- }
-
- if (testFailed) {
+ // real run
+ runTest();
+ if (!testOk) {
throw new RuntimeException("TEST FAILED.");
}
System.out.println("Test passed.");
}
+ private static void runTest() throws Exception {
+ final Phaser p = new Phaser(2);
+
+ blocking = new BlockingThread(p);
+ blocking.start();
+
+ blocked = new BlockedThread(p);
+ blocked.start();
+
+ try {
+ blocking.join();
+
+ testOk = checkBlocked();
+ p.arriveAndAwaitAdvance(); // #5
+
+ } catch (InterruptedException e) {
+ System.err.println("Unexpected exception.");
+ e.printStackTrace(System.err);
+ throw e;
+ }
+ }
+
static class BlockedThread extends Thread {
- // NOTE: We can't use a.wait() here because wait() call is counted
- // as blockedCount. Instead, we use a boolean flag and sleep.
- //
+ private final Phaser p;
+
+ BlockedThread(Phaser p) {
+ super("BlockedThread");
+ this.p = p;
+ }
+
public void run() {
- // wait Blocking thread
- thrsync.signal();
+ int accumulator = 0;
+ p.arriveAndAwaitAdvance(); // #1
// Enter lock a without blocking
synchronized (a) {
- // wait until BlockingThread holds blockedObj1
- while (!aNotified) {
- try {
- Thread.sleep(50);
- } catch (InterruptedException e) {
- System.err.println("Unexpected exception.");
- e.printStackTrace(System.err);
- testFailed = true;
- break;
- }
- }
-
- // signal BlockingThread.
- thrsync.signal();
+ p.arriveAndAwaitAdvance(); // #2
// Block to enter blockedObj1
// blockedObj1 should be owned by BlockingThread
synchronized (blockedObj1) {
- System.out.println("BlockedThread entered lock blockedObj1.");
+ accumulator++; // filler
}
}
- // signal BlockingThread.
- thrsync.signal();
-
// Enter lock a without blocking
synchronized (b) {
// wait until BlockingThread holds blockedObj2
- while (!bNotified) {
- try {
- Thread.sleep(50);
- } catch (InterruptedException e) {
- System.err.println("Unexpected exception.");
- e.printStackTrace(System.err);
- testFailed = true;
- break;
- }
- }
-
- // signal BlockingThread.
- thrsync.signal();
+ p.arriveAndAwaitAdvance(); // #3
// Block to enter blockedObj2
// blockedObj2 should be owned by BlockingThread
synchronized (blockedObj2) {
- System.out.println("BlockedThread entered lock blockedObj2.");
+ accumulator++; // filler
}
}
- // signal BlockingThread.
- thrsync.signal();
-
// Enter lock a without blocking
synchronized (c) {
// wait until BlockingThread holds blockedObj3
- while (!cNotified) {
- try {
- Thread.sleep(50);
- } catch (InterruptedException e) {
- System.err.println("Unexpected exception.");
- e.printStackTrace(System.err);
- testFailed = true;
- break;
- }
- }
-
- // signal BlockingThread.
- thrsync.signal();
+ p.arriveAndAwaitAdvance(); // #4
// Block to enter blockedObj3
// blockedObj3 should be owned by BlockingThread
synchronized (blockedObj3) {
- System.out.println("BlockedThread entered lock blockedObj3.");
+ accumulator++; // filler
}
}
- // wait for the thread stats to be updated for 10 seconds
- for (int i = 0; i < 100; i++) {
- if (getBlockedCount() == EXPECTED_BLOCKED_COUNT) {
- return;
- }
- try {
- Thread.sleep(100);
- } catch (InterruptedException e) {
- System.err.println("Unexpected exception.");
- e.printStackTrace(System.err);
- testFailed = true;
- return;
- }
- }
- long count = getBlockedCount();
- if (count != EXPECTED_BLOCKED_COUNT) {
- System.err.println("TEST FAILED: Blocked thread has " + count +
- " blocked counts. Expected " +
- EXPECTED_BLOCKED_COUNT);
- testFailed = true;
- }
+ // wait for the main thread to check the blocked count
+ System.out.println("Acquired " + accumulator + " monitors");
+ p.arriveAndAwaitAdvance(); // #5
+ // ... and we can leave now
} // run()
- } // BlockingThread
+ } // BlockedThread
static class BlockingThread extends Thread {
- private void waitForSignalToRelease() {
+ private final Phaser p;
+ BlockingThread(Phaser p) {
+ super("BlockingThread");
+ this.p = p;
+ }
+
+ private void waitForBlocked() {
// wait for BlockedThread.
- thrsync.waitForSignal();
+ p.arriveAndAwaitAdvance();
boolean threadBlocked = false;
while (!threadBlocked) {
@@ -206,7 +156,7 @@
} catch (InterruptedException e) {
System.err.println("Unexpected exception.");
e.printStackTrace(System.err);
- testFailed = true;
+ testOk = false;
break;
}
ThreadInfo info = mbean.getThreadInfo(blocked.getId());
@@ -215,44 +165,55 @@
}
public void run() {
- // wait for BlockedThread.
- thrsync.waitForSignal();
+ p.arriveAndAwaitAdvance(); // #1
synchronized (blockedObj1) {
System.out.println("BlockingThread attempts to notify a");
- aNotified = true;
- waitForSignalToRelease();
+ waitForBlocked(); // #2
}
- // wait for BlockedThread.
- thrsync.waitForSignal();
-
// block until BlockedThread is ready
synchronized (blockedObj2) {
System.out.println("BlockingThread attempts to notify b");
- bNotified = true;
- waitForSignalToRelease();
+ waitForBlocked(); // #3
}
- // wait for BlockedThread.
- thrsync.waitForSignal();
-
// block until BlockedThread is ready
synchronized (blockedObj3) {
System.out.println("BlockingThread attempts to notify c");
- cNotified = true;
- waitForSignalToRelease();
+ waitForBlocked(); // #4
}
} // run()
- } // BlockedThread
+ } // BlockingThread
private static long getBlockedCount() {
long count;
// Check the mbean now
- ThreadInfo ti = mbean.getThreadInfo(Thread.currentThread().
- getId());
+ ThreadInfo ti = mbean.getThreadInfo(blocked.getId());
count = ti.getBlockedCount();
return count;
}
+
+ private static boolean checkBlocked() {
+ // wait for the thread stats to be updated for 10 seconds
+ long count = -1;
+ for (int i = 0; i < 100; i++) {
+ count = getBlockedCount();
+ if (count >= EXPECTED_BLOCKED_COUNT) {
+ return true;
+ }
+ try {
+ Thread.sleep(100);
+ } catch (InterruptedException e) {
+ System.err.println("Unexpected exception.");
+ e.printStackTrace(System.err);
+ return false;
+ }
+ }
+ System.err.println("TEST FAILED: Blocked thread has " + count +
+ " blocked counts. Expected at least " +
+ EXPECTED_BLOCKED_COUNT);
+ return false;
+ }
}
diff --git a/jdk/test/java/lang/management/ThreadMXBean/ThreadExecutionSynchronizer.java b/jdk/test/java/lang/management/ThreadMXBean/ThreadExecutionSynchronizer.java
deleted file mode 100644
index 46c7d50..0000000
--- a/jdk/test/java/lang/management/ThreadMXBean/ThreadExecutionSynchronizer.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- *
- * @summary This class is used to synchronize execution of two threads.
- * @author Swamy Venkataramanappa
- */
-
-import java.util.concurrent.Semaphore;
-
-public class ThreadExecutionSynchronizer {
-
- private volatile boolean waiting;
- private final Semaphore semaphore;
-
- public ThreadExecutionSynchronizer() {
- semaphore = new Semaphore(1);
- waiting = false;
- }
-
- // Synchronizes two threads execution points.
- // Basically any thread could get scheduled to run and
- // it is not possible to know which thread reaches expected
- // execution point. So whichever thread reaches a execution
- // point first wait for the second thread. When the second thread
- // reaches the expected execution point will wake up
- // the thread which is waiting here.
- void stopOrGo() {
- semaphore.acquireUninterruptibly(); // Thread can get blocked.
- if (!waiting) {
- waiting = true;
- // Wait for second thread to enter this method.
- while(!semaphore.hasQueuedThreads()) {
- try {
- Thread.sleep(20);
- } catch (InterruptedException xx) {}
- }
- semaphore.release();
- } else {
- waiting = false;
- semaphore.release();
- }
- }
-
- // Wrapper function just for code readability.
- void waitForSignal() {
- stopOrGo();
- goSleep(50);
- }
-
- void signal() {
- stopOrGo();
- goSleep(50);
- }
-
- private static void goSleep(long ms) {
- try {
- Thread.sleep(ms);
- } catch (InterruptedException e) {
- e.printStackTrace();
- System.out.println("Unexpected exception.");
- }
- }
-}
diff --git a/jdk/test/java/net/ServerSocket/AnotherSelectFdsLimit.java b/jdk/test/java/net/ServerSocket/AnotherSelectFdsLimit.java
new file mode 100644
index 0000000..391c5fb
--- /dev/null
+++ b/jdk/test/java/net/ServerSocket/AnotherSelectFdsLimit.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8035897
+ * @summary FD_SETSIZE should be set on macosx
+ * @run main/othervm AnotherSelectFdsLimit 1023
+ * @run main/othervm AnotherSelectFdsLimit 1024
+ * @run main/othervm AnotherSelectFdsLimit 1025
+ * @run main/othervm AnotherSelectFdsLimit 1600
+ */
+
+import java.io.IOException;
+import java.net.ServerSocket;
+import java.net.SocketTimeoutException;
+import java.util.ArrayList;
+import java.util.List;
+
+public class AnotherSelectFdsLimit {
+ static final int DEFAULT_FDS_TO_USE = 1600;
+
+ public static void main(String [] args) throws Exception {
+ if (!System.getProperty("os.name").contains("OS X")) {
+ System.out.println("Test only run on MAC. Exiting.");
+ return;
+ }
+
+ int fdsToUse = DEFAULT_FDS_TO_USE;
+ if (args.length == 1)
+ fdsToUse = Integer.parseInt(args[0]);
+
+ System.out.println("Using " + fdsToUse + " fds.");
+
+ List<Thread> threads = new ArrayList<>();
+ for (int i=0; i<fdsToUse; i++)
+ threads.add(new WorkerThread());
+
+ for (Thread t : threads)
+ t.start();
+
+ for (Thread t : threads)
+ t.join();
+ }
+
+ static class WorkerThread extends Thread {
+ public void run() {
+ try (ServerSocket ss = new ServerSocket(0)) {
+ ss.setSoTimeout(2000);
+ ss.accept();
+ } catch (SocketTimeoutException x) {
+ // expected
+ } catch (IOException x) {
+ throw new java.io.UncheckedIOException(x);
+ }
+ }
+ }
+}
diff --git a/jdk/test/java/nio/channels/Selector/ByteServer.java b/jdk/test/java/nio/channels/Selector/ByteServer.java
index eefd1fb..40d8adf 100644
--- a/jdk/test/java/nio/channels/Selector/ByteServer.java
+++ b/jdk/test/java/nio/channels/Selector/ByteServer.java
@@ -22,52 +22,54 @@
*/
/**
- *
- * Utility class for tests. A simple server, which waits for a connection,
- * writes out n bytes and waits.
+ * Utility class for tests. A simple "in-thread" server to accept connections
+ * and write bytes.
* @author kladko
*/
import java.net.Socket;
import java.net.ServerSocket;
+import java.net.SocketAddress;
+import java.net.InetSocketAddress;
+import java.io.IOException;
+import java.io.Closeable;
-public class ByteServer {
+public class ByteServer implements Closeable {
- public static final String LOCALHOST = "localhost";
- private int bytecount;
- private Socket socket;
- private ServerSocket serversocket;
- private Thread serverthread;
- volatile Exception savedException;
+ private final ServerSocket ss;
+ private Socket s;
- public ByteServer(int bytecount) throws Exception{
- this.bytecount = bytecount;
- serversocket = new ServerSocket(0);
+ ByteServer() throws IOException {
+ this.ss = new ServerSocket(0);
}
- public int port() {
- return serversocket.getLocalPort();
+ SocketAddress address() {
+ return new InetSocketAddress(ss.getInetAddress(), ss.getLocalPort());
}
- public void start() {
- serverthread = new Thread() {
- public void run() {
- try {
- socket = serversocket.accept();
- socket.getOutputStream().write(new byte[bytecount]);
- socket.getOutputStream().flush();
- } catch (Exception e) {
- System.err.println("Exception in ByteServer: " + e);
- System.exit(1);
- }
- }
- };
- serverthread.start();
+ void acceptConnection() throws IOException {
+ if (s != null)
+ throw new IllegalStateException("already connected");
+ this.s = ss.accept();
}
- public void exit() throws Exception {
- serverthread.join();
- socket.close();
- serversocket.close();
+ void closeConnection() throws IOException {
+ Socket s = this.s;
+ if (s != null) {
+ this.s = null;
+ s.close();
+ }
+ }
+
+ void write(int count) throws IOException {
+ if (s == null)
+ throw new IllegalStateException("no connection");
+ s.getOutputStream().write(new byte[count]);
+ }
+
+ public void close() throws IOException {
+ if (s != null)
+ s.close();
+ ss.close();
}
}
diff --git a/jdk/test/java/nio/channels/Selector/ReadAfterConnect.java b/jdk/test/java/nio/channels/Selector/ReadAfterConnect.java
index e5d0b09..93318fb 100644
--- a/jdk/test/java/nio/channels/Selector/ReadAfterConnect.java
+++ b/jdk/test/java/nio/channels/Selector/ReadAfterConnect.java
@@ -27,27 +27,25 @@
* @author kladko
*/
-import java.net.*;
-import java.nio.*;
-import java.nio.channels.*;
+import java.nio.channels.Selector;
+import java.nio.channels.SelectionKey;
+import java.nio.channels.SocketChannel;
public class ReadAfterConnect {
-
public static void main(String[] argv) throws Exception {
- ByteServer server = new ByteServer(0); // server: accept connection and do nothing
- server.start();
- InetSocketAddress isa = new InetSocketAddress(
- InetAddress.getByName(ByteServer.LOCALHOST), server.port());
- Selector sel = Selector.open();
- SocketChannel sc = SocketChannel.open();
- sc.connect(isa);
- sc.configureBlocking(false);
- sc.register(sel, SelectionKey.OP_READ);
- // Previously channel would get selected here, although there is nothing to read
- if (sel.selectNow() != 0)
- throw new Exception("Select returned nonzero value");
- sc.close();
- server.exit();
+ try (ByteServer server = new ByteServer();
+ SocketChannel sc = SocketChannel.open(server.address())) {
+
+ server.acceptConnection();
+
+ try (Selector sel = Selector.open()) {
+ sc.configureBlocking(false);
+ sc.register(sel, SelectionKey.OP_READ);
+ // Previously channel would get selected here, although there is nothing to read
+ if (sel.selectNow() != 0)
+ throw new Exception("Select returned nonzero value");
+ }
+ }
}
}
diff --git a/jdk/test/java/nio/channels/Selector/SelectAfterRead.java b/jdk/test/java/nio/channels/Selector/SelectAfterRead.java
index fccd9dd..3563146 100644
--- a/jdk/test/java/nio/channels/Selector/SelectAfterRead.java
+++ b/jdk/test/java/nio/channels/Selector/SelectAfterRead.java
@@ -28,60 +28,62 @@
* @author kladko
*/
-import java.net.*;
-import java.nio.*;
-import java.nio.channels.*;
+import java.nio.ByteBuffer;
+import java.nio.channels.Selector;
+import java.nio.channels.SelectionKey;
+import java.nio.channels.SocketChannel;
public class SelectAfterRead {
- final static int TIMEOUT = 1000;
+ private static final int TIMEOUT = 1000;
public static void main(String[] argv) throws Exception {
- InetAddress lh = InetAddress.getByName(ByteServer.LOCALHOST);
// server: accept connection and write one byte
- ByteServer server = new ByteServer(1);
- server.start();
- Selector sel = Selector.open();
- SocketChannel sc = SocketChannel.open();
- sc.connect(new InetSocketAddress(lh, server.port()));
- sc.read(ByteBuffer.allocate(1));
- sc.configureBlocking(false);
- sc.register(sel, SelectionKey.OP_READ);
- // previously on Windows select would select channel here, although there was
- // nothing to read
- if (sel.selectNow() != 0)
- throw new Exception("Select returned nonzero value");
- sc.close();
- sel.close();
- server.exit();
+ try (ByteServer server = new ByteServer();
+ SocketChannel sc = SocketChannel.open(server.address())) {
+
+ server.acceptConnection();
+ server.write(1);
+
+ try (Selector sel = Selector.open()) {
+ sc.read(ByteBuffer.allocate(1));
+ sc.configureBlocking(false);
+ sc.register(sel, SelectionKey.OP_READ);
+ // previously on Windows select would select channel here, although there was
+ // nothing to read
+ if (sel.selectNow() != 0)
+ throw new Exception("Select returned nonzero value");
+ }
+ }
// Now we will test a two reads combination
// server: accept connection and write two bytes
- server = new ByteServer(2);
- server.start();
- sc = SocketChannel.open();
- sc.connect(new InetSocketAddress(lh, server.port()));
- sc.configureBlocking(false);
- sel = Selector.open();
- sc.register(sel, SelectionKey.OP_READ);
- if (sel.select(TIMEOUT) != 1)
- throw new Exception("One selected key expected");
- sel.selectedKeys().clear();
- // previously on Windows a channel would get selected only once
- if (sel.selectNow() != 1)
- throw new Exception("One selected key expected");
- // Previously on Windows two consequent reads would cause select()
- // to select a channel, although there was nothing remaining to
- // read in the channel
- if (sc.read(ByteBuffer.allocate(1)) != 1)
- throw new Exception("One byte expected");
- if (sc.read(ByteBuffer.allocate(1)) != 1)
- throw new Exception("One byte expected");
- if (sel.selectNow() != 0)
- throw new Exception("Select returned nonzero value");
- sc.close();
- sel.close();
- server.exit();
+ try (ByteServer server = new ByteServer();
+ SocketChannel sc = SocketChannel.open(server.address())) {
+
+ server.acceptConnection();
+ server.write(2);
+
+ try (Selector sel = Selector.open()) {
+ sc.configureBlocking(false);
+ sc.register(sel, SelectionKey.OP_READ);
+ if (sel.select(TIMEOUT) != 1)
+ throw new Exception("One selected key expected");
+ sel.selectedKeys().clear();
+ // previously on Windows a channel would get selected only once
+ if (sel.selectNow() != 1)
+ throw new Exception("One selected key expected");
+ // Previously on Windows two consequent reads would cause select()
+ // to select a channel, although there was nothing remaining to
+ // read in the channel
+ if (sc.read(ByteBuffer.allocate(1)) != 1)
+ throw new Exception("One byte expected");
+ if (sc.read(ByteBuffer.allocate(1)) != 1)
+ throw new Exception("One byte expected");
+ if (sel.selectNow() != 0)
+ throw new Exception("Select returned nonzero value");
+ }
+ }
}
}
diff --git a/jdk/test/java/nio/channels/Selector/SelectWrite.java b/jdk/test/java/nio/channels/Selector/SelectWrite.java
index 3c2d3d8..ab305ed 100644
--- a/jdk/test/java/nio/channels/Selector/SelectWrite.java
+++ b/jdk/test/java/nio/channels/Selector/SelectWrite.java
@@ -22,36 +22,33 @@
*/
/* @test
- @bug 4645302
- @summary Socket with OP_WRITE would get selected only once
- @author kladko
+ * @bug 4645302
+ * @summary Socket with OP_WRITE would get selected only once
+ * @author kladko
*/
-import java.net.*;
-import java.nio.*;
-import java.nio.channels.*;
-
+import java.nio.channels.Selector;
+import java.nio.channels.SelectionKey;
+import java.nio.channels.SocketChannel;
public class SelectWrite {
public static void main(String[] argv) throws Exception {
- ByteServer server = new ByteServer(0);
- // server: accept connection and do nothing
- server.start();
- InetSocketAddress isa = new InetSocketAddress(
- InetAddress.getByName(ByteServer.LOCALHOST), server.port());
- Selector sel = Selector.open();
- SocketChannel sc = SocketChannel.open();
- sc.connect(isa);
- sc.configureBlocking(false);
- sc.register(sel, SelectionKey.OP_WRITE);
- sel.select();
- sel.selectedKeys().clear();
- if (sel.select() == 0) {
- throw new Exception("Select returned zero");
+ try (ByteServer server = new ByteServer();
+ SocketChannel sc = SocketChannel.open(server.address())) {
+
+ server.acceptConnection();
+
+ try (Selector sel = Selector.open()) {
+ sc.configureBlocking(false);
+ sc.register(sel, SelectionKey.OP_WRITE);
+ sel.select();
+ sel.selectedKeys().clear();
+ if (sel.select() == 0) {
+ throw new Exception("Select returned zero");
+ }
+ }
}
- sc.close();
- sel.close();
}
}
diff --git a/jdk/test/java/rmi/registry/readTest/readTest.sh b/jdk/test/java/rmi/registry/readTest/readTest.sh
index ff527b0..586460f 100644
--- a/jdk/test/java/rmi/registry/readTest/readTest.sh
+++ b/jdk/test/java/rmi/registry/readTest/readTest.sh
@@ -37,11 +37,13 @@
SunOS | Linux | Darwin )
PS=":"
FS="/"
+ CHMOD="${FS}bin${FS}chmod"
FILEURL="file:"
;;
Windows* )
PS=";"
FS="\\"
+ CHMOD="chmod"
FILEURL="file:/"
if [ "$VER" -eq "5" ]; then
ARGS="-Djdk.net.ephemeralPortRange.low=1024 -Djdk.net.ephemeralPortRange.high=65000"
@@ -51,6 +53,7 @@
CYGWIN* )
PS=";"
FS="/"
+ CHMOD="chmod"
FILEURL="file:/"
if [ "$VER" -eq "5" ]; then
ARGS="-Djdk.net.ephemeralPortRange.low=1024 -Djdk.net.ephemeralPortRange.high=65000"
@@ -65,6 +68,7 @@
TEST_CLASSPATH=.$PS${TESTCLASSPATH:-$TESTCLASSES}
cp -r ${TESTSRC}${FS}* .
+${CHMOD} -R u+w *
${COMPILEJAVA}${FS}bin${FS}javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} testPkg${FS}*java
${COMPILEJAVA}${FS}bin${FS}javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -cp $TEST_CLASSPATH readTest.java
diff --git a/jdk/test/java/security/cert/CertPathBuilder/akiExt/AKISerialNumber.java b/jdk/test/java/security/cert/CertPathBuilder/akiExt/AKISerialNumber.java
new file mode 100644
index 0000000..e8ab65d
--- /dev/null
+++ b/jdk/test/java/security/cert/CertPathBuilder/akiExt/AKISerialNumber.java
@@ -0,0 +1,141 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/**
+ * @test
+ * @bug 8025708
+ * @summary make sure a PKIX CertPathBuilder can build a path when an
+ * intermediate CA certificate contains an AKI extension with a key
+ * identifier and no serial number and the end-entity certificate contains
+ * an AKI extension with both a key identifier and a serial number.
+ */
+
+import java.io.ByteArrayInputStream;
+import java.security.cert.*;
+import java.util.ArrayList;
+import java.util.Base64;
+import java.util.Collections;
+
+public class AKISerialNumber {
+
+ private static final String ROOT_CERT =
+ "MIICfTCCAeagAwIBAgIBATANBgkqhkiG9w0BAQUFADB3MQ0wCwYDVQQDEwRSb290\n" +
+ "MRYwFAYDVQQLEw1UZXN0IE9yZyBVbml0MREwDwYDVQQKEwhUZXN0IE9yZzEWMBQG\n" +
+ "A1UEBxMNVGVzdCBMb2NhbGl0eTEWMBQGA1UECBMNTWFzc2FjaHVzZXR0czELMAkG\n" +
+ "A1UEBhMCVVMwHhcNMTQwMjAxMDUwMDAwWhcNMjQwMjAxMDUwMDAwWjB3MQ0wCwYD\n" +
+ "VQQDEwRSb290MRYwFAYDVQQLEw1UZXN0IE9yZyBVbml0MREwDwYDVQQKEwhUZXN0\n" +
+ "IE9yZzEWMBQGA1UEBxMNVGVzdCBMb2NhbGl0eTEWMBQGA1UECBMNTWFzc2FjaHVz\n" +
+ "ZXR0czELMAkGA1UEBhMCVVMwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAJvL\n" +
+ "cZu6Rzf9IrduEDjJxEFv5uBvUNMlIAph7NhfmFH9puPW3Ksci4a5yTCzxI9VeVf3\n" +
+ "oYZ/UrZdF+mNZmS23RUh71X5tjMO+xew196M1xNpCRLbjcZ6i4tNdZYkdRIe8ejN\n" +
+ "sbBoD7OAvPbQqTygeG4jYjK6ODofSrba3BndNoFxAgMBAAGjGTAXMBUGA1UdEwEB\n" +
+ "/wQLMAkBAf8CBH////8wDQYJKoZIhvcNAQEFBQADgYEATvCqn69pNHv0zLiZAXk7\n" +
+ "3AKwAoza0wa+1S2rVuZGfBWbV7CxmBHbgcDDbU7/I8pQVkCwOHNkVFnBgNpMuAvU\n" +
+ "aDyrHSNS/av5d1yk5WAuGX2B9mSwZdhnAvtz2fsV1q9NptdF54EkIiKtQQmTGnr9\n" +
+ "TID8CFEk/qje+AB272B1UJw=\n";
+
+ /**
+ * This certificate contains an AuthorityKeyIdentifier with only the
+ * keyIdentifier field filled in.
+ */
+ private static final String INT_CERT_WITH_KEYID_AKI =
+ "MIICqTCCAhKgAwIBAgIBAjANBgkqhkiG9w0BAQUFADB3MQ0wCwYDVQQDEwRSb290\n" +
+ "MRYwFAYDVQQLEw1UZXN0IE9yZyBVbml0MREwDwYDVQQKEwhUZXN0IE9yZzEWMBQG\n" +
+ "A1UEBxMNVGVzdCBMb2NhbGl0eTEWMBQGA1UECBMNTWFzc2FjaHVzZXR0czELMAkG\n" +
+ "A1UEBhMCVVMwHhcNMTQwMjAxMDUwMDAwWhcNMjQwMjAxMDUwMDAwWjCBhDEaMBgG\n" +
+ "A1UEAxMRSW50ZXJtZWRpYXRlIENBIDIxFjAUBgNVBAsTDVRlc3QgT3JnIFVuaXQx\n" +
+ "ETAPBgNVBAoTCFRlc3QgT3JnMRYwFAYDVQQHEw1UZXN0IExvY2FsaXR5MRYwFAYD\n" +
+ "VQQIEw1NYXNzYWNodXNldHRzMQswCQYDVQQGEwJVUzCBnzANBgkqhkiG9w0BAQEF\n" +
+ "AAOBjQAwgYkCgYEAwKTZekCqb9F9T54s2IXjkQbmLIjQamMpkUlZNrpjjNq9CpTT\n" +
+ "POkfxv2UPwzTz3Ij4XFL/kJFBLm8NUOsS5xPJ62pGoZBPw9R0iMTsTce+Fpukqnr\n" +
+ "I+8jTRaAvr0tR3pqrE6uHKg7dWYN2SsWesDia/LHhwEN38yyWtSuTTLo4hcCAwEA\n" +
+ "AaM3MDUwHwYDVR0jBBgwFoAU6gZP1pO8v7+i8gsFf1gWTf/j3PkwEgYDVR0TAQH/\n" +
+ "BAgwBgEB/wIBADANBgkqhkiG9w0BAQUFAAOBgQAQxeQruav4AqQM4gmEfrHr5hOq\n" +
+ "mB2CNJ1ZqVfpDZ8GHijncKTpjNoXzzQtV23Ge+39JHOVBNWtk+aghB3iu6xGq7Qn\n" +
+ "HlBhg9meqHFqd3igDDD/jhABL2/bEo/M9rv6saYWDFZ8nCIEE6iTLTpRRko4W2Xb\n" +
+ "DyzMzMsO1kPNrJaxRg==\n";
+
+ /**
+ * This certificate contains an AuthorityKeyIdentifier with all 3 fields
+ * (keyIdentifier, authorityCertIssuer, and authorityCertSerialNumber)
+ * filled in.
+ */
+ private static final String EE_CERT_WITH_FULL_AKI =
+ "MIIDLjCCApegAwIBAgIBAzANBgkqhkiG9w0BAQUFADCBhDEaMBgGA1UEAxMRSW50\n" +
+ "ZXJtZWRpYXRlIENBIDIxFjAUBgNVBAsTDVRlc3QgT3JnIFVuaXQxETAPBgNVBAoT\n" +
+ "CFRlc3QgT3JnMRYwFAYDVQQHEw1UZXN0IExvY2FsaXR5MRYwFAYDVQQIEw1NYXNz\n" +
+ "YWNodXNldHRzMQswCQYDVQQGEwJVUzAeFw0xNDAyMDEwNTAwMDBaFw0yNDAyMDEw\n" +
+ "NTAwMDBaMH0xEzARBgNVBAMTCkVuZCBFbnRpdHkxFjAUBgNVBAsTDVRlc3QgT3Jn\n" +
+ "IFVuaXQxETAPBgNVBAoTCFRlc3QgT3JnMRYwFAYDVQQHEw1UZXN0IExvY2FsaXR5\n" +
+ "MRYwFAYDVQQIEw1NYXNzYWNodXNldHRzMQswCQYDVQQGEwJVUzCBnzANBgkqhkiG\n" +
+ "9w0BAQEFAAOBjQAwgYkCgYEAqady46PdwlKHVP1iaP11CxVyL6cDlPjpwhHCcIUv\n" +
+ "nKHbzdamqmHebDcWVBNN/I0TLNCl3ga7n8KyygSN379fG7haU8SNjpy4IDAXM0/x\n" +
+ "mwTWNTbKfJEkSoiqx1WUy2JTzRUMhgYPguQNECPxBXAdQrthZ7wQosv6Ro2ySP9O\n" +
+ "YqsCAwEAAaOBtTCBsjCBoQYDVR0jBIGZMIGWgBQdeoKxTvlTgW2KgprD69vgHV4X\n" +
+ "kKF7pHkwdzENMAsGA1UEAxMEUm9vdDEWMBQGA1UECxMNVGVzdCBPcmcgVW5pdDER\n" +
+ "MA8GA1UEChMIVGVzdCBPcmcxFjAUBgNVBAcTDVRlc3QgTG9jYWxpdHkxFjAUBgNV\n" +
+ "BAgTDU1hc3NhY2h1c2V0dHMxCzAJBgNVBAYTAlVTggECMAwGA1UdEwEB/wQCMAAw\n" +
+ "DQYJKoZIhvcNAQEFBQADgYEAuG4mM1nLF7STQWwmceELZEl49ntapH/RVoekknmd\n" +
+ "aNzcL4XQf6BTl8KFUXuThHaukQnGIzFbSZV0hrpSQ5fTN2cSZgD4Fji+HuNURmmd\n" +
+ "+Kayl0piHyO1FSbrty0TFhlVNvzKXjmMp6Jdn42KyGOSCoROQcvUWN6xkV3Hvrei\n" +
+ "0ZE=\n";
+
+ private static Base64.Decoder b64Decoder = Base64.getMimeDecoder();
+ private static CertificateFactory cf;
+
+ public static void main(String[] args) throws Exception {
+
+ cf = CertificateFactory.getInstance("X.509");
+
+ X509Certificate rootCert = getCertFromMimeEncoding(ROOT_CERT);
+ TrustAnchor anchor = new TrustAnchor(rootCert, null);
+
+ X509Certificate eeCert = getCertFromMimeEncoding(EE_CERT_WITH_FULL_AKI);
+ X509Certificate intCert = getCertFromMimeEncoding(INT_CERT_WITH_KEYID_AKI);
+
+ X509CertSelector sel = new X509CertSelector();
+ sel.setCertificate(eeCert);
+ PKIXBuilderParameters params = new PKIXBuilderParameters
+ (Collections.singleton(anchor), sel);
+ params.setRevocationEnabled(false);
+
+ ArrayList<X509Certificate> certs = new ArrayList<>();
+ certs.add(intCert);
+ certs.add(eeCert);
+ CollectionCertStoreParameters ccsp =
+ new CollectionCertStoreParameters(certs);
+ CertStore cs = CertStore.getInstance("Collection", ccsp);
+ params.addCertStore(cs);
+
+ CertPathBuilder cpb = CertPathBuilder.getInstance("PKIX");
+ CertPathBuilderResult res = cpb.build(params);
+ }
+
+ private static X509Certificate getCertFromMimeEncoding(String encoded)
+ throws CertificateException
+ {
+ byte[] bytes = b64Decoder.decode(encoded);
+ ByteArrayInputStream stream = new ByteArrayInputStream(bytes);
+ return (X509Certificate)cf.generateCertificate(stream);
+ }
+}
diff --git a/jdk/test/java/util/logging/Logger/setResourceBundle/TestSetResourceBundle.java b/jdk/test/java/util/logging/Logger/setResourceBundle/TestSetResourceBundle.java
index 3ba69e7..fbdb611 100644
--- a/jdk/test/java/util/logging/Logger/setResourceBundle/TestSetResourceBundle.java
+++ b/jdk/test/java/util/logging/Logger/setResourceBundle/TestSetResourceBundle.java
@@ -57,8 +57,8 @@
* that was present in the last LogRecord instance published.
*/
static final class TestHandler extends Handler {
- ResourceBundle lastBundle = null;
- String lastBundleName = null;
+ volatile ResourceBundle lastBundle = null;
+ volatile String lastBundleName = null;
@Override
public void publish(LogRecord record) {
lastBundle = record.getResourceBundle();
@@ -186,6 +186,8 @@
public static void test(String loggerName) throws Exception {
+ System.out.println("Starting test for " + loggerName);
+
final ResourceBundle bundle = ResourceBundle.getBundle(LIST_BUNDLE_NAME);
Logger foobar = Logger.getLogger(loggerName);
@@ -235,16 +237,21 @@
}
// Create a child logger
- Logger foobaz = Logger.getLogger(loggerName + ".baz");
+ final Logger foobaz = Logger.getLogger(loggerName + ".baz");
+
+ if (foobar != foobaz.getParent()) {
+ throw new RuntimeException("Unexpected parent: " +
+ foobaz.getParent() + " != " + foobar);
+ }
// Check that the child logger does not have a bundle set locally
if (foobaz.getResourceBundle() != null) {
throw new RuntimeException("Unexpected bundle: "
- + foobar.getResourceBundle());
+ + foobaz.getResourceBundle());
}
if (foobaz.getResourceBundleName() != null) {
throw new RuntimeException("Unexpected bundle: "
- + foobar.getResourceBundleName());
+ + foobaz.getResourceBundleName());
}
@@ -258,39 +265,65 @@
// checks that the message has been logged with the bundle
// inherited from the parent logger
if (!LIST_BUNDLE_NAME.equals(handler.lastBundleName)) {
+ debugLogger(foobaz, foobar, handler);
throw new RuntimeException("Unexpected bundle name: "
+ handler.lastBundleName);
}
if (!bundle_fr.equals(handler.lastBundle)) {
+ debugLogger(foobaz, foobar, handler);
throw new RuntimeException("Unexpected bundle: "
+ handler.lastBundle);
}
// Check that we can get set a bundle on the child logger
// using Logger.getLogger.
- foobaz = Logger.getLogger(loggerName + ".baz", PROPERTY_BUNDLE_NAME);
+ final Logger foobaz2 = Logger.getLogger(loggerName + ".baz", PROPERTY_BUNDLE_NAME);
+ if (foobaz2 != foobaz) {
+ throw new RuntimeException("Unexpected logger: " + foobaz2 + " != " + foobaz);
+ }
+ if (foobar != foobaz.getParent()) {
+ throw new RuntimeException("Unexpected parent: " +
+ foobaz.getParent() + " != " + foobar);
+ }
// check that the child logger has the correct bundle.
// it should no longer inherit it from its parent.
- if (!PROPERTY_BUNDLE_NAME.equals(foobaz.getResourceBundleName())) {
+ if (!PROPERTY_BUNDLE_NAME.equals(foobaz2.getResourceBundleName())) {
throw new RuntimeException("Unexpected bundle name: "
- + foobaz.getResourceBundleName());
+ + foobaz2.getResourceBundleName());
}
- if (!PROPERTY_BUNDLE_NAME.equals(foobaz.getResourceBundle().getBaseBundleName())) {
+
+ if (!PROPERTY_BUNDLE_NAME.equals(foobaz2.getResourceBundle().getBaseBundleName())) {
throw new RuntimeException("Unexpected bundle name: "
- + foobaz.getResourceBundle().getBaseBundleName());
+ + foobaz2.getResourceBundle().getBaseBundleName());
+ }
+
+ boolean found = false;
+ for (Handler h : foobaz2.getHandlers()) {
+ if (h == handler) {
+ found = true;
+ break;
+ }
+ }
+
+ if (!found) {
+ throw new RuntimeException("Expected handler not found in: " +
+ foobaz2.getName() + "(" + foobaz2.getClass().getName()+")" );
}
// log a message on the child logger
- foobaz.severe("dummy");
+ foobaz2.severe("dummy");
+
// check that the last published log record has the appropriate
// bundle.
if (!PROPERTY_BUNDLE_NAME.equals(handler.lastBundleName)) {
+ debugLogger(foobaz2, foobar, handler);
throw new RuntimeException("Unexpected bundle name: "
+ handler.lastBundleName);
}
- if (foobaz.getResourceBundle() != handler.lastBundle) {
+ if (foobaz2.getResourceBundle() != handler.lastBundle) {
+ debugLogger(foobaz2, foobar, handler);
throw new RuntimeException("Unexpected bundle: "
+ handler.lastBundle);
}
@@ -298,7 +331,7 @@
// try to set a bundle that has a different name, and checks that
// it fails in IAE.
try {
- foobaz.setResourceBundle(bundle_fr);
+ foobaz2.setResourceBundle(bundle_fr);
throw new RuntimeException("Expected exception not raised!");
} catch (IllegalArgumentException x) {
System.out.println("Got expected exception: " + x);
@@ -333,10 +366,12 @@
// check that the log record had the correct bundle.
if (! PROPERTY_BUNDLE_NAME.equals(handler2.lastBundleName)) {
+ debugLogger(customLogger, foobar, handler2);
throw new RuntimeException("Unexpected bundle name: "
+ handler2.lastBundleName);
}
if (! PROPERTY_BUNDLE_NAME.equals(customLogger.getResourceBundleName())) {
+ debugLogger(customLogger, foobar, handler2);
throw new RuntimeException("Unexpected bundle name: "
+ customLogger.getResourceBundleName());
}
@@ -356,6 +391,7 @@
// because getResourceBundleName() is called on parent logger
// we will have handler2.lastBundleName = PROPERTY_BUNDLE_NAME
if (!PROPERTY_BUNDLE_NAME.equals(handler2.lastBundleName)) {
+ debugLogger(biebar, customLogger, handler2);
throw new RuntimeException("Unexpected bundle name: "
+ handler2.lastBundleName);
}
@@ -363,13 +399,70 @@
// we will have getBaseName(handler2.lastBundle) = PROPERTY_BUNDLE_NAME
// and not handler2.lastBundle = bundle_fr
if (handler2.lastBundle == null) {
+ debugLogger(biebar, customLogger, handler2);
throw new RuntimeException("Unexpected bundle: "
+ handler2.lastBundle);
}
if (!PROPERTY_BUNDLE_NAME.equals(getBaseName(handler2.lastBundle))) {
+ debugLogger(biebar, customLogger, handler2);
throw new RuntimeException("Unexpected bundle name: "
+ getBaseName(handler2.lastBundle));
}
+
+ // Just make sure that these loggers won't be eagerly GCed...
+ if (foobar == null || !loggerName.equals(foobar.getName())) {
+ throw new RuntimeException("foobar is null "
+ + "- or doesn't have the expected name: " + foobar);
+ }
+ if (foobaz == null || !foobaz.getName().startsWith(loggerName)) {
+ throw new RuntimeException("foobaz is null "
+ + "- or doesn't have the expected name: " + foobaz);
+ }
+ if (foobaz2 == null || !foobaz2.getName().startsWith(loggerName)) {
+ throw new RuntimeException("foobaz2 is null "
+ + "- or doesn't have the expected name: " + foobaz2);
+ }
+ if (!customLogger.getName().startsWith(loggerName)) {
+ throw new RuntimeException("customLogger "
+ + "doesn't have the expected name: " + customLogger);
+ }
+ if (!biebar.getName().startsWith(loggerName)) {
+ throw new RuntimeException("biebar "
+ + "doesn't have the expected name: " + biebar.getName());
+ }
+ System.out.println("Test passed for " + loggerName);
+ }
+
+ static void debugLogger(Logger logger, Logger expectedParent, TestHandler handler) {
+ final String logName = logger.getName();
+ final String prefix = " " + logName;
+ System.err.println("Logger " + logName
+ + " logged with bundle name " + handler.lastBundleName
+ + " (" + handler.lastBundle + ")");
+ System.err.println(prefix + ".getResourceBundleName() is "
+ + logger.getResourceBundleName());
+ System.err.println(prefix + ".getResourceBundle() is "
+ + logger.getResourceBundle());
+ final Logger parent = logger.getParent();
+ final String pname = parent == null ? null : parent.getName();
+ final String pclass = parent == null ? ""
+ : ("(" + parent.getClass().getName() + ")");
+ final String presn = parent == null ? null
+ : parent.getResourceBundleName();
+ final ResourceBundle pres = parent == null ? null
+ : parent.getResourceBundle();
+ System.err.println(prefix + ".getParent() is "
+ + pname + (pname == null ? ""
+ : (" " + pclass + ": " + parent)));
+ System.err.println(" expected parent is :" + expectedParent);
+ System.err.println(prefix + ".parent.getResourceBundleName() is "
+ + presn);
+ System.err.println(prefix + ".parent.getResourceBundle() is "
+ + pres);
+ System.err.println(" expected parent getResourceBundleName() is "
+ + expectedParent.getResourceBundleName());
+ System.err.println(" expected parent.getResourceBundle() is "
+ + expectedParent.getResourceBundle());
}
public static class SimplePolicy extends Policy {
diff --git a/jdk/test/java/util/logging/ParentLoggersTest.java b/jdk/test/java/util/logging/ParentLoggersTest.java
index 9f54fd9..66e8789 100644
--- a/jdk/test/java/util/logging/ParentLoggersTest.java
+++ b/jdk/test/java/util/logging/ParentLoggersTest.java
@@ -63,7 +63,9 @@
static final String LOGGER_NAME_1 = PARENT_NAME_1 + ".myLogger";
static final String LOGGER_NAME_2 = PARENT_NAME_2 + ".myBar.myLogger";
- static final List<String> initialLoggerNames = new ArrayList<String>();
+ static final List<String> initialLoggerNames = new ArrayList<>();
+ static final List<Logger> createdLoggers = new ArrayList<>();
+
public static void main(String args[]) throws Exception {
// cache the initial set of loggers before this test begins
// to add any loggers
@@ -74,7 +76,7 @@
if (!defaultLoggers.contains(logger)) {
initialLoggerNames.add(logger);
}
- };
+ }
String tstSrc = System.getProperty(TST_SRC_PROP);
File fname = new File(tstSrc, LM_PROP_FNAME);
@@ -92,7 +94,7 @@
}
public static List<String> getDefaultLoggerNames() {
- List<String> expectedLoggerNames = new ArrayList<String>();
+ List<String> expectedLoggerNames = new ArrayList<>();
// LogManager always creates two loggers:
expectedLoggerNames.add(""); // root logger: ""
@@ -106,56 +108,43 @@
*/
public static boolean checkLoggers() {
String failMsg = "# checkLoggers: getLoggerNames() returned unexpected loggers";
- Vector<String> expectedLoggerNames = new Vector<String>(getDefaultLoggerNames());
+ List<String> expectedLoggerNames = new ArrayList<>(getDefaultLoggerNames());
// Create the logger LOGGER_NAME_1
- Logger.getLogger(LOGGER_NAME_1);
- expectedLoggerNames.addElement(PARENT_NAME_1);
- expectedLoggerNames.addElement(LOGGER_NAME_1);
+ createdLoggers.add(Logger.getLogger(LOGGER_NAME_1));
+ expectedLoggerNames.add(PARENT_NAME_1);
+ expectedLoggerNames.add(LOGGER_NAME_1);
// Create the logger LOGGER_NAME_2
- Logger.getLogger(LOGGER_NAME_2);
- expectedLoggerNames.addElement(PARENT_NAME_2);
- expectedLoggerNames.addElement(LOGGER_NAME_2);
+ createdLoggers.add(Logger.getLogger(LOGGER_NAME_2));
+ expectedLoggerNames.add(PARENT_NAME_2);
+ expectedLoggerNames.add(LOGGER_NAME_2);
+
Enumeration<String> returnedLoggersEnum = logMgr.getLoggerNames();
- Vector<String> returnedLoggerNames = new Vector<String>(0);
+ List<String> returnedLoggerNames = new ArrayList<>(0);
while (returnedLoggersEnum.hasMoreElements()) {
String logger = returnedLoggersEnum.nextElement();
if (!initialLoggerNames.contains(logger)) {
// filter out the loggers that have been added before this test runs
- returnedLoggerNames.addElement(logger);
+ returnedLoggerNames.add(logger);
}
- };
-
+ }
+ System.out.println(returnedLoggerNames);
return checkNames(expectedLoggerNames, returnedLoggerNames, failMsg);
}
// Returns boolean values: PASSED or FAILED
- private static boolean checkNames(Vector<String> expNames,
- Vector<String> retNames,
+ private static boolean checkNames(List<String> expNames,
+ List<String> retNames,
String failMsg) {
boolean status = PASSED;
if (expNames.size() != retNames.size()) {
status = FAILED;
- } else {
- boolean checked[] = new boolean[retNames.size()];
- for (int i = 0; i < expNames.size(); i++) {
- int j = 0;
- for (; j < retNames.size(); j++) {
- if (!checked[j] &&
- expNames.elementAt(i).equals(retNames.elementAt(j))) {
- checked[j] = true;
- break;
- }
- }
- if (j >= retNames.size()) {
- status = FAILED;
- break;
- }
- }
+ } else if (!new HashSet<>(expNames).equals(new HashSet<>(retNames))) {
+ status = FAILED;
}
if (!status) {
printFailMsg(expNames, retNames, failMsg);
@@ -163,25 +152,25 @@
return status;
}
- private static void printFailMsg(Vector<String> expNames,
- Vector<String> retNames,
+ private static void printFailMsg(List<String> expNames,
+ List<String> retNames,
String failMsg) {
out.println();
out.println(failMsg);
- if (expNames.size() == 0) {
+ if (expNames.isEmpty()) {
out.println("# there are NO expected logger names");
} else {
out.println("# expected logger names (" + expNames.size() + "):");
for (int i = 0; i < expNames.size(); i++) {
- out.println(" expNames[" + i + "] = " + expNames.elementAt(i));
+ out.println(" expNames[" + i + "] = " + expNames.get(i));
}
}
- if (retNames.size() == 0) {
+ if (retNames.isEmpty()) {
out.println("# there are NO returned logger names");
} else {
out.println("# returned logger names (" + retNames.size() + "):");
for (int i = 0; i < retNames.size(); i++) {
- out.println(" retNames[" + i + "] = " + retNames.elementAt(i));
+ out.println(" retNames[" + i + "] = " + retNames.get(i));
}
}
}
diff --git a/jdk/test/java/util/logging/SimpleLogManager.java b/jdk/test/java/util/logging/SimpleLogManager.java
index f469727..1e1da79 100644
--- a/jdk/test/java/util/logging/SimpleLogManager.java
+++ b/jdk/test/java/util/logging/SimpleLogManager.java
@@ -98,16 +98,14 @@
return false;
}
CustomLogger newLogger = new CustomLogger(logger);
- super.addLogger(newLogger);
- return true;
+ return super.addLogger(newLogger);
}
public class CustomLogger extends Logger {
+ final Logger keepRef; // keep a strong reference to avoid GC.
CustomLogger(Logger logger) {
super(logger.getName(), logger.getResourceBundleName());
- }
- CustomLogger(String name) {
- super(name, null);
+ keepRef = logger;
}
}
}
diff --git a/jdk/test/java/util/logging/TestGetLoggerNPE.java b/jdk/test/java/util/logging/TestGetLoggerNPE.java
new file mode 100644
index 0000000..55ed6e0
--- /dev/null
+++ b/jdk/test/java/util/logging/TestGetLoggerNPE.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+import java.io.PrintStream;
+import java.security.Permission;
+import java.security.Policy;
+import java.security.ProtectionDomain;
+import java.util.logging.LogManager;
+import java.util.logging.Logger;
+import sun.misc.JavaAWTAccess;
+import sun.misc.SharedSecrets;
+
+/*
+ * @test
+ * @bug 8025512
+ *
+ * @summary NPE with logging while launching webstart
+ *
+ * @build TestGetLoggerNPE
+ * @run main/othervm TestGetLoggerNPE getLogger
+ * @run main/othervm TestGetLoggerNPE getLogManager
+ */
+public class TestGetLoggerNPE {
+ static volatile Throwable thrown = null;
+ public static void main(String[] args) throws Exception {
+ final String testCase = args.length == 0 ? "getLogger" : args[0];
+ final JavaAWTAccessStub access = new JavaAWTAccessStub();
+ SharedSecrets.setJavaAWTAccess(access);
+ final ThreadGroup tg = new ThreadGroup("TestGroup");
+ Thread t = new Thread(tg, "test") {
+ public void run() {
+ try {
+ access.setContext(Context.ONE);
+ final PrintStream out = System.out;
+ System.setOut(null);
+ try {
+ if ("getLogger".equals(testCase)) {
+ Logger.getLogger("sun.plugin");
+ } else {
+ LogManager.getLogManager();
+ }
+ } finally {
+ System.setOut(out);
+ }
+
+ System.out.println(Logger.global);
+ } catch (Throwable x) {
+ x.printStackTrace();
+ thrown = x;
+ }
+ }
+ };
+ Policy.setPolicy(new Policy() {
+ public boolean implies(ProtectionDomain domain,
+ Permission permission) {
+ return true; // all permissions
+ }
+ });
+ System.setSecurityManager(new SecurityManager());
+ t.start();
+ t.join();
+ if (thrown == null) {
+ System.out.println("PASSED: " + testCase);
+ } else {
+ System.err.println("FAILED: " + testCase);
+ throw new Error("Test failed: " + testCase + " - " + thrown, thrown);
+ }
+
+ }
+
+ static enum Context { ONE, TWO };
+
+ static final class JavaAWTAccessStub implements JavaAWTAccess {
+ private static final InheritableThreadLocal<Context> context = new InheritableThreadLocal<>();
+
+
+ public void setContext(Context context) {
+ JavaAWTAccessStub.context.set(context);
+ }
+
+ @Override
+ public Object getAppletContext() {
+ return context.get();
+ }
+
+ }
+
+}
diff --git a/jdk/test/java/util/logging/TestLogConfigurationDeadLock.java b/jdk/test/java/util/logging/TestLogConfigurationDeadLock.java
index 3d1e3d2..70badde1 100644
--- a/jdk/test/java/util/logging/TestLogConfigurationDeadLock.java
+++ b/jdk/test/java/util/logging/TestLogConfigurationDeadLock.java
@@ -196,7 +196,8 @@
if (ids.length == 1) {
throw new RuntimeException("Found 1 deadlocked thread: "+ids[0]);
} else if (ids.length > 0) {
- ThreadInfo[] infos = ManagementFactory.getThreadMXBean().getThreadInfo(ids);
+ ThreadInfo[] infos = ManagementFactory.getThreadMXBean()
+ .getThreadInfo(ids, Integer.MAX_VALUE);
System.err.println("Found "+ids.length+" deadlocked threads: ");
for (ThreadInfo inf : infos) {
System.err.println(inf.toString());
diff --git a/jdk/test/java/util/logging/TestLogConfigurationDeadLockWithConf.java b/jdk/test/java/util/logging/TestLogConfigurationDeadLockWithConf.java
new file mode 100644
index 0000000..9bde8d5
--- /dev/null
+++ b/jdk/test/java/util/logging/TestLogConfigurationDeadLockWithConf.java
@@ -0,0 +1,340 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+import java.io.File;
+import java.io.PrintStream;
+import java.lang.management.ManagementFactory;
+import java.lang.management.ThreadInfo;
+import java.security.Permission;
+import java.security.Policy;
+import java.security.ProtectionDomain;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Random;
+import java.util.Set;
+import java.util.concurrent.atomic.AtomicLong;
+import java.util.logging.Level;
+import java.util.logging.LogManager;
+import java.util.logging.Logger;
+
+
+/**
+ * @test
+ * @bug 8027670 8029281
+ * @summary Deadlock in drainLoggerRefQueueBounded / readConfiguration
+ * caused by synchronization issues in Logger and LogManager.
+ * @run main/othervm TestLogConfigurationDeadLockWithConf
+ * @author danielfuchs
+ */
+// This test is a best effort to try & detect issues. The test itself will run
+// for 8secs. This is usually sufficient to detect issues.
+// However to get a greater confidence it is recommended to run this test in a loop:
+// e.g. use something like:
+// $ while jtreg -jdk:$JDK -verbose:all \
+// test/java/util/logging/TestLogConfigurationDeadLockWithConf.java ; \
+// do echo Running test again ; done
+// and let it run for a few hours...
+//
+public class TestLogConfigurationDeadLockWithConf {
+
+ static volatile Exception thrown = null;
+ static volatile boolean goOn = true;
+
+ static final int READERS = 2;
+ static final int LOGGERS = 2;
+ static final long TIME = 4 * 1000; // 4 sec.
+ static final long STEP = 1 * 1000; // message every 1 sec.
+ static final int LCOUNT = 50; // 50 loggers created in a row...
+ static final AtomicLong nextLogger = new AtomicLong(0);
+ static final AtomicLong readCount = new AtomicLong(0);
+ static final AtomicLong checkCount = new AtomicLong(0);
+
+ /**
+ * This test will run both with and without a security manager.
+ *
+ * The test starts a number of threads that will call
+ * LogManager.readConfiguration() concurrently (ReadConf), then starts
+ * a number of threads that will create new loggers concurrently
+ * (AddLogger), and then two additional threads: one (Stopper) that
+ * will stop the test after 4secs (TIME ms), and one DeadlockDetector
+ * that will attempt to detect deadlocks.
+ * If after 4secs no deadlock was detected and no exception was thrown
+ * then the test is considered a success and passes.
+ *
+ * This procedure is done twice: once without a security manager and once
+ * again with a security manager - which means the test takes ~8secs to
+ * run.
+ *
+ * Note that 8sec may not be enough to detect issues if there are some.
+ * This is a best effort test.
+ *
+ * @param args the command line arguments
+ * @throws java.lang.Exception if the test fails.
+ */
+ public static void main(String[] args) throws Exception {
+ File config = new File(System.getProperty("test.src", "."),
+ "deadlockconf.properties");
+ if (!config.canRead()) {
+ System.err.println("Can't read config file: test cannot execute.");
+ System.err.println("Please check your test environment: ");
+ System.err.println("\t -Dtest.src=" + System.getProperty("test.src", "."));
+ System.err.println("\t config file is: " + config.getAbsolutePath());
+ throw new RuntimeException("Can't read config file: "
+ + config.getAbsolutePath());
+ }
+
+ System.setProperty("java.util.logging.config.file",
+ config.getAbsolutePath());
+
+ // test without security
+ System.out.println("No security");
+ test();
+
+ // test with security
+ System.out.println("\nWith security");
+ Policy.setPolicy(new Policy() {
+ @Override
+ public boolean implies(ProtectionDomain domain, Permission permission) {
+ if (super.implies(domain, permission)) return true;
+ // System.out.println("Granting " + permission);
+ return true; // all permissions
+ }
+ });
+ System.setSecurityManager(new SecurityManager());
+ test();
+ }
+
+ static Random rand = new Random(System.currentTimeMillis());
+ private static int getBarCount() {
+ return rand.nextInt(10);
+ }
+
+ /**
+ * Starts all threads, wait 4secs, then stops all threads.
+ * @throws Exception if a deadlock was detected or an error occurred.
+ */
+ public static void test() throws Exception {
+ goOn = true;
+ thrown = null;
+ long sNextLogger = nextLogger.get();
+ long sReadCount = readCount.get();
+ long sCheckCount = checkCount.get();
+ List<Thread> threads = new ArrayList<>();
+ for (int i = 0; i<READERS; i++) {
+ threads.add(new ReadConf());
+ }
+ for (int i = 0; i<LOGGERS; i++) {
+ threads.add(new AddLogger());
+ }
+ DeadlockDetector detector = new DeadlockDetector();
+ threads.add(detector);
+ threads.add(0, new Stopper(TIME));
+ for (Thread t : threads) {
+ t.start();
+ }
+
+ // wait for the detector to finish.
+ detector.join();
+
+ final PrintStream out = thrown == null ? System.out : System.err;
+
+ // Try to wait for all threads to finish.
+ // This is a best effort: if some threads are in deadlock we can't
+ // obviously wait for them, and other threads may have joined in
+ // the deadlock since we last checked.
+ // However, all threads which are succeptible of deadlocking
+ // extend DeamonThread.
+ for (Thread t : threads) {
+ if (t == detector) {
+ continue;
+ }
+ if (detector.deadlocked.contains(t.getId())) {
+ out.println("Skipping deadlocked thread "
+ + t.getClass().getSimpleName() + ": " + t);
+ continue; // don't wait for deadlocked thread: they won't terminate
+ }
+ try {
+ if (detector.deadlocked.isEmpty()) {
+ t.join();
+ } else {
+ if (t instanceof DaemonThread) {
+ // Some other threads may have join the deadlock.
+ // don't wait forever.
+ t.join(100);
+ } else {
+ // Those threads that don't extend DaemonThread
+ // should be safe from deadlock.
+ out.println("Waiting for "
+ + t.getClass().getSimpleName() + ": " + t);
+ t.join();
+ }
+ }
+ } catch (Exception x) {
+ fail(x);
+ }
+ }
+ out.println("All threads joined.");
+
+ final String status = thrown == null ? "Passed" : "FAILED";
+
+ out.println(status + ": " + (nextLogger.get() - sNextLogger)
+ + " loggers created by " + LOGGERS + " Thread(s),");
+ out.println("\t LogManager.readConfiguration() called "
+ + (readCount.get() - sReadCount) + " times by " + READERS
+ + " Thread(s).");
+ out.println("\t ThreadMXBean.findDeadlockedThreads called "
+ + (checkCount.get() -sCheckCount) + " times by 1 Thread.");
+
+ if (thrown != null) {
+ out.println("\t Error is: "+thrown.getMessage());
+ throw thrown;
+ }
+ }
+
+ static class DaemonThread extends Thread {
+ public DaemonThread() {
+ this.setDaemon(true);
+ }
+ }
+
+ final static class ReadConf extends DaemonThread {
+ @Override
+ public void run() {
+ while (goOn) {
+ try {
+ LogManager.getLogManager().readConfiguration();
+ readCount.incrementAndGet();
+ Thread.sleep(1);
+ } catch (Exception x) {
+ fail(x);
+ }
+ }
+ }
+ }
+
+ final static class AddLogger extends DaemonThread {
+ @Override
+ public void run() {
+ try {
+ while (goOn) {
+ Logger l;
+ int barcount = getBarCount();
+ for (int i=0; i < LCOUNT ; i++) {
+ l = Logger.getLogger("foo.bar"+barcount+".l"+nextLogger.incrementAndGet());
+ l.fine("I'm fine");
+ if (!goOn) break;
+ Thread.sleep(1);
+ }
+ }
+ } catch (InterruptedException | RuntimeException x ) {
+ fail(x);
+ }
+ }
+ }
+
+ final static class DeadlockDetector extends Thread {
+
+ final Set<Long> deadlocked = Collections.synchronizedSet(new HashSet<Long>());
+
+ static List<Long> asList(long... ids) {
+ final List<Long> list = new ArrayList<>(ids.length);
+ for (long id : ids) {
+ list.add(id);
+ }
+ return list;
+ }
+
+ @Override
+ public void run() {
+ while(goOn) {
+ try {
+ long[] ids = ManagementFactory.getThreadMXBean().findDeadlockedThreads();
+ checkCount.incrementAndGet();
+ ids = ids == null ? new long[0] : ids;
+ if (ids.length > 0) {
+ deadlocked.addAll(asList(ids));
+ }
+ if (ids.length == 1) {
+ throw new RuntimeException("Found 1 deadlocked thread: "+ids[0]);
+ } else if (ids.length > 0) {
+ ThreadInfo[] infos = ManagementFactory.getThreadMXBean().getThreadInfo(ids, Integer.MAX_VALUE);
+ System.err.println("Found "+ids.length+" deadlocked threads: ");
+ for (ThreadInfo inf : infos) {
+ System.err.println(inf.toString());
+ }
+ throw new RuntimeException("Found "+ids.length+" deadlocked threads");
+ }
+ Thread.sleep(100);
+ } catch(InterruptedException | RuntimeException x) {
+ fail(x);
+ }
+ }
+ }
+
+ }
+
+ static final class Stopper extends Thread {
+ long start;
+ long time;
+
+ static final Logger logger = Logger.getLogger("remaining");
+
+ Stopper(long time) {
+ start = System.currentTimeMillis();
+ this.time = time;
+ }
+
+ @Override
+ public void run() {
+ try {
+ long rest, previous;
+ previous = time;
+ while (goOn && (rest = start - System.currentTimeMillis() + time) > 0) {
+ if (previous == time || previous - rest >= STEP) {
+ logger.log(Level.INFO,
+ "{0}ms remaining...", String.valueOf(rest));
+ previous = rest == time ? rest -1 : rest;
+ System.gc();
+ }
+ if (goOn == false) break;
+ Thread.sleep(Math.min(rest, 100));
+ }
+ System.out.println(System.currentTimeMillis() - start
+ + " ms elapsed ("+time+ " requested)");
+ goOn = false;
+ } catch(InterruptedException | RuntimeException x) {
+ fail(x);
+ }
+ }
+
+ }
+
+ static void fail(Exception x) {
+ x.printStackTrace();
+ if (thrown == null) {
+ thrown = x;
+ }
+ goOn = false;
+ }
+}
diff --git a/jdk/test/java/util/logging/TestLoggerBundleSync.java b/jdk/test/java/util/logging/TestLoggerBundleSync.java
index bbac23c..48933c9 100644
--- a/jdk/test/java/util/logging/TestLoggerBundleSync.java
+++ b/jdk/test/java/util/logging/TestLoggerBundleSync.java
@@ -190,8 +190,10 @@
final static class MyHandler extends Handler {
volatile ResourceBundle rb;
volatile String rbName;
+ volatile int count = 0;
@Override
public synchronized void publish(LogRecord record) {
+ count++;
rb = record.getResourceBundle();
rbName = record.getResourceBundleName();
}
@@ -227,23 +229,51 @@
Logger ll = Logger.getLogger(l.getName()+".bie.bye");
ResourceBundle hrb;
String hrbName;
+ if (handler.getLevel() != Level.FINEST) {
+ throw new RuntimeException("Handler level is not finest: "
+ + handler.getLevel());
+ }
+ final int countBefore = handler.count;
ll.setLevel(Level.FINEST);
ll.addHandler(handler);
ll.fine("dummy");
ll.removeHandler(handler);
+ final int countAfter = handler.count;
+ if (countBefore == countAfter) {
+ throw new RuntimeException("Handler not called for "
+ + ll.getName() + "("+ countAfter +")");
+ }
hrb = handler.rb;
hrbName = handler.rbName;
if (name != null) {
+ // if name is not null, then it implies that it
+ // won't change, since setResourceBundle() cannot
+ // replace a non null name.
+ // Since we never set the resource bundle on 'll',
+ // then ll must inherit its resource bundle [name]
+ // from l - and therefor we should find it in
+ // handler.rb/handler.rbName
if (!name.equals(hrbName)) {
throw new RuntimeException("Unexpected bundle name: "
- +hrb.getBaseBundleName());
+ +hrbName);
}
+ // here we know that hrbName is not null so hrb
+ // should not be null either.
if (!name.equals(hrb.getBaseBundleName())) {
throw new RuntimeException("Unexpected bundle name: "
+hrb.getBaseBundleName());
}
}
+ // Make sure to refer to 'l' explicitly in order to
+ // prevent eager garbage collecting before the end of
+ // the test (JDK-8030192)
+ if (!ll.getName().startsWith(l.getName())) {
+ throw new RuntimeException("Logger " + ll.getName()
+ + "does not start with expected prefix "
+ + l.getName());
+ }
+
getRBcount.incrementAndGet();
if (!goOn) break;
Thread.sleep(1);
diff --git a/jdk/test/java/util/logging/deadlockconf.properties b/jdk/test/java/util/logging/deadlockconf.properties
new file mode 100644
index 0000000..e81742fa
--- /dev/null
+++ b/jdk/test/java/util/logging/deadlockconf.properties
@@ -0,0 +1,22 @@
+# This file is used by TestLogConfigurationDeadLockWithConf
+handlers= java.util.logging.ConsoleHandler
+.level= INFO
+java.util.logging.ConsoleHandler.level = INFO
+java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
+
+
+foo.bar0.level = INFO
+foo.bar1.level = INFO
+foo.bar2.level = INFO
+foo.bar3.level = INFO
+foo.bar4.level = INFO
+
+# We leave foo.bar5 out so that we have at least
+# one logger whose parent won't be in the configuration
+# file
+#foo.bar5.level = INFO
+
+foo.bar6.level = INFO
+foo.bar7.level = INFO
+foo.bar8.level = INFO
+foo.bar9.level = INFO
diff --git a/jdk/test/java/util/zip/ZipFile/ReadZip.java b/jdk/test/java/util/zip/ZipFile/ReadZip.java
index b0e7571..44f1d9e 100644
--- a/jdk/test/java/util/zip/ZipFile/ReadZip.java
+++ b/jdk/test/java/util/zip/ZipFile/ReadZip.java
@@ -63,6 +63,8 @@
Files.copy(Paths.get(System.getProperty("test.src", ""), "input.zip"),
newZip.toPath(), StandardCopyOption.REPLACE_EXISTING);
+ newZip.setWritable(true);
+
// pad some bytes
try (OutputStream os = Files.newOutputStream(newZip.toPath(),
StandardOpenOption.APPEND)) {
diff --git a/jdk/test/javax/management/monitor/StartStopTest.java b/jdk/test/javax/management/monitor/StartStopTest.java
index 98eca29..80694c6 100644
--- a/jdk/test/javax/management/monitor/StartStopTest.java
+++ b/jdk/test/javax/management/monitor/StartStopTest.java
@@ -27,6 +27,8 @@
* @summary Test that tasks are cancelled properly when
* monitors are started and stopped in a loop.
* @author Luis-Miguel Alventosa
+ * @library /lib/testlibrary
+ * @run build jdk.testlibrary.Utils
* @run clean StartStopTest
* @run build StartStopTest
* @run main/othervm/timeout=300 StartStopTest 1
@@ -52,14 +54,15 @@
import javax.management.monitor.MonitorNotification;
import javax.management.monitor.StringMonitor;
-public class StartStopTest {
+import jdk.testlibrary.Utils;
+public class StartStopTest {
static int maxPoolSize;
static final AtomicInteger counter = new AtomicInteger();
// MBean class
public class ObservedObject implements ObservedObjectMBean {
- public boolean called = false;
+ volatile public boolean called = false;
public Integer getInteger() {
task("Integer");
return 0;
@@ -142,7 +145,7 @@
for (int i = 0; i < nTasks; i++)
monitor[i].start();
echo(">>> MONITORS started");
- Thread.sleep(500);
+ doSleep(500);
echo(">>> Check FLAGS true");
for (int i = 0; i < nTasks; i++)
if (!monitored[i].called) {
@@ -154,7 +157,7 @@
for (int i = 0; i < nTasks; i++)
monitor[i].stop();
echo(">>> MONITORS stopped");
- Thread.sleep(500);
+ doSleep(500);
echo(">>> Set FLAGS to false");
for (int i = 0; i < nTasks; i++)
monitored[i].called = false;
@@ -208,4 +211,8 @@
echo(">>> Happy Bye, Bye!");
}
}
+
+ private static void doSleep(long ms) throws Exception {
+ Thread.sleep(Math.round(ms * Utils.TIMEOUT_FACTOR));
+ }
}
diff --git a/jdk/test/javax/print/PrintServiceLookup/CountPrintServices.java b/jdk/test/javax/print/PrintServiceLookup/CountPrintServices.java
new file mode 100644
index 0000000..fc1dc8d
--- /dev/null
+++ b/jdk/test/javax/print/PrintServiceLookup/CountPrintServices.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import javax.print.PrintService;
+import javax.print.PrintServiceLookup;
+import javax.print.attribute.AttributeSet;
+import javax.print.attribute.HashAttributeSet;
+import javax.print.attribute.standard.PrinterName;
+
+/*
+ * @test
+ * @bug 8032693
+ * @summary Test that lpstat and JDK agree whether there are printers.
+ */
+public class CountPrintServices {
+
+ public static void main(String[] args) throws Exception {
+ String os = System.getProperty("os.name").toLowerCase();
+ System.out.println("OS is " + os);
+ if (!os.equals("linux")) {
+ System.out.println("Linux specific test. No need to continue");
+ return;
+ }
+ PrintService services[] =
+ PrintServiceLookup.lookupPrintServices(null, null);
+ if (services.length > 0) {
+ System.out.println("Services found. No need to test further.");
+ return;
+ }
+ String[] lpcmd = { "lpstat", "-a" };
+ Process proc = Runtime.getRuntime().exec(lpcmd);
+ proc.waitFor();
+ InputStreamReader ir = new InputStreamReader(proc.getInputStream());
+ BufferedReader br = new BufferedReader(ir);
+ int count = 0;
+ String printer;
+ while ((printer = br.readLine()) != null) {
+ System.out.println("lpstat:: " + printer);
+ count++;
+ }
+ if (count > 0) {
+ throw new RuntimeException("Services exist, but not found by JDK.");
+ }
+ }
+}
+
diff --git a/jdk/test/javax/swing/JMenuItem/8031573/bug8031573.html b/jdk/test/javax/swing/JMenuItem/8031573/bug8031573.html
new file mode 100644
index 0000000..b61bbf8
--- /dev/null
+++ b/jdk/test/javax/swing/JMenuItem/8031573/bug8031573.html
@@ -0,0 +1,40 @@
+<!--
+ Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ This code is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License version 2 only, as
+ published by the Free Software Foundation.
+
+ This code is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ version 2 for more details (a copy is included in the LICENSE file that
+ accompanied this code).
+
+ You should have received a copy of the GNU General Public License version
+ 2 along with this work; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+
+ Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ or visit www.oracle.com if you need additional information or have any
+ questions.
+-->
+
+<html>
+<body>
+
+Verify that high resolution system icons are used JCheckBoxMenuItem
+on HiDPI displays.
+
+If the display does not support HiDPI mode press PASS.
+
+1. Run the test on HiDPI Display.
+2. Press the Menu in the applet
+3. Check that the icon on the JCheckBoxMenuItem is smooth
+If so, press PASS, else press FAIL.
+
+<applet code="bug8031573.class" width=250 height=250></applet>
+
+</body>
+</html>
diff --git a/jdk/test/javax/swing/JMenuItem/8031573/bug8031573.java b/jdk/test/javax/swing/JMenuItem/8031573/bug8031573.java
new file mode 100644
index 0000000..5cb1dc5
--- /dev/null
+++ b/jdk/test/javax/swing/JMenuItem/8031573/bug8031573.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+import java.awt.FlowLayout;
+import javax.swing.JApplet;
+import javax.swing.JCheckBoxMenuItem;
+import javax.swing.JMenu;
+import javax.swing.JMenuBar;
+import javax.swing.SwingUtilities;
+
+/* @test
+ * @bug 8031573
+ * @summary [macosx] Checkmarks of JCheckBoxMenuItems aren't rendered
+ * in high resolution on Retina
+ * @author Alexander Scherbatiy
+ * @run applet/manual=yesno bug8031573.html
+ */
+public class bug8031573 extends JApplet {
+
+ @Override
+ public void init() {
+ try {
+ SwingUtilities.invokeAndWait(new Runnable() {
+
+ @Override
+ public void run() {
+ JMenuBar bar = new JMenuBar();
+ JMenu menu = new JMenu("Menu");
+ JCheckBoxMenuItem checkBoxMenuItem
+ = new JCheckBoxMenuItem("JCheckBoxMenuItem");
+ checkBoxMenuItem.setSelected(true);
+ menu.add(checkBoxMenuItem);
+ bar.add(menu);
+ setJMenuBar(bar);
+ }
+ });
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+}
diff --git a/jdk/test/javax/swing/JOptionPane/8024926/bug8024926.html b/jdk/test/javax/swing/JOptionPane/8024926/bug8024926.html
new file mode 100644
index 0000000..e63e0ea
--- /dev/null
+++ b/jdk/test/javax/swing/JOptionPane/8024926/bug8024926.html
@@ -0,0 +1,32 @@
+<!--
+ Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ This code is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License version 2 only, as
+ published by the Free Software Foundation.
+
+ This code is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ version 2 for more details (a copy is included in the LICENSE file that
+ accompanied this code).
+
+ You should have received a copy of the GNU General Public License version
+ 2 along with this work; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+
+ Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ or visit www.oracle.com if you need additional information or have any
+ questions.
+-->
+
+<html>
+ <head>
+ <title>High resolution icon test, bug ID 8024926</title>
+ </head>
+ <body>
+ <applet CODE="bug8024926.class" WIDTH=300 HEIGHT=100></applet>
+ <p> See the dialog box (usually in upper left corner) for instructions</p>
+</body>
+</html>
diff --git a/jdk/test/javax/swing/JOptionPane/8024926/bug8024926.java b/jdk/test/javax/swing/JOptionPane/8024926/bug8024926.java
new file mode 100644
index 0000000..42f976b
--- /dev/null
+++ b/jdk/test/javax/swing/JOptionPane/8024926/bug8024926.java
@@ -0,0 +1,209 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+import java.awt.BorderLayout;
+import java.awt.Dialog;
+import java.awt.EventQueue;
+import java.awt.Frame;
+import java.awt.TextArea;
+import javax.swing.JApplet;
+import javax.swing.JOptionPane;
+import sun.awt.OSInfo;
+
+/**
+ * @test
+ * @bug 8024926
+ * @summary [macosx] AquaIcon HiDPI support
+ * @author Alexander Scherbatiy
+ * @run applet/manual=yesno bug8024926.html
+ */
+public class bug8024926 extends JApplet {
+ //Declare things used in the test, like buttons and labels here
+
+ public void init() {
+ //Create instructions for the user here, as well as set up
+ // the environment -- set the layout manager, add buttons,
+ // etc.
+ this.setLayout(new BorderLayout());
+
+
+ if (OSInfo.getOSType().equals(OSInfo.OSType.MACOSX)) {
+ String[] instructions = {
+ "Verify that high resolution system icons are used"
+ + " in JOptionPane on HiDPI displays.",
+ "1) Run the test on Retina display or enable the Quartz Debug"
+ + " and select the screen resolution with (HiDPI) label",
+ "2) Check that the error icon on the JOptionPane is smooth",
+ "If so, press PASS, else press FAIL."
+ };
+ Sysout.createDialogWithInstructions(instructions);
+
+ } else {
+ String[] instructions = {
+ "This test is not applicable to the current platform. Press PASS."
+ };
+ Sysout.createDialogWithInstructions(instructions);
+ }
+
+
+ }//End init()
+
+ public void start() {
+ //Get things going. Request focus, set size, et cetera
+ setSize(200, 200);
+ setVisible(true);
+ validate();
+ EventQueue.invokeLater(new Runnable() {
+
+ public void run() {
+ createAndShowGUI();
+ }
+ });
+ }// start()
+
+ //The rest of this class is the actions which perform the test...
+ //Use Sysout.println to communicate with the user NOT System.out!!
+ //Sysout.println ("Something Happened!");
+ private static void createAndShowGUI() {
+ JOptionPane.showMessageDialog(null,
+ "Icons should have high resolution.",
+ "High resolution icon test.",
+ JOptionPane.ERROR_MESSAGE);
+ }
+}// class BlockedWindowTest
+
+/* Place other classes related to the test after this line */
+/**
+ * **************************************************
+ * Standard Test Machinery DO NOT modify anything below -- it's a standard chunk
+ * of code whose purpose is to make user interaction uniform, and thereby make
+ * it simpler to read and understand someone else's test.
+ * **************************************************
+ */
+/**
+ * This is part of the standard test machinery. It creates a dialog (with the
+ * instructions), and is the interface for sending text messages to the user. To
+ * print the instructions, send an array of strings to Sysout.createDialog
+ * WithInstructions method. Put one line of instructions per array entry. To
+ * display a message for the tester to see, simply call Sysout.println with the
+ * string to be displayed. This mimics System.out.println but works within the
+ * test harness as well as standalone.
+ */
+class Sysout {
+
+ private static TestDialog dialog;
+
+ public static void createDialogWithInstructions(String[] instructions) {
+ dialog = new TestDialog(new Frame(), "Instructions");
+ dialog.printInstructions(instructions);
+ dialog.setVisible(true);
+ println("Any messages for the tester will display here.");
+ }
+
+ public static void createDialog() {
+ dialog = new TestDialog(new Frame(), "Instructions");
+ String[] defInstr = {"Instructions will appear here. ", ""};
+ dialog.printInstructions(defInstr);
+ dialog.setVisible(true);
+ println("Any messages for the tester will display here.");
+ }
+
+ public static void printInstructions(String[] instructions) {
+ dialog.printInstructions(instructions);
+ }
+
+ public static void println(String messageIn) {
+ dialog.displayMessage(messageIn);
+ }
+}// Sysout class
+
+/**
+ * This is part of the standard test machinery. It provides a place for the test
+ * instructions to be displayed, and a place for interactive messages to the
+ * user to be displayed. To have the test instructions displayed, see Sysout. To
+ * have a message to the user be displayed, see Sysout. Do not call anything in
+ * this dialog directly.
+ */
+class TestDialog extends Dialog {
+
+ TextArea instructionsText;
+ TextArea messageText;
+ int maxStringLength = 80;
+
+ //DO NOT call this directly, go through Sysout
+ public TestDialog(Frame frame, String name) {
+ super(frame, name);
+ int scrollBoth = TextArea.SCROLLBARS_BOTH;
+ instructionsText = new TextArea("", 15, maxStringLength, scrollBoth);
+ add("North", instructionsText);
+
+ messageText = new TextArea("", 5, maxStringLength, scrollBoth);
+ add("Center", messageText);
+
+ pack();
+
+ setVisible(true);
+ }// TestDialog()
+
+ //DO NOT call this directly, go through Sysout
+ public void printInstructions(String[] instructions) {
+ //Clear out any current instructions
+ instructionsText.setText("");
+
+ //Go down array of instruction strings
+
+ String printStr, remainingStr;
+ for (int i = 0; i < instructions.length; i++) {
+ //chop up each into pieces maxSringLength long
+ remainingStr = instructions[ i];
+ while (remainingStr.length() > 0) {
+ //if longer than max then chop off first max chars to print
+ if (remainingStr.length() >= maxStringLength) {
+ //Try to chop on a word boundary
+ int posOfSpace = remainingStr.lastIndexOf(' ', maxStringLength - 1);
+
+ if (posOfSpace <= 0) {
+ posOfSpace = maxStringLength - 1;
+ }
+
+ printStr = remainingStr.substring(0, posOfSpace + 1);
+ remainingStr = remainingStr.substring(posOfSpace + 1);
+ } //else just print
+ else {
+ printStr = remainingStr;
+ remainingStr = "";
+ }
+
+ instructionsText.append(printStr + "\n");
+
+ }// while
+
+ }// for
+
+ }//printInstructions()
+
+ //DO NOT call this directly, go through Sysout
+ public void displayMessage(String messageIn) {
+ messageText.append(messageIn + "\n");
+ System.out.println(messageIn);
+ }
+}// TestDialog class
diff --git a/jdk/test/javax/swing/text/html/parser/Parser/8028616/bug8028616.java b/jdk/test/javax/swing/text/html/parser/Parser/8028616/bug8028616.java
new file mode 100644
index 0000000..9b713d3
--- /dev/null
+++ b/jdk/test/javax/swing/text/html/parser/Parser/8028616/bug8028616.java
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8028616
+ * @summary Tests correct parsing of the text with leading slash (/)
+ * @author Dmitry Markov
+ */
+
+import javax.swing.text.html.HTMLDocument;
+import javax.swing.text.html.HTMLEditorKit;
+import java.io.StringReader;
+
+public class bug8028616 {
+ private static final String text = "/ at start is bad";
+ private static Object lock = new Object();
+ private static boolean isCallbackInvoked = false;
+ private static Exception exception = null;
+
+ public static void main(String[] args) throws Exception {
+ ParserCB cb = new ParserCB();
+ HTMLEditorKit htmlKit = new HTMLEditorKit();
+ HTMLDocument htmlDoc = (HTMLDocument) htmlKit.createDefaultDocument();
+
+ htmlDoc.getParser().parse(new StringReader(text), cb, true);
+
+ synchronized (lock) {
+ if (!isCallbackInvoked) {
+ lock.wait(5000);
+ }
+ }
+
+ if (!isCallbackInvoked) {
+ throw new RuntimeException("Test Failed: ParserCallback.handleText() is not invoked for text - " + text);
+ }
+
+ if (exception != null) {
+ throw exception;
+ }
+ }
+
+ private static class ParserCB extends HTMLEditorKit.ParserCallback {
+ @Override
+ public void handleText(char[] data, int pos) {
+ synchronized (lock) {
+ if (!text.equals(new String(data)) || pos != 0) {
+ exception = new RuntimeException(
+ "Test Failed: the data passed to ParserCallback.handleText() does not meet the expectation");
+ }
+ isCallbackInvoked = true;
+ lock.notifyAll();
+ }
+ }
+ }
+}
+
diff --git a/jdk/test/javax/xml/jaxp/transform/8004476/TestBase.java b/jdk/test/javax/xml/jaxp/transform/8004476/TestBase.java
index 4b6ea70..11333fa 100644
--- a/jdk/test/javax/xml/jaxp/transform/8004476/TestBase.java
+++ b/jdk/test/javax/xml/jaxp/transform/8004476/TestBase.java
@@ -1,7 +1,26 @@
/*
* Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
- * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
*/
+
import java.security.Policy;
/**
diff --git a/jdk/test/jdk/lambda/MethodReferenceTestCallerSensitive.java b/jdk/test/jdk/lambda/MethodReferenceTestCallerSensitive.java
index 805a6a2..86c22a1 100644
--- a/jdk/test/jdk/lambda/MethodReferenceTestCallerSensitive.java
+++ b/jdk/test/jdk/lambda/MethodReferenceTestCallerSensitive.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -28,6 +28,8 @@
/**
+ * @test
+ * @bug 8020816
* @author Robert Field
*/
diff --git a/jdk/test/lib/testlibrary/jdk/testlibrary/ProcessTools.java b/jdk/test/lib/testlibrary/jdk/testlibrary/ProcessTools.java
index a454ce5..c949e0f 100644
--- a/jdk/test/lib/testlibrary/jdk/testlibrary/ProcessTools.java
+++ b/jdk/test/lib/testlibrary/jdk/testlibrary/ProcessTools.java
@@ -32,6 +32,7 @@
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collections;
+import java.util.concurrent.CountDownLatch;
import java.util.Map;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
@@ -39,6 +40,7 @@
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import java.util.function.Predicate;
+import java.util.function.Consumer;
import sun.management.VMManagement;
@@ -70,9 +72,37 @@
public static Process startProcess(String name,
ProcessBuilder processBuilder)
throws IOException {
+ return startProcess(name, processBuilder, null);
+ }
+
+ /**
+ * <p>Starts a process from its builder.</p>
+ * <span>The default redirects of STDOUT and STDERR are started</span>
+ * <p>It is possible to monitor the in-streams via the provided {@code consumer}
+ * @param name The process name
+ * @param consumer {@linkplain Consumer} instance to process the in-streams
+ * @param processBuilder The process builder
+ * @return Returns the initialized process
+ * @throws IOException
+ */
+ public static Process startProcess(String name,
+ ProcessBuilder processBuilder,
+ Consumer<String> consumer)
+ throws IOException {
Process p = null;
try {
- p = startProcess(name, processBuilder, null, -1, TimeUnit.NANOSECONDS);
+ p = startProcess(
+ name,
+ processBuilder,
+ line -> {
+ if (consumer != null) {
+ consumer.accept(line);
+ }
+ return false;
+ },
+ -1,
+ TimeUnit.NANOSECONDS
+ );
} catch (InterruptedException | TimeoutException e) {
// can't ever happen
}
@@ -111,25 +141,28 @@
stdout.addPump(new LineForwarder(name, System.out));
stderr.addPump(new LineForwarder(name, System.err));
- final Phaser phs = new Phaser(1);
+ CountDownLatch latch = new CountDownLatch(1);
if (linePredicate != null) {
- stdout.addPump(new StreamPumper.LinePump() {
+ StreamPumper.LinePump pump = new StreamPumper.LinePump() {
@Override
protected void processLine(String line) {
- if (linePredicate.test(line)) {
- if (phs.getRegisteredParties() > 0) {
- phs.arriveAndDeregister();
- }
+ if (latch.getCount() > 0 && linePredicate.test(line)) {
+ latch.countDown();
}
}
- });
+ };
+ stdout.addPump(pump);
+ stderr.addPump(pump);
}
Future<Void> stdoutTask = stdout.process();
Future<Void> stderrTask = stderr.process();
try {
if (timeout > -1) {
- phs.awaitAdvanceInterruptibly(0, timeout, unit);
+ long realTimeout = Math.round(timeout * Utils.TIMEOUT_FACTOR);
+ if (!latch.await(realTimeout, unit)) {
+ throw new TimeoutException();
+ }
}
} catch (TimeoutException | InterruptedException e) {
System.err.println("Failed to start a process (thread dump follows)");
diff --git a/jdk/test/lib/testlibrary/jdk/testlibrary/Utils.java b/jdk/test/lib/testlibrary/jdk/testlibrary/Utils.java
index d557a7e..2388d1d 100644
--- a/jdk/test/lib/testlibrary/jdk/testlibrary/Utils.java
+++ b/jdk/test/lib/testlibrary/jdk/testlibrary/Utils.java
@@ -57,6 +57,16 @@
public static final String JAVA_OPTIONS = System.getProperty("test.java.opts", "").trim();
+ /**
+ * Returns the value of 'test.timeout.factor' system property
+ * converted to {@code double}.
+ */
+ public static final double TIMEOUT_FACTOR;
+ static {
+ String toFactor = System.getProperty("test.timeout.factor", "1.0");
+ TIMEOUT_FACTOR = Double.parseDouble(toFactor);
+ }
+
private Utils() {
// Private constructor to prevent class instantiation
}
diff --git a/jdk/test/sun/management/jmxremote/bootstrap/CustomLauncherTest.java b/jdk/test/sun/management/jmxremote/bootstrap/CustomLauncherTest.java
index d1f9633..ca44815 100644
--- a/jdk/test/sun/management/jmxremote/bootstrap/CustomLauncherTest.java
+++ b/jdk/test/sun/management/jmxremote/bootstrap/CustomLauncherTest.java
@@ -22,11 +22,13 @@
*/
import java.io.File;
+import java.io.IOException;
import java.nio.file.FileSystem;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.LinkOption;
import java.nio.file.Path;
+import java.nio.file.StandardCopyOption;
import java.nio.file.attribute.PosixFilePermission;
import java.util.HashSet;
import java.util.Set;
@@ -47,6 +49,7 @@
public class CustomLauncherTest {
private static final String TEST_CLASSPATH = System.getProperty("test.class.path");
private static final String TEST_JDK = System.getProperty("test.jdk");
+ private static final String WORK_DIR = System.getProperty("user.dir");
private static final String TEST_SRC = System.getProperty("test.src");
private static final String OSNAME = System.getProperty("os.name");
@@ -88,36 +91,14 @@
return;
}
- String PLATFORM = "";
- switch (OSNAME.toLowerCase()) {
- case "linux": {
- PLATFORM = "linux";
- break;
- }
- case "sunos": {
- PLATFORM = "solaris";
- break;
- }
- default: {
- System.out.println("Test not designed to run on this operating " +
- "system (" + OSNAME + "), skipping...");
- return;
- }
- }
-
- String LAUNCHER = TEST_SRC + File.separator + PLATFORM + "-" + ARCH +
- File.separator + "launcher";
-
- final FileSystem FS = FileSystems.getDefault();
- Path launcherPath = FS.getPath(LAUNCHER);
-
- final boolean hasLauncher = Files.isRegularFile(launcherPath, LinkOption.NOFOLLOW_LINKS)&&
- Files.isReadable(launcherPath);
- if (!hasLauncher) {
- System.out.println("Launcher [" + LAUNCHER + "] does not exist. Skipping the test.");
+ if (getPlatform() == null) {
+ System.out.println("Test not designed to run on this operating " +
+ "system (" + OSNAME + "), skipping...");
return;
}
+ final FileSystem FS = FileSystems.getDefault();
+
Path libjvmPath = findLibjvm(FS);
if (libjvmPath == null) {
throw new Error("Unable to locate 'libjvm.so' in " + TEST_JDK);
@@ -125,23 +106,20 @@
Process serverPrc = null, clientPrc = null;
- final Set<PosixFilePermission> launcherOrigPerms =
- Files.getPosixFilePermissions(launcherPath, LinkOption.NOFOLLOW_LINKS);
try {
- // It is impossible to store an executable file in the source control
- // We need to set the executable flag here
- if (!Files.isExecutable(launcherPath)) {
- Set<PosixFilePermission> perms = new HashSet<>(launcherOrigPerms);
- perms.add(PosixFilePermission.OWNER_EXECUTE);
- Files.setPosixFilePermissions(launcherPath, perms);
- }
+ String[] launcher = getLauncher();
System.out.println("Starting custom launcher:");
System.out.println("=========================");
- System.out.println(" launcher : " + LAUNCHER);
+ System.out.println(" launcher : " + launcher[0]);
System.out.println(" libjvm : " + libjvmPath.toString());
System.out.println(" classpath : " + TEST_CLASSPATH);
- ProcessBuilder server = new ProcessBuilder(LAUNCHER, libjvmPath.toString(), TEST_CLASSPATH, "TestApplication");
+ ProcessBuilder server = new ProcessBuilder(
+ launcher[1],
+ libjvmPath.toString(),
+ TEST_CLASSPATH,
+ "TestApplication"
+ );
final AtomicReference<String> port = new AtomicReference<>();
final AtomicReference<String> pid = new AtomicReference<>();
@@ -198,8 +176,6 @@
throw new Error("Test failed");
}
} finally {
- // Let's restore the original launcher permissions
- Files.setPosixFilePermissions(launcherPath, launcherOrigPerms);
if (clientPrc != null) {
clientPrc.destroy();
clientPrc.waitFor();
@@ -240,4 +216,62 @@
private static boolean isFileOk(Path path) {
return Files.isRegularFile(path) && Files.isReadable(path);
}
+
+ private static String getPlatform() {
+ String platform = null;
+ switch (OSNAME.toLowerCase()) {
+ case "linux": {
+ platform = "linux";
+ break;
+ }
+ case "sunos": {
+ platform = "solaris";
+ break;
+ }
+ default: {
+ platform = null;
+ }
+ }
+
+ return platform;
+ }
+
+ private static String[] getLauncher() throws IOException {
+ String platform = getPlatform();
+ if (platform == null) {
+ return null;
+ }
+
+ String launcher = TEST_SRC + File.separator + platform + "-" + ARCH +
+ File.separator + "launcher";
+
+ final FileSystem FS = FileSystems.getDefault();
+ Path launcherPath = FS.getPath(launcher);
+
+ final boolean hasLauncher = Files.isRegularFile(launcherPath, LinkOption.NOFOLLOW_LINKS)&&
+ Files.isReadable(launcherPath);
+ if (!hasLauncher) {
+ System.out.println("Launcher [" + launcher + "] does not exist. Skipping the test.");
+ return null;
+ }
+
+ // It is impossible to store an executable file in the source control
+ // We need to copy the launcher to the working directory
+ // and set the executable flag
+ Path localLauncherPath = FS.getPath(WORK_DIR, "launcher");
+ Files.copy(launcherPath, localLauncherPath,
+ StandardCopyOption.REPLACE_EXISTING,
+ StandardCopyOption.COPY_ATTRIBUTES);
+ if (!Files.isExecutable(localLauncherPath)) {
+ Set<PosixFilePermission> perms = new HashSet<>(
+ Files.getPosixFilePermissions(
+ localLauncherPath,
+ LinkOption.NOFOLLOW_LINKS
+ )
+ );
+ perms.add(PosixFilePermission.OWNER_EXECUTE);
+ Files.setPosixFilePermissions(localLauncherPath, perms);
+ }
+ return new String[] {launcher, localLauncherPath.toAbsolutePath().toString()};
+ }
}
diff --git a/jdk/test/sun/management/jmxremote/bootstrap/LocalManagementTest.java b/jdk/test/sun/management/jmxremote/bootstrap/LocalManagementTest.java
index efe2a31..1d4bbb1 100644
--- a/jdk/test/sun/management/jmxremote/bootstrap/LocalManagementTest.java
+++ b/jdk/test/sun/management/jmxremote/bootstrap/LocalManagementTest.java
@@ -32,6 +32,7 @@
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicReference;
+import jdk.testlibrary.ProcessTools;
/**
* @test
@@ -43,11 +44,9 @@
* both agent properties and jvmstat buffer.
* @build jdk.testlibrary.ProcessTools
* @build TestManager TestApplication
- * @run main/othervm/timeout=300 LocalManagementTest
+ * @run main/othervm/timeout=300 -XX:+UsePerfData LocalManagementTest
*/
-import jdk.testlibrary.ProcessTools;
-
public class LocalManagementTest {
private static final String TEST_CLASSPATH = System.getProperty("test.class.path");
private static final String TEST_JDK = System.getProperty("test.jdk");
@@ -240,4 +239,4 @@
}
}
}
-}
\ No newline at end of file
+}
diff --git a/jdk/test/sun/management/jmxremote/startstop/JMXStartStopDoSomething.java b/jdk/test/sun/management/jmxremote/startstop/JMXStartStopDoSomething.java
index 98b759e..e6b1f43 100644
--- a/jdk/test/sun/management/jmxremote/startstop/JMXStartStopDoSomething.java
+++ b/jdk/test/sun/management/jmxremote/startstop/JMXStartStopDoSomething.java
@@ -21,37 +21,20 @@
* questions.
*/
-import java.io.File;
+import java.io.IOException;
+import jdk.testlibrary.ProcessTools;
public class JMXStartStopDoSomething {
-
- private static final String lockFileName = "JMXStartStop.lck";
-
- public static void doSomething() {
- try {
- File lockFile = new File(lockFileName);
- lockFile.createNewFile();
-
- while(lockFile.exists()) {
- long datetime = lockFile.lastModified();
- long epoch = System.currentTimeMillis()/1000;
-
- // Don't allow test app to run more than an hour
- if (epoch - datetime > 3600) {
- System.err.println("Lock is too old. Aborting");
- return;
- }
- Thread.sleep(500);
- }
-
- } catch (Throwable e) {
- System.err.println("Something bad happens:" +e);
- }
+ public static void doSomething() throws IOException{
+ int r = System.in.read();
+ System.out.println("read: " + r);
}
public static void main(String args[]) throws Exception {
- System.err.println("main enter");
+ System.out.println("pid:" + ProcessTools.getProcessId());
+ System.out.println("main enter");
+ System.out.flush();
doSomething();
- System.err.println("main exit");
+ System.out.println("main exit");
}
}
diff --git a/jdk/test/sun/management/jmxremote/startstop/JMXStartStopTest.java b/jdk/test/sun/management/jmxremote/startstop/JMXStartStopTest.java
index 4f97477..fe3a774 100644
--- a/jdk/test/sun/management/jmxremote/startstop/JMXStartStopTest.java
+++ b/jdk/test/sun/management/jmxremote/startstop/JMXStartStopTest.java
@@ -22,45 +22,61 @@
*/
import java.io.File;
-import java.io.FileInputStream;
-import java.io.FilenameFilter;
import java.io.IOException;
-import java.io.InputStream;
+import java.lang.reflect.Method;
+import java.net.ConnectException;
+import java.net.ServerSocket;
+import java.rmi.NoSuchObjectException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
+import java.util.List;
import java.util.Map;
-import java.util.Properties;
+import java.util.Objects;
import java.util.Set;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicReference;
+import java.util.function.Consumer;
import javax.management.*;
import javax.management.remote.*;
+import javax.net.ssl.SSLHandshakeException;
-import sun.management.AgentConfigurationError;
-import sun.management.jmxremote.ConnectorBootstrap;
+import jdk.testlibrary.ProcessTools;
+import jdk.testlibrary.JDKToolLauncher;
+/**
+ * @test
+ * @bug 7110104
+ * @library /lib/testlibrary
+ * @build jdk.testlibrary.ProcessTools
+ * @build jdk.testlibrary.JDKToolLauncher
+ * @build jdk.testlibrary.Utils
+ * @build JMXStartStopTest JMXStartStopDoSomething
+ * @run main/othervm JMXStartStopTest
+ * @summary Makes sure that enabling/disabling the management agent through
+ * JCMD achieves the desired results
+ */
public class JMXStartStopTest {
+ private static final String TEST_JDK = System.getProperty("test.jdk");
+ private static final String TEST_SRC = System.getProperty("test.src");
- static boolean verbose = false;
+ private static final boolean verbose = false;
- static void dbg_print(String msg){
+ private static void dbg_print(String msg){
if (verbose) {
- System.err.println("DBG: " +msg);
+ System.out.println("DBG: " +msg);
}
}
- static void dbg_print(String msg, Throwable ex){
- if (verbose) {
- System.err.println("DBG: " + msg + " " + ex.getMessage() );
- ex.printStackTrace(System.err);
- }
- }
-
- public static int listMBeans(MBeanServerConnection server, ObjectName pattern, QueryExp query)
+ private static int listMBeans(MBeanServerConnection server,
+ ObjectName pattern,
+ QueryExp query)
throws Exception {
Set names = server.queryNames(pattern,query);
@@ -72,10 +88,9 @@
MBeanAttributeInfo[] attrs = info.getAttributes();
if (attrs == null)
continue;
-
- for (int j=0; j<attrs.length; j++) {
- if (attrs[j].isReadable()) {
- Object o = server.getAttribute(name,attrs[j].getName());
+ for (MBeanAttributeInfo attr : attrs) {
+ if (attr.isReadable()) {
+ Object o = server.getAttribute(name, attr.getName());
}
}
}
@@ -83,11 +98,10 @@
}
- public void run_local(String strPid)
+ private static void testConnectLocal(int pid)
throws Exception {
String jmxUrlStr = null;
- int pid = Integer.parseInt(strPid);
try {
jmxUrlStr = sun.management.ConnectorAddressLink.importFrom(pid);
@@ -106,8 +120,8 @@
int count = listMBeans(conn,pattern,null);
if (count == 0)
- throw new Exception("Expected at least one matching "+ "MBean for "+pattern);
-
+ throw new Exception("Expected at least one matching "+
+ "MBean for "+pattern);
} catch (IOException e) {
dbg_print("Cannot find process : " + pid);
@@ -115,20 +129,40 @@
}
}
- public void run(String args[]) throws Exception {
+ private static void testNoConnect(int port) throws Exception {
+ testNoConnect(port, 0);
+ }
+
+ private static void testNoConnect(int port, int rmiPort) throws Exception {
+ try {
+ testConnect(port, rmiPort);
+ throw new Exception("Didn't expect the management agent running");
+ } catch (Exception e) {
+ Throwable t = e;
+ while (t != null) {
+ if (t instanceof NoSuchObjectException ||
+ t instanceof ConnectException ||
+ t instanceof SSLHandshakeException) {
+ break;
+ }
+ t = t.getCause();
+ }
+ if (t == null) {
+ throw new Exception("Unexpected exception", e);
+ }
+ }
+ }
+
+ private static void testConnect(int port) throws Exception {
+ testConnect(port, 0);
+ }
+
+ private static void testConnect(int port, int rmiPort) throws Exception {
dbg_print("RmiRegistry lookup...");
- int port = 4567;
- if (args != null && args.length > 0) {
- port = Integer.parseInt(args[0]);
- }
dbg_print("Using port: " + port);
- int rmiPort = 0;
- if (args != null && args.length > 1) {
- rmiPort = Integer.parseInt(args[1]);
- }
dbg_print("Using rmi port: " + rmiPort);
Registry registry = LocateRegistry.getRegistry(port);
@@ -140,8 +174,13 @@
}
String jmxUrlStr = (rmiPort != 0) ?
- String.format("service:jmx:rmi://localhost:%d/jndi/rmi://localhost:%d/jmxrmi", rmiPort, port) :
- String.format("service:jmx:rmi:///jndi/rmi://localhost:%d/jmxrmi",port);
+ String.format(
+ "service:jmx:rmi://localhost:%d/jndi/rmi://localhost:%d/jmxrmi",
+ rmiPort,
+ port) :
+ String.format(
+ "service:jmx:rmi:///jndi/rmi://localhost:%d/jmxrmi",
+ port);
JMXServiceURL url = new JMXServiceURL(jmxUrlStr);
Map m = new HashMap();
@@ -153,29 +192,632 @@
int count = listMBeans(conn,pattern,null);
if (count == 0)
- throw new Exception("Expected at least one matching "+ "MBean for "+pattern);
+ throw new Exception("Expected at least one matching " +
+ "MBean for " + pattern);
}
+ private static class Failure {
+ private final Throwable cause;
+ private final String msg;
- public static void main(String args[]) {
- JMXStartStopTest manager = new JMXStartStopTest();
- try {
- if (args!=null && args[0].equals("local")) {
- manager.run_local(args[1]);
- } else {
- manager.run(args);
- }
- } catch (RuntimeException r) {
- dbg_print("No connection: ", r);
- System.out.print("NO_CONN");
- System.exit(1);
- } catch (Throwable t) {
- dbg_print("No connection: ", t);
- System.out.print("NO_CONN");
- System.exit(2);
+ public Failure(Throwable cause, String msg) {
+ this.cause = cause;
+ this.msg = msg;
}
- System.out.print("OK_CONN");
- System.exit(0);
+
+ public Failure(String msg) {
+ this(null, msg);
+ }
+
+ public Throwable getCause() {
+ return cause;
+ }
+
+ public String getMsg() {
+ return msg;
+ }
+
+ @Override
+ public int hashCode() {
+ int hash = 7;
+ hash = 97 * hash + Objects.hashCode(this.cause);
+ hash = 97 * hash + Objects.hashCode(this.msg);
+ return hash;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ final Failure other = (Failure) obj;
+ if (!Objects.equals(this.cause, other.cause)) {
+ return false;
+ }
+ if (!Objects.equals(this.msg, other.msg)) {
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ public String toString() {
+ if (cause != null) {
+ return msg + "\n" + cause;
+ } else {
+ return msg;
+ }
+ }
}
+ private static List<Failure> failures = new ArrayList<>();
+
+ public static void main(String args[]) throws Exception {
+ for (Method m : JMXStartStopTest.class.getDeclaredMethods()) {
+ if (m.getName().startsWith("test_")) {
+ try {
+ m.invoke(null);
+ System.out.println("=== PASSED\n");
+ } catch (Throwable e) {
+ failures.add(new Failure(e, m.getName() + " failed"));
+ }
+ }
+ }
+
+ if (!failures.isEmpty()) {
+ for(Failure f : failures) {
+ System.err.println(f.getMsg());
+ f.getCause().printStackTrace(System.err);
+ }
+ throw new Error();
+ }
+ }
+
+ /**
+ * Retrieves the PID of the test application using JCMD
+ * @return The PID of the test application
+ * @throws InterruptedException
+ * @throws IOException
+ */
+ private static String getPID() throws InterruptedException, IOException {
+ final AtomicReference<String> pid = new AtomicReference<>();
+ jcmd(
+ null,
+ line -> {
+ if (line.endsWith("JMXStartStopDoSomething")) {
+ pid.set(line.split(" ")[0]);
+ }
+ }
+ );
+ return pid.get();
+ }
+
+ private static class Something {
+ private Process p;
+ private final ProcessBuilder pb;
+ private final String name;
+ private final AtomicBoolean started = new AtomicBoolean(false);
+ private volatile int pid = -1;
+
+ public Something(ProcessBuilder pb, String name) {
+ this.pb = pb;
+ this.name = name;
+ }
+
+ public synchronized void start() throws InterruptedException, IOException, TimeoutException {
+ if (started.compareAndSet(false, true)) {
+ try {
+ p = ProcessTools.startProcess(
+ "JMXStartStopDoSomething",
+ pb,
+ (line) -> {
+ if (line.toLowerCase().startsWith("pid:")) {
+ pid = Integer.parseInt(line.split("\\:")[1]);
+ }
+ return line.equals("main enter");
+ },
+ 5,
+ TimeUnit.SECONDS
+ );
+ } catch (TimeoutException e) {
+ p.destroy();
+ p.waitFor();
+ throw e;
+ }
+ }
+ }
+
+ public int getPid() {
+ return pid;
+ }
+
+ public synchronized void stop()
+ throws IOException, InterruptedException {
+ if (started.compareAndSet(true, false)) {
+ p.getOutputStream().write(0);
+ p.getOutputStream().flush();
+ int ec = p.waitFor();
+ if (ec != 0) {
+ StringBuilder msg = new StringBuilder();
+ msg.append("Test application '").append(name);
+ msg.append("' failed with exit code: ");
+ msg.append(ec);
+
+ failures.add(new Failure(msg.toString()));
+ }
+ }
+ }
+ }
+
+ /**
+ * Runs the test application "JMXStartStopDoSomething"
+ * @param name Test run name
+ * @param args Additional arguments
+ * @return Returns a {@linkplain Something} instance representing the run
+ * @throws IOException
+ * @throws InterruptedException
+ * @throws TimeoutException
+ */
+ private static Something doSomething(String name, String ... args)
+ throws Exception {
+ List<String> pbArgs = new ArrayList<>(Arrays.asList(
+ "-cp",
+ System.getProperty("test.class.path")
+ ));
+ pbArgs.addAll(Arrays.asList(args));
+ pbArgs.add("JMXStartStopDoSomething");
+
+ ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
+ pbArgs.toArray(new String[pbArgs.size()])
+ );
+ Something s = new Something(pb, name);
+ s.start();
+ return s;
+ }
+
+ /**
+ * Run the "jcmd" command
+ *
+ * @param command Command with parameters; space separated string
+ * @throws IOException
+ * @throws InterruptedException
+ */
+ private static void jcmd(String ... command) throws IOException, InterruptedException {
+ if (command.length == 0) {
+ jcmd(null, (Consumer<String>)null);
+ } else {
+ jcmd(null, command);
+ }
+ }
+
+ /**
+ * Run the "jcmd" command
+ *
+ * @param c {@linkplain Consumer} instance; may be null
+ * @param command Command with parameters; space separated string
+ * @throws IOException
+ * @throws InterruptedException
+ */
+ private static void jcmd(Consumer<String> c, String ... command) throws IOException, InterruptedException {
+ jcmd("JMXStartStopDoSomething", c, command);
+ }
+
+ /**
+ * Run the "jcmd" command
+ * @param target The target application name (or PID)
+ * @param c {@linkplain Consumer} instance; may be null
+ * @param command Command with parameters; space separated string
+ * @throws IOException
+ * @throws InterruptedException
+ */
+ private static void jcmd(String target, final Consumer<String> c, String ... command) throws IOException, InterruptedException {
+ dbg_print("[jcmd] " + (command.length > 0 ? command[0] : "list"));
+
+ JDKToolLauncher l = JDKToolLauncher.createUsingTestJDK("jcmd");
+ l.addToolArg(target);
+ for(String cmd : command) {
+ l.addToolArg(cmd);
+ }
+ Process p = ProcessTools.startProcess(
+ "jcmd",
+ new ProcessBuilder(l.getCommand()),
+ c
+ );
+
+ p.waitFor();
+ dbg_print("[jcmd] --------");
+ }
+
+ private static final String CMD_STOP = "ManagementAgent.stop";
+ private static final String CMD_START= "ManagementAgent.start";
+ private static final String CMD_START_LOCAL = "ManagementAgent.start_local";
+ private static final int port1 = 50234;
+ private static final int port2 = 50235;
+
+ private static void test_01() throws Exception {
+ // Run an app with JMX enabled stop it and
+ // restart on other port
+
+ System.out.println("**** Test one ****");
+
+ Something s = doSomething(
+ "test_01",
+ "-Dcom.sun.management.jmxremote.port=" + port1,
+ "-Dcom.sun.management.jmxremote.authenticate=false",
+ "-Dcom.sun.management.jmxremote.ssl=false");
+
+ try {
+ testConnect(port1);
+
+ jcmd(CMD_STOP);
+ testNoConnect(port1);
+
+ jcmd(CMD_START, "jmxremote.port=" + port2);
+ testConnect(port2);
+ } finally {
+ s.stop();
+ }
+ }
+
+ private static void test_02() throws Exception {
+ // Run an app without JMX enabled
+ // start JMX by jcmd
+
+ System.out.println("**** Test two ****");
+
+ Something s = doSomething("test_02");
+ try {
+ jcmd(CMD_START,
+ "jmxremote.port=" + port1,
+ "jmxremote.authenticate=false",
+ "jmxremote.ssl=false");
+
+ testConnect(port1);
+ } finally {
+ s.stop();
+ }
+ }
+
+ private static void test_03() throws Exception {
+ // Run an app without JMX enabled
+ // start JMX by jcmd on one port than on other one
+
+ System.out.println("**** Test three ****");
+
+ Something s = doSomething("test_03");
+ try {
+ jcmd(CMD_START,
+ "jmxremote.port=" + port1,
+ "jmxremote.authenticate=false",
+ "jmxremote.ssl=false");
+
+ // Second agent shouldn't start
+ jcmd(CMD_START,
+ "jmxremote.port=" + port2,
+ "jmxremote.authenticate=false",
+ "jmxremote.ssl=false");
+
+ // First agent should connect
+ testConnect(port1);
+
+ // Second agent should not connect
+ testNoConnect(port2);
+ } finally {
+ s.stop();
+ }
+ }
+
+ private static void test_04() throws Exception {
+ // Run an app without JMX enabled
+ // start JMX by jcmd on one port, specify rmi port explicitly
+
+ System.out.println("**** Test four ****");
+
+ Something s = doSomething("test_04");
+
+ try {
+ jcmd(CMD_START,
+ "jmxremote.port=" + port1,
+ "jmxremote.rmi.port=" + port2,
+ "jmxremote.authenticate=false",
+ "jmxremote.ssl=false");
+
+ testConnect(port1, port2);
+ } finally {
+ s.stop();
+ }
+ }
+
+ private static void test_05() throws Exception {
+ // Run an app without JMX enabled, it will enable local server
+ // but should leave remote server disabled
+
+ System.out.println("**** Test five ****");
+
+ Something s = doSomething("test_05");
+ try {
+ jcmd(CMD_START_LOCAL);
+
+ testNoConnect(port1);
+ testConnectLocal(s.getPid());
+ } finally {
+ s.stop();
+ }
+ }
+
+ private static void test_06() throws Exception {
+ // Run an app without JMX enabled
+ // start JMX by jcmd on one port, specify rmi port explicitly
+ // attempt to start it again
+ // 1) with the same port
+ // 2) with other port
+ // 3) attempt to stop it twice
+ // Check for valid messages in the output
+
+ System.out.println("**** Test six ****");
+
+ Something s = doSomething("test_06");
+
+ try {
+ jcmd(CMD_START,
+ "jmxremote.port=" + port1,
+ "jmxremote.authenticate=false",
+ "jmxremote.ssl=false");
+
+ testConnect(port1, port2);
+
+ final boolean[] checks = new boolean[3];
+ jcmd(
+ line -> {
+ if (line.equals("java.lang.RuntimeException: Invalid agent state")) {
+ checks[0] = true;
+ }
+ },
+ CMD_START,
+ "jmxremote.port=" + port1,
+ "jmxremote.authenticate=false",
+ "jmxremote.ssl=false");
+
+ jcmd(
+ line -> {
+ if (line.equals("java.lang.RuntimeException: Invalid agent state")) {
+ checks[1] = true;
+ }
+ },
+ CMD_START,
+ "jmxremote.port=" + port2,
+ "jmxremote.authenticate=false",
+ "jmxremote.ssl=false");
+
+ jcmd(CMD_STOP);
+ jcmd(CMD_STOP);
+
+ ServerSocket ss = new ServerSocket(0);
+
+ jcmd(
+ line -> {
+ if (line.contains("Port already in use: " + ss.getLocalPort())) {
+ checks[2] = true;
+ }
+ },
+ CMD_START,
+ "jmxremote.port=" + ss.getLocalPort(),
+ "jmxremote.rmi.port=" + port2,
+ "jmxremote.authenticate=false",
+ "jmxremote.ssl=false");
+ if (!checks[0]) {
+ throw new Exception("Starting agent on port " + port1 + " should " +
+ "report an invalid agent state");
+ }
+ if (!checks[1]) {
+ throw new Exception("Starting agent on poprt " + port2 + " should " +
+ "report an invalid agent state");
+ }
+ if (!checks[2]) {
+ throw new Exception("Starting agent on port " + ss.getLocalPort() + " should " +
+ "report port in use");
+ }
+ } finally {
+ s.stop();
+ }
+ }
+
+ private static void test_07() throws Exception {
+ // Run an app without JMX enabled, but with some properties set
+ // in command line.
+ // make sure these properties overridden corectly
+
+ System.out.println("**** Test seven ****");
+
+ Something s = doSomething(
+ "test_07",
+ "-Dcom.sun.management.jmxremote.authenticate=false",
+ "-Dcom.sun.management.jmxremote.ssl=true");
+
+ try {
+ testNoConnect(port1);
+ jcmd(
+ CMD_START,
+ "jmxremote.port=" + port2,
+ "jmxremote.authenticate=false",
+ "jmxremote.ssl=false"
+ );
+ testConnect(port2);
+ } finally {
+ s.stop();
+ }
+ }
+
+ private static void test_08() throws Exception {
+ // Run an app with JMX enabled and with some properties set
+ // in command line.
+ // stop JMX agent and then start it again with different property values
+ // make sure these properties overridden corectly
+
+ System.out.println("**** Test eight ****");
+
+ Something s = doSomething(
+ "test_08",
+ "-Dcom.sun.management.jmxremote.port=" + port1,
+ "-Dcom.sun.management.jmxremote.authenticate=false",
+ "-Dcom.sun.management.jmxremote.ssl=true");
+
+ try {
+ testNoConnect(port1);
+
+ jcmd(CMD_STOP);
+
+ testNoConnect(port1);
+
+ jcmd(
+ CMD_START,
+ "jmxremote.port=" + port2,
+ "jmxremote.authenticate=false",
+ "jmxremote.ssl=false"
+ );
+
+ testConnect(port2);
+ } finally {
+ s.stop();
+ }
+ }
+
+ private static void test_09() throws Exception {
+ // Run an app with JMX enabled and with some properties set
+ // in command line.
+ // stop JMX agent and then start it again with different property values
+ // specifing some property in management config file and some of them
+ // in command line
+ // make sure these properties overridden corectly
+
+ System.out.println("**** Test nine ****");
+
+ Something s = doSomething("test_09",
+ "-Dcom.sun.management.config.file=" +
+ TEST_SRC + File.separator + "management_cl.properties",
+ "-Dcom.sun.management.jmxremote.authenticate=false"
+ );
+
+ try {
+ testNoConnect(port1);
+
+ jcmd(CMD_STOP);
+
+ testNoConnect(port1);
+
+ jcmd(CMD_START,
+ "config.file=" + TEST_SRC + File.separator +
+ "management_jcmd.properties",
+ "jmxremote.authenticate=false",
+ "jmxremote.port=" + port2
+ );
+
+ testConnect(port2);
+ } finally {
+ s.stop();
+ }
+ }
+
+ private static void test_10() throws Exception {
+ // Run an app with JMX enabled and with some properties set
+ // in command line.
+ // stop JMX agent and then start it again with different property values
+ // stop JMX agent again and then start it without property value
+ // make sure these properties overridden corectly
+
+ System.out.println("**** Test ten ****");
+
+ Something s = doSomething(
+ "test_10",
+ "-Dcom.sun.management.jmxremote.port=" + port1,
+ "-Dcom.sun.management.jmxremote.authenticate=false",
+ "-Dcom.sun.management.jmxremote.ssl=true");
+
+ try {
+ testNoConnect(port1);
+
+ jcmd(CMD_STOP);
+ jcmd(CMD_START,
+ "jmxremote.ssl=false",
+ "jmxremote.port=" + port1
+ );
+ testConnect(port1);
+
+ jcmd(CMD_STOP);
+ jcmd(CMD_START,
+ "jmxremote.port=" + port1
+ );
+
+ testNoConnect(port1);
+ } finally {
+ s.stop();
+ }
+ }
+
+ private static void test_11() throws Exception {
+ // Run an app with JMX enabled
+ // stop remote agent
+ // make sure local agent is not affected
+
+ System.out.println("**** Test eleven ****");
+
+ Something s = doSomething(
+ "test_11",
+ "-Dcom.sun.management.jmxremote.port=" + port1,
+ "-Dcom.sun.management.jmxremote.authenticate=false",
+ "-Dcom.sun.management.jmxremote.ssl=false");
+ try {
+ testConnect(port1);
+ jcmd(CMD_STOP);
+ testConnectLocal(s.getPid());
+ } finally {
+ s.stop();
+ }
+ }
+
+ private static void test_12() throws Exception {
+ // Run an app with JMX disabled
+ // start local agent only
+
+ System.out.println("**** Test twelve ****");
+
+ Something s = doSomething("test_12");
+
+ try {
+ testNoConnect(port1);
+ jcmd(CMD_START + "_local");
+
+ testConnectLocal(s.getPid());
+
+ } finally {
+ s.stop();
+ }
+ }
+
+ private static void test_13() throws Exception {
+ // Run an app with -javaagent make sure it works as expected -
+ // system properties are ignored
+
+ System.out.println("**** Test thirteen ****");
+
+ String agent = TEST_JDK + "/jre/lib/management-agent.jar";
+ if (!new File(agent).exists()) {
+ agent = TEST_JDK + "/lib/management-agent.jar";
+ }
+
+ Something s = doSomething("test_14",
+ "-javaagent:" + agent + "=com.sun.management.jmxremote.port=" +
+ port1 + ",com.sun.management.jmxremote.authenticate=false",
+ "-Dcom.sun.management.jmxremote.ssl=false"
+ );
+
+ try {
+ testNoConnect(port1);
+ } finally {
+ s.stop();
+ }
+ }
}
diff --git a/jdk/test/sun/management/jmxremote/startstop/JMXStartStopTest.sh b/jdk/test/sun/management/jmxremote/startstop/JMXStartStopTest.sh
deleted file mode 100644
index 4d67216..0000000
--- a/jdk/test/sun/management/jmxremote/startstop/JMXStartStopTest.sh
+++ /dev/null
@@ -1,579 +0,0 @@
-#!/bin/sh
-
-# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-
-# @test
-# @bug 7110104
-# @build JMXStartStopTest JMXStartStopDoSomething
-# @run shell JMXStartStopTest.sh --jtreg --no-compile
-# @summary No word Failed expected in the test output
-
-_server=no
-_jtreg=no
-_compile=yes
-_testsuite="01,02,03,04,05,06,07,08,09,10,11,12,13"
-_port_one=50234
-_port_two=50235
-
-
-_testclasses=".classes"
-_testsrc=`pwd`
-
-_logname=".classes/output.txt"
-_lockFileName="JMXStartStop.lck"
-
-_compile(){
-
- if [ ! -d ${_testclasses} ]
- then
- mkdir -p ${_testclasses}
- fi
-
- rm -f ${_testclasses}/JMXStartStopTest.class
-
- # Compile testcase
- ${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d ${_testclasses} \
- JMXStartStopDoSomething.java JMXStartStopTest.java
-
- if [ ! -f ${_testclasses}/JMXStartStopTest.class ]
- then
- echo "ERROR: Can't compile"
- exit -1
- fi
-}
-
-_app_start(){
- ${TESTJAVA}/bin/java ${TESTVMOPTS} $* -cp ${_testclasses} JMXStartStopDoSomething >> ${_logname} 2>&1 &
-
- x=0
- while [ ! -f ${_lockFileName} ]
- do
- if [ $x -gt 20 ]
- then
- echo "ERROR: Test app not started"
- if [ "${_jtreg}" = "yes" ]
- then
- exit -1
- fi
- fi
-
- echo "Waiting JMXStartStopDoSomething to start: $x"
- x=`expr $x + 1`
- sleep 1
- done
-}
-
-_get_pid(){
- ${COMPILEJAVA}/bin/jps ${TESTTOOLVMOPTS} | sed -n "/JMXStartStopDoSomething/s/ .*//p"
-}
-
-_app_stop(){
- rm ${_lockFileName}
-
- # wait until VM is actually shuts down
- while true
- do
- npid=`_get_pid`
- if [ "${npid}" = "" ]
- then
- break
- fi
- sleep 1
- done
-}
-
-_exit_on_jtreg(){
- # Stop on first failed test under jtreg
- if [ "${_jtreg}" = "yes" ]
- then
- _app_stop
- exit -1
- fi
-}
-
-_testme(){
- ${TESTJAVA}/bin/java ${TESTVMOPTS} -cp ${_testclasses} JMXStartStopTest $*
-}
-
-
-_jcmd(){
- ${TESTJAVA}/bin/jcmd ${TESTTOOLVMOPTS} JMXStartStopDoSomething $* > /dev/null 2>/dev/null
-}
-
-_echo(){
- echo "$*"
- echo "$*" >> ${_logname}
-}
-
-# ============= TESTS ======================================
-
-test_01(){
-# Run an app with JMX enabled stop it and
-# restart on other port
-
- _echo "**** Test one ****"
-
- _app_start -Dcom.sun.management.jmxremote.port=$1 \
- -Dcom.sun.management.jmxremote.authenticate=false \
- -Dcom.sun.management.jmxremote.ssl=false
-
- res1=`_testme $1`
-
- _jcmd ManagementAgent.stop
-
- res2=`_testme $1`
-
- _jcmd ManagementAgent.start jmxremote.port=$2
-
- res3=`_testme $2`
-
- if [ "${res1}" = "OK_CONN" -a "${res2}" = "NO_CONN" -a "${res3}" = "OK_CONN" ]
- then
- _echo "Passed"
- else
- _echo "Failed r1(OK):${res1} r2(NO):${res2} r3(OK):${res3}"
- _exit_on_jtreg
- fi
-
- _app_stop
-}
-
-test_02(){
-# Run an app without JMX enabled
-# start JMX by jcmd
-
- _echo "**** Test two ****"
- _app_start
-
- _jcmd ManagementAgent.start jmxremote.port=$1 jmxremote.authenticate=false jmxremote.ssl=false
-
- res1=`_testme $1`
-
- if [ "${res1}" = "OK_CONN" ]
- then
- _echo "Passed"
- else
- _echo "Failed r1(OK):${res1}"
- _exit_on_jtreg
- fi
- _app_stop
-}
-
-test_03(){
-# Run an app without JMX enabled
-# start JMX by jcmd on one port than on other one
-
- _echo "**** Test three ****"
- _app_start
-
- _jcmd ManagementAgent.start jmxremote.port=$1 jmxremote.authenticate=false jmxremote.ssl=false
-
-# Second agent shouldn't start
- _jcmd ManagementAgent.start jmxremote.port=$2 jmxremote.authenticate=false jmxremote.ssl=false
-
-# First agent should connect
- res1=`_testme $1`
-
- if [ "${res1}" = "OK_CONN" ]
- then
- _echo "Passed $1"
- else
- _echo "Failed r1(NO):${res1}"
- _exit_on_jtreg
- fi
-
-#Second agent shouldn't connect
- res1=`_testme $2`
-
- if [ "${res1}" = "NO_CONN" ]
- then
- _echo "Passed $2"
- else
- _echo "Failed r1(OK):${res1}"
- _exit_on_jtreg
- fi
-
- _app_stop
-}
-
-test_04(){
-# Run an app without JMX enabled
-# start JMX by jcmd on one port, specify rmi port explicitly
-
- _echo "**** Test four ****"
- _app_start
-
- _jcmd ManagementAgent.start jmxremote.port=$1 jmxremote.rmi.port=$2 jmxremote.authenticate=false jmxremote.ssl=false
-
-# First agent should connect
- res1=`_testme $1 $2`
-
- if [ "${res1}" = "OK_CONN" ]
- then
- _echo "Passed $1 $2"
- else
- _echo "Failed r1(NO):${res1}"
- _exit_on_jtreg
- fi
-
- _app_stop
-}
-
-test_05(){
-# Run an app without JMX enabled, it will enable local server
-# but should leave remote server disabled
-
- _echo "**** Test five ****"
- _app_start
-
- _jcmd ManagementAgent.start jmxremote=1
-
- # First agent should connect
- res1=`_testme $1`
-
- if [ "${res1}" = "NO_CONN" ]
- then
- _echo "Passed $1 $2"
- else
- _echo "Failed r1(OK):${res1}"
- _exit_on_jtreg
- fi
-
- _app_stop
-}
-
-test_06(){
-# Run an app without JMX enabled
-# start JMX by jcmd on one port, specify rmi port explicitly
-# attempt to start it again
-# 1) with the same port
-# 2) with other port
-# 3) attempt to stop it twice
-# Check for valid messages in the output
-
- _echo "**** Test six ****"
- _app_start
-
- _jcmd ManagementAgent.start jmxremote.port=$1 jmxremote.authenticate=false jmxremote.ssl=false
-
- # First agent should connect
- res1=`_testme $1 $2`
-
- if [ "${res1}" = "OK_CONN" ]
- then
- _echo "Passed $1 $2"
- else
- _echo "Failed r1(NO):${res1}"
- _exit_on_jtreg
- fi
-
- _jcmd ManagementAgent.start jmxremote.port=$1 jmxremote.authenticate=false jmxremote.ssl=false
-
- _jcmd ManagementAgent.start jmxremote.port=$2 jmxremote.authenticate=false jmxremote.ssl=false
-
- _jcmd ManagementAgent.stop
-
- _jcmd ManagementAgent.stop
-
- _jcmd ManagementAgent.start jmxremote.port=22 jmxremote.rmi.port=$2 jmxremote.authenticate=false jmxremote.ssl=false
-
- _app_stop
-}
-
-test_07(){
-# Run an app without JMX enabled, but with some properties set
-# in command line.
-# make sure these properties overriden corectly
-
- _echo "**** Test seven ****"
-
- _app_start -Dcom.sun.management.jmxremote.authenticate=false \
- -Dcom.sun.management.jmxremote.ssl=true
-
- res1=`_testme $1`
-
- _jcmd ManagementAgent.start jmxremote.port=$2 jmxremote.authenticate=false jmxremote.ssl=false
-
- res2=`_testme $2`
-
- if [ "${res1}" = "NO_CONN" -a "${res2}" = "OK_CONN" ]
- then
- echo "Passed"
- else
- _echo "Failed r1(NO):${res1} r2(OK):${res2}"
- _exit_on_jtreg
- fi
-
- _app_stop
-}
-
-test_08(){
-# Run an app with JMX enabled and with some properties set
-# in command line.
-# stop JMX agent and then start it again with different property values
-# make sure these properties overriden corectly
-
- _echo "**** Test eight ****"
-
- _app_start -Dcom.sun.management.jmxremote.port=$1 \
- -Dcom.sun.management.jmxremote.authenticate=false \
- -Dcom.sun.management.jmxremote.ssl=true
-
- res1=`_testme $1`
-
- _jcmd ManagementAgent.stop
-
- res2=`_testme $1`
-
- _jcmd ManagementAgent.start jmxremote.port=$2 jmxremote.authenticate=false jmxremote.ssl=false
-
- res3=`_testme $2`
-
- if [ "${res1}" = "NO_CONN" -a "${res2}" = "NO_CONN" -a "${res3}" = "OK_CONN" ]
- then
- _echo "Passed"
- else
- _echo "Failed r1(NO):${res1} r2(NO):${res2} r3(OK):${res3}"
- _exit_on_jtreg
- fi
-
- _app_stop
-}
-
-test_09(){
-# Run an app with JMX enabled and with some properties set
-# in command line.
-# stop JMX agent and then start it again with different property values
-# specifing some property in management config file and some of them
-# in command line
-# make sure these properties overriden corectly
-
- _echo "**** Test nine ****"
-
- _app_start -Dcom.sun.management.config.file=${_testsrc}/management_cl.properties \
- -Dcom.sun.management.jmxremote.authenticate=false
-
- res1=`_testme $1`
-
- _jcmd ManagementAgent.stop
-
- res2=`_testme $1`
-
- _jcmd ManagementAgent.start config.file=${_testsrc}/management_jcmd.properties \
- jmxremote.authenticate=false jmxremote.port=$2
-
- res3=`_testme $2`
-
- if [ "${res1}" = "NO_CONN" -a "${res2}" = "NO_CONN" -a "${res3}" = "OK_CONN" ]
- then
- _echo "Passed"
- else
- _echo "Failed r1(NO):${res1} r2(NO):${res2} r3(OK):${res3}"
- _exit_on_jtreg
- fi
-
- _app_stop
-}
-
-test_10(){
-# Run an app with JMX enabled and with some properties set
-# in command line.
-# stop JMX agent and then start it again with different property values
-# stop JMX agent again and then start it without property value
-# make sure these properties overriden corectly
-
- _echo "**** Test ten ****"
-
- _app_start -Dcom.sun.management.jmxremote.port=$1 \
- -Dcom.sun.management.jmxremote.authenticate=false \
- -Dcom.sun.management.jmxremote.ssl=true
-
- res1=`_testme $1`
-
- _jcmd ManagementAgent.stop
- _jcmd ManagementAgent.start jmxremote.ssl=false jmxremote.port=$1
-
-
- res2=`_testme $1`
-
- _jcmd ManagementAgent.stop
- _jcmd ManagementAgent.start jmxremote.port=$1
-
- res3=`_testme $1`
-
- if [ "${res1}" = "NO_CONN" -a "${res2}" = "OK_CONN" -a "${res3}" = "NO_CONN" ]
- then
- _echo "Passed"
- else
- _echo "Failed r1(NO):${res1} r2(OK):${res2} r3(NO):${res3}"
- _exit_on_jtreg
- fi
-
- _app_stop
-}
-
-test_11(){
-# Run an app with JMX enabled
-# stop remote agent
-# make sure local agent is not affected
-
- _echo "**** Test eleven ****"
-
- _app_start -Dcom.sun.management.jmxremote.port=$2 \
- -Dcom.sun.management.jmxremote.authenticate=false \
- -Dcom.sun.management.jmxremote.ssl=false
-
- res1=`_testme $2`
-
- _jcmd ManagementAgent.stop
-
- pid=`${COMPILEJAVA}/bin/jps ${TESTTOOLVMOPTS} | sed -n "/JMXStartStopDoSomething/s/ .*//p"`
- res2=`_testme local ${pid}`
-
- if [ "${res1}" = "OK_CONN" -a "${res2}" = "OK_CONN" ]
- then
- _echo "Passed"
- else
- _echo "Failed r1(OK):${res1} r2(OK):${res2}"
- _exit_on_jtreg
- fi
-
- _app_stop
-}
-
-test_12(){
-# Run an app with JMX disabled
-# start local agent only
-
- _echo "**** Test twelve ****"
-
- _app_start
-
- res1=`_testme $1`
-
- _jcmd ManagementAgent.start_local
-
- pid=`_get_pid`
- if [ "x${pid}" = "x" ]
- then
- res2="NO_CONN"
- else
- res2=`_testme local ${pid}`
- fi
-
- if [ "${res1}" = "NO_CONN" -a "${res2}" = "OK_CONN" ]
- then
- _echo "Passed"
- else
- _echo "Failed r1(NO):${res1} r2(OK):${res2}"
- _exit_on_jtreg
- fi
-
- _app_stop
-}
-
-test_13(){
-# Run an app with -javaagent make sure it works as expected - system properties are ignored
-
- _echo "**** Test thirteen ****"
-
- AGENT="${TESTJAVA}/jre/lib/management-agent.jar"
- if [ ! -f ${AGENT} ]
- then
- AGENT="${TESTJAVA}/lib/management-agent.jar"
- fi
-
- _app_start -javaagent:${AGENT}=com.sun.management.jmxremote.port=$1,com.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false
-
- res1=`_testme $1`
-
- if [ "${res1}" = "NO_CONN" ]
- then
- _echo "Passed"
- else
- _echo "Failed r1(NO):${res1}"
- _exit_on_jtreg
- fi
-
- _app_stop
-}
-
-# ============= MAIN =======================================
-
-if [ "x${TESTJAVA}" = "x" ]
-then
- echo "TESTJAVA env have to be set"
- exit
-fi
-
-if [ ! -x "${TESTJAVA}/bin/jcmd" ]
-then
- echo "${TESTJAVA}/bin/jcmd"
- echo "Doesn't exist or not an executable"
- exit
-fi
-
-
-#------------------------------------------------------------------------------
-# reading parameters
-
-for parm in "$@"
-do
- case $parm in
- --jtreg) _jtreg=yes ;;
- --no-compile) _compile=no ;;
- --testsuite=*) _testsuite=`_echo $parm | sed "s,^--.*=\(.*\),\1,"` ;;
- --port-one=*) _port_one=`_echo $parm | sed "s,^--.*=\(.*\),\1,"` ;;
- --port-two=*) _port_two=`_echo $parm | sed "s,^--.*=\(.*\),\1,"` ;;
- *)
- echo "Undefined parameter $parm. Try --help for help"
- exit
- ;;
- esac
-done
-
-if [ "${COMPILEJAVA}" = "" ]
-then
- COMPILEJAVA=${TESTJAVA}
-fi
-
-if [ ${_compile} = "yes" ]
-then
- _compile
-fi
-
-if [ ${_jtreg} = "yes" ]
-then
- _testclasses=${TESTCLASSES}
- _testsrc=${TESTSRC}
- _logname="JMXStartStopTest_output.txt"
-fi
-
-rm -f ${_logname}
-
-# Local mode tests
-for i in `echo ${_testsuite} | sed -e "s/,/ /g"`
-do
- test_${i} ${_port_one} ${_port_two}
-done
-
-
diff --git a/jdk/test/sun/misc/Version/Version.java b/jdk/test/sun/misc/Version/Version.java
index 13e5075..85c8ce2 100644
--- a/jdk/test/sun/misc/Version/Version.java
+++ b/jdk/test/sun/misc/Version/Version.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -116,10 +116,16 @@
} else if (Character.isDigit(cs.charAt(0)) &&
Character.isDigit(cs.charAt(1)) && cs.charAt(2) == '.' &&
Character.isDigit(cs.charAt(3))) {
- // HSX has nn.n (major.minor) version
+ // HSX has nn.n[n] (major.minor) version
major = Integer.valueOf(version.substring(0, 2)).intValue();
- minor = Character.digit(cs.charAt(3), 10);
- cs = cs.subSequence(4, cs.length());
+ if (Character.isDigit(cs.charAt(4))) {
+ minor = Integer.valueOf(version.substring(3, 5)).intValue();
+ cs = cs.subSequence(5, cs.length());
+ }
+ else {
+ minor = Character.digit(cs.charAt(3), 10);
+ cs = cs.subSequence(4, cs.length());
+ }
}
if (cs.charAt(0) == '_' && cs.length() >= 3 &&
Character.isDigit(cs.charAt(1)) &&
diff --git a/jdk/test/sun/net/www/protocol/jar/jarbug/run.sh b/jdk/test/sun/net/www/protocol/jar/jarbug/run.sh
index 5f039b9..07b832e 100644
--- a/jdk/test/sun/net/www/protocol/jar/jarbug/run.sh
+++ b/jdk/test/sun/net/www/protocol/jar/jarbug/run.sh
@@ -34,14 +34,17 @@
SunOS | Linux | Darwin )
PS=":"
FS="/"
+ CHMOD="${FS}bin${FS}chmod"
;;
Windows* )
PS=";"
FS="\\"
+ CHMOD="chmod"
;;
CYGWIN* )
PS=";"
FS="/"
+ CHMOD="chmod"
#
# javac does not like /cygdrive produced by `pwd`.
#
@@ -59,6 +62,7 @@
mkdir -p ${DEST}${FS}jar1
cd ${TESTSRC}${FS}etc${FS}jar1
cp -r . ${DEST}${FS}jar1
+${CHMOD} -R u+w ${DEST}${FS}jar1
${COMPILEJAVA}${FS}bin${FS}javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d ${DEST}${FS}jar1 \
${TESTSRC}${FS}src${FS}jar1${FS}LoadResourceBundle.java
${COMPILEJAVA}${FS}bin${FS}javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d ${DEST}${FS}jar1 \
diff --git a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLEngineImpl/SSLEngineBadBufferArrayAccess.java b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLEngineImpl/SSLEngineBadBufferArrayAccess.java
index ee5efb9..45a6df0 100644
--- a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLEngineImpl/SSLEngineBadBufferArrayAccess.java
+++ b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLEngineImpl/SSLEngineBadBufferArrayAccess.java
@@ -148,14 +148,14 @@
"SSLv3", "TLSv1", "TLSv1.1", "TLSv1.2" };
for (String protocol : protocols) {
- log("Testing " + protocol);
/*
* Run the tests with direct and indirect buffers.
*/
- SSLEngineBadBufferArrayAccess test =
- new SSLEngineBadBufferArrayAccess(protocol);
- test.runTest(true);
- test.runTest(false);
+ log("Testing " + protocol + ":true");
+ new SSLEngineBadBufferArrayAccess(protocol).runTest(true);
+
+ log("Testing " + protocol + ":false");
+ new SSLEngineBadBufferArrayAccess(protocol).runTest(false);
}
System.out.println("Test Passed.");
diff --git a/jdk/test/sun/util/calendar/zi/tzdata/VERSION b/jdk/test/sun/util/calendar/zi/tzdata/VERSION
index 1d76989..2f162e0 100644
--- a/jdk/test/sun/util/calendar/zi/tzdata/VERSION
+++ b/jdk/test/sun/util/calendar/zi/tzdata/VERSION
@@ -21,4 +21,4 @@
# or visit www.oracle.com if you need additional information or have any
# questions.
#
-tzdata2013h
+tzdata2013i
diff --git a/jdk/test/sun/util/calendar/zi/tzdata/africa b/jdk/test/sun/util/calendar/zi/tzdata/africa
index 0eed8b1..82d14a4 100644
--- a/jdk/test/sun/util/calendar/zi/tzdata/africa
+++ b/jdk/test/sun/util/calendar/zi/tzdata/africa
@@ -500,14 +500,13 @@
Rule Libya 1997 only - Oct 4 0:00 0 -
Rule Libya 2013 only - Mar lastFri 1:00 1:00 S
Rule Libya 2013 only - Oct lastFri 2:00 0 -
-
-# The 1996 and 1997 entries are from Shanks & Pottenger;
-# the IATA SSIM data contain some obvious errors.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Tripoli 0:52:44 - LMT 1920
1:00 Libya CE%sT 1959
2:00 - EET 1982
1:00 Libya CE%sT 1990 May 4
+# The 1996 and 1997 entries are from Shanks & Pottenger;
+# the IATA SSIM data contain some obvious errors.
2:00 - EET 1996 Sep 30
1:00 Libya CE%sT 1997 Oct 4
2:00 - EET 2012 Nov 10 2:00
diff --git a/jdk/test/sun/util/calendar/zi/tzdata/asia b/jdk/test/sun/util/calendar/zi/tzdata/asia
index fd278e5..1a8f83d 100644
--- a/jdk/test/sun/util/calendar/zi/tzdata/asia
+++ b/jdk/test/sun/util/calendar/zi/tzdata/asia
@@ -1403,12 +1403,22 @@
# switch back to standard time this winter, so the will stay on DST
# until about the same time next year (at least).
# http://www.petra.gov.jo/Public_News/Nws_NewsDetails.aspx?NewsID=88950
-#
-# From Paul Eggert (2013-09-21):
-# It's looking like this change will be permanent; see
-# Petra News Agency, Cancelling winter saved Jordan $7 million (2013-02-20)
-# <http://www.albawaba.com/business/jordan-winter-electricity--472005>.
-# So move Jordan to UTC+3 as of the abovementioned date.
+
+# From Steffen Thorsen (2013-12-11):
+# Jordan Times and other sources say that Jordan is going back to
+# UTC+2 on 2013-12-19 at midnight:
+# http://jordantimes.com/govt-decides-to-switch-back-to-wintertime
+# Official, in Arabic:
+# http://www.petra.gov.jo/public_news/Nws_NewsDetails.aspx?Menu_ID=&Site_Id=2&lang=1&NewsID=133230&CatID=14
+# ... Our background/permalink about it
+# http://www.timeanddate.com/news/time/jordan-reverses-dst-decision.html
+# ...
+# http://www.petra.gov.jo/Public_News/Nws_NewsDetails.aspx?lang=2&site_id=1&NewsID=133313&Type=P
+# ... says midnight for the coming one and 1:00 for the ones in the future
+# (and they will use DST again next year, using the normal schedule).
+
+# From Paul Eggert (2013-12-11):
+# As Steffen suggested, consider the past 21-month experiment to be DST.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Jordan 1973 only - Jun 6 0:00 1:00 S
@@ -1438,11 +1448,13 @@
Rule Jordan 2003 only - Oct 24 0:00s 0 -
Rule Jordan 2004 only - Oct 15 0:00s 0 -
Rule Jordan 2005 only - Sep lastFri 0:00s 0 -
-Rule Jordan 2006 2012 - Oct lastFri 0:00s 0 -
+Rule Jordan 2006 2011 - Oct lastFri 0:00s 0 -
+Rule Jordan 2013 only - Dec 20 0:00 0 -
+Rule Jordan 2014 max - Mar lastThu 24:00 1:00 S
+Rule Jordan 2014 max - Oct lastFri 0:00s 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Amman 2:23:44 - LMT 1931
- 2:00 Jordan EE%sT 2012 Oct 26 0:00s
- 3:00 - AST
+ 2:00 Jordan EE%sT
# Kazakhstan
diff --git a/jdk/test/sun/util/calendar/zi/tzdata/northamerica b/jdk/test/sun/util/calendar/zi/tzdata/northamerica
index b8caf6d..9e551bb 100644
--- a/jdk/test/sun/util/calendar/zi/tzdata/northamerica
+++ b/jdk/test/sun/util/calendar/zi/tzdata/northamerica
@@ -2688,6 +2688,11 @@
# to DST--and one more hour on 1999-04-04--when the announcers will have
# returned to Baltimore, which switches on that date.)
+# From Steffen Thorsen (2013-11-11):
+# DST start in Cuba in 2004 ... does not follow the same rules as the
+# years before. The correct date should be Sunday 2004-03-28 00:00 ...
+# https://web.archive.org/web/20040402060750/http://www.granma.cu/espanol/2004/marzo/sab27/reloj.html
+
# From Evert van der Veer via Steffen Thorsen (2004-10-28):
# Cuba is not going back to standard time this year.
# From Paul Eggert (2006-03-22):
@@ -2877,7 +2882,8 @@
Rule Cuba 1997 only - Oct 12 0:00s 0 S
Rule Cuba 1998 1999 - Mar lastSun 0:00s 1:00 D
Rule Cuba 1998 2003 - Oct lastSun 0:00s 0 S
-Rule Cuba 2000 2004 - Apr Sun>=1 0:00s 1:00 D
+Rule Cuba 2000 2003 - Apr Sun>=1 0:00s 1:00 D
+Rule Cuba 2004 only - Mar lastSun 0:00s 1:00 D
Rule Cuba 2006 2010 - Oct lastSun 0:00s 0 S
Rule Cuba 2007 only - Mar Sun>=8 0:00s 1:00 D
Rule Cuba 2008 only - Mar Sun>=15 0:00s 1:00 D
diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames.properties
deleted file mode 100644
index 594231f..0000000
--- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames.properties
+++ /dev/null
@@ -1,651 +0,0 @@
-ACT.daylight.long=Central Summer Time (Northern Territory)
-ACT.generic.long=Central Time (Northern Territory)
-ACT.standard.long=Central Standard Time (Northern Territory)
-AET.daylight.long=Eastern Summer Time (New South Wales)
-AET.generic.long=Eastern Time (New South Wales)
-AET.standard.long=Eastern Standard Time (New South Wales)
-AGT.generic.long=Argentine Time
-ART.generic.long=Eastern European Time
-AST.generic.long=Alaska Time
-Africa/Abidjan.generic.long=Greenwich Mean Time
-Africa/Accra.generic.long=Ghana Mean Time
-Africa/Addis_Ababa.generic.long=Eastern Africa Time
-Africa/Algiers.generic.long=Central European Time
-Africa/Asmara.generic.long=Eastern Africa Time
-Africa/Asmera.generic.long=Eastern Africa Time
-Africa/Bamako.generic.long=Greenwich Mean Time
-Africa/Bangui.generic.long=Western African Time
-Africa/Banjul.generic.long=Greenwich Mean Time
-Africa/Bissau.generic.long=Greenwich Mean Time
-Africa/Blantyre.generic.long=Central Africa Time
-Africa/Brazzaville.generic.long=Western African Time
-Africa/Bujumbura.generic.long=Central Africa Time
-Africa/Cairo.generic.long=Eastern European Time
-Africa/Casablanca.generic.long=Western European Time
-Africa/Ceuta.generic.long=Central European Time
-Africa/Conakry.generic.long=Greenwich Mean Time
-Africa/Dakar.generic.long=Greenwich Mean Time
-Africa/Dar_es_Salaam.generic.long=Eastern Africa Time
-Africa/Djibouti.generic.long=Eastern Africa Time
-Africa/Douala.generic.long=Western African Time
-Africa/El_Aaiun.generic.long=Western European Time
-Africa/Freetown.generic.long=Sierra Leone Time
-Africa/Gaborone.generic.long=Central Africa Time
-Africa/Harare.generic.long=Central Africa Time
-Africa/Johannesburg.generic.long=South Africa Time
-Africa/Juba.generic.long=Eastern Africa Time
-Africa/Kampala.generic.long=Eastern Africa Time
-Africa/Khartoum.generic.long=Eastern Africa Time
-Africa/Kigali.generic.long=Central Africa Time
-Africa/Kinshasa.generic.long=Western African Time
-Africa/Lagos.generic.long=Western African Time
-Africa/Libreville.generic.long=Western African Time
-Africa/Lome.generic.long=Greenwich Mean Time
-Africa/Luanda.generic.long=Western African Time
-Africa/Lubumbashi.generic.long=Central Africa Time
-Africa/Lusaka.generic.long=Central Africa Time
-Africa/Malabo.generic.long=Western African Time
-Africa/Maputo.generic.long=Central Africa Time
-Africa/Maseru.generic.long=South Africa Time
-Africa/Mbabane.generic.long=South Africa Time
-Africa/Mogadishu.generic.long=Eastern Africa Time
-Africa/Monrovia.generic.long=Greenwich Mean Time
-Africa/Nairobi.generic.long=Eastern Africa Time
-Africa/Ndjamena.generic.long=Western African Time
-Africa/Niamey.generic.long=Western African Time
-Africa/Nouakchott.generic.long=Greenwich Mean Time
-Africa/Ouagadougou.generic.long=Greenwich Mean Time
-Africa/Porto-Novo.generic.long=Western African Time
-Africa/Sao_Tome.generic.long=Greenwich Mean Time
-Africa/Timbuktu.generic.long=Greenwich Mean Time
-Africa/Tripoli.generic.long=Eastern European Time
-Africa/Tunis.generic.long=Central European Time
-Africa/Windhoek.generic.long=Western African Time
-America/Adak.generic.long=Hawaii-Aleutian Time
-America/Anchorage.generic.long=Alaska Time
-America/Anguilla.generic.long=Atlantic Time
-America/Antigua.generic.long=Atlantic Time
-America/Araguaina.generic.long=Brasilia Time
-America/Argentina/Buenos_Aires.generic.long=Argentine Time
-America/Argentina/Catamarca.generic.long=Argentine Time
-America/Argentina/ComodRivadavia.generic.long=Argentine Time
-America/Argentina/Cordoba.generic.long=Argentine Time
-America/Argentina/Jujuy.generic.long=Argentine Time
-America/Argentina/La_Rioja.generic.long=Argentine Time
-America/Argentina/Mendoza.generic.long=Argentine Time
-America/Argentina/Rio_Gallegos.generic.long=Argentine Time
-America/Argentina/Salta.generic.long=Argentine Time
-America/Argentina/San_Juan.generic.long=Argentine Time
-America/Argentina/San_Luis.generic.long=Argentine Time
-America/Argentina/Tucuman.generic.long=Argentine Time
-America/Argentina/Ushuaia.generic.long=Argentine Time
-America/Aruba.generic.long=Atlantic Time
-America/Asuncion.generic.long=Paraguay Time
-America/Atikokan.generic.long=Eastern Time
-America/Atka.generic.long=Hawaii-Aleutian Time
-America/Bahia.generic.long=Brasilia Time
-America/Bahia_Banderas.generic.long=Central Time
-America/Barbados.generic.long=Atlantic Time
-America/Belem.generic.long=Brasilia Time
-America/Belize.generic.long=Central Time
-America/Blanc-Sablon.generic.long=Atlantic Time
-America/Boa_Vista.generic.long=Amazon Time
-America/Bogota.generic.long=Colombia Time
-America/Boise.generic.long=Mountain Time
-America/Buenos_Aires.generic.long=Argentine Time
-America/Cambridge_Bay.generic.long=Mountain Time
-America/Campo_Grande.generic.long=Amazon Time
-America/Cancun.generic.long=Central Time
-America/Caracas.generic.long=Venezuela Time
-America/Catamarca.generic.long=Argentine Time
-America/Cayenne.generic.long=French Guiana Time
-America/Cayman.generic.long=Eastern Time
-America/Chicago.generic.long=Central Time
-America/Chihuahua.generic.long=Mountain Time
-America/Coral_Harbour.generic.long=Eastern Time
-America/Cordoba.generic.long=Argentine Time
-America/Costa_Rica.generic.long=Central Time
-America/Creston.generic.long=Mountain Time
-America/Cuiaba.generic.long=Amazon Time
-America/Curacao.generic.long=Atlantic Time
-America/Danmarkshavn.generic.long=Greenwich Mean Time
-America/Dawson.generic.long=Pacific Time
-America/Dawson_Creek.generic.long=Mountain Time
-America/Denver.generic.long=Mountain Time
-America/Detroit.generic.long=Eastern Time
-America/Dominica.generic.long=Atlantic Time
-America/Edmonton.generic.long=Mountain Time
-America/Eirunepe.generic.long=Acre Time
-America/El_Salvador.generic.long=Central Time
-America/Ensenada.generic.long=Pacific Time
-America/Fort_Wayne.generic.long=Eastern Time
-America/Fortaleza.generic.long=Brasilia Time
-America/Glace_Bay.generic.long=Atlantic Time
-America/Godthab.generic.long=Western Greenland Time
-America/Goose_Bay.generic.long=Atlantic Time
-America/Grand_Turk.generic.long=Eastern Time
-America/Grenada.generic.long=Atlantic Time
-America/Guadeloupe.generic.long=Atlantic Time
-America/Guatemala.generic.long=Central Time
-America/Guayaquil.generic.long=Ecuador Time
-America/Guyana.generic.long=Guyana Time
-America/Halifax.generic.long=Atlantic Time
-America/Havana.generic.long=Cuba Time
-America/Hermosillo.generic.long=Mountain Time
-America/Indiana/Indianapolis.generic.long=Eastern Time
-America/Indiana/Knox.generic.long=Central Time
-America/Indiana/Marengo.generic.long=Eastern Time
-America/Indiana/Petersburg.generic.long=Eastern Time
-America/Indiana/Tell_City.generic.long=Central Time
-America/Indiana/Vevay.generic.long=Eastern Time
-America/Indiana/Vincennes.generic.long=Eastern Time
-America/Indiana/Winamac.generic.long=Eastern Time
-America/Indianapolis.generic.long=Eastern Time
-America/Inuvik.generic.long=Mountain Time
-America/Iqaluit.generic.long=Eastern Time
-America/Jamaica.generic.long=Eastern Time
-America/Jujuy.generic.long=Argentine Time
-America/Juneau.generic.long=Alaska Time
-America/Kentucky/Louisville.generic.long=Eastern Time
-America/Kentucky/Monticello.generic.long=Eastern Time
-America/Knox_IN.generic.long=Central Time
-America/Kralendijk.generic.long=Atlantic Time
-America/La_Paz.generic.long=Bolivia Time
-America/Lima.generic.long=Peru Time
-America/Los_Angeles.generic.long=Pacific Time
-America/Louisville.generic.long=Eastern Time
-America/Lower_Princes.generic.long=Atlantic Time
-America/Maceio.generic.long=Brasilia Time
-America/Managua.generic.long=Central Time
-America/Manaus.generic.long=Amazon Time
-America/Marigot.generic.long=Atlantic Time
-America/Martinique.generic.long=Atlantic Time
-America/Matamoros.generic.long=Central Time
-America/Mazatlan.generic.long=Mountain Time
-America/Mendoza.generic.long=Argentine Time
-America/Menominee.generic.long=Central Time
-America/Merida.generic.long=Central Time
-America/Metlakatla.daylight.long=Metlakatla Daylight Time
-America/Metlakatla.generic.long=Metlakatla Time
-America/Metlakatla.standard.long=Metlakatla Standard Time
-America/Mexico_City.generic.long=Central Time
-America/Miquelon.generic.long=Pierre & Miquelon Time
-America/Moncton.generic.long=Atlantic Time
-America/Monterrey.generic.long=Central Time
-America/Montevideo.generic.long=Uruguay Time
-America/Montreal.generic.long=Eastern Time
-America/Montserrat.generic.long=Atlantic Time
-America/Nassau.generic.long=Eastern Time
-America/New_York.generic.long=Eastern Time
-America/Nipigon.generic.long=Eastern Time
-America/Nome.generic.long=Alaska Time
-America/Noronha.generic.long=Fernando de Noronha Time
-America/North_Dakota/Beulah.generic.long=Central Time
-America/North_Dakota/Center.generic.long=Central Time
-America/North_Dakota/New_Salem.generic.long=Central Time
-America/Ojinaga.generic.long=Mountain Time
-America/Panama.generic.long=Eastern Time
-America/Pangnirtung.generic.long=Eastern Time
-America/Paramaribo.generic.long=Suriname Time
-America/Phoenix.generic.long=Mountain Time
-America/Port-au-Prince.generic.long=Eastern Time
-America/Port_of_Spain.generic.long=Atlantic Time
-America/Porto_Acre.generic.long=Acre Time
-America/Porto_Velho.generic.long=Amazon Time
-America/Puerto_Rico.generic.long=Atlantic Time
-America/Rainy_River.generic.long=Central Time
-America/Rankin_Inlet.generic.long=Central Time
-America/Recife.generic.long=Brasilia Time
-America/Regina.generic.long=Central Time
-America/Resolute.generic.long=Central Time
-America/Rio_Branco.generic.long=Acre Time
-America/Rosario.generic.long=Argentine Time
-America/Santa_Isabel.generic.long=Pacific Time
-America/Santarem.generic.long=Brasilia Time
-America/Santiago.generic.long=Chile Time
-America/Santo_Domingo.generic.long=Atlantic Time
-America/Sao_Paulo.generic.long=Brasilia Time
-America/Scoresbysund.generic.long=Eastern Greenland Time
-America/Shiprock.generic.long=Mountain Time
-America/Sitka.generic.long=Alaska Time
-America/St_Barthelemy.generic.long=Atlantic Time
-America/St_Johns.generic.long=Newfoundland Time
-America/St_Kitts.generic.long=Atlantic Time
-America/St_Lucia.generic.long=Atlantic Time
-America/St_Thomas.generic.long=Atlantic Time
-America/St_Vincent.generic.long=Atlantic Time
-America/Swift_Current.generic.long=Central Time
-America/Tegucigalpa.generic.long=Central Time
-America/Thule.generic.long=Atlantic Time
-America/Thunder_Bay.generic.long=Eastern Time
-America/Tijuana.generic.long=Pacific Time
-America/Toronto.generic.long=Eastern Time
-America/Tortola.generic.long=Atlantic Time
-America/Vancouver.generic.long=Pacific Time
-America/Virgin.generic.long=Atlantic Time
-America/Whitehorse.generic.long=Pacific Time
-America/Winnipeg.generic.long=Central Time
-America/Yakutat.generic.long=Alaska Time
-America/Yellowknife.generic.long=Mountain Time
-Antarctica/Casey.daylight.long=Western Summer Time (Australia)
-Antarctica/Casey.generic.long=Western Time (Australia)
-Antarctica/Casey.standard.long=Western Standard Time (Australia)
-Antarctica/Davis.generic.long=Davis Time
-Antarctica/DumontDUrville.generic.long=Dumont-d'Urville Time
-Antarctica/Macquarie.daylight.long=Macquarie Island Summer Time
-Antarctica/Macquarie.generic.long=Macquarie Island Time
-Antarctica/Macquarie.standard.long=Macquarie Island Time
-Antarctica/Mawson.generic.long=Mawson Time
-Antarctica/McMurdo.generic.long=New Zealand Time
-Antarctica/Palmer.generic.long=Chile Time
-Antarctica/Rothera.generic.long=Rothera Time
-Antarctica/South_Pole.generic.long=New Zealand Time
-Antarctica/Syowa.generic.long=Syowa Time
-Antarctica/Vostok.generic.long=Vostok Time
-Arctic/Longyearbyen.generic.long=Central European Time
-Asia/Aden.generic.long=Arabia Time
-Asia/Almaty.generic.long=Alma-Ata Time
-Asia/Amman.generic.long=Arabia Time
-Asia/Anadyr.generic.long=Anadyr Time
-Asia/Aqtau.generic.long=Aqtau Time
-Asia/Aqtobe.generic.long=Aqtobe Time
-Asia/Ashgabat.generic.long=Turkmenistan Time
-Asia/Ashkhabad.generic.long=Turkmenistan Time
-Asia/Baghdad.generic.long=Arabia Time
-Asia/Bahrain.generic.long=Arabia Time
-Asia/Baku.generic.long=Azerbaijan Time
-Asia/Bangkok.generic.long=Indochina Time
-Asia/Beirut.generic.long=Eastern European Time
-Asia/Bishkek.generic.long=Kirgizstan Time
-Asia/Brunei.generic.long=Brunei Time
-Asia/Calcutta.generic.long=India Time
-Asia/Choibalsan.generic.long=Choibalsan Time
-Asia/Chongqing.generic.long=China Time
-Asia/Chungking.generic.long=China Time
-Asia/Colombo.generic.long=India Time
-Asia/Dacca.generic.long=Bangladesh Time
-Asia/Damascus.generic.long=Eastern European Time
-Asia/Dhaka.generic.long=Bangladesh Time
-Asia/Dili.generic.long=Timor-Leste Time
-Asia/Dubai.generic.long=Gulf Time
-Asia/Dushanbe.generic.long=Tajikistan Time
-Asia/Gaza.generic.long=Eastern European Time
-Asia/Harbin.generic.long=China Time
-Asia/Hebron.generic.long=Eastern European Time
-Asia/Ho_Chi_Minh.generic.long=Indochina Time
-Asia/Hong_Kong.generic.long=Hong Kong Time
-Asia/Hovd.generic.long=Hovd Time
-Asia/Irkutsk.generic.long=Irkutsk Time
-Asia/Istanbul.generic.long=Eastern European Time
-Asia/Jakarta.generic.long=West Indonesia Time
-Asia/Jayapura.generic.long=East Indonesia Time
-Asia/Jerusalem.generic.long=Israel Time
-Asia/Kabul.generic.long=Afghanistan Time
-Asia/Kamchatka.generic.long=Petropavlovsk-Kamchatski Time
-Asia/Karachi.generic.long=Pakistan Time
-Asia/Kashgar.generic.long=China Time
-Asia/Kathmandu.generic.long=Nepal Time
-Asia/Katmandu.generic.long=Nepal Time
-Asia/Khandyga.daylight.long=Khandyga Summer Time
-Asia/Khandyga.generic.long=Khandyga Time
-Asia/Khandyga.standard.long=Khandyga Time
-Asia/Kolkata.generic.long=India Time
-Asia/Krasnoyarsk.generic.long=Krasnoyarsk Time
-Asia/Kuala_Lumpur.generic.long=Malaysia Time
-Asia/Kuching.generic.long=Malaysia Time
-Asia/Kuwait.generic.long=Arabia Time
-Asia/Macao.generic.long=China Time
-Asia/Macau.generic.long=China Time
-Asia/Magadan.generic.long=Magadan Time
-Asia/Makassar.generic.long=Central Indonesia Time
-Asia/Manila.generic.long=Philippines Time
-Asia/Muscat.generic.long=Gulf Time
-Asia/Nicosia.generic.long=Eastern European Time
-Asia/Novokuznetsk.generic.long=Novosibirsk Time
-Asia/Novosibirsk.generic.long=Novosibirsk Time
-Asia/Omsk.generic.long=Omsk Time
-Asia/Oral.generic.long=Oral Time
-Asia/Phnom_Penh.generic.long=Indochina Time
-Asia/Pontianak.generic.long=West Indonesia Time
-Asia/Pyongyang.generic.long=Korea Time
-Asia/Qatar.generic.long=Arabia Time
-Asia/Qyzylorda.generic.long=Qyzylorda Time
-Asia/Rangoon.generic.long=Myanmar Time
-Asia/Saigon.generic.long=Indochina Time
-Asia/Sakhalin.generic.long=Sakhalin Time
-Asia/Samarkand.generic.long=Uzbekistan Time
-Asia/Seoul.generic.long=Korea Time
-Asia/Shanghai.generic.long=China Time
-Asia/Singapore.generic.long=Singapore Time
-Asia/Taipei.generic.long=China Time
-Asia/Tashkent.generic.long=Uzbekistan Time
-Asia/Tbilisi.generic.long=Georgia Time
-Asia/Tehran.generic.long=Iran Time
-Asia/Tel_Aviv.generic.long=Israel Time
-Asia/Thimbu.generic.long=Bhutan Time
-Asia/Thimphu.generic.long=Bhutan Time
-Asia/Tokyo.generic.long=Japan Time
-Asia/Ujung_Pandang.generic.long=Central Indonesia Time
-Asia/Ulaanbaatar.generic.long=Ulaanbaatar Time
-Asia/Ulan_Bator.generic.long=Ulaanbaatar Time
-Asia/Urumqi.generic.long=China Time
-Asia/Ust-Nera.daylight.long=Ust-Nera Summer Time
-Asia/Ust-Nera.generic.long=Ust-Nera Time
-Asia/Ust-Nera.standard.long=Ust-Nera Time
-Asia/Vientiane.generic.long=Indochina Time
-Asia/Vladivostok.generic.long=Vladivostok Time
-Asia/Yakutsk.generic.long=Yakutsk Time
-Asia/Yekaterinburg.generic.long=Yekaterinburg Time
-Asia/Yerevan.generic.long=Armenia Time
-Atlantic/Azores.generic.long=Azores Time
-Atlantic/Bermuda.generic.long=Atlantic Time
-Atlantic/Canary.generic.long=Western European Time
-Atlantic/Cape_Verde.generic.long=Cape Verde Time
-Atlantic/Faeroe.generic.long=Western European Time
-Atlantic/Faroe.generic.long=Western European Time
-Atlantic/Jan_Mayen.generic.long=Central European Time
-Atlantic/Madeira.generic.long=Western European Time
-Atlantic/Reykjavik.generic.long=Greenwich Mean Time
-Atlantic/South_Georgia.generic.long=South Georgia Time
-Atlantic/St_Helena.generic.long=Greenwich Mean Time
-Atlantic/Stanley.generic.long=Falkland Is. Time
-Australia/ACT.daylight.long=Eastern Summer Time (New South Wales)
-Australia/ACT.generic.long=Eastern Time (New South Wales)
-Australia/ACT.standard.long=Eastern Standard Time (New South Wales)
-Australia/Adelaide.daylight.long=Central Summer Time (South Australia)
-Australia/Adelaide.generic.long=Central Time (South Australia)
-Australia/Adelaide.standard.long=Central Standard Time (South Australia)
-Australia/Brisbane.daylight.long=Eastern Summer Time (Queensland)
-Australia/Brisbane.generic.long=Eastern Time (Queensland)
-Australia/Brisbane.standard.long=Eastern Standard Time (Queensland)
-Australia/Broken_Hill.daylight.long=Central Summer Time (South Australia/New South Wales)
-Australia/Broken_Hill.generic.long=Central Time (South Australia/New South Wales)
-Australia/Broken_Hill.standard.long=Central Standard Time (South Australia/New South Wales)
-Australia/Canberra.daylight.long=Eastern Summer Time (New South Wales)
-Australia/Canberra.generic.long=Eastern Time (New South Wales)
-Australia/Canberra.standard.long=Eastern Standard Time (New South Wales)
-Australia/Currie.daylight.long=Eastern Summer Time (New South Wales)
-Australia/Currie.generic.long=Eastern Time (New South Wales)
-Australia/Currie.standard.long=Eastern Standard Time (New South Wales)
-Australia/Darwin.daylight.long=Central Summer Time (Northern Territory)
-Australia/Darwin.generic.long=Central Time (Northern Territory)
-Australia/Darwin.standard.long=Central Standard Time (Northern Territory)
-Australia/Eucla.daylight.long=Central Western Summer Time (Australia)
-Australia/Eucla.generic.long=Central Western Time (Australia)
-Australia/Eucla.standard.long=Central Western Standard Time (Australia)
-Australia/Hobart.daylight.long=Eastern Summer Time (Tasmania)
-Australia/Hobart.generic.long=Eastern Time (Tasmania)
-Australia/Hobart.standard.long=Eastern Standard Time (Tasmania)
-Australia/LHI.generic.long=Lord Howe Time
-Australia/Lindeman.daylight.long=Eastern Summer Time (Queensland)
-Australia/Lindeman.generic.long=Eastern Time (Queensland)
-Australia/Lindeman.standard.long=Eastern Standard Time (Queensland)
-Australia/Lord_Howe.generic.long=Lord Howe Time
-Australia/Melbourne.daylight.long=Eastern Summer Time (Victoria)
-Australia/Melbourne.generic.long=Eastern Time (Victoria)
-Australia/Melbourne.standard.long=Eastern Standard Time (Victoria)
-Australia/NSW.daylight.long=Eastern Summer Time (New South Wales)
-Australia/NSW.generic.long=Eastern Time (New South Wales)
-Australia/NSW.standard.long=Eastern Standard Time (New South Wales)
-Australia/North.daylight.long=Central Summer Time (Northern Territory)
-Australia/North.generic.long=Central Time (Northern Territory)
-Australia/North.standard.long=Central Standard Time (Northern Territory)
-Australia/Perth.daylight.long=Western Summer Time (Australia)
-Australia/Perth.generic.long=Western Time (Australia)
-Australia/Perth.standard.long=Western Standard Time (Australia)
-Australia/Queensland.daylight.long=Eastern Summer Time (Queensland)
-Australia/Queensland.generic.long=Eastern Time (Queensland)
-Australia/Queensland.standard.long=Eastern Standard Time (Queensland)
-Australia/South.daylight.long=Central Summer Time (South Australia)
-Australia/South.generic.long=Central Time (South Australia)
-Australia/South.standard.long=Central Standard Time (South Australia)
-Australia/Sydney.daylight.long=Eastern Summer Time (New South Wales)
-Australia/Sydney.generic.long=Eastern Time (New South Wales)
-Australia/Sydney.standard.long=Eastern Standard Time (New South Wales)
-Australia/Tasmania.daylight.long=Eastern Summer Time (Tasmania)
-Australia/Tasmania.generic.long=Eastern Time (Tasmania)
-Australia/Tasmania.standard.long=Eastern Standard Time (Tasmania)
-Australia/Victoria.daylight.long=Eastern Summer Time (Victoria)
-Australia/Victoria.generic.long=Eastern Time (Victoria)
-Australia/Victoria.standard.long=Eastern Standard Time (Victoria)
-Australia/West.daylight.long=Western Summer Time (Australia)
-Australia/West.generic.long=Western Time (Australia)
-Australia/West.standard.long=Western Standard Time (Australia)
-Australia/Yancowinna.daylight.long=Central Summer Time (South Australia/New South Wales)
-Australia/Yancowinna.generic.long=Central Time (South Australia/New South Wales)
-Australia/Yancowinna.standard.long=Central Standard Time (South Australia/New South Wales)
-BET.generic.long=Brasilia Time
-BST.generic.long=Bangladesh Time
-Brazil/Acre.generic.long=Acre Time
-Brazil/DeNoronha.generic.long=Fernando de Noronha Time
-Brazil/East.generic.long=Brasilia Time
-Brazil/West.generic.long=Amazon Time
-CAT.generic.long=Central Africa Time
-CET.generic.long=Central European Time
-CNT.generic.long=Newfoundland Time
-CST.generic.long=Central Time
-CST6CDT.generic.long=Central Time
-CTT.generic.long=China Time
-Canada/Atlantic.generic.long=Atlantic Time
-Canada/Central.generic.long=Central Time
-Canada/East-Saskatchewan.generic.long=Central Time
-Canada/Eastern.generic.long=Eastern Time
-Canada/Mountain.generic.long=Mountain Time
-Canada/Newfoundland.generic.long=Newfoundland Time
-Canada/Pacific.generic.long=Pacific Time
-Canada/Saskatchewan.generic.long=Central Time
-Canada/Yukon.generic.long=Pacific Time
-Chile/Continental.generic.long=Chile Time
-Chile/EasterIsland.generic.long=Easter Is. Time
-Cuba.generic.long=Cuba Time
-EAT.generic.long=Eastern Africa Time
-ECT.generic.long=Central European Time
-EET.generic.long=Eastern European Time
-EST.generic.long=Eastern Time
-EST5EDT.generic.long=Eastern Time
-Egypt.generic.long=Eastern European Time
-Eire.generic.long=Irish Time
-Etc/Greenwich.generic.long=Greenwich Mean Time
-Etc/UCT.generic.long=Coordinated Universal Time
-Etc/UTC.generic.long=Coordinated Universal Time
-Etc/Universal.generic.long=Coordinated Universal Time
-Etc/Zulu.generic.long=Coordinated Universal Time
-Europe/Amsterdam.generic.long=Central European Time
-Europe/Andorra.generic.long=Central European Time
-Europe/Athens.generic.long=Eastern European Time
-Europe/Belfast.generic.long=British Time
-Europe/Belgrade.generic.long=Central European Time
-Europe/Berlin.generic.long=Central European Time
-Europe/Bratislava.generic.long=Central European Time
-Europe/Brussels.generic.long=Central European Time
-Europe/Bucharest.generic.long=Eastern European Time
-Europe/Budapest.generic.long=Central European Time
-Europe/Busingen.generic.long=Central European Time
-Europe/Chisinau.generic.long=Eastern European Time
-Europe/Copenhagen.generic.long=Central European Time
-Europe/Dublin.generic.long=Irish Time
-Europe/Gibraltar.generic.long=Central European Time
-Europe/Guernsey.generic.long=British Time
-Europe/Helsinki.generic.long=Eastern European Time
-Europe/Isle_of_Man.generic.long=British Time
-Europe/Istanbul.generic.long=Eastern European Time
-Europe/Jersey.generic.long=British Time
-Europe/Kaliningrad.daylight.long=Further-eastern European Summer Time
-Europe/Kaliningrad.generic.long=Further-eastern European Time
-Europe/Kaliningrad.standard.long=Further-eastern European Time
-Europe/Kiev.generic.long=Eastern European Time
-Europe/Lisbon.generic.long=Western European Time
-Europe/Ljubljana.generic.long=Central European Time
-Europe/London.generic.long=British Time
-Europe/Luxembourg.generic.long=Central European Time
-Europe/Madrid.generic.long=Central European Time
-Europe/Malta.generic.long=Central European Time
-Europe/Mariehamn.generic.long=Eastern European Time
-Europe/Minsk.daylight.long=Further-eastern European Summer Time
-Europe/Minsk.generic.long=Further-eastern European Time
-Europe/Minsk.standard.long=Further-eastern European Time
-Europe/Monaco.generic.long=Central European Time
-Europe/Moscow.generic.long=Moscow Time
-Europe/Nicosia.generic.long=Eastern European Time
-Europe/Oslo.generic.long=Central European Time
-Europe/Paris.generic.long=Central European Time
-Europe/Podgorica.generic.long=Central European Time
-Europe/Prague.generic.long=Central European Time
-Europe/Riga.generic.long=Eastern European Time
-Europe/Rome.generic.long=Central European Time
-Europe/Samara.generic.long=Samara Time
-Europe/San_Marino.generic.long=Central European Time
-Europe/Sarajevo.generic.long=Central European Time
-Europe/Simferopol.generic.long=Eastern European Time
-Europe/Skopje.generic.long=Central European Time
-Europe/Sofia.generic.long=Eastern European Time
-Europe/Stockholm.generic.long=Central European Time
-Europe/Tallinn.generic.long=Eastern European Time
-Europe/Tirane.generic.long=Central European Time
-Europe/Tiraspol.generic.long=Eastern European Time
-Europe/Uzhgorod.generic.long=Eastern European Time
-Europe/Vaduz.generic.long=Central European Time
-Europe/Vatican.generic.long=Central European Time
-Europe/Vienna.generic.long=Central European Time
-Europe/Vilnius.generic.long=Eastern European Time
-Europe/Volgograd.generic.long=Volgograd Time
-Europe/Warsaw.generic.long=Central European Time
-Europe/Zagreb.generic.long=Central European Time
-Europe/Zaporozhye.generic.long=Eastern European Time
-Europe/Zurich.generic.long=Central European Time
-GB-Eire.generic.long=British Time
-GB.generic.long=British Time
-GMT.generic.long=Greenwich Mean Time
-Greenwich.generic.long=Greenwich Mean Time
-HST.generic.long=Hawaii Time
-Hongkong.generic.long=Hong Kong Time
-IET.generic.long=Eastern Time
-IST.generic.long=India Time
-Iceland.generic.long=Greenwich Mean Time
-Indian/Antananarivo.generic.long=Eastern Africa Time
-Indian/Chagos.generic.long=Indian Ocean Territory Time
-Indian/Christmas.generic.long=Christmas Island Time
-Indian/Cocos.generic.long=Cocos Islands Time
-Indian/Comoro.generic.long=Eastern Africa Time
-Indian/Kerguelen.generic.long=French Southern & Antarctic Lands Time
-Indian/Mahe.generic.long=Seychelles Time
-Indian/Maldives.generic.long=Maldives Time
-Indian/Mauritius.generic.long=Mauritius Time
-Indian/Mayotte.generic.long=Eastern Africa Time
-Indian/Reunion.generic.long=Reunion Time
-Iran.generic.long=Iran Time
-Israel.generic.long=Israel Time
-JST.generic.long=Japan Time
-Jamaica.generic.long=Eastern Time
-Japan.generic.long=Japan Time
-Kwajalein.generic.long=Marshall Islands Time
-Libya.generic.long=Eastern European Time
-MET.generic.long=Middle Europe Time
-MIT.generic.long=West Samoa Time
-MST.generic.long=Mountain Time
-MST7MDT.generic.long=Mountain Time
-Mexico/BajaNorte.generic.long=Pacific Time
-Mexico/BajaSur.generic.long=Mountain Time
-Mexico/General.generic.long=Central Time
-NET.generic.long=Armenia Time
-NST.generic.long=New Zealand Time
-NZ-CHAT.generic.long=Chatham Time
-NZ.generic.long=New Zealand Time
-Navajo.generic.long=Mountain Time
-PLT.generic.long=Pakistan Time
-PNT.generic.long=Mountain Time
-PRC.generic.long=China Time
-PRT.generic.long=Atlantic Time
-PST.generic.long=Pacific Time
-PST8PDT.generic.long=Pacific Time
-Pacific/Apia.generic.long=West Samoa Time
-Pacific/Auckland.generic.long=New Zealand Time
-Pacific/Chatham.generic.long=Chatham Time
-Pacific/Chuuk.daylight.long=Chuuk Summer Time
-Pacific/Chuuk.generic.long=Chuuk Time
-Pacific/Chuuk.standard.long=Chuuk Time
-Pacific/Easter.generic.long=Easter Is. Time
-Pacific/Efate.generic.long=Vanuatu Time
-Pacific/Enderbury.generic.long=Phoenix Is. Time
-Pacific/Fakaofo.generic.long=Tokelau Time
-Pacific/Fiji.generic.long=Fiji Time
-Pacific/Funafuti.generic.long=Tuvalu Time
-Pacific/Galapagos.generic.long=Galapagos Time
-Pacific/Gambier.generic.long=Gambier Time
-Pacific/Guadalcanal.generic.long=Solomon Is. Time
-Pacific/Guam.generic.long=Chamorro Time
-Pacific/Honolulu.generic.long=Hawaii Time
-Pacific/Johnston.generic.long=Hawaii Time
-Pacific/Kiritimati.generic.long=Line Is. Time
-Pacific/Kosrae.generic.long=Kosrae Time
-Pacific/Kwajalein.generic.long=Marshall Islands Time
-Pacific/Majuro.generic.long=Marshall Islands Time
-Pacific/Marquesas.generic.long=Marquesas Time
-Pacific/Midway.generic.long=Samoa Time
-Pacific/Nauru.generic.long=Nauru Time
-Pacific/Niue.generic.long=Niue Time
-Pacific/Norfolk.generic.long=Norfolk Time
-Pacific/Noumea.generic.long=New Caledonia Time
-Pacific/Pago_Pago.generic.long=Samoa Time
-Pacific/Palau.generic.long=Palau Time
-Pacific/Pitcairn.generic.long=Pitcairn Time
-Pacific/Pohnpei.daylight.long=Pohnpei Summer Time
-Pacific/Pohnpei.generic.long=Ponape Time
-Pacific/Pohnpei.standard.long=Pohnpei Time
-Pacific/Ponape.daylight.long=Pohnpei Summer Time
-Pacific/Ponape.generic.long=Ponape Time
-Pacific/Ponape.standard.long=Pohnpei Time
-Pacific/Port_Moresby.generic.long=Papua New Guinea Time
-Pacific/Rarotonga.generic.long=Cook Is. Time
-Pacific/Saipan.generic.long=Chamorro Time
-Pacific/Samoa.generic.long=Samoa Time
-Pacific/Tahiti.generic.long=Tahiti Time
-Pacific/Tarawa.generic.long=Gilbert Is. Time
-Pacific/Tongatapu.generic.long=Tonga Time
-Pacific/Truk.daylight.long=Chuuk Summer Time
-Pacific/Truk.generic.long=Chuuk Time
-Pacific/Truk.standard.long=Chuuk Time
-Pacific/Wake.generic.long=Wake Time
-Pacific/Wallis.generic.long=Wallis & Futuna Time
-Pacific/Yap.daylight.long=Chuuk Summer Time
-Pacific/Yap.generic.long=Chuuk Time
-Pacific/Yap.standard.long=Chuuk Time
-Poland.generic.long=Central European Time
-Portugal.generic.long=Western European Time
-ROK.generic.long=Korea Time
-SST.generic.long=Solomon Is. Time
-Singapore.generic.long=Singapore Time
-SystemV/AST4.generic.long=Atlantic Time
-SystemV/AST4ADT.generic.long=Atlantic Time
-SystemV/CST6.generic.long=Central Time
-SystemV/CST6CDT.generic.long=Central Time
-SystemV/EST5.generic.long=Eastern Time
-SystemV/EST5EDT.generic.long=Eastern Time
-SystemV/HST10.generic.long=Hawaii Time
-SystemV/MST7.generic.long=Mountain Time
-SystemV/MST7MDT.generic.long=Mountain Time
-SystemV/PST8.generic.long=Pacific Time
-SystemV/PST8PDT.generic.long=Pacific Time
-SystemV/YST9.generic.long=Alaska Time
-SystemV/YST9YDT.generic.long=Alaska Time
-Turkey.generic.long=Eastern European Time
-UCT.generic.long=Coordinated Universal Time
-US/Alaska.generic.long=Alaska Time
-US/Aleutian.generic.long=Hawaii-Aleutian Time
-US/Arizona.generic.long=Mountain Time
-US/Central.generic.long=Central Time
-US/East-Indiana.generic.long=Eastern Time
-US/Eastern.generic.long=Eastern Time
-US/Hawaii.generic.long=Hawaii Time
-US/Indiana-Starke.generic.long=Central Time
-US/Michigan.generic.long=Eastern Time
-US/Mountain.generic.long=Mountain Time
-US/Pacific-New.generic.long=Pacific Time
-US/Pacific.generic.long=Pacific Time
-US/Samoa.generic.long=Samoa Time
-UTC.generic.long=Coordinated Universal Time
-Universal.generic.long=Coordinated Universal Time
-VST.generic.long=Indochina Time
-W-SU.generic.long=Moscow Time
-WET.generic.long=Western European Time
-Zulu.generic.long=Coordinated Universal Time
diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNamesTest.java b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNamesTest.java
deleted file mode 100644
index e112e56..0000000
--- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNamesTest.java
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- * Copyright (c) 2013 Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/**
- * @test
- * @bug 8025051
- * @summary Test time zone names across all locales
- * @run main TimeZoneNamesTest
- */
-
-import sun.util.locale.provider.TimeZoneNameUtility;
-import java.util.TimeZone;
-import java.util.Locale;
-import java.util.Properties;
-import java.io.IOException;
-import java.io.FileInputStream;
-
-public class TimeZoneNamesTest {
- // name type to test. Possible: long, short.
- static String requestedTestType = "long";
- // test Standard/DST (false) or Generic (true) TZ names
- static boolean testGeneric = false;
-
- public static void testGenericTZName( Locale locale, String timezoneName,
- int nameType, String expectedName ) throws RuntimeException {
- if (testGeneric) {
- String genericName = TimeZoneNameUtility.retrieveGenericDisplayName(timezoneName, nameType, locale);
- //Check for equality
- if (!genericName.equals(expectedName))
- throw new RuntimeException( "Time zone ("+timezoneName+") name is incorrect for locale \""+locale.getDisplayName()
- +"\" nameType: Generic"+"("+nameType+") Should be: " +expectedName+" Observed: "+genericName);
- }
- }
-
- public static void testTZName( Locale locale, String timezoneName, boolean isDaylight,
- int nameType, String expectedName ) throws RuntimeException {
- if (!testGeneric) {
- //Construct time zone objects
- TimeZone zone = TimeZone.getTimeZone(timezoneName);
- //Get name from JDK
- String name = zone.getDisplayName(isDaylight, nameType, locale);
- //Check for equality
- if (!name.equals(expectedName))
- throw new RuntimeException( "Time zone ("+timezoneName+") name is incorrect for locale: \""+locale.getDisplayName()
- +"\" nameType:"+requestedTestType+" DST:"+isDaylight+" Should be: " +expectedName+" Observed: "+name);
- }
- }
-
- public static boolean testPropertyEntry( Locale locale, String entry, String value ) {
- boolean result = true;
- String[] params = entry.split("\\.");
- if (params.length != 3) {
- System.out.println("Incorrect property file entry="+entry+" "+params.length);
- result = false;
- } else {
- boolean isDaylight = true;
- int nameType = TimeZone.LONG;
-
- if (params[2].equals("short"))
- nameType = TimeZone.SHORT;
-
- if (params[1].equals("standard"))
- isDaylight = false;
-
- // Names with non-requested tz name type are ignored
- if (requestedTestType.equals(params[2])) {
- try {
- if (params[1].equals("generic"))
- testGenericTZName( locale, params[0], nameType, value );
- else
- testTZName( locale, params[0], isDaylight, nameType, value );
- } catch (RuntimeException e) {
- System.out.println( "Test FAILED: "+e );
- result = false;
- }
- }
- }
- return result;
- }
-
- public static boolean testPropertyFile( String propFile, String shortName, Locale locale ) throws RuntimeException {
- boolean result = true;
- Properties property = new Properties();
- try {
- property.load( new FileInputStream(propFile) );
- } catch (IOException e) {
- throw new RuntimeException("Property file "+propFile+" is not found", e);
- }
- for (String key: property.stringPropertyNames()) {
- result &= testPropertyEntry(locale, key, property.getProperty(key) );
- }
- return result;
- }
-
- // Locale to test, file with names data, test long/short names, test generic names (true/false)
- static Object[][] testTargets = {
- { Locale.ROOT,"TimeZoneNames.properties","long",false},
- { Locale.ROOT,"TimeZoneNames_short.properties","short",false},
- { Locale.ROOT,"TimeZoneNames.properties","long",true},
- { Locale.ROOT,"TimeZoneNames_short.properties","short",true},
-
- { new Locale("de"),"TimeZoneNames_de.properties","long",false},
- { new Locale("de"),"TimeZoneNames_de_short.properties","short",false},
- { new Locale("de"),"TimeZoneNames_de.properties","long",true},
- { new Locale("de"),"TimeZoneNames_de_short.properties","short",true},
-
- { new Locale("es"),"TimeZoneNames_es.properties","long",false},
- { new Locale("es"),"TimeZoneNames_es_short.properties","short",false},
- { new Locale("es"),"TimeZoneNames_es.properties","long",true},
- { new Locale("es"),"TimeZoneNames_es_short.properties","short",true},
-
- { new Locale("fr"),"TimeZoneNames_fr.properties","long",false},
- { new Locale("fr"),"TimeZoneNames_fr_short.properties","short",false},
- { new Locale("fr"),"TimeZoneNames_fr.properties","long",true},
- { new Locale("fr"),"TimeZoneNames_fr_short.properties","short",true},
-
- { new Locale("it"),"TimeZoneNames_it.properties","long",false},
- { new Locale("it"),"TimeZoneNames_it_short.properties","short",false},
- { new Locale("it"),"TimeZoneNames_it.properties","long",true},
- { new Locale("it"),"TimeZoneNames_it_short.properties","short",true},
-
- { new Locale("ja"),"TimeZoneNames_ja.properties","long",false},
- { new Locale("ja"),"TimeZoneNames_ja_short.properties","short",false},
- { new Locale("ja"),"TimeZoneNames_ja.properties","long",true},
- { new Locale("ja"),"TimeZoneNames_ja_short.properties","short",true},
-
- { new Locale("ko"),"TimeZoneNames_ko.properties","long",false},
- { new Locale("ko"),"TimeZoneNames_ko_short.properties","short",false},
- { new Locale("ko"),"TimeZoneNames_ko.properties","long",true},
- { new Locale("ko"),"TimeZoneNames_ko_short.properties","short",true},
-
- { new Locale("pt","BR"),"TimeZoneNames_pt_BR.properties","long",false},
- { new Locale("pt","BR"),"TimeZoneNames_pt_BR_short.properties","short",false},
- { new Locale("pt","BR"),"TimeZoneNames_pt_BR.properties","long",true},
- { new Locale("pt","BR"),"TimeZoneNames_pt_BR_short.properties","short",true},
-
- { new Locale("sv"),"TimeZoneNames_sv.properties","long",false},
- { new Locale("sv"),"TimeZoneNames_sv_short.properties","short",false},
- { new Locale("sv"),"TimeZoneNames_sv.properties","long",true},
- { new Locale("sv"),"TimeZoneNames_sv_short.properties","short",true},
-
- { new Locale("zh","CN"),"TimeZoneNames_zh_CN.properties","long",false},
- { new Locale("zh","CN"),"TimeZoneNames_zh_CN_short.properties","short",false},
- { new Locale("zh","CN"),"TimeZoneNames_zh_CN.properties","long",true},
- { new Locale("zh","CN"),"TimeZoneNames_zh_CN_short.properties","short",true},
-
- { new Locale("zh","TW"),"TimeZoneNames_zh_TW.properties","long",false},
- { new Locale("zh","TW"),"TimeZoneNames_zh_TW_short.properties","short",false},
- { new Locale("zh","TW"),"TimeZoneNames_zh_TW.properties","long",true},
- { new Locale("zh","TW"),"TimeZoneNames_zh_TW_short.properties","short",true}
- };
-
- public static void main(String[] args) {
- boolean result = true;
-
- for (Object [] test: testTargets) {
- Locale testLocale = (Locale) test[0];
- String testFile = (String) test[1];
- requestedTestType = (String) test[2];
- testGeneric = (Boolean) test[3];
- result &= testPropertyFile( System.getProperty("test.src",".")+"/"+testFile, testFile, testLocale);
- }
- if (!result)
- throw new RuntimeException("Some time zones has unexpected names. Please, check test output.");
- }
-}
diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_de.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_de.properties
deleted file mode 100644
index 432b127..0000000
--- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_de.properties
+++ /dev/null
@@ -1,651 +0,0 @@
-ACT.daylight.long=Zentrale Sommerzeit (Northern Territory)
-ACT.generic.long=Zentrale Zeitzone (Northern Territory)
-ACT.standard.long=Zentrale Normalzeit (Northern Territory)
-AET.daylight.long=\u00D6stliche Sommerzeit (New South Wales)
-AET.generic.long=\u00D6stliche Zeitzone (New South Wales)
-AET.standard.long=\u00D6stliche Normalzeit (New South Wales)
-AGT.generic.long=Argentinische Zeit
-ART.generic.long=Osteurop\u00E4ische Zeit
-AST.generic.long=Zeitzone f\u00FCr Alaska
-Africa/Abidjan.generic.long=Greenwich Zeit
-Africa/Accra.generic.long=Ghanaische Normalzeit
-Africa/Addis_Ababa.generic.long=Ostafrikanische Zeit
-Africa/Algiers.generic.long=Mitteleurop\u00E4ische Zeit
-Africa/Asmara.generic.long=Ostafrikanische Zeit
-Africa/Asmera.generic.long=Ostafrikanische Zeit
-Africa/Bamako.generic.long=Greenwich Zeit
-Africa/Bangui.generic.long=Westafrikanische Zeit
-Africa/Banjul.generic.long=Greenwich Zeit
-Africa/Bissau.generic.long=Greenwich Zeit
-Africa/Blantyre.generic.long=Zentralafrikanische Zeit
-Africa/Brazzaville.generic.long=Westafrikanische Zeit
-Africa/Bujumbura.generic.long=Zentralafrikanische Zeit
-Africa/Cairo.generic.long=Osteurop\u00E4ische Zeit
-Africa/Casablanca.generic.long=Westeurop\u00E4ische Zeit
-Africa/Ceuta.generic.long=Mitteleurop\u00E4ische Zeit
-Africa/Conakry.generic.long=Greenwich Zeit
-Africa/Dakar.generic.long=Greenwich Zeit
-Africa/Dar_es_Salaam.generic.long=Ostafrikanische Zeit
-Africa/Djibouti.generic.long=Ostafrikanische Zeit
-Africa/Douala.generic.long=Westafrikanische Zeit
-Africa/El_Aaiun.generic.long=Westeurop\u00E4ische Zeit
-Africa/Freetown.generic.long=Sierra Leone Zeit
-Africa/Gaborone.generic.long=Zentralafrikanische Zeit
-Africa/Harare.generic.long=Zentralafrikanische Zeit
-Africa/Johannesburg.generic.long=Zeitzone f\u00FCr S\u00FCdafrika
-Africa/Juba.generic.long=Ostafrikanische Zeit
-Africa/Kampala.generic.long=Ostafrikanische Zeit
-Africa/Khartoum.generic.long=Ostafrikanische Zeit
-Africa/Kigali.generic.long=Zentralafrikanische Zeit
-Africa/Kinshasa.generic.long=Westafrikanische Zeit
-Africa/Lagos.generic.long=Westafrikanische Zeit
-Africa/Libreville.generic.long=Westafrikanische Zeit
-Africa/Lome.generic.long=Greenwich Zeit
-Africa/Luanda.generic.long=Westafrikanische Zeit
-Africa/Lubumbashi.generic.long=Zentralafrikanische Zeit
-Africa/Lusaka.generic.long=Zentralafrikanische Zeit
-Africa/Malabo.generic.long=Westafrikanische Zeit
-Africa/Maputo.generic.long=Zentralafrikanische Zeit
-Africa/Maseru.generic.long=Zeitzone f\u00FCr S\u00FCdafrika
-Africa/Mbabane.generic.long=Zeitzone f\u00FCr S\u00FCdafrika
-Africa/Mogadishu.generic.long=Ostafrikanische Zeit
-Africa/Monrovia.generic.long=Greenwich Zeit
-Africa/Nairobi.generic.long=Ostafrikanische Zeit
-Africa/Ndjamena.generic.long=Westafrikanische Zeit
-Africa/Niamey.generic.long=Westafrikanische Zeit
-Africa/Nouakchott.generic.long=Greenwich Zeit
-Africa/Ouagadougou.generic.long=Greenwich Zeit
-Africa/Porto-Novo.generic.long=Westafrikanische Zeit
-Africa/Sao_Tome.generic.long=Greenwich Zeit
-Africa/Timbuktu.generic.long=Greenwich Zeit
-Africa/Tripoli.generic.long=Osteurop\u00e4ische Zeit
-Africa/Tunis.generic.long=Mitteleurop\u00E4ische Zeit
-Africa/Windhoek.generic.long=Westafrikanische Zeit
-America/Adak.generic.long=Zeitzone f\u00FCr Hawaii und Al\u00EButen
-America/Anchorage.generic.long=Zeitzone f\u00FCr Alaska
-America/Anguilla.generic.long=Zeitzone Atlantik
-America/Antigua.generic.long=Zeitzone Atlantik
-America/Araguaina.generic.long=Brasilianische Zeit
-America/Argentina/Buenos_Aires.generic.long=Argentinische Zeit
-America/Argentina/Catamarca.generic.long=Argentinische Zeit
-America/Argentina/ComodRivadavia.generic.long=Argentinische Zeit
-America/Argentina/Cordoba.generic.long=Argentinische Zeit
-America/Argentina/Jujuy.generic.long=Argentinische Zeit
-America/Argentina/La_Rioja.generic.long=Argentinische Zeit
-America/Argentina/Mendoza.generic.long=Argentinische Zeit
-America/Argentina/Rio_Gallegos.generic.long=Argentinische Zeit
-America/Argentina/Salta.generic.long=Argentinische Zeit
-America/Argentina/San_Juan.generic.long=Argentinische Zeit
-America/Argentina/San_Luis.generic.long=Argentinische Zeit
-America/Argentina/Tucuman.generic.long=Argentinische Zeit
-America/Argentina/Ushuaia.generic.long=Argentinische Zeit
-America/Aruba.generic.long=Zeitzone Atlantik
-America/Asuncion.generic.long=Paraguay Zeit
-America/Atikokan.generic.long=\u00D6stliche Zeitzone
-America/Atka.generic.long=Zeitzone f\u00FCr Hawaii und Al\u00EButen
-America/Bahia.generic.long=Brasilianische Zeit
-America/Bahia_Banderas.generic.long=Zentrale Zeitzone
-America/Barbados.generic.long=Zeitzone Atlantik
-America/Belem.generic.long=Brasilianische Zeit
-America/Belize.generic.long=Zentrale Zeitzone
-America/Blanc-Sablon.generic.long=Zeitzone Atlantik
-America/Boa_Vista.generic.long=Amazonas Normalzeit
-America/Bogota.generic.long=Kolumbianische Zeit
-America/Boise.generic.long=Zeitzone Mountain
-America/Buenos_Aires.generic.long=Argentinische Zeit
-America/Cambridge_Bay.generic.long=Zeitzone Mountain
-America/Campo_Grande.generic.long=Amazonas Normalzeit
-America/Cancun.generic.long=Zentrale Zeitzone
-America/Caracas.generic.long=Venezuelanische Zeit
-America/Catamarca.generic.long=Argentinische Zeit
-America/Cayenne.generic.long=Franz\u00F6sisch-Guiana Zeit
-America/Cayman.generic.long=\u00D6stliche Zeitzone
-America/Chicago.generic.long=Zentrale Zeitzone
-America/Chihuahua.generic.long=Zeitzone Mountain
-America/Coral_Harbour.generic.long=\u00D6stliche Zeitzone
-America/Cordoba.generic.long=Argentinische Zeit
-America/Costa_Rica.generic.long=Zentrale Zeitzone
-America/Creston.generic.long=Zeitzone Mountain
-America/Cuiaba.generic.long=Amazonas Normalzeit
-America/Curacao.generic.long=Zeitzone Atlantik
-America/Danmarkshavn.generic.long=Greenwich Zeit
-America/Dawson.generic.long=Zeitzone Pazifik
-America/Dawson_Creek.generic.long=Zeitzone Mountain
-America/Denver.generic.long=Zeitzone Mountain
-America/Detroit.generic.long=\u00D6stliche Zeitzone
-America/Dominica.generic.long=Zeitzone Atlantik
-America/Edmonton.generic.long=Zeitzone Mountain
-America/Eirunepe.generic.long=Acre Normalzeit
-America/El_Salvador.generic.long=Zentrale Zeitzone
-America/Ensenada.generic.long=Zeitzone Pazifik
-America/Fort_Wayne.generic.long=\u00D6stliche Zeitzone
-America/Fortaleza.generic.long=Brasilianische Zeit
-America/Glace_Bay.generic.long=Zeitzone Atlantik
-America/Godthab.generic.long=Westgr\u00F6nl\u00E4ndische Zeit
-America/Goose_Bay.generic.long=Zeitzone Atlantik
-America/Grand_Turk.generic.long=\u00D6stliche Zeitzone
-America/Grenada.generic.long=Zeitzone Atlantik
-America/Guadeloupe.generic.long=Zeitzone Atlantik
-America/Guatemala.generic.long=Zentrale Zeitzone
-America/Guayaquil.generic.long=Ecuadorianische Zeit
-America/Guyana.generic.long=Guyanische Zeit
-America/Halifax.generic.long=Zeitzone Atlantik
-America/Havana.generic.long=Kubanische Normalzeit
-America/Hermosillo.generic.long=Zeitzone Mountain
-America/Indiana/Indianapolis.generic.long=\u00D6stliche Zeitzone
-America/Indiana/Knox.generic.long=Zentrale Zeitzone
-America/Indiana/Marengo.generic.long=\u00D6stliche Zeitzone
-America/Indiana/Petersburg.generic.long=\u00D6stliche Zeitzone
-America/Indiana/Tell_City.generic.long=Zentrale Zeitzone
-America/Indiana/Vevay.generic.long=\u00D6stliche Zeitzone
-America/Indiana/Vincennes.generic.long=\u00D6stliche Zeitzone
-America/Indiana/Winamac.generic.long=\u00D6stliche Zeitzone
-America/Indianapolis.generic.long=\u00D6stliche Zeitzone
-America/Inuvik.generic.long=Zeitzone Mountain
-America/Iqaluit.generic.long=\u00D6stliche Zeitzone
-America/Jamaica.generic.long=\u00D6stliche Zeitzone
-America/Jujuy.generic.long=Argentinische Zeit
-America/Juneau.generic.long=Zeitzone f\u00FCr Alaska
-America/Kentucky/Louisville.generic.long=\u00D6stliche Zeitzone
-America/Kentucky/Monticello.generic.long=\u00D6stliche Zeitzone
-America/Knox_IN.generic.long=Zentrale Zeitzone
-America/Kralendijk.generic.long=Zeitzone Atlantik
-America/La_Paz.generic.long=Bolivianische Zeit
-America/Lima.generic.long=Peruanische Zeit
-America/Los_Angeles.generic.long=Zeitzone Pazifik
-America/Louisville.generic.long=\u00D6stliche Zeitzone
-America/Lower_Princes.generic.long=Zeitzone Atlantik
-America/Maceio.generic.long=Brasilianische Zeit
-America/Managua.generic.long=Zentrale Zeitzone
-America/Manaus.generic.long=Amazonas Normalzeit
-America/Marigot.generic.long=Zeitzone Atlantik
-America/Martinique.generic.long=Zeitzone Atlantik
-America/Matamoros.generic.long=Zentrale Zeitzone
-America/Mazatlan.generic.long=Zeitzone Mountain
-America/Mendoza.generic.long=Argentinische Zeit
-America/Menominee.generic.long=Zentrale Zeitzone
-America/Merida.generic.long=Zentrale Zeitzone
-America/Metlakatla.daylight.long=Metlakatla Sommerzeit
-America/Metlakatla.generic.long=Metlakatla Normalzeit
-America/Metlakatla.standard.long=Metlakatla Normalzeit
-America/Mexico_City.generic.long=Zentrale Zeitzone
-America/Miquelon.generic.long=Zeitzone f\u00FCr St. Pierre und Miquelon
-America/Moncton.generic.long=Zeitzone Atlantik
-America/Monterrey.generic.long=Zentrale Zeitzone
-America/Montevideo.generic.long=Uruguayanische Zeit
-America/Montreal.generic.long=\u00D6stliche Zeitzone
-America/Montserrat.generic.long=Zeitzone Atlantik
-America/Nassau.generic.long=\u00D6stliche Zeitzone
-America/New_York.generic.long=\u00D6stliche Zeitzone
-America/Nipigon.generic.long=\u00D6stliche Zeitzone
-America/Nome.generic.long=Zeitzone f\u00FCr Alaska
-America/Noronha.generic.long=Fernando de Noronha Zeit
-America/North_Dakota/Beulah.generic.long=Zentrale Zeitzone
-America/North_Dakota/Center.generic.long=Zentrale Zeitzone
-America/North_Dakota/New_Salem.generic.long=Zentrale Zeitzone
-America/Ojinaga.generic.long=Zeitzone Mountain
-America/Panama.generic.long=\u00D6stliche Zeitzone
-America/Pangnirtung.generic.long=\u00D6stliche Zeitzone
-America/Paramaribo.generic.long=Suriname Zeit
-America/Phoenix.generic.long=Zeitzone Mountain
-America/Port-au-Prince.generic.long=\u00D6stliche Zeitzone
-America/Port_of_Spain.generic.long=Zeitzone Atlantik
-America/Porto_Acre.generic.long=Acre Normalzeit
-America/Porto_Velho.generic.long=Amazonas Normalzeit
-America/Puerto_Rico.generic.long=Zeitzone Atlantik
-America/Rainy_River.generic.long=Zentrale Zeitzone
-America/Rankin_Inlet.generic.long=Zentrale Zeitzone
-America/Recife.generic.long=Brasilianische Zeit
-America/Regina.generic.long=Zentrale Zeitzone
-America/Resolute.generic.long=Zentrale Zeitzone
-America/Rio_Branco.generic.long=Acre Normalzeit
-America/Rosario.generic.long=Argentinische Zeit
-America/Santa_Isabel.generic.long=Zeitzone Pazifik
-America/Santarem.generic.long=Brasilianische Zeit
-America/Santiago.generic.long=Chilenische Zeit
-America/Santo_Domingo.generic.long=Zeitzone Atlantik
-America/Sao_Paulo.generic.long=Brasilianische Zeit
-America/Scoresbysund.generic.long=Ostgr\u00F6nl\u00E4ndische Zeit
-America/Shiprock.generic.long=Zeitzone Mountain
-America/Sitka.generic.long=Zeitzone f\u00FCr Alaska
-America/St_Barthelemy.generic.long=Zeitzone Atlantik
-America/St_Johns.generic.long=Zeitzone f\u00FCr Neufundland
-America/St_Kitts.generic.long=Zeitzone Atlantik
-America/St_Lucia.generic.long=Zeitzone Atlantik
-America/St_Thomas.generic.long=Zeitzone Atlantik
-America/St_Vincent.generic.long=Zeitzone Atlantik
-America/Swift_Current.generic.long=Zentrale Zeitzone
-America/Tegucigalpa.generic.long=Zentrale Zeitzone
-America/Thule.generic.long=Zeitzone Atlantik
-America/Thunder_Bay.generic.long=\u00D6stliche Zeitzone
-America/Tijuana.generic.long=Zeitzone Pazifik
-America/Toronto.generic.long=\u00D6stliche Zeitzone
-America/Tortola.generic.long=Zeitzone Atlantik
-America/Vancouver.generic.long=Zeitzone Pazifik
-America/Virgin.generic.long=Zeitzone Atlantik
-America/Whitehorse.generic.long=Zeitzone Pazifik
-America/Winnipeg.generic.long=Zentrale Zeitzone
-America/Yakutat.generic.long=Zeitzone f\u00FCr Alaska
-America/Yellowknife.generic.long=Zeitzone Mountain
-Antarctica/Casey.daylight.long=Westliche Sommerzeit (Australien)
-Antarctica/Casey.generic.long=Westliche Zeitzone (Australien)
-Antarctica/Casey.standard.long=Westliche Normalzeit (Australien)
-Antarctica/Davis.generic.long=Davis Zeit
-Antarctica/DumontDUrville.generic.long=Dumont-d'Urville Zeit
-Antarctica/Macquarie.daylight.long=Macquarieinsel Sommerzeit
-Antarctica/Macquarie.generic.long=Macquarieinsel Zeit
-Antarctica/Macquarie.standard.long=Macquarieinsel Zeit
-Antarctica/Mawson.generic.long=Mawson Zeit
-Antarctica/McMurdo.generic.long=Zeitzone f\u00FCr Neuseeland
-Antarctica/Palmer.generic.long=Chilenische Zeit
-Antarctica/Rothera.generic.long=Rothera Zeit
-Antarctica/South_Pole.generic.long=Zeitzone f\u00FCr Neuseeland
-Antarctica/Syowa.generic.long=Syowa Zeit
-Antarctica/Vostok.generic.long=Vostok Zeit
-Arctic/Longyearbyen.generic.long=Mitteleurop\u00E4ische Zeit
-Asia/Aden.generic.long=Zeitzone f\u00FCr Arabische Halbinsel
-Asia/Almaty.generic.long=Alma Ata Zeit
-Asia/Amman.generic.long=Zeitzone f\u00fcr Arabische Halbinsel
-Asia/Anadyr.generic.long=Anadyr Zeit
-Asia/Aqtau.generic.long=Aqtau Zeit
-Asia/Aqtobe.generic.long=Aqtobe Zeit
-Asia/Ashgabat.generic.long=Turkmenische Zeit
-Asia/Ashkhabad.generic.long=Turkmenische Zeit
-Asia/Baghdad.generic.long=Zeitzone f\u00FCr Arabische Halbinsel
-Asia/Bahrain.generic.long=Zeitzone f\u00FCr Arabische Halbinsel
-Asia/Baku.generic.long=Aserbaidschanische Zeit
-Asia/Bangkok.generic.long=Indochina Zeit
-Asia/Beirut.generic.long=Osteurop\u00E4ische Zeit
-Asia/Bishkek.generic.long=Kirgisische Zeit
-Asia/Brunei.generic.long=Brunei Zeit
-Asia/Calcutta.generic.long=Zeitzone f\u00FCr Indien
-Asia/Choibalsan.generic.long=Choibalsan Zeit
-Asia/Chongqing.generic.long=Zeitzone f\u00FCr China
-Asia/Chungking.generic.long=Zeitzone f\u00FCr China
-Asia/Colombo.generic.long=Zeitzone f\u00FCr Indien
-Asia/Dacca.generic.long=Bangladesch Zeit
-Asia/Damascus.generic.long=Osteurop\u00E4ische Zeit
-Asia/Dhaka.generic.long=Bangladesch Zeit
-Asia/Dili.generic.long=Timor-Leste Normalzeit
-Asia/Dubai.generic.long=Zeitzone f\u00FCr Persischen Golf
-Asia/Dushanbe.generic.long=Tadschikische Zeit
-Asia/Gaza.generic.long=Osteurop\u00E4ische Zeit
-Asia/Harbin.generic.long=Zeitzone f\u00FCr China
-Asia/Hebron.generic.long=Osteurop\u00E4ische Zeit
-Asia/Ho_Chi_Minh.generic.long=Indochina Zeit
-Asia/Hong_Kong.generic.long=Hongkong Zeit
-Asia/Hovd.generic.long=Hovd Zeit
-Asia/Irkutsk.generic.long=Irkutsk Zeit
-Asia/Istanbul.generic.long=Osteurop\u00E4ische Zeit
-Asia/Jakarta.generic.long=Westindonesische Zeit
-Asia/Jayapura.generic.long=Ostindonesische Zeit
-Asia/Jerusalem.generic.long=Zeitzone f\u00FCr Israel
-Asia/Kabul.generic.long=Afghanistanische Zeit
-Asia/Kamchatka.generic.long=Petropawlowsk-Kamtschatkische Zeit
-Asia/Karachi.generic.long=Pakistanische Zeit
-Asia/Kashgar.generic.long=Zeitzone f\u00FCr China
-Asia/Kathmandu.generic.long=Nepalesische Zeit
-Asia/Katmandu.generic.long=Nepalesische Zeit
-Asia/Khandyga.daylight.long=Chandyga Sommerzeit
-Asia/Khandyga.generic.long=Chandyga Zeit
-Asia/Khandyga.standard.long=Chandyga Zeit
-Asia/Kolkata.generic.long=Zeitzone f\u00FCr Indien
-Asia/Krasnoyarsk.generic.long=Krasnojarsker Zeit
-Asia/Kuala_Lumpur.generic.long=Malaysische Zeit
-Asia/Kuching.generic.long=Malaysische Zeit
-Asia/Kuwait.generic.long=Zeitzone f\u00FCr Arabische Halbinsel
-Asia/Macao.generic.long=Zeitzone f\u00FCr China
-Asia/Macau.generic.long=Zeitzone f\u00FCr China
-Asia/Magadan.generic.long=Magadanische Zeit
-Asia/Makassar.generic.long=Zentralindonesische Zeit
-Asia/Manila.generic.long=Philippinische Zeit
-Asia/Muscat.generic.long=Zeitzone f\u00FCr Persischen Golf
-Asia/Nicosia.generic.long=Osteurop\u00E4ische Zeit
-Asia/Novokuznetsk.generic.long=Nowosibirsker Zeit
-Asia/Novosibirsk.generic.long=Nowosibirsker Zeit
-Asia/Omsk.generic.long=Omsk Zeit
-Asia/Oral.generic.long=Oral Zeit
-Asia/Phnom_Penh.generic.long=Indochina Zeit
-Asia/Pontianak.generic.long=Westindonesische Zeit
-Asia/Pyongyang.generic.long=Zeitzone f\u00FCr Korea
-Asia/Qatar.generic.long=Zeitzone f\u00FCr Arabische Halbinsel
-Asia/Qyzylorda.generic.long=Qyzylorda Zeit
-Asia/Rangoon.generic.long=Myanmar Zeit
-Asia/Saigon.generic.long=Indochina Zeit
-Asia/Sakhalin.generic.long=Sakhalin Zeit
-Asia/Samarkand.generic.long=Usbekistan Zeit
-Asia/Seoul.generic.long=Zeitzone f\u00FCr Korea
-Asia/Shanghai.generic.long=Zeitzone f\u00FCr China
-Asia/Singapore.generic.long=Singapur Zeit
-Asia/Taipei.generic.long=Zeitzone f\u00FCr China
-Asia/Tashkent.generic.long=Usbekistan Zeit
-Asia/Tbilisi.generic.long=Georgische Zeit
-Asia/Tehran.generic.long=Iranische Zeit
-Asia/Tel_Aviv.generic.long=Zeitzone f\u00FCr Israel
-Asia/Thimbu.generic.long=Bhutanische Zeit
-Asia/Thimphu.generic.long=Bhutanische Zeit
-Asia/Tokyo.generic.long=Zeitzone f\u00FCr Japan
-Asia/Ujung_Pandang.generic.long=Zentralindonesische Zeit
-Asia/Ulaanbaatar.generic.long=Ulaanbaatar Zeit
-Asia/Ulan_Bator.generic.long=Ulaanbaatar Zeit
-Asia/Urumqi.generic.long=Zeitzone f\u00FCr China
-Asia/Ust-Nera.daylight.long=Ust-Nera Sommerzeit
-Asia/Ust-Nera.generic.long=Ust-Nera Zeit
-Asia/Ust-Nera.standard.long=Ust-Nera Zeit
-Asia/Vientiane.generic.long=Indochina Zeit
-Asia/Vladivostok.generic.long=Wladiwostok Zeit
-Asia/Yakutsk.generic.long=Jakutsk Zeit
-Asia/Yekaterinburg.generic.long=Jekaterinburger Zeit
-Asia/Yerevan.generic.long=Armenische Zeit
-Atlantic/Azores.generic.long=Azoren Zeit
-Atlantic/Bermuda.generic.long=Zeitzone Atlantik
-Atlantic/Canary.generic.long=Westeurop\u00E4ische Zeit
-Atlantic/Cape_Verde.generic.long=Kap Verde Zeit
-Atlantic/Faeroe.generic.long=Westeurop\u00E4ische Zeit
-Atlantic/Faroe.generic.long=Westeurop\u00E4ische Zeit
-Atlantic/Jan_Mayen.generic.long=Mitteleurop\u00E4ische Zeit
-Atlantic/Madeira.generic.long=Westeurop\u00E4ische Zeit
-Atlantic/Reykjavik.generic.long=Greenwich Zeit
-Atlantic/South_Georgia.generic.long=Zeitzone f\u00FCr S\u00FCdgeorgien
-Atlantic/St_Helena.generic.long=Greenwich Zeit
-Atlantic/Stanley.generic.long=Falkland Inseln Zeit
-Australia/ACT.daylight.long=\u00D6stliche Sommerzeit (New South Wales)
-Australia/ACT.generic.long=\u00D6stliche Zeitzone (New South Wales)
-Australia/ACT.standard.long=\u00D6stliche Normalzeit (New South Wales)
-Australia/Adelaide.daylight.long=Zentrale Sommerzeit (S\u00FCdaustralien)
-Australia/Adelaide.generic.long=Zentrale Zeitzone (S\u00FCdaustralien)
-Australia/Adelaide.standard.long=Zentrale Normalzeit (S\u00FCdaustralien)
-Australia/Brisbane.daylight.long=\u00D6stliche Sommerzeit (Queensland)
-Australia/Brisbane.generic.long=\u00D6stliche Zeitzone (Queensland)
-Australia/Brisbane.standard.long=\u00D6stliche Normalzeit (Queensland)
-Australia/Broken_Hill.daylight.long=Zentrale Sommerzeit (S\u00FCdaustralien/New South Wales)
-Australia/Broken_Hill.generic.long=Zentrale Zeitzone (S\u00FCdaustralien/New South Wales)
-Australia/Broken_Hill.standard.long=Zentrale Normalzeit (S\u00FCdaustralien/New South Wales)
-Australia/Canberra.daylight.long=\u00D6stliche Sommerzeit (New South Wales)
-Australia/Canberra.generic.long=\u00D6stliche Zeitzone (New South Wales)
-Australia/Canberra.standard.long=\u00D6stliche Normalzeit (New South Wales)
-Australia/Currie.daylight.long=\u00D6stliche Sommerzeit (New South Wales)
-Australia/Currie.generic.long=\u00D6stliche Zeitzone (New South Wales)
-Australia/Currie.standard.long=\u00D6stliche Normalzeit (New South Wales)
-Australia/Darwin.daylight.long=Zentrale Sommerzeit (Northern Territory)
-Australia/Darwin.generic.long=Zentrale Zeitzone (Northern Territory)
-Australia/Darwin.standard.long=Zentrale Normalzeit (Northern Territory)
-Australia/Eucla.daylight.long=Zentral-Westliche Sommerzeit (Australien)
-Australia/Eucla.generic.long=Zentral-Westliche Normalzeit (Australien)
-Australia/Eucla.standard.long=Zentral-Westliche Normalzeit (Australien)
-Australia/Hobart.daylight.long=\u00D6stliche Sommerzeit (Tasmanien)
-Australia/Hobart.generic.long=\u00D6stliche Zeitzone (Tasmanien)
-Australia/Hobart.standard.long=\u00D6stliche Normalzeit (Tasmanien)
-Australia/LHI.generic.long=Lord-Howe Normalzeit
-Australia/Lindeman.daylight.long=\u00D6stliche Sommerzeit (Queensland)
-Australia/Lindeman.generic.long=\u00D6stliche Zeitzone (Queensland)
-Australia/Lindeman.standard.long=\u00D6stliche Normalzeit (Queensland)
-Australia/Lord_Howe.generic.long=Lord-Howe Normalzeit
-Australia/Melbourne.daylight.long=\u00D6stliche Sommerzeit (Victoria)
-Australia/Melbourne.generic.long=\u00D6stliche Zeitzone (Victoria)
-Australia/Melbourne.standard.long=\u00D6stliche Normalzeit (Victoria)
-Australia/NSW.daylight.long=\u00D6stliche Sommerzeit (New South Wales)
-Australia/NSW.generic.long=\u00D6stliche Zeitzone (New South Wales)
-Australia/NSW.standard.long=\u00D6stliche Normalzeit (New South Wales)
-Australia/North.daylight.long=Zentrale Sommerzeit (Northern Territory)
-Australia/North.generic.long=Zentrale Zeitzone (Northern Territory)
-Australia/North.standard.long=Zentrale Normalzeit (Northern Territory)
-Australia/Perth.daylight.long=Westliche Sommerzeit (Australien)
-Australia/Perth.generic.long=Westliche Zeitzone (Australien)
-Australia/Perth.standard.long=Westliche Normalzeit (Australien)
-Australia/Queensland.daylight.long=\u00D6stliche Sommerzeit (Queensland)
-Australia/Queensland.generic.long=\u00D6stliche Zeitzone (Queensland)
-Australia/Queensland.standard.long=\u00D6stliche Normalzeit (Queensland)
-Australia/South.daylight.long=Zentrale Sommerzeit (S\u00FCdaustralien)
-Australia/South.generic.long=Zentrale Zeitzone (S\u00FCdaustralien)
-Australia/South.standard.long=Zentrale Normalzeit (S\u00FCdaustralien)
-Australia/Sydney.daylight.long=\u00D6stliche Sommerzeit (New South Wales)
-Australia/Sydney.generic.long=\u00D6stliche Zeitzone (New South Wales)
-Australia/Sydney.standard.long=\u00D6stliche Normalzeit (New South Wales)
-Australia/Tasmania.daylight.long=\u00D6stliche Sommerzeit (Tasmanien)
-Australia/Tasmania.generic.long=\u00D6stliche Zeitzone (Tasmanien)
-Australia/Tasmania.standard.long=\u00D6stliche Normalzeit (Tasmanien)
-Australia/Victoria.daylight.long=\u00D6stliche Sommerzeit (Victoria)
-Australia/Victoria.generic.long=\u00D6stliche Zeitzone (Victoria)
-Australia/Victoria.standard.long=\u00D6stliche Normalzeit (Victoria)
-Australia/West.daylight.long=Westliche Sommerzeit (Australien)
-Australia/West.generic.long=Westliche Zeitzone (Australien)
-Australia/West.standard.long=Westliche Normalzeit (Australien)
-Australia/Yancowinna.daylight.long=Zentrale Sommerzeit (S\u00FCdaustralien/New South Wales)
-Australia/Yancowinna.generic.long=Zentrale Zeitzone (S\u00FCdaustralien/New South Wales)
-Australia/Yancowinna.standard.long=Zentrale Normalzeit (S\u00FCdaustralien/New South Wales)
-BET.generic.long=Brasilianische Zeit
-BST.generic.long=Bangladesch Zeit
-Brazil/Acre.generic.long=Acre Normalzeit
-Brazil/DeNoronha.generic.long=Fernando de Noronha Zeit
-Brazil/East.generic.long=Brasilianische Zeit
-Brazil/West.generic.long=Amazonas Normalzeit
-CAT.generic.long=Zentralafrikanische Zeit
-CET.generic.long=Mitteleurop\u00e4ische Zeit
-CNT.generic.long=Zeitzone f\u00FCr Neufundland
-CST.generic.long=Zentrale Zeitzone
-CST6CDT.generic.long=Zentrale Zeitzone
-CTT.generic.long=Zeitzone f\u00FCr China
-Canada/Atlantic.generic.long=Zeitzone Atlantik
-Canada/Central.generic.long=Zentrale Zeitzone
-Canada/East-Saskatchewan.generic.long=Zentrale Zeitzone
-Canada/Eastern.generic.long=\u00D6stliche Zeitzone
-Canada/Mountain.generic.long=Zeitzone Mountain
-Canada/Newfoundland.generic.long=Zeitzone f\u00FCr Neufundland
-Canada/Pacific.generic.long=Zeitzone Pazifik
-Canada/Saskatchewan.generic.long=Zentrale Zeitzone
-Canada/Yukon.generic.long=Zeitzone Pazifik
-Chile/Continental.generic.long=Chilenische Zeit
-Chile/EasterIsland.generic.long=Osterinseln Zeit
-Cuba.generic.long=Kubanische Normalzeit
-EAT.generic.long=Ostafrikanische Zeit
-ECT.generic.long=Mitteleurop\u00E4ische Zeit
-EET.generic.long=Osteurop\u00e4ische Zeit
-EST.generic.long=\u00d6stliche Zeitzone
-EST5EDT.generic.long=\u00d6stliche Zeitzone
-Egypt.generic.long=Osteurop\u00E4ische Zeit
-Eire.generic.long=Irische Zeit
-Etc/Greenwich.generic.long=Greenwich Zeit
-Etc/UCT.generic.long=Koordinierte Universalzeit
-Etc/UTC.generic.long=Koordinierte Universalzeit
-Etc/Universal.generic.long=Koordinierte Universalzeit
-Etc/Zulu.generic.long=Koordinierte Universalzeit
-Europe/Amsterdam.generic.long=Mitteleurop\u00E4ische Zeit
-Europe/Andorra.generic.long=Mitteleurop\u00E4ische Zeit
-Europe/Athens.generic.long=Osteurop\u00E4ische Zeit
-Europe/Belfast.generic.long=Britische Zeit
-Europe/Belgrade.generic.long=Mitteleurop\u00E4ische Zeit
-Europe/Berlin.generic.long=Mitteleurop\u00E4ische Zeit
-Europe/Bratislava.generic.long=Mitteleurop\u00E4ische Zeit
-Europe/Brussels.generic.long=Mitteleurop\u00E4ische Zeit
-Europe/Bucharest.generic.long=Osteurop\u00E4ische Zeit
-Europe/Budapest.generic.long=Mitteleurop\u00E4ische Zeit
-Europe/Busingen.generic.long=Mitteleurop\u00E4ische Zeit
-Europe/Chisinau.generic.long=Osteurop\u00E4ische Zeit
-Europe/Copenhagen.generic.long=Mitteleurop\u00E4ische Zeit
-Europe/Dublin.generic.long=Irische Zeit
-Europe/Gibraltar.generic.long=Mitteleurop\u00E4ische Zeit
-Europe/Guernsey.generic.long=Britische Zeit
-Europe/Helsinki.generic.long=Osteurop\u00E4ische Zeit
-Europe/Isle_of_Man.generic.long=Britische Zeit
-Europe/Istanbul.generic.long=Osteurop\u00E4ische Zeit
-Europe/Jersey.generic.long=Britische Zeit
-Europe/Kaliningrad.daylight.long=Kaliningrader Sommerzeit
-Europe/Kaliningrad.generic.long=Kaliningrader Zeit
-Europe/Kaliningrad.standard.long=Kaliningrader Zeit
-Europe/Kiev.generic.long=Osteurop\u00E4ische Zeit
-Europe/Lisbon.generic.long=Westeurop\u00E4ische Zeit
-Europe/Ljubljana.generic.long=Mitteleurop\u00E4ische Zeit
-Europe/London.generic.long=Britische Zeit
-Europe/Luxembourg.generic.long=Mitteleurop\u00E4ische Zeit
-Europe/Madrid.generic.long=Mitteleurop\u00E4ische Zeit
-Europe/Malta.generic.long=Mitteleurop\u00E4ische Zeit
-Europe/Mariehamn.generic.long=Osteurop\u00E4ische Zeit
-Europe/Minsk.daylight.long=Kaliningrader Sommerzeit
-Europe/Minsk.generic.long=Kaliningrader Zeit
-Europe/Minsk.standard.long=Kaliningrader Zeit
-Europe/Monaco.generic.long=Mitteleurop\u00E4ische Zeit
-Europe/Moscow.generic.long=Zeitzone f\u00FCr Moskau
-Europe/Nicosia.generic.long=Osteurop\u00E4ische Zeit
-Europe/Oslo.generic.long=Mitteleurop\u00E4ische Zeit
-Europe/Paris.generic.long=Mitteleurop\u00E4ische Zeit
-Europe/Podgorica.generic.long=Mitteleurop\u00E4ische Zeit
-Europe/Prague.generic.long=Mitteleurop\u00E4ische Zeit
-Europe/Riga.generic.long=Osteurop\u00E4ische Zeit
-Europe/Rome.generic.long=Mitteleurop\u00E4ische Zeit
-Europe/Samara.generic.long=Samarische Zeit
-Europe/San_Marino.generic.long=Mitteleurop\u00E4ische Zeit
-Europe/Sarajevo.generic.long=Mitteleurop\u00E4ische Zeit
-Europe/Simferopol.generic.long=Osteurop\u00E4ische Zeit
-Europe/Skopje.generic.long=Mitteleurop\u00E4ische Zeit
-Europe/Sofia.generic.long=Osteurop\u00E4ische Zeit
-Europe/Stockholm.generic.long=Mitteleurop\u00E4ische Zeit
-Europe/Tallinn.generic.long=Osteurop\u00E4ische Zeit
-Europe/Tirane.generic.long=Mitteleurop\u00E4ische Zeit
-Europe/Tiraspol.generic.long=Osteurop\u00E4ische Zeit
-Europe/Uzhgorod.generic.long=Osteurop\u00E4ische Zeit
-Europe/Vaduz.generic.long=Mitteleurop\u00E4ische Zeit
-Europe/Vatican.generic.long=Mitteleurop\u00E4ische Zeit
-Europe/Vienna.generic.long=Mitteleurop\u00E4ische Zeit
-Europe/Vilnius.generic.long=Osteurop\u00E4ische Zeit
-Europe/Volgograd.generic.long=Wolgograder Zeit
-Europe/Warsaw.generic.long=Mitteleurop\u00E4ische Zeit
-Europe/Zagreb.generic.long=Mitteleurop\u00E4ische Zeit
-Europe/Zaporozhye.generic.long=Osteurop\u00E4ische Zeit
-Europe/Zurich.generic.long=Mitteleurop\u00E4ische Zeit
-GB-Eire.generic.long=Britische Zeit
-GB.generic.long=Britische Zeit
-GMT.generic.long=Greenwich Zeit
-Greenwich.generic.long=Greenwich Zeit
-HST.generic.long=Zeitzone f\u00fcr Hawaii
-Hongkong.generic.long=Hongkong Zeit
-IET.generic.long=\u00D6stliche Zeitzone
-IST.generic.long=Zeitzone f\u00FCr Indien
-Iceland.generic.long=Greenwich Zeit
-Indian/Antananarivo.generic.long=Ostafrikanische Zeit
-Indian/Chagos.generic.long=Indischer Ozean Territorium Zeit
-Indian/Christmas.generic.long=Weihnachtsinseln Zeit
-Indian/Cocos.generic.long=Kokos-Inseln Zeit
-Indian/Comoro.generic.long=Ostafrikanische Zeit
-Indian/Kerguelen.generic.long=Franz\u00F6sisch S\u00FCd- u. Antarktische Landzeit
-Indian/Mahe.generic.long=Seychellen Zeit
-Indian/Maldives.generic.long=Maledivische Zeit
-Indian/Mauritius.generic.long=Mauritius Zeit
-Indian/Mayotte.generic.long=Ostafrikanische Zeit
-Indian/Reunion.generic.long=R\u00E9union Zeit
-Iran.generic.long=Iranische Zeit
-Israel.generic.long=Zeitzone f\u00FCr Israel
-JST.generic.long=Zeitzone f\u00FCr Japan
-Jamaica.generic.long=\u00D6stliche Zeitzone
-Japan.generic.long=Zeitzone f\u00FCr Japan
-Kwajalein.generic.long=Marshallinseln Zeit
-Libya.generic.long=Osteurop\u00e4ische Zeit
-MET.generic.long=MET
-MIT.generic.long=West Samoa Zeit
-MST.generic.long=Zeitzone Mountain
-MST7MDT.generic.long=Zeitzone Mountain
-Mexico/BajaNorte.generic.long=Zeitzone Pazifik
-Mexico/BajaSur.generic.long=Zeitzone Mountain
-Mexico/General.generic.long=Zentrale Zeitzone
-NET.generic.long=Armenische Zeit
-NST.generic.long=Zeitzone f\u00FCr Neuseeland
-NZ-CHAT.generic.long=Zeitzone f\u00FCr Chatham-Inseln
-NZ.generic.long=Zeitzone f\u00FCr Neuseeland
-Navajo.generic.long=Zeitzone Mountain
-PLT.generic.long=Pakistanische Zeit
-PNT.generic.long=Zeitzone Mountain
-PRC.generic.long=Zeitzone f\u00FCr China
-PRT.generic.long=Zeitzone Atlantik
-PST.generic.long=Zeitzone Pazifik
-PST8PDT.generic.long=Zeitzone Pazifik
-Pacific/Apia.generic.long=West Samoa Zeit
-Pacific/Auckland.generic.long=Zeitzone f\u00FCr Neuseeland
-Pacific/Chatham.generic.long=Zeitzone f\u00FCr Chatham-Inseln
-Pacific/Chuuk.daylight.long=Chuuk Sommerzeit
-Pacific/Chuuk.generic.long=Chuuk Zeit
-Pacific/Chuuk.standard.long=Chuuk Zeit
-Pacific/Easter.generic.long=Osterinseln Zeit
-Pacific/Efate.generic.long=Vanuatu Zeit
-Pacific/Enderbury.generic.long=Phoenix Inseln Zeit
-Pacific/Fakaofo.generic.long=Tokelau Zeit
-Pacific/Fiji.generic.long=Fidschi Zeit
-Pacific/Funafuti.generic.long=Tuvalu Zeit
-Pacific/Galapagos.generic.long=Galapagos Zeit
-Pacific/Gambier.generic.long=Gambier Zeit
-Pacific/Guadalcanal.generic.long=Salomoninseln Zeit
-Pacific/Guam.generic.long=Zeitzone f\u00FCr die Marianen
-Pacific/Honolulu.generic.long=Zeitzone f\u00FCr Hawaii
-Pacific/Johnston.generic.long=Zeitzone f\u00FCr Hawaii
-Pacific/Kiritimati.generic.long=Line Inseln Zeit
-Pacific/Kosrae.generic.long=Kosrae Zeit
-Pacific/Kwajalein.generic.long=Marshallinseln Zeit
-Pacific/Majuro.generic.long=Marshallinseln Zeit
-Pacific/Marquesas.generic.long=Marquesas Zeit
-Pacific/Midway.generic.long=Zeitzone f\u00FCr Samoa
-Pacific/Nauru.generic.long=Nauru Zeit
-Pacific/Niue.generic.long=Niue Zeit
-Pacific/Norfolk.generic.long=Norfolk Zeit
-Pacific/Noumea.generic.long=Neukaledonische Zeit
-Pacific/Pago_Pago.generic.long=Zeitzone f\u00FCr Samoa
-Pacific/Palau.generic.long=Palau Zeit
-Pacific/Pitcairn.generic.long=Zeitzone f\u00FCr Pitcairn
-Pacific/Pohnpei.daylight.long=Pohnpei Sommerzeit
-Pacific/Pohnpei.generic.long=Pohnpei-Inseln Zeit
-Pacific/Pohnpei.standard.long=Pohnpei Zeit
-Pacific/Ponape.daylight.long=Pohnpei Sommerzeit
-Pacific/Ponape.generic.long=Pohnpei-Inseln Zeit
-Pacific/Ponape.standard.long=Pohnpei Zeit
-Pacific/Port_Moresby.generic.long=Papua-Neuguinea Zeit
-Pacific/Rarotonga.generic.long=Cook-Inseln Zeit
-Pacific/Saipan.generic.long=Zeitzone f\u00FCr die Marianen
-Pacific/Samoa.generic.long=Zeitzone f\u00FCr Samoa
-Pacific/Tahiti.generic.long=Tahiti Zeit
-Pacific/Tarawa.generic.long=Gilbert-Inseln Zeit
-Pacific/Tongatapu.generic.long=Tonga Zeit
-Pacific/Truk.daylight.long=Chuuk Sommerzeit
-Pacific/Truk.generic.long=Chuuk Zeit
-Pacific/Truk.standard.long=Chuuk Zeit
-Pacific/Wake.generic.long=Wake Zeit
-Pacific/Wallis.generic.long=Wallis u. Futuna Zeit
-Pacific/Yap.daylight.long=Chuuk Sommerzeit
-Pacific/Yap.generic.long=Chuuk Zeit
-Pacific/Yap.standard.long=Chuuk Zeit
-Poland.generic.long=Mitteleurop\u00E4ische Zeit
-Portugal.generic.long=Westeurop\u00E4ische Zeit
-ROK.generic.long=Zeitzone f\u00FCr Korea
-SST.generic.long=Salomoninseln Zeit
-Singapore.generic.long=Singapur Zeit
-SystemV/AST4.generic.long=Zeitzone Atlantik
-SystemV/AST4ADT.generic.long=Zeitzone Atlantik
-SystemV/CST6.generic.long=Zentrale Zeitzone
-SystemV/CST6CDT.generic.long=Zentrale Zeitzone
-SystemV/EST5.generic.long=\u00D6stliche Zeitzone
-SystemV/EST5EDT.generic.long=\u00D6stliche Zeitzone
-SystemV/HST10.generic.long=Zeitzone f\u00FCr Hawaii
-SystemV/MST7.generic.long=Zeitzone Mountain
-SystemV/MST7MDT.generic.long=Zeitzone Mountain
-SystemV/PST8.generic.long=Zeitzone Pazifik
-SystemV/PST8PDT.generic.long=Zeitzone Pazifik
-SystemV/YST9.generic.long=Zeitzone f\u00FCr Alaska
-SystemV/YST9YDT.generic.long=Zeitzone f\u00FCr Alaska
-Turkey.generic.long=Osteurop\u00E4ische Zeit
-UCT.generic.long=Koordinierte Universalzeit
-US/Alaska.generic.long=Zeitzone f\u00FCr Alaska
-US/Aleutian.generic.long=Zeitzone f\u00FCr Hawaii und Al\u00EButen
-US/Arizona.generic.long=Zeitzone Mountain
-US/Central.generic.long=Zentrale Zeitzone
-US/East-Indiana.generic.long=\u00D6stliche Zeitzone
-US/Eastern.generic.long=\u00D6stliche Zeitzone
-US/Hawaii.generic.long=Zeitzone f\u00FCr Hawaii
-US/Indiana-Starke.generic.long=Zentrale Zeitzone
-US/Michigan.generic.long=\u00D6stliche Zeitzone
-US/Mountain.generic.long=Zeitzone Mountain
-US/Pacific-New.generic.long=Zeitzone Pazifik
-US/Pacific.generic.long=Zeitzone Pazifik
-US/Samoa.generic.long=Zeitzone f\u00FCr Samoa
-UTC.generic.long=Koordinierte Universalzeit
-Universal.generic.long=Koordinierte Universalzeit
-VST.generic.long=Indochina Zeit
-W-SU.generic.long=Zeitzone f\u00FCr Moskau
-WET.generic.long=Westeurop\u00e4ische Zeit
-Zulu.generic.long=Koordinierte Universalzeit
diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_de_short.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_de_short.properties
deleted file mode 100644
index 8bbaeb4..0000000
--- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_de_short.properties
+++ /dev/null
@@ -1,1743 +0,0 @@
-ACT.daylight.short=CST
-ACT.generic.short=CT
-ACT.standard.short=CST
-AET.daylight.short=EST
-AET.generic.short=ET
-AET.standard.short=EST
-Africa/Abidjan.daylight.short=GMT
-Africa/Abidjan.generic.short=GMT
-Africa/Abidjan.standard.short=GMT
-Africa/Accra.daylight.short=GHST
-Africa/Accra.generic.short=GMT
-Africa/Accra.standard.short=GMT
-Africa/Addis_Ababa.daylight.short=EAST
-Africa/Addis_Ababa.generic.short=EAT
-Africa/Addis_Ababa.standard.short=EAT
-Africa/Algiers.daylight.short=MESZ
-Africa/Algiers.generic.short=MEZ
-Africa/Algiers.standard.short=MEZ
-Africa/Asmara.daylight.short=EAST
-Africa/Asmara.generic.short=EAT
-Africa/Asmara.standard.short=EAT
-Africa/Asmera.daylight.short=EAST
-Africa/Asmera.generic.short=EAT
-Africa/Asmera.standard.short=EAT
-Africa/Bamako.daylight.short=GMT
-Africa/Bamako.generic.short=GMT
-Africa/Bamako.standard.short=GMT
-Africa/Bangui.daylight.short=WAST
-Africa/Bangui.generic.short=WAT
-Africa/Bangui.standard.short=WAT
-Africa/Banjul.daylight.short=GMT
-Africa/Banjul.generic.short=GMT
-Africa/Banjul.standard.short=GMT
-Africa/Bissau.daylight.short=GMT
-Africa/Bissau.generic.short=GMT
-Africa/Bissau.standard.short=GMT
-Africa/Blantyre.daylight.short=CAST
-Africa/Blantyre.generic.short=CAT
-Africa/Blantyre.standard.short=CAT
-Africa/Brazzaville.daylight.short=WAST
-Africa/Brazzaville.generic.short=WAT
-Africa/Brazzaville.standard.short=WAT
-Africa/Bujumbura.daylight.short=CAST
-Africa/Bujumbura.generic.short=CAT
-Africa/Bujumbura.standard.short=CAT
-Africa/Cairo.daylight.short=OESZ
-Africa/Cairo.generic.short=OEZ
-Africa/Cairo.standard.short=OEZ
-Africa/Casablanca.daylight.short=WESZ
-Africa/Casablanca.generic.short=WEZ
-Africa/Casablanca.standard.short=WEZ
-Africa/Ceuta.daylight.short=MESZ
-Africa/Ceuta.generic.short=MEZ
-Africa/Ceuta.standard.short=MEZ
-Africa/Conakry.daylight.short=GMT
-Africa/Conakry.generic.short=GMT
-Africa/Conakry.standard.short=GMT
-Africa/Dakar.daylight.short=GMT
-Africa/Dakar.generic.short=GMT
-Africa/Dakar.standard.short=GMT
-Africa/Dar_es_Salaam.daylight.short=EAST
-Africa/Dar_es_Salaam.generic.short=EAT
-Africa/Dar_es_Salaam.standard.short=EAT
-Africa/Djibouti.daylight.short=EAST
-Africa/Djibouti.generic.short=EAT
-Africa/Djibouti.standard.short=EAT
-Africa/Douala.daylight.short=WAST
-Africa/Douala.generic.short=WAT
-Africa/Douala.standard.short=WAT
-Africa/El_Aaiun.daylight.short=WESZ
-Africa/El_Aaiun.generic.short=WEZ
-Africa/El_Aaiun.standard.short=WEZ
-Africa/Freetown.daylight.short=SLST
-Africa/Freetown.generic.short=SLT
-Africa/Freetown.standard.short=GMT
-Africa/Gaborone.daylight.short=CAST
-Africa/Gaborone.generic.short=CAT
-Africa/Gaborone.standard.short=CAT
-Africa/Harare.daylight.short=CAST
-Africa/Harare.generic.short=CAT
-Africa/Harare.standard.short=CAT
-Africa/Johannesburg.daylight.short=SAST
-Africa/Johannesburg.generic.short=SAT
-Africa/Johannesburg.standard.short=SAST
-Africa/Juba.daylight.short=EAST
-Africa/Juba.generic.short=EAT
-Africa/Juba.standard.short=EAT
-Africa/Kampala.daylight.short=EAST
-Africa/Kampala.generic.short=EAT
-Africa/Kampala.standard.short=EAT
-Africa/Khartoum.daylight.short=EAST
-Africa/Khartoum.generic.short=EAT
-Africa/Khartoum.standard.short=EAT
-Africa/Kigali.daylight.short=CAST
-Africa/Kigali.generic.short=CAT
-Africa/Kigali.standard.short=CAT
-Africa/Kinshasa.daylight.short=WAST
-Africa/Kinshasa.generic.short=WAT
-Africa/Kinshasa.standard.short=WAT
-Africa/Lagos.daylight.short=WAST
-Africa/Lagos.generic.short=WAT
-Africa/Lagos.standard.short=WAT
-Africa/Libreville.daylight.short=WAST
-Africa/Libreville.generic.short=WAT
-Africa/Libreville.standard.short=WAT
-Africa/Lome.daylight.short=GMT
-Africa/Lome.generic.short=GMT
-Africa/Lome.standard.short=GMT
-Africa/Luanda.daylight.short=WAST
-Africa/Luanda.generic.short=WAT
-Africa/Luanda.standard.short=WAT
-Africa/Lubumbashi.daylight.short=CAST
-Africa/Lubumbashi.generic.short=CAT
-Africa/Lubumbashi.standard.short=CAT
-Africa/Lusaka.daylight.short=CAST
-Africa/Lusaka.generic.short=CAT
-Africa/Lusaka.standard.short=CAT
-Africa/Malabo.daylight.short=WAST
-Africa/Malabo.generic.short=WAT
-Africa/Malabo.standard.short=WAT
-Africa/Maputo.daylight.short=CAST
-Africa/Maputo.generic.short=CAT
-Africa/Maputo.standard.short=CAT
-Africa/Maseru.daylight.short=SAST
-Africa/Maseru.generic.short=SAT
-Africa/Maseru.standard.short=SAST
-Africa/Mbabane.daylight.short=SAST
-Africa/Mbabane.generic.short=SAT
-Africa/Mbabane.standard.short=SAST
-Africa/Mogadishu.daylight.short=EAST
-Africa/Mogadishu.generic.short=EAT
-Africa/Mogadishu.standard.short=EAT
-Africa/Monrovia.daylight.short=GMT
-Africa/Monrovia.generic.short=GMT
-Africa/Monrovia.standard.short=GMT
-Africa/Nairobi.daylight.short=EAST
-Africa/Nairobi.generic.short=EAT
-Africa/Nairobi.standard.short=EAT
-Africa/Ndjamena.daylight.short=WAST
-Africa/Ndjamena.generic.short=WAT
-Africa/Ndjamena.standard.short=WAT
-Africa/Niamey.daylight.short=WAST
-Africa/Niamey.generic.short=WAT
-Africa/Niamey.standard.short=WAT
-Africa/Nouakchott.daylight.short=GMT
-Africa/Nouakchott.generic.short=GMT
-Africa/Nouakchott.standard.short=GMT
-Africa/Ouagadougou.daylight.short=GMT
-Africa/Ouagadougou.generic.short=GMT
-Africa/Ouagadougou.standard.short=GMT
-Africa/Porto-Novo.daylight.short=WAST
-Africa/Porto-Novo.generic.short=WAT
-Africa/Porto-Novo.standard.short=WAT
-Africa/Sao_Tome.daylight.short=GMT
-Africa/Sao_Tome.generic.short=GMT
-Africa/Sao_Tome.standard.short=GMT
-Africa/Timbuktu.daylight.short=GMT
-Africa/Timbuktu.generic.short=GMT
-Africa/Timbuktu.standard.short=GMT
-Africa/Tripoli.daylight.short=OESZ
-Africa/Tripoli.generic.short=OEZ
-Africa/Tripoli.standard.short=OEZ
-Africa/Tunis.daylight.short=MESZ
-Africa/Tunis.generic.short=MEZ
-Africa/Tunis.standard.short=MEZ
-Africa/Windhoek.daylight.short=WAST
-Africa/Windhoek.generic.short=WAT
-Africa/Windhoek.standard.short=WAT
-AGT.daylight.short=ARST
-AGT.generic.short=ART
-AGT.standard.short=ART
-America/Adak.daylight.short=HADT
-America/Adak.generic.short=HAT
-America/Adak.standard.short=HAST
-America/Anchorage.daylight.short=AKDT
-America/Anchorage.generic.short=AKT
-America/Anchorage.standard.short=AKST
-America/Anguilla.daylight.short=ADT
-America/Anguilla.generic.short=AT
-America/Anguilla.standard.short=AST
-America/Antigua.daylight.short=ADT
-America/Antigua.generic.short=AT
-America/Antigua.standard.short=AST
-America/Araguaina.daylight.short=BRST
-America/Araguaina.generic.short=BRT
-America/Araguaina.standard.short=BRT
-America/Argentina/Buenos_Aires.daylight.short=ARST
-America/Argentina/Buenos_Aires.generic.short=ART
-America/Argentina/Buenos_Aires.standard.short=ART
-America/Argentina/Catamarca.daylight.short=ARST
-America/Argentina/Catamarca.generic.short=ART
-America/Argentina/Catamarca.standard.short=ART
-America/Argentina/ComodRivadavia.daylight.short=ARST
-America/Argentina/ComodRivadavia.generic.short=ART
-America/Argentina/ComodRivadavia.standard.short=ART
-America/Argentina/Cordoba.daylight.short=ARST
-America/Argentina/Cordoba.generic.short=ART
-America/Argentina/Cordoba.standard.short=ART
-America/Argentina/Jujuy.daylight.short=ARST
-America/Argentina/Jujuy.generic.short=ART
-America/Argentina/Jujuy.standard.short=ART
-America/Argentina/La_Rioja.daylight.short=ARST
-America/Argentina/La_Rioja.generic.short=ART
-America/Argentina/La_Rioja.standard.short=ART
-America/Argentina/Mendoza.daylight.short=ARST
-America/Argentina/Mendoza.generic.short=ART
-America/Argentina/Mendoza.standard.short=ART
-America/Argentina/Rio_Gallegos.daylight.short=ARST
-America/Argentina/Rio_Gallegos.generic.short=ART
-America/Argentina/Rio_Gallegos.standard.short=ART
-America/Argentina/Salta.daylight.short=ARST
-America/Argentina/Salta.generic.short=ART
-America/Argentina/Salta.standard.short=ART
-America/Argentina/San_Juan.daylight.short=ARST
-America/Argentina/San_Juan.generic.short=ART
-America/Argentina/San_Juan.standard.short=ART
-America/Argentina/San_Luis.daylight.short=ARST
-America/Argentina/San_Luis.generic.short=ART
-America/Argentina/San_Luis.standard.short=ART
-America/Argentina/Tucuman.daylight.short=ARST
-America/Argentina/Tucuman.generic.short=ART
-America/Argentina/Tucuman.standard.short=ART
-America/Argentina/Ushuaia.daylight.short=ARST
-America/Argentina/Ushuaia.generic.short=ART
-America/Argentina/Ushuaia.standard.short=ART
-America/Aruba.daylight.short=ADT
-America/Aruba.generic.short=AT
-America/Aruba.standard.short=AST
-America/Asuncion.daylight.short=PYST
-America/Asuncion.generic.short=PYT
-America/Asuncion.standard.short=PYT
-America/Atikokan.daylight.short=EDT
-America/Atikokan.generic.short=ET
-America/Atikokan.standard.short=EST
-America/Atka.daylight.short=HADT
-America/Atka.generic.short=HAT
-America/Atka.standard.short=HAST
-America/Bahia_Banderas.daylight.short=CDT
-America/Bahia_Banderas.generic.short=CT
-America/Bahia_Banderas.standard.short=CST
-America/Bahia.daylight.short=BRST
-America/Bahia.generic.short=BRT
-America/Bahia.standard.short=BRT
-America/Barbados.daylight.short=ADT
-America/Barbados.generic.short=AT
-America/Barbados.standard.short=AST
-America/Belem.daylight.short=BRST
-America/Belem.generic.short=BRT
-America/Belem.standard.short=BRT
-America/Belize.daylight.short=CDT
-America/Belize.generic.short=CT
-America/Belize.standard.short=CST
-America/Blanc-Sablon.daylight.short=ADT
-America/Blanc-Sablon.generic.short=AT
-America/Blanc-Sablon.standard.short=AST
-America/Boa_Vista.daylight.short=AMST
-America/Boa_Vista.generic.short=AMT
-America/Boa_Vista.standard.short=AMT
-America/Bogota.daylight.short=COST
-America/Bogota.generic.short=COT
-America/Bogota.standard.short=COT
-America/Boise.daylight.short=MDT
-America/Boise.generic.short=MT
-America/Boise.standard.short=MST
-America/Buenos_Aires.daylight.short=ARST
-America/Buenos_Aires.generic.short=ART
-America/Buenos_Aires.standard.short=ART
-America/Cambridge_Bay.daylight.short=MDT
-America/Cambridge_Bay.generic.short=MT
-America/Cambridge_Bay.standard.short=MST
-America/Campo_Grande.daylight.short=AMST
-America/Campo_Grande.generic.short=AMT
-America/Campo_Grande.standard.short=AMT
-America/Cancun.daylight.short=CDT
-America/Cancun.generic.short=CT
-America/Cancun.standard.short=CST
-America/Caracas.daylight.short=VEST
-America/Caracas.generic.short=VET
-America/Caracas.standard.short=VET
-America/Catamarca.daylight.short=ARST
-America/Catamarca.generic.short=ART
-America/Catamarca.standard.short=ART
-America/Cayenne.daylight.short=GFST
-America/Cayenne.generic.short=GFT
-America/Cayenne.standard.short=GFT
-America/Cayman.daylight.short=EDT
-America/Cayman.generic.short=ET
-America/Cayman.standard.short=EST
-America/Chicago.daylight.short=CDT
-America/Chicago.generic.short=CT
-America/Chicago.standard.short=CST
-America/Chihuahua.daylight.short=MDT
-America/Chihuahua.generic.short=MT
-America/Chihuahua.standard.short=MST
-America/Coral_Harbour.daylight.short=EDT
-America/Coral_Harbour.generic.short=ET
-America/Coral_Harbour.standard.short=EST
-America/Cordoba.daylight.short=ARST
-America/Cordoba.generic.short=ART
-America/Cordoba.standard.short=ART
-America/Costa_Rica.daylight.short=CDT
-America/Costa_Rica.generic.short=CT
-America/Costa_Rica.standard.short=CST
-America/Creston.daylight.short=MDT
-America/Creston.generic.short=MT
-America/Creston.standard.short=MST
-America/Cuiaba.daylight.short=AMST
-America/Cuiaba.generic.short=AMT
-America/Cuiaba.standard.short=AMT
-America/Curacao.daylight.short=ADT
-America/Curacao.generic.short=AT
-America/Curacao.standard.short=AST
-America/Danmarkshavn.daylight.short=GMT
-America/Danmarkshavn.generic.short=GMT
-America/Danmarkshavn.standard.short=GMT
-America/Dawson_Creek.daylight.short=MDT
-America/Dawson_Creek.generic.short=MT
-America/Dawson_Creek.standard.short=MST
-America/Dawson.daylight.short=PDT
-America/Dawson.generic.short=PT
-America/Dawson.standard.short=PST
-America/Denver.daylight.short=MDT
-America/Denver.generic.short=MT
-America/Denver.standard.short=MST
-America/Detroit.daylight.short=EDT
-America/Detroit.generic.short=ET
-America/Detroit.standard.short=EST
-America/Dominica.daylight.short=ADT
-America/Dominica.generic.short=AT
-America/Dominica.standard.short=AST
-America/Edmonton.daylight.short=MDT
-America/Edmonton.generic.short=MT
-America/Edmonton.standard.short=MST
-America/Eirunepe.daylight.short=ACST
-America/Eirunepe.generic.short=ACT
-America/Eirunepe.standard.short=ACT
-America/El_Salvador.daylight.short=CDT
-America/El_Salvador.generic.short=CT
-America/El_Salvador.standard.short=CST
-America/Ensenada.daylight.short=PDT
-America/Ensenada.generic.short=PT
-America/Ensenada.standard.short=PST
-America/Fortaleza.daylight.short=BRST
-America/Fortaleza.generic.short=BRT
-America/Fortaleza.standard.short=BRT
-America/Fort_Wayne.daylight.short=EDT
-America/Fort_Wayne.generic.short=ET
-America/Fort_Wayne.standard.short=EST
-America/Glace_Bay.daylight.short=ADT
-America/Glace_Bay.generic.short=AT
-America/Glace_Bay.standard.short=AST
-America/Godthab.daylight.short=WGST
-America/Godthab.generic.short=WGT
-America/Godthab.standard.short=WGT
-America/Goose_Bay.daylight.short=ADT
-America/Goose_Bay.generic.short=AT
-America/Goose_Bay.standard.short=AST
-America/Grand_Turk.daylight.short=EDT
-America/Grand_Turk.generic.short=ET
-America/Grand_Turk.standard.short=EST
-America/Grenada.daylight.short=ADT
-America/Grenada.generic.short=AT
-America/Grenada.standard.short=AST
-America/Guadeloupe.daylight.short=ADT
-America/Guadeloupe.generic.short=AT
-America/Guadeloupe.standard.short=AST
-America/Guatemala.daylight.short=CDT
-America/Guatemala.generic.short=CT
-America/Guatemala.standard.short=CST
-America/Guayaquil.daylight.short=ECST
-America/Guayaquil.generic.short=ECT
-America/Guayaquil.standard.short=ECT
-America/Guyana.daylight.short=GYST
-America/Guyana.generic.short=GYT
-America/Guyana.standard.short=GYT
-America/Halifax.daylight.short=ADT
-America/Halifax.generic.short=AT
-America/Halifax.standard.short=AST
-America/Havana.daylight.short=CDT
-America/Havana.generic.short=CT
-America/Havana.standard.short=CST
-America/Hermosillo.daylight.short=MDT
-America/Hermosillo.generic.short=MT
-America/Hermosillo.standard.short=MST
-America/Indiana/Indianapolis.daylight.short=EDT
-America/Indiana/Indianapolis.generic.short=ET
-America/Indiana/Indianapolis.standard.short=EST
-America/Indiana/Knox.daylight.short=CDT
-America/Indiana/Knox.generic.short=CT
-America/Indiana/Knox.standard.short=CST
-America/Indiana/Marengo.daylight.short=EDT
-America/Indiana/Marengo.generic.short=ET
-America/Indiana/Marengo.standard.short=EST
-America/Indiana/Petersburg.daylight.short=EDT
-America/Indiana/Petersburg.generic.short=ET
-America/Indiana/Petersburg.standard.short=EST
-America/Indianapolis.daylight.short=EDT
-America/Indianapolis.generic.short=ET
-America/Indianapolis.standard.short=EST
-America/Indiana/Tell_City.daylight.short=CDT
-America/Indiana/Tell_City.generic.short=CT
-America/Indiana/Tell_City.standard.short=CST
-America/Indiana/Vevay.daylight.short=EDT
-America/Indiana/Vevay.generic.short=ET
-America/Indiana/Vevay.standard.short=EST
-America/Indiana/Vincennes.daylight.short=EDT
-America/Indiana/Vincennes.generic.short=ET
-America/Indiana/Vincennes.standard.short=EST
-America/Indiana/Winamac.daylight.short=EDT
-America/Indiana/Winamac.generic.short=ET
-America/Indiana/Winamac.standard.short=EST
-America/Inuvik.daylight.short=MDT
-America/Inuvik.generic.short=MT
-America/Inuvik.standard.short=MST
-America/Iqaluit.daylight.short=EDT
-America/Iqaluit.generic.short=ET
-America/Iqaluit.standard.short=EST
-America/Jamaica.daylight.short=EDT
-America/Jamaica.generic.short=ET
-America/Jamaica.standard.short=EST
-America/Jujuy.daylight.short=ARST
-America/Jujuy.generic.short=ART
-America/Jujuy.standard.short=ART
-America/Juneau.daylight.short=AKDT
-America/Juneau.generic.short=AKT
-America/Juneau.standard.short=AKST
-America/Kentucky/Louisville.daylight.short=EDT
-America/Kentucky/Louisville.generic.short=ET
-America/Kentucky/Louisville.standard.short=EST
-America/Kentucky/Monticello.daylight.short=EDT
-America/Kentucky/Monticello.generic.short=ET
-America/Kentucky/Monticello.standard.short=EST
-America/Knox_IN.daylight.short=CDT
-America/Knox_IN.generic.short=CT
-America/Knox_IN.standard.short=CST
-America/Kralendijk.daylight.short=ADT
-America/Kralendijk.generic.short=AT
-America/Kralendijk.standard.short=AST
-America/La_Paz.daylight.short=BOST
-America/La_Paz.generic.short=BOT
-America/La_Paz.standard.short=BOT
-America/Lima.daylight.short=PEST
-America/Lima.generic.short=PET
-America/Lima.standard.short=PET
-America/Los_Angeles.daylight.short=PDT
-America/Los_Angeles.generic.short=PT
-America/Los_Angeles.standard.short=PST
-America/Louisville.daylight.short=EDT
-America/Louisville.generic.short=ET
-America/Louisville.standard.short=EST
-America/Lower_Princes.daylight.short=ADT
-America/Lower_Princes.generic.short=AT
-America/Lower_Princes.standard.short=AST
-America/Maceio.daylight.short=BRST
-America/Maceio.generic.short=BRT
-America/Maceio.standard.short=BRT
-America/Managua.daylight.short=CDT
-America/Managua.generic.short=CT
-America/Managua.standard.short=CST
-America/Manaus.daylight.short=AMST
-America/Manaus.generic.short=AMT
-America/Manaus.standard.short=AMT
-America/Marigot.daylight.short=ADT
-America/Marigot.generic.short=AT
-America/Marigot.standard.short=AST
-America/Martinique.daylight.short=ADT
-America/Martinique.generic.short=AT
-America/Martinique.standard.short=AST
-America/Matamoros.daylight.short=CDT
-America/Matamoros.generic.short=CT
-America/Matamoros.standard.short=CST
-America/Mazatlan.daylight.short=MDT
-America/Mazatlan.generic.short=MT
-America/Mazatlan.standard.short=MST
-America/Mendoza.daylight.short=ARST
-America/Mendoza.generic.short=ART
-America/Mendoza.standard.short=ART
-America/Menominee.daylight.short=CDT
-America/Menominee.generic.short=CT
-America/Menominee.standard.short=CST
-America/Merida.daylight.short=CDT
-America/Merida.generic.short=CT
-America/Merida.standard.short=CST
-America/Metlakatla.daylight.short=MeDT
-America/Metlakatla.generic.short=MeT
-America/Metlakatla.standard.short=MeST
-America/Mexico_City.daylight.short=CDT
-America/Mexico_City.generic.short=CT
-America/Mexico_City.standard.short=CST
-America/Miquelon.daylight.short=PMDT
-America/Miquelon.generic.short=PMT
-America/Miquelon.standard.short=PMST
-America/Moncton.daylight.short=ADT
-America/Moncton.generic.short=AT
-America/Moncton.standard.short=AST
-America/Monterrey.daylight.short=CDT
-America/Monterrey.generic.short=CT
-America/Monterrey.standard.short=CST
-America/Montevideo.daylight.short=UYST
-America/Montevideo.generic.short=UYT
-America/Montevideo.standard.short=UYT
-America/Montreal.daylight.short=EDT
-America/Montreal.generic.short=ET
-America/Montreal.standard.short=EST
-America/Montserrat.daylight.short=ADT
-America/Montserrat.generic.short=AT
-America/Montserrat.standard.short=AST
-America/Nassau.daylight.short=EDT
-America/Nassau.generic.short=ET
-America/Nassau.standard.short=EST
-America/New_York.daylight.short=EDT
-America/New_York.generic.short=ET
-America/New_York.standard.short=EST
-America/Nipigon.daylight.short=EDT
-America/Nipigon.generic.short=ET
-America/Nipigon.standard.short=EST
-America/Nome.daylight.short=AKDT
-America/Nome.generic.short=AKT
-America/Nome.standard.short=AKST
-America/Noronha.daylight.short=FNST
-America/Noronha.generic.short=FNT
-America/Noronha.standard.short=FNT
-America/North_Dakota/Beulah.daylight.short=CDT
-America/North_Dakota/Beulah.generic.short=CT
-America/North_Dakota/Beulah.standard.short=CST
-America/North_Dakota/Center.daylight.short=CDT
-America/North_Dakota/Center.generic.short=CT
-America/North_Dakota/Center.standard.short=CST
-America/North_Dakota/New_Salem.daylight.short=CDT
-America/North_Dakota/New_Salem.generic.short=CT
-America/North_Dakota/New_Salem.standard.short=CST
-America/Ojinaga.daylight.short=MDT
-America/Ojinaga.generic.short=MT
-America/Ojinaga.standard.short=MST
-America/Panama.daylight.short=EDT
-America/Panama.generic.short=ET
-America/Panama.standard.short=EST
-America/Pangnirtung.daylight.short=EDT
-America/Pangnirtung.generic.short=ET
-America/Pangnirtung.standard.short=EST
-America/Paramaribo.daylight.short=SRST
-America/Paramaribo.generic.short=SRT
-America/Paramaribo.standard.short=SRT
-America/Phoenix.daylight.short=MDT
-America/Phoenix.generic.short=MT
-America/Phoenix.standard.short=MST
-America/Port-au-Prince.daylight.short=EDT
-America/Port-au-Prince.generic.short=ET
-America/Port-au-Prince.standard.short=EST
-America/Porto_Acre.daylight.short=ACST
-America/Porto_Acre.generic.short=ACT
-America/Porto_Acre.standard.short=ACT
-America/Port_of_Spain.daylight.short=ADT
-America/Port_of_Spain.generic.short=AT
-America/Port_of_Spain.standard.short=AST
-America/Porto_Velho.daylight.short=AMST
-America/Porto_Velho.generic.short=AMT
-America/Porto_Velho.standard.short=AMT
-America/Puerto_Rico.daylight.short=ADT
-America/Puerto_Rico.generic.short=AT
-America/Puerto_Rico.standard.short=AST
-America/Rainy_River.daylight.short=CDT
-America/Rainy_River.generic.short=CT
-America/Rainy_River.standard.short=CST
-America/Rankin_Inlet.daylight.short=CDT
-America/Rankin_Inlet.generic.short=CT
-America/Rankin_Inlet.standard.short=CST
-America/Recife.daylight.short=BRST
-America/Recife.generic.short=BRT
-America/Recife.standard.short=BRT
-America/Regina.daylight.short=CDT
-America/Regina.generic.short=CT
-America/Regina.standard.short=CST
-America/Resolute.daylight.short=CDT
-America/Resolute.generic.short=CT
-America/Resolute.standard.short=CST
-America/Rio_Branco.daylight.short=ACST
-America/Rio_Branco.generic.short=ACT
-America/Rio_Branco.standard.short=ACT
-America/Rosario.daylight.short=ARST
-America/Rosario.generic.short=ART
-America/Rosario.standard.short=ART
-America/Santa_Isabel.daylight.short=PDT
-America/Santa_Isabel.generic.short=PT
-America/Santa_Isabel.standard.short=PST
-America/Santarem.daylight.short=BRST
-America/Santarem.generic.short=BRT
-America/Santarem.standard.short=BRT
-America/Santiago.daylight.short=CLST
-America/Santiago.generic.short=CLT
-America/Santiago.standard.short=CLT
-America/Santo_Domingo.daylight.short=ADT
-America/Santo_Domingo.generic.short=AT
-America/Santo_Domingo.standard.short=AST
-America/Sao_Paulo.daylight.short=BRST
-America/Sao_Paulo.generic.short=BRT
-America/Sao_Paulo.standard.short=BRT
-America/Scoresbysund.daylight.short=EGST
-America/Scoresbysund.generic.short=EGT
-America/Scoresbysund.standard.short=EGT
-America/Shiprock.daylight.short=MDT
-America/Shiprock.generic.short=MT
-America/Shiprock.standard.short=MST
-America/Sitka.daylight.short=AKDT
-America/Sitka.generic.short=AKT
-America/Sitka.standard.short=AKST
-America/St_Barthelemy.daylight.short=ADT
-America/St_Barthelemy.generic.short=AT
-America/St_Barthelemy.standard.short=AST
-America/St_Johns.daylight.short=NDT
-America/St_Johns.generic.short=NT
-America/St_Johns.standard.short=NST
-America/St_Kitts.daylight.short=ADT
-America/St_Kitts.generic.short=AT
-America/St_Kitts.standard.short=AST
-America/St_Lucia.daylight.short=ADT
-America/St_Lucia.generic.short=AT
-America/St_Lucia.standard.short=AST
-America/St_Thomas.daylight.short=ADT
-America/St_Thomas.generic.short=AT
-America/St_Thomas.standard.short=AST
-America/St_Vincent.daylight.short=ADT
-America/St_Vincent.generic.short=AT
-America/St_Vincent.standard.short=AST
-America/Swift_Current.daylight.short=CDT
-America/Swift_Current.generic.short=CT
-America/Swift_Current.standard.short=CST
-America/Tegucigalpa.daylight.short=CDT
-America/Tegucigalpa.generic.short=CT
-America/Tegucigalpa.standard.short=CST
-America/Thule.daylight.short=ADT
-America/Thule.generic.short=AT
-America/Thule.standard.short=AST
-America/Thunder_Bay.daylight.short=EDT
-America/Thunder_Bay.generic.short=ET
-America/Thunder_Bay.standard.short=EST
-America/Tijuana.daylight.short=PDT
-America/Tijuana.generic.short=PT
-America/Tijuana.standard.short=PST
-America/Toronto.daylight.short=EDT
-America/Toronto.generic.short=ET
-America/Toronto.standard.short=EST
-America/Tortola.daylight.short=ADT
-America/Tortola.generic.short=AT
-America/Tortola.standard.short=AST
-America/Vancouver.daylight.short=PDT
-America/Vancouver.generic.short=PT
-America/Vancouver.standard.short=PST
-America/Virgin.daylight.short=ADT
-America/Virgin.generic.short=AT
-America/Virgin.standard.short=AST
-America/Whitehorse.daylight.short=PDT
-America/Whitehorse.generic.short=PT
-America/Whitehorse.standard.short=PST
-America/Winnipeg.daylight.short=CDT
-America/Winnipeg.generic.short=CT
-America/Winnipeg.standard.short=CST
-America/Yakutat.daylight.short=AKDT
-America/Yakutat.generic.short=AKT
-America/Yakutat.standard.short=AKST
-America/Yellowknife.daylight.short=MDT
-America/Yellowknife.generic.short=MT
-America/Yellowknife.standard.short=MST
-Antarctica/Casey.daylight.short=WST
-Antarctica/Casey.generic.short=WT
-Antarctica/Casey.standard.short=WST
-Antarctica/Davis.daylight.short=DAVST
-Antarctica/Davis.generic.short=DAVT
-Antarctica/Davis.standard.short=DAVT
-Antarctica/DumontDUrville.daylight.short=DDUST
-Antarctica/DumontDUrville.generic.short=DDUT
-Antarctica/DumontDUrville.standard.short=DDUT
-Antarctica/Macquarie.daylight.short=MIST
-Antarctica/Macquarie.generic.short=MIST
-Antarctica/Macquarie.standard.short=MIST
-Antarctica/Mawson.daylight.short=MAWST
-Antarctica/Mawson.generic.short=MAWT
-Antarctica/Mawson.standard.short=MAWT
-Antarctica/McMurdo.daylight.short=NZDT
-Antarctica/McMurdo.generic.short=NZT
-Antarctica/McMurdo.standard.short=NZST
-Antarctica/Palmer.daylight.short=CLST
-Antarctica/Palmer.generic.short=CLT
-Antarctica/Palmer.standard.short=CLT
-Antarctica/Rothera.daylight.short=ROTST
-Antarctica/Rothera.generic.short=ROTT
-Antarctica/Rothera.standard.short=ROTT
-Antarctica/South_Pole.daylight.short=NZDT
-Antarctica/South_Pole.generic.short=NZT
-Antarctica/South_Pole.standard.short=NZST
-Antarctica/Syowa.daylight.short=SYOST
-Antarctica/Syowa.generic.short=SYOT
-Antarctica/Syowa.standard.short=SYOT
-Antarctica/Vostok.daylight.short=VOSST
-Antarctica/Vostok.generic.short=VOST
-Antarctica/Vostok.standard.short=VOST
-Arctic/Longyearbyen.daylight.short=MESZ
-Arctic/Longyearbyen.generic.short=MEZ
-Arctic/Longyearbyen.standard.short=MEZ
-ART.daylight.short=OESZ
-ART.generic.short=OEZ
-ART.standard.short=OEZ
-Asia/Aden.daylight.short=ADT
-Asia/Aden.generic.short=AT
-Asia/Aden.standard.short=AST
-Asia/Almaty.daylight.short=ALMST
-Asia/Almaty.generic.short=ALMT
-Asia/Almaty.standard.short=ALMT
-Asia/Amman.daylight.short=ADT
-Asia/Amman.generic.short=AT
-Asia/Amman.standard.short=AST
-Asia/Anadyr.daylight.short=ANAST
-Asia/Anadyr.generic.short=ANAT
-Asia/Anadyr.standard.short=ANAT
-Asia/Aqtau.daylight.short=AQTST
-Asia/Aqtau.generic.short=AQTT
-Asia/Aqtau.standard.short=AQTT
-Asia/Aqtobe.daylight.short=AQTST
-Asia/Aqtobe.generic.short=AQTT
-Asia/Aqtobe.standard.short=AQTT
-Asia/Ashgabat.daylight.short=TMST
-Asia/Ashgabat.generic.short=TMT
-Asia/Ashgabat.standard.short=TMT
-Asia/Ashkhabad.daylight.short=TMST
-Asia/Ashkhabad.generic.short=TMT
-Asia/Ashkhabad.standard.short=TMT
-Asia/Baghdad.daylight.short=ADT
-Asia/Baghdad.generic.short=AT
-Asia/Baghdad.standard.short=AST
-Asia/Bahrain.daylight.short=ADT
-Asia/Bahrain.generic.short=AT
-Asia/Bahrain.standard.short=AST
-Asia/Baku.daylight.short=AZST
-Asia/Baku.generic.short=AZT
-Asia/Baku.standard.short=AZT
-Asia/Bangkok.daylight.short=ICST
-Asia/Bangkok.generic.short=ICT
-Asia/Bangkok.standard.short=ICT
-Asia/Beirut.daylight.short=OESZ
-Asia/Beirut.generic.short=OEZ
-Asia/Beirut.standard.short=OEZ
-Asia/Bishkek.daylight.short=KGST
-Asia/Bishkek.generic.short=KGT
-Asia/Bishkek.standard.short=KGT
-Asia/Brunei.daylight.short=BNST
-Asia/Brunei.generic.short=BNT
-Asia/Brunei.standard.short=BNT
-Asia/Calcutta.daylight.short=IDT
-Asia/Calcutta.generic.short=IT
-Asia/Calcutta.standard.short=IST
-Asia/Choibalsan.daylight.short=CHOST
-Asia/Choibalsan.generic.short=CHOT
-Asia/Choibalsan.standard.short=CHOT
-Asia/Chongqing.daylight.short=CDT
-Asia/Chongqing.generic.short=CT
-Asia/Chongqing.standard.short=CST
-Asia/Chungking.daylight.short=CDT
-Asia/Chungking.generic.short=CT
-Asia/Chungking.standard.short=CST
-Asia/Colombo.daylight.short=IDT
-Asia/Colombo.generic.short=IT
-Asia/Colombo.standard.short=IST
-Asia/Dacca.daylight.short=BDST
-Asia/Dacca.generic.short=BDT
-Asia/Dacca.standard.short=BDT
-Asia/Damascus.daylight.short=OESZ
-Asia/Damascus.generic.short=OEZ
-Asia/Damascus.standard.short=OEZ
-Asia/Dhaka.daylight.short=BDST
-Asia/Dhaka.generic.short=BDT
-Asia/Dhaka.standard.short=BDT
-Asia/Dili.daylight.short=TLST
-Asia/Dili.generic.short=TLT
-Asia/Dili.standard.short=TLT
-Asia/Dubai.daylight.short=GDT
-Asia/Dubai.generic.short=GT
-Asia/Dubai.standard.short=GST
-Asia/Dushanbe.daylight.short=TJST
-Asia/Dushanbe.generic.short=TJT
-Asia/Dushanbe.standard.short=TJT
-Asia/Gaza.daylight.short=OESZ
-Asia/Gaza.generic.short=OEZ
-Asia/Gaza.standard.short=OEZ
-Asia/Harbin.daylight.short=CDT
-Asia/Harbin.generic.short=CT
-Asia/Harbin.standard.short=CST
-Asia/Hebron.daylight.short=OESZ
-Asia/Hebron.generic.short=OEZ
-Asia/Hebron.standard.short=OEZ
-Asia/Ho_Chi_Minh.daylight.short=ICST
-Asia/Ho_Chi_Minh.generic.short=ICT
-Asia/Ho_Chi_Minh.standard.short=ICT
-Asia/Hong_Kong.daylight.short=HKST
-Asia/Hong_Kong.generic.short=HKT
-Asia/Hong_Kong.standard.short=HKT
-Asia/Hovd.daylight.short=HOVST
-Asia/Hovd.generic.short=HOVT
-Asia/Hovd.standard.short=HOVT
-Asia/Irkutsk.daylight.short=IRKST
-Asia/Irkutsk.generic.short=IRKT
-Asia/Irkutsk.standard.short=IRKT
-Asia/Istanbul.daylight.short=OESZ
-Asia/Istanbul.generic.short=OEZ
-Asia/Istanbul.standard.short=OEZ
-Asia/Jakarta.daylight.short=WIST
-Asia/Jakarta.generic.short=WIB
-Asia/Jakarta.standard.short=WIB
-Asia/Jayapura.daylight.short=EIST
-Asia/Jayapura.generic.short=WIT
-Asia/Jayapura.standard.short=WIT
-Asia/Jerusalem.daylight.short=IDT
-Asia/Jerusalem.generic.short=IT
-Asia/Jerusalem.standard.short=IST
-Asia/Kabul.daylight.short=AFST
-Asia/Kabul.generic.short=AFT
-Asia/Kabul.standard.short=AFT
-Asia/Kamchatka.daylight.short=PETST
-Asia/Kamchatka.generic.short=PETT
-Asia/Kamchatka.standard.short=PETT
-Asia/Karachi.daylight.short=PKST
-Asia/Karachi.generic.short=PKT
-Asia/Karachi.standard.short=PKT
-Asia/Kashgar.daylight.short=CDT
-Asia/Kashgar.generic.short=CT
-Asia/Kashgar.standard.short=CST
-Asia/Kathmandu.daylight.short=NPST
-Asia/Kathmandu.generic.short=NPT
-Asia/Kathmandu.standard.short=NPT
-Asia/Katmandu.daylight.short=NPST
-Asia/Katmandu.generic.short=NPT
-Asia/Katmandu.standard.short=NPT
-Asia/Khandyga.daylight.short=YAKST
-Asia/Khandyga.generic.short=YAKT
-Asia/Khandyga.standard.short=YAKT
-Asia/Kolkata.daylight.short=IDT
-Asia/Kolkata.generic.short=IT
-Asia/Kolkata.standard.short=IST
-Asia/Krasnoyarsk.daylight.short=KRAST
-Asia/Krasnoyarsk.generic.short=KRAT
-Asia/Krasnoyarsk.standard.short=KRAT
-Asia/Kuala_Lumpur.daylight.short=MYST
-Asia/Kuala_Lumpur.generic.short=MYT
-Asia/Kuala_Lumpur.standard.short=MYT
-Asia/Kuching.daylight.short=MYST
-Asia/Kuching.generic.short=MYT
-Asia/Kuching.standard.short=MYT
-Asia/Kuwait.daylight.short=ADT
-Asia/Kuwait.generic.short=AT
-Asia/Kuwait.standard.short=AST
-Asia/Macao.daylight.short=CDT
-Asia/Macao.generic.short=CT
-Asia/Macao.standard.short=CST
-Asia/Macau.daylight.short=CDT
-Asia/Macau.generic.short=CT
-Asia/Macau.standard.short=CST
-Asia/Magadan.daylight.short=MAGST
-Asia/Magadan.generic.short=MAGT
-Asia/Magadan.standard.short=MAGT
-Asia/Makassar.daylight.short=CIST
-Asia/Makassar.generic.short=WITA
-Asia/Makassar.standard.short=WITA
-Asia/Manila.daylight.short=PHST
-Asia/Manila.generic.short=PHT
-Asia/Manila.standard.short=PHT
-Asia/Muscat.daylight.short=GDT
-Asia/Muscat.generic.short=GT
-Asia/Muscat.standard.short=GST
-Asia/Nicosia.daylight.short=OESZ
-Asia/Nicosia.generic.short=OEZ
-Asia/Nicosia.standard.short=OEZ
-Asia/Novokuznetsk.daylight.short=NOVST
-Asia/Novokuznetsk.generic.short=NOVT
-Asia/Novokuznetsk.standard.short=NOVT
-Asia/Novosibirsk.daylight.short=NOVST
-Asia/Novosibirsk.generic.short=NOVT
-Asia/Novosibirsk.standard.short=NOVT
-Asia/Omsk.daylight.short=OMSST
-Asia/Omsk.generic.short=OMST
-Asia/Omsk.standard.short=OMST
-Asia/Oral.daylight.short=ORAST
-Asia/Oral.generic.short=ORAT
-Asia/Oral.standard.short=ORAT
-Asia/Phnom_Penh.daylight.short=ICST
-Asia/Phnom_Penh.generic.short=ICT
-Asia/Phnom_Penh.standard.short=ICT
-Asia/Pontianak.daylight.short=WIST
-Asia/Pontianak.generic.short=WIB
-Asia/Pontianak.standard.short=WIB
-Asia/Pyongyang.daylight.short=KDT
-Asia/Pyongyang.generic.short=KT
-Asia/Pyongyang.standard.short=KST
-Asia/Qatar.daylight.short=ADT
-Asia/Qatar.generic.short=AT
-Asia/Qatar.standard.short=AST
-Asia/Qyzylorda.daylight.short=QYZST
-Asia/Qyzylorda.generic.short=QYZT
-Asia/Qyzylorda.standard.short=QYZT
-Asia/Rangoon.daylight.short=MMST
-Asia/Rangoon.generic.short=MMT
-Asia/Rangoon.standard.short=MMT
-Asia/Saigon.daylight.short=ICST
-Asia/Saigon.generic.short=ICT
-Asia/Saigon.standard.short=ICT
-Asia/Sakhalin.daylight.short=SAKST
-Asia/Sakhalin.generic.short=SAKT
-Asia/Sakhalin.standard.short=SAKT
-Asia/Samarkand.daylight.short=UZST
-Asia/Samarkand.generic.short=UZT
-Asia/Samarkand.standard.short=UZT
-Asia/Seoul.daylight.short=KDT
-Asia/Seoul.generic.short=KT
-Asia/Seoul.standard.short=KST
-Asia/Shanghai.daylight.short=CDT
-Asia/Shanghai.generic.short=CT
-Asia/Shanghai.standard.short=CST
-Asia/Singapore.daylight.short=SGST
-Asia/Singapore.generic.short=SGT
-Asia/Singapore.standard.short=SGT
-Asia/Taipei.daylight.short=CDT
-Asia/Taipei.generic.short=CT
-Asia/Taipei.standard.short=CST
-Asia/Tashkent.daylight.short=UZST
-Asia/Tashkent.generic.short=UZT
-Asia/Tashkent.standard.short=UZT
-Asia/Tbilisi.daylight.short=GEST
-Asia/Tbilisi.generic.short=GET
-Asia/Tbilisi.standard.short=GET
-Asia/Tehran.daylight.short=IRDT
-Asia/Tehran.generic.short=IRT
-Asia/Tehran.standard.short=IRST
-Asia/Tel_Aviv.daylight.short=IDT
-Asia/Tel_Aviv.generic.short=IT
-Asia/Tel_Aviv.standard.short=IST
-Asia/Thimbu.daylight.short=BTST
-Asia/Thimbu.generic.short=BTT
-Asia/Thimbu.standard.short=BTT
-Asia/Thimphu.daylight.short=BTST
-Asia/Thimphu.generic.short=BTT
-Asia/Thimphu.standard.short=BTT
-Asia/Tokyo.daylight.short=JDT
-Asia/Tokyo.generic.short=JT
-Asia/Tokyo.standard.short=JST
-Asia/Ujung_Pandang.daylight.short=CIST
-Asia/Ujung_Pandang.generic.short=WITA
-Asia/Ujung_Pandang.standard.short=WITA
-Asia/Ulaanbaatar.daylight.short=ULAST
-Asia/Ulaanbaatar.generic.short=ULAT
-Asia/Ulaanbaatar.standard.short=ULAT
-Asia/Ulan_Bator.daylight.short=ULAST
-Asia/Ulan_Bator.generic.short=ULAT
-Asia/Ulan_Bator.standard.short=ULAT
-Asia/Urumqi.daylight.short=CDT
-Asia/Urumqi.generic.short=CT
-Asia/Urumqi.standard.short=CST
-Asia/Ust-Nera.daylight.short=VLAST
-Asia/Ust-Nera.generic.short=VLAT
-Asia/Ust-Nera.standard.short=VLAT
-Asia/Vientiane.daylight.short=ICST
-Asia/Vientiane.generic.short=ICT
-Asia/Vientiane.standard.short=ICT
-Asia/Vladivostok.daylight.short=VLAST
-Asia/Vladivostok.generic.short=VLAT
-Asia/Vladivostok.standard.short=VLAT
-Asia/Yakutsk.daylight.short=YAKST
-Asia/Yakutsk.generic.short=YAKT
-Asia/Yakutsk.standard.short=YAKT
-Asia/Yekaterinburg.daylight.short=YEKST
-Asia/Yekaterinburg.generic.short=YEKT
-Asia/Yekaterinburg.standard.short=YEKT
-Asia/Yerevan.daylight.short=AMST
-Asia/Yerevan.generic.short=AMT
-Asia/Yerevan.standard.short=AMT
-AST.daylight.short=AKDT
-AST.generic.short=AKT
-AST.standard.short=AKST
-Atlantic/Azores.daylight.short=AZOST
-Atlantic/Azores.generic.short=AZOT
-Atlantic/Azores.standard.short=AZOT
-Atlantic/Bermuda.daylight.short=ADT
-Atlantic/Bermuda.generic.short=AT
-Atlantic/Bermuda.standard.short=AST
-Atlantic/Canary.daylight.short=WESZ
-Atlantic/Canary.generic.short=WEZ
-Atlantic/Canary.standard.short=WEZ
-Atlantic/Cape_Verde.daylight.short=CVST
-Atlantic/Cape_Verde.generic.short=CVT
-Atlantic/Cape_Verde.standard.short=CVT
-Atlantic/Faeroe.daylight.short=WESZ
-Atlantic/Faeroe.generic.short=WEZ
-Atlantic/Faeroe.standard.short=WEZ
-Atlantic/Faroe.daylight.short=WESZ
-Atlantic/Faroe.generic.short=WEZ
-Atlantic/Faroe.standard.short=WEZ
-Atlantic/Jan_Mayen.daylight.short=MESZ
-Atlantic/Jan_Mayen.generic.short=MEZ
-Atlantic/Jan_Mayen.standard.short=MEZ
-Atlantic/Madeira.daylight.short=WESZ
-Atlantic/Madeira.generic.short=WEZ
-Atlantic/Madeira.standard.short=WEZ
-Atlantic/Reykjavik.daylight.short=GMT
-Atlantic/Reykjavik.generic.short=GMT
-Atlantic/Reykjavik.standard.short=GMT
-Atlantic/South_Georgia.daylight.short=GDT
-Atlantic/South_Georgia.generic.short=GT
-Atlantic/South_Georgia.standard.short=GST
-Atlantic/Stanley.daylight.short=FKST
-Atlantic/Stanley.generic.short=FKT
-Atlantic/Stanley.standard.short=FKT
-Atlantic/St_Helena.daylight.short=GMT
-Atlantic/St_Helena.generic.short=GMT
-Atlantic/St_Helena.standard.short=GMT
-Australia/ACT.daylight.short=EST
-Australia/ACT.generic.short=ET
-Australia/ACT.standard.short=EST
-Australia/Adelaide.daylight.short=CST
-Australia/Adelaide.generic.short=CT
-Australia/Adelaide.standard.short=CST
-Australia/Brisbane.daylight.short=EST
-Australia/Brisbane.generic.short=ET
-Australia/Brisbane.standard.short=EST
-Australia/Broken_Hill.daylight.short=CST
-Australia/Broken_Hill.generic.short=CT
-Australia/Broken_Hill.standard.short=CST
-Australia/Canberra.daylight.short=EST
-Australia/Canberra.generic.short=ET
-Australia/Canberra.standard.short=EST
-Australia/Currie.daylight.short=EST
-Australia/Currie.generic.short=ET
-Australia/Currie.standard.short=EST
-Australia/Darwin.daylight.short=CST
-Australia/Darwin.generic.short=CT
-Australia/Darwin.standard.short=CST
-Australia/Eucla.daylight.short=CWST
-Australia/Eucla.generic.short=CWT
-Australia/Eucla.standard.short=CWST
-Australia/Hobart.daylight.short=EST
-Australia/Hobart.generic.short=ET
-Australia/Hobart.standard.short=EST
-Australia/LHI.daylight.short=LHST
-Australia/LHI.generic.short=LHT
-Australia/LHI.standard.short=LHST
-Australia/Lindeman.daylight.short=EST
-Australia/Lindeman.generic.short=ET
-Australia/Lindeman.standard.short=EST
-Australia/Lord_Howe.daylight.short=LHST
-Australia/Lord_Howe.generic.short=LHT
-Australia/Lord_Howe.standard.short=LHST
-Australia/Melbourne.daylight.short=EST
-Australia/Melbourne.generic.short=ET
-Australia/Melbourne.standard.short=EST
-Australia/North.daylight.short=CST
-Australia/North.generic.short=CT
-Australia/North.standard.short=CST
-Australia/NSW.daylight.short=EST
-Australia/NSW.generic.short=ET
-Australia/NSW.standard.short=EST
-Australia/Perth.daylight.short=WST
-Australia/Perth.generic.short=WT
-Australia/Perth.standard.short=WST
-Australia/Queensland.daylight.short=EST
-Australia/Queensland.generic.short=ET
-Australia/Queensland.standard.short=EST
-Australia/South.daylight.short=CST
-Australia/South.generic.short=CT
-Australia/South.standard.short=CST
-Australia/Sydney.daylight.short=EST
-Australia/Sydney.generic.short=ET
-Australia/Sydney.standard.short=EST
-Australia/Tasmania.daylight.short=EST
-Australia/Tasmania.generic.short=ET
-Australia/Tasmania.standard.short=EST
-Australia/Victoria.daylight.short=EST
-Australia/Victoria.generic.short=ET
-Australia/Victoria.standard.short=EST
-Australia/West.daylight.short=WST
-Australia/West.generic.short=WT
-Australia/West.standard.short=WST
-Australia/Yancowinna.daylight.short=CST
-Australia/Yancowinna.generic.short=CT
-Australia/Yancowinna.standard.short=CST
-BET.daylight.short=BRST
-BET.generic.short=BRT
-BET.standard.short=BRT
-Brazil/Acre.daylight.short=ACST
-Brazil/Acre.generic.short=ACT
-Brazil/Acre.standard.short=ACT
-Brazil/DeNoronha.daylight.short=FNST
-Brazil/DeNoronha.generic.short=FNT
-Brazil/DeNoronha.standard.short=FNT
-Brazil/East.daylight.short=BRST
-Brazil/East.generic.short=BRT
-Brazil/East.standard.short=BRT
-Brazil/West.daylight.short=AMST
-Brazil/West.generic.short=AMT
-Brazil/West.standard.short=AMT
-BST.daylight.short=BDST
-BST.generic.short=BDT
-BST.standard.short=BDT
-Canada/Atlantic.daylight.short=ADT
-Canada/Atlantic.generic.short=AT
-Canada/Atlantic.standard.short=AST
-Canada/Central.daylight.short=CDT
-Canada/Central.generic.short=CT
-Canada/Central.standard.short=CST
-Canada/Eastern.daylight.short=EDT
-Canada/Eastern.generic.short=ET
-Canada/Eastern.standard.short=EST
-Canada/East-Saskatchewan.daylight.short=CDT
-Canada/East-Saskatchewan.generic.short=CT
-Canada/East-Saskatchewan.standard.short=CST
-Canada/Mountain.daylight.short=MDT
-Canada/Mountain.generic.short=MT
-Canada/Mountain.standard.short=MST
-Canada/Newfoundland.daylight.short=NDT
-Canada/Newfoundland.generic.short=NT
-Canada/Newfoundland.standard.short=NST
-Canada/Pacific.daylight.short=PDT
-Canada/Pacific.generic.short=PT
-Canada/Pacific.standard.short=PST
-Canada/Saskatchewan.daylight.short=CDT
-Canada/Saskatchewan.generic.short=CT
-Canada/Saskatchewan.standard.short=CST
-Canada/Yukon.daylight.short=PDT
-Canada/Yukon.generic.short=PT
-Canada/Yukon.standard.short=PST
-CAT.daylight.short=CAST
-CAT.generic.short=CAT
-CAT.standard.short=CAT
-CET.daylight.short=MESZ
-CET.generic.short=MEZ
-CET.standard.short=MEZ
-Chile/Continental.daylight.short=CLST
-Chile/Continental.generic.short=CLT
-Chile/Continental.standard.short=CLT
-Chile/EasterIsland.daylight.short=EASST
-Chile/EasterIsland.generic.short=EAST
-Chile/EasterIsland.standard.short=EAST
-CNT.daylight.short=NDT
-CNT.generic.short=NT
-CNT.standard.short=NST
-CST6CDT.daylight.short=CDT
-CST6CDT.generic.short=CT
-CST6CDT.standard.short=CST
-CST.daylight.short=CDT
-CST.generic.short=CT
-CST.standard.short=CST
-CTT.daylight.short=CDT
-CTT.generic.short=CT
-CTT.standard.short=CST
-Cuba.daylight.short=CDT
-Cuba.generic.short=CT
-Cuba.standard.short=CST
-EAT.daylight.short=EAST
-EAT.generic.short=EAT
-EAT.standard.short=EAT
-ECT.daylight.short=MESZ
-ECT.generic.short=MEZ
-ECT.standard.short=MEZ
-EET.daylight.short=OESZ
-EET.generic.short=OEZ
-EET.standard.short=OEZ
-Egypt.daylight.short=OESZ
-Egypt.generic.short=OEZ
-Egypt.standard.short=OEZ
-Eire.daylight.short=IST
-Eire.generic.short=IT
-Eire.standard.short=GMT
-EST5EDT.daylight.short=EDT
-EST5EDT.generic.short=ET
-EST5EDT.standard.short=EST
-EST.daylight.short=EDT
-EST.generic.short=ET
-EST.standard.short=EST
-Etc/Greenwich.daylight.short=GMT
-Etc/Greenwich.generic.short=GMT
-Etc/Greenwich.standard.short=GMT
-Etc/UCT.daylight.short=UTC
-Etc/UCT.generic.short=UTC
-Etc/UCT.standard.short=UTC
-Etc/Universal.daylight.short=UTC
-Etc/Universal.generic.short=UTC
-Etc/Universal.standard.short=UTC
-Etc/UTC.daylight.short=UTC
-Etc/UTC.generic.short=UTC
-Etc/UTC.standard.short=UTC
-Etc/Zulu.daylight.short=UTC
-Etc/Zulu.generic.short=UTC
-Etc/Zulu.standard.short=UTC
-Europe/Amsterdam.daylight.short=MESZ
-Europe/Amsterdam.generic.short=MEZ
-Europe/Amsterdam.standard.short=MEZ
-Europe/Andorra.daylight.short=MESZ
-Europe/Andorra.generic.short=MEZ
-Europe/Andorra.standard.short=MEZ
-Europe/Athens.daylight.short=OESZ
-Europe/Athens.generic.short=OEZ
-Europe/Athens.standard.short=OEZ
-Europe/Belfast.daylight.short=BST
-Europe/Belfast.generic.short=BT
-Europe/Belfast.standard.short=GMT
-Europe/Belgrade.daylight.short=MESZ
-Europe/Belgrade.generic.short=MEZ
-Europe/Belgrade.standard.short=MEZ
-Europe/Berlin.daylight.short=MESZ
-Europe/Berlin.generic.short=MEZ
-Europe/Berlin.standard.short=MEZ
-Europe/Bratislava.daylight.short=MESZ
-Europe/Bratislava.generic.short=MEZ
-Europe/Bratislava.standard.short=MEZ
-Europe/Brussels.daylight.short=MESZ
-Europe/Brussels.generic.short=MEZ
-Europe/Brussels.standard.short=MEZ
-Europe/Bucharest.daylight.short=OESZ
-Europe/Bucharest.generic.short=OEZ
-Europe/Bucharest.standard.short=OEZ
-Europe/Budapest.daylight.short=MESZ
-Europe/Budapest.generic.short=MEZ
-Europe/Budapest.standard.short=MEZ
-Europe/Busingen.daylight.short=MESZ
-Europe/Busingen.generic.short=MEZ
-Europe/Busingen.standard.short=MEZ
-Europe/Chisinau.daylight.short=OESZ
-Europe/Chisinau.generic.short=OEZ
-Europe/Chisinau.standard.short=OEZ
-Europe/Copenhagen.daylight.short=MESZ
-Europe/Copenhagen.generic.short=MEZ
-Europe/Copenhagen.standard.short=MEZ
-Europe/Dublin.daylight.short=IST
-Europe/Dublin.generic.short=IT
-Europe/Dublin.standard.short=GMT
-Europe/Gibraltar.daylight.short=MESZ
-Europe/Gibraltar.generic.short=MEZ
-Europe/Gibraltar.standard.short=MEZ
-Europe/Guernsey.daylight.short=BST
-Europe/Guernsey.generic.short=BT
-Europe/Guernsey.standard.short=GMT
-Europe/Helsinki.daylight.short=OESZ
-Europe/Helsinki.generic.short=OEZ
-Europe/Helsinki.standard.short=OEZ
-Europe/Isle_of_Man.daylight.short=BST
-Europe/Isle_of_Man.generic.short=BT
-Europe/Isle_of_Man.standard.short=GMT
-Europe/Istanbul.daylight.short=OESZ
-Europe/Istanbul.generic.short=OEZ
-Europe/Istanbul.standard.short=OEZ
-Europe/Jersey.daylight.short=BST
-Europe/Jersey.generic.short=BT
-Europe/Jersey.standard.short=GMT
-Europe/Kaliningrad.daylight.short=FEST
-Europe/Kaliningrad.generic.short=FET
-Europe/Kaliningrad.standard.short=FET
-Europe/Kiev.daylight.short=OESZ
-Europe/Kiev.generic.short=OEZ
-Europe/Kiev.standard.short=OEZ
-Europe/Lisbon.daylight.short=WESZ
-Europe/Lisbon.generic.short=WEZ
-Europe/Lisbon.standard.short=WEZ
-Europe/Ljubljana.daylight.short=MESZ
-Europe/Ljubljana.generic.short=MEZ
-Europe/Ljubljana.standard.short=MEZ
-Europe/London.daylight.short=BST
-Europe/London.generic.short=BT
-Europe/London.standard.short=GMT
-Europe/Luxembourg.daylight.short=MESZ
-Europe/Luxembourg.generic.short=MEZ
-Europe/Luxembourg.standard.short=MEZ
-Europe/Madrid.daylight.short=MESZ
-Europe/Madrid.generic.short=MEZ
-Europe/Madrid.standard.short=MEZ
-Europe/Malta.daylight.short=MESZ
-Europe/Malta.generic.short=MEZ
-Europe/Malta.standard.short=MEZ
-Europe/Mariehamn.daylight.short=OESZ
-Europe/Mariehamn.generic.short=OEZ
-Europe/Mariehamn.standard.short=OEZ
-Europe/Minsk.daylight.short=FEST
-Europe/Minsk.generic.short=FET
-Europe/Minsk.standard.short=FET
-Europe/Monaco.daylight.short=MESZ
-Europe/Monaco.generic.short=MEZ
-Europe/Monaco.standard.short=MEZ
-Europe/Moscow.daylight.short=MSD
-Europe/Moscow.generic.short=MT
-Europe/Moscow.standard.short=MSK
-Europe/Nicosia.daylight.short=OESZ
-Europe/Nicosia.generic.short=OEZ
-Europe/Nicosia.standard.short=OEZ
-Europe/Oslo.daylight.short=MESZ
-Europe/Oslo.generic.short=MEZ
-Europe/Oslo.standard.short=MEZ
-Europe/Paris.daylight.short=MESZ
-Europe/Paris.generic.short=MEZ
-Europe/Paris.standard.short=MEZ
-Europe/Podgorica.daylight.short=MESZ
-Europe/Podgorica.generic.short=MEZ
-Europe/Podgorica.standard.short=MEZ
-Europe/Prague.daylight.short=MESZ
-Europe/Prague.generic.short=MEZ
-Europe/Prague.standard.short=MEZ
-Europe/Riga.daylight.short=OESZ
-Europe/Riga.generic.short=OEZ
-Europe/Riga.standard.short=OEZ
-Europe/Rome.daylight.short=MESZ
-Europe/Rome.generic.short=MEZ
-Europe/Rome.standard.short=MEZ
-Europe/Samara.daylight.short=SAMST
-Europe/Samara.generic.short=SAMT
-Europe/Samara.standard.short=SAMT
-Europe/San_Marino.daylight.short=MESZ
-Europe/San_Marino.generic.short=MEZ
-Europe/San_Marino.standard.short=MEZ
-Europe/Sarajevo.daylight.short=MESZ
-Europe/Sarajevo.generic.short=MEZ
-Europe/Sarajevo.standard.short=MEZ
-Europe/Simferopol.daylight.short=OESZ
-Europe/Simferopol.generic.short=OEZ
-Europe/Simferopol.standard.short=OEZ
-Europe/Skopje.daylight.short=MESZ
-Europe/Skopje.generic.short=MEZ
-Europe/Skopje.standard.short=MEZ
-Europe/Sofia.daylight.short=OESZ
-Europe/Sofia.generic.short=OEZ
-Europe/Sofia.standard.short=OEZ
-Europe/Stockholm.daylight.short=MESZ
-Europe/Stockholm.generic.short=MEZ
-Europe/Stockholm.standard.short=MEZ
-Europe/Tallinn.daylight.short=OESZ
-Europe/Tallinn.generic.short=OEZ
-Europe/Tallinn.standard.short=OEZ
-Europe/Tirane.daylight.short=MESZ
-Europe/Tirane.generic.short=MEZ
-Europe/Tirane.standard.short=MEZ
-Europe/Tiraspol.daylight.short=OESZ
-Europe/Tiraspol.generic.short=OEZ
-Europe/Tiraspol.standard.short=OEZ
-Europe/Uzhgorod.daylight.short=OESZ
-Europe/Uzhgorod.generic.short=OEZ
-Europe/Uzhgorod.standard.short=OEZ
-Europe/Vaduz.daylight.short=MESZ
-Europe/Vaduz.generic.short=MEZ
-Europe/Vaduz.standard.short=MEZ
-Europe/Vatican.daylight.short=MESZ
-Europe/Vatican.generic.short=MEZ
-Europe/Vatican.standard.short=MEZ
-Europe/Vienna.daylight.short=MESZ
-Europe/Vienna.generic.short=MEZ
-Europe/Vienna.standard.short=MEZ
-Europe/Vilnius.daylight.short=OESZ
-Europe/Vilnius.generic.short=OEZ
-Europe/Vilnius.standard.short=OEZ
-Europe/Volgograd.daylight.short=VOLST
-Europe/Volgograd.generic.short=VOLT
-Europe/Volgograd.standard.short=VOLT
-Europe/Warsaw.daylight.short=MESZ
-Europe/Warsaw.generic.short=MEZ
-Europe/Warsaw.standard.short=MEZ
-Europe/Zagreb.daylight.short=MESZ
-Europe/Zagreb.generic.short=MEZ
-Europe/Zagreb.standard.short=MEZ
-Europe/Zaporozhye.daylight.short=OESZ
-Europe/Zaporozhye.generic.short=OEZ
-Europe/Zaporozhye.standard.short=OEZ
-Europe/Zurich.daylight.short=MESZ
-Europe/Zurich.generic.short=MEZ
-Europe/Zurich.standard.short=MEZ
-GB.daylight.short=BST
-GB-Eire.daylight.short=BST
-GB-Eire.generic.short=BT
-GB-Eire.standard.short=GMT
-GB.generic.short=BT
-GB.standard.short=GMT
-GMT.daylight.short=GMT
-GMT.generic.short=GMT
-GMT.standard.short=GMT
-Greenwich.daylight.short=GMT
-Greenwich.generic.short=GMT
-Greenwich.standard.short=GMT
-Hongkong.daylight.short=HKST
-Hongkong.generic.short=HKT
-Hongkong.standard.short=HKT
-HST.daylight.short=HDT
-HST.generic.short=HT
-HST.standard.short=HST
-Iceland.daylight.short=GMT
-Iceland.generic.short=GMT
-Iceland.standard.short=GMT
-IET.daylight.short=EDT
-IET.generic.short=ET
-IET.standard.short=EST
-Indian/Antananarivo.daylight.short=EAST
-Indian/Antananarivo.generic.short=EAT
-Indian/Antananarivo.standard.short=EAT
-Indian/Chagos.daylight.short=IOST
-Indian/Chagos.generic.short=IOT
-Indian/Chagos.standard.short=IOT
-Indian/Christmas.daylight.short=CXST
-Indian/Christmas.generic.short=CIT
-Indian/Christmas.standard.short=CXT
-Indian/Cocos.daylight.short=CCST
-Indian/Cocos.generic.short=CCT
-Indian/Cocos.standard.short=CCT
-Indian/Comoro.daylight.short=EAST
-Indian/Comoro.generic.short=EAT
-Indian/Comoro.standard.short=EAT
-Indian/Kerguelen.daylight.short=TFST
-Indian/Kerguelen.generic.short=TFT
-Indian/Kerguelen.standard.short=TFT
-Indian/Mahe.daylight.short=SCST
-Indian/Mahe.generic.short=SCT
-Indian/Mahe.standard.short=SCT
-Indian/Maldives.daylight.short=MVST
-Indian/Maldives.generic.short=MVT
-Indian/Maldives.standard.short=MVT
-Indian/Mauritius.daylight.short=MUST
-Indian/Mauritius.generic.short=MUT
-Indian/Mauritius.standard.short=MUT
-Indian/Mayotte.daylight.short=EAST
-Indian/Mayotte.generic.short=EAT
-Indian/Mayotte.standard.short=EAT
-Indian/Reunion.daylight.short=REST
-Indian/Reunion.generic.short=RET
-Indian/Reunion.standard.short=RET
-Iran.daylight.short=IRDT
-Iran.generic.short=IRT
-Iran.standard.short=IRST
-Israel.daylight.short=IDT
-Israel.generic.short=IT
-Israel.standard.short=IST
-IST.daylight.short=IDT
-IST.generic.short=IT
-IST.standard.short=IST
-Jamaica.daylight.short=EDT
-Jamaica.generic.short=ET
-Jamaica.standard.short=EST
-Japan.daylight.short=JDT
-Japan.generic.short=JT
-Japan.standard.short=JST
-JST.daylight.short=JDT
-JST.generic.short=JT
-JST.standard.short=JST
-Kwajalein.daylight.short=MHST
-Kwajalein.generic.short=MHT
-Kwajalein.standard.short=MHT
-Libya.daylight.short=OESZ
-Libya.generic.short=OEZ
-Libya.standard.short=OEZ
-MET.daylight.short=MEST
-MET.generic.short=MET
-MET.standard.short=MET
-Mexico/BajaNorte.daylight.short=PDT
-Mexico/BajaNorte.generic.short=PT
-Mexico/BajaNorte.standard.short=PST
-Mexico/BajaSur.daylight.short=MDT
-Mexico/BajaSur.generic.short=MT
-Mexico/BajaSur.standard.short=MST
-Mexico/General.daylight.short=CDT
-Mexico/General.generic.short=CT
-Mexico/General.standard.short=CST
-MIT.daylight.short=WSDT
-MIT.generic.short=WST
-MIT.standard.short=WST
-MST7MDT.daylight.short=MDT
-MST7MDT.generic.short=MT
-MST7MDT.standard.short=MST
-MST.daylight.short=MDT
-MST.generic.short=MT
-MST.standard.short=MST
-Navajo.daylight.short=MDT
-Navajo.generic.short=MT
-Navajo.standard.short=MST
-NET.daylight.short=AMST
-NET.generic.short=AMT
-NET.standard.short=AMT
-NST.daylight.short=NZDT
-NST.generic.short=NZT
-NST.standard.short=NZST
-NZ-CHAT.daylight.short=CHADT
-NZ-CHAT.generic.short=CHAT
-NZ-CHAT.standard.short=CHAST
-NZ.daylight.short=NZDT
-NZ.generic.short=NZT
-NZ.standard.short=NZST
-Pacific/Apia.daylight.short=WSDT
-Pacific/Apia.generic.short=WST
-Pacific/Apia.standard.short=WST
-Pacific/Auckland.daylight.short=NZDT
-Pacific/Auckland.generic.short=NZT
-Pacific/Auckland.standard.short=NZST
-Pacific/Chatham.daylight.short=CHADT
-Pacific/Chatham.generic.short=CHAT
-Pacific/Chatham.standard.short=CHAST
-Pacific/Chuuk.daylight.short=CHUST
-Pacific/Chuuk.generic.short=CHUT
-Pacific/Chuuk.standard.short=CHUT
-Pacific/Easter.daylight.short=EASST
-Pacific/Easter.generic.short=EAST
-Pacific/Easter.standard.short=EAST
-Pacific/Efate.daylight.short=VUST
-Pacific/Efate.generic.short=VUT
-Pacific/Efate.standard.short=VUT
-Pacific/Enderbury.daylight.short=PHOST
-Pacific/Enderbury.generic.short=PHOT
-Pacific/Enderbury.standard.short=PHOT
-Pacific/Fakaofo.daylight.short=TKST
-Pacific/Fakaofo.generic.short=TKT
-Pacific/Fakaofo.standard.short=TKT
-Pacific/Fiji.daylight.short=FJST
-Pacific/Fiji.generic.short=FJT
-Pacific/Fiji.standard.short=FJT
-Pacific/Funafuti.daylight.short=TVST
-Pacific/Funafuti.generic.short=TVT
-Pacific/Funafuti.standard.short=TVT
-Pacific/Galapagos.daylight.short=GALST
-Pacific/Galapagos.generic.short=GALT
-Pacific/Galapagos.standard.short=GALT
-Pacific/Gambier.daylight.short=GAMST
-Pacific/Gambier.generic.short=GAMT
-Pacific/Gambier.standard.short=GAMT
-Pacific/Guadalcanal.daylight.short=SBST
-Pacific/Guadalcanal.generic.short=SBT
-Pacific/Guadalcanal.standard.short=SBT
-Pacific/Guam.daylight.short=ChDT
-Pacific/Guam.generic.short=ChT
-Pacific/Guam.standard.short=ChST
-Pacific/Honolulu.daylight.short=HDT
-Pacific/Honolulu.generic.short=HT
-Pacific/Honolulu.standard.short=HST
-Pacific/Johnston.daylight.short=HDT
-Pacific/Johnston.generic.short=HT
-Pacific/Johnston.standard.short=HST
-Pacific/Kiritimati.daylight.short=LINST
-Pacific/Kiritimati.generic.short=LINT
-Pacific/Kiritimati.standard.short=LINT
-Pacific/Kosrae.daylight.short=KOSST
-Pacific/Kosrae.generic.short=KOST
-Pacific/Kosrae.standard.short=KOST
-Pacific/Kwajalein.daylight.short=MHST
-Pacific/Kwajalein.generic.short=MHT
-Pacific/Kwajalein.standard.short=MHT
-Pacific/Majuro.daylight.short=MHST
-Pacific/Majuro.generic.short=MHT
-Pacific/Majuro.standard.short=MHT
-Pacific/Marquesas.daylight.short=MARST
-Pacific/Marquesas.generic.short=MART
-Pacific/Marquesas.standard.short=MART
-Pacific/Midway.daylight.short=SDT
-Pacific/Midway.generic.short=ST
-Pacific/Midway.standard.short=SST
-Pacific/Nauru.daylight.short=NRST
-Pacific/Nauru.generic.short=NRT
-Pacific/Nauru.standard.short=NRT
-Pacific/Niue.daylight.short=NUST
-Pacific/Niue.generic.short=NUT
-Pacific/Niue.standard.short=NUT
-Pacific/Norfolk.daylight.short=NFST
-Pacific/Norfolk.generic.short=NFT
-Pacific/Norfolk.standard.short=NFT
-Pacific/Noumea.daylight.short=NCST
-Pacific/Noumea.generic.short=NCT
-Pacific/Noumea.standard.short=NCT
-Pacific/Pago_Pago.daylight.short=SDT
-Pacific/Pago_Pago.generic.short=ST
-Pacific/Pago_Pago.standard.short=SST
-Pacific/Palau.daylight.short=PWST
-Pacific/Palau.generic.short=PWT
-Pacific/Palau.standard.short=PWT
-Pacific/Pitcairn.daylight.short=PDT
-Pacific/Pitcairn.generic.short=PT
-Pacific/Pitcairn.standard.short=PST
-Pacific/Pohnpei.daylight.short=PONST
-Pacific/Pohnpei.generic.short=PONT
-Pacific/Pohnpei.standard.short=PONT
-Pacific/Ponape.daylight.short=PONST
-Pacific/Ponape.generic.short=PONT
-Pacific/Ponape.standard.short=PONT
-Pacific/Port_Moresby.daylight.short=PGST
-Pacific/Port_Moresby.generic.short=PGT
-Pacific/Port_Moresby.standard.short=PGT
-Pacific/Rarotonga.daylight.short=CKHST
-Pacific/Rarotonga.generic.short=CKT
-Pacific/Rarotonga.standard.short=CKT
-Pacific/Saipan.daylight.short=ChDT
-Pacific/Saipan.generic.short=ChT
-Pacific/Saipan.standard.short=ChST
-Pacific/Samoa.daylight.short=SDT
-Pacific/Samoa.generic.short=ST
-Pacific/Samoa.standard.short=SST
-Pacific/Tahiti.daylight.short=TAHST
-Pacific/Tahiti.generic.short=TAHT
-Pacific/Tahiti.standard.short=TAHT
-Pacific/Tarawa.daylight.short=GILST
-Pacific/Tarawa.generic.short=GILT
-Pacific/Tarawa.standard.short=GILT
-Pacific/Tongatapu.daylight.short=TOST
-Pacific/Tongatapu.generic.short=TOT
-Pacific/Tongatapu.standard.short=TOT
-Pacific/Truk.daylight.short=CHUST
-Pacific/Truk.generic.short=CHUT
-Pacific/Truk.standard.short=CHUT
-Pacific/Wake.daylight.short=WAKST
-Pacific/Wake.generic.short=WAKT
-Pacific/Wake.standard.short=WAKT
-Pacific/Wallis.daylight.short=WFST
-Pacific/Wallis.generic.short=WFT
-Pacific/Wallis.standard.short=WFT
-Pacific/Yap.daylight.short=CHUST
-Pacific/Yap.generic.short=CHUT
-Pacific/Yap.standard.short=CHUT
-PLT.daylight.short=PKST
-PLT.generic.short=PKT
-PLT.standard.short=PKT
-PNT.daylight.short=MDT
-PNT.generic.short=MT
-PNT.standard.short=MST
-Poland.daylight.short=MESZ
-Poland.generic.short=MEZ
-Poland.standard.short=MEZ
-Portugal.daylight.short=WESZ
-Portugal.generic.short=WEZ
-Portugal.standard.short=WEZ
-PRC.daylight.short=CDT
-PRC.generic.short=CT
-PRC.standard.short=CST
-PRT.daylight.short=ADT
-PRT.generic.short=AT
-PRT.standard.short=AST
-PST8PDT.daylight.short=PDT
-PST8PDT.generic.short=PT
-PST8PDT.standard.short=PST
-PST.daylight.short=PDT
-PST.generic.short=PT
-PST.standard.short=PST
-ROK.daylight.short=KDT
-ROK.generic.short=KT
-ROK.standard.short=KST
-Singapore.daylight.short=SGST
-Singapore.generic.short=SGT
-Singapore.standard.short=SGT
-SST.daylight.short=SBST
-SST.generic.short=SBT
-SST.standard.short=SBT
-SystemV/AST4ADT.daylight.short=ADT
-SystemV/AST4ADT.generic.short=AT
-SystemV/AST4ADT.standard.short=AST
-SystemV/AST4.daylight.short=ADT
-SystemV/AST4.generic.short=AT
-SystemV/AST4.standard.short=AST
-SystemV/CST6CDT.daylight.short=CDT
-SystemV/CST6CDT.generic.short=CT
-SystemV/CST6CDT.standard.short=CST
-SystemV/CST6.daylight.short=CDT
-SystemV/CST6.generic.short=CT
-SystemV/CST6.standard.short=CST
-SystemV/EST5.daylight.short=EDT
-SystemV/EST5EDT.daylight.short=EDT
-SystemV/EST5EDT.generic.short=ET
-SystemV/EST5EDT.standard.short=EST
-SystemV/EST5.generic.short=ET
-SystemV/EST5.standard.short=EST
-SystemV/HST10.daylight.short=HDT
-SystemV/HST10.generic.short=HT
-SystemV/HST10.standard.short=HST
-SystemV/MST7.daylight.short=MDT
-SystemV/MST7.generic.short=MT
-SystemV/MST7MDT.daylight.short=MDT
-SystemV/MST7MDT.generic.short=MT
-SystemV/MST7MDT.standard.short=MST
-SystemV/MST7.standard.short=MST
-SystemV/PST8.daylight.short=PDT
-SystemV/PST8.generic.short=PT
-SystemV/PST8PDT.daylight.short=PDT
-SystemV/PST8PDT.generic.short=PT
-SystemV/PST8PDT.standard.short=PST
-SystemV/PST8.standard.short=PST
-SystemV/YST9.daylight.short=AKDT
-SystemV/YST9.generic.short=AKT
-SystemV/YST9.standard.short=AKST
-SystemV/YST9YDT.daylight.short=AKDT
-SystemV/YST9YDT.generic.short=AKT
-SystemV/YST9YDT.standard.short=AKST
-Turkey.daylight.short=OESZ
-Turkey.generic.short=OEZ
-Turkey.standard.short=OEZ
-UCT.daylight.short=UTC
-UCT.generic.short=UTC
-UCT.standard.short=UTC
-Universal.daylight.short=UTC
-Universal.generic.short=UTC
-Universal.standard.short=UTC
-US/Alaska.daylight.short=AKDT
-US/Alaska.generic.short=AKT
-US/Alaska.standard.short=AKST
-US/Aleutian.daylight.short=HADT
-US/Aleutian.generic.short=HAT
-US/Aleutian.standard.short=HAST
-US/Arizona.daylight.short=MDT
-US/Arizona.generic.short=MT
-US/Arizona.standard.short=MST
-US/Central.daylight.short=CDT
-US/Central.generic.short=CT
-US/Central.standard.short=CST
-US/Eastern.daylight.short=EDT
-US/Eastern.generic.short=ET
-US/Eastern.standard.short=EST
-US/East-Indiana.daylight.short=EDT
-US/East-Indiana.generic.short=ET
-US/East-Indiana.standard.short=EST
-US/Hawaii.daylight.short=HDT
-US/Hawaii.generic.short=HT
-US/Hawaii.standard.short=HST
-US/Indiana-Starke.daylight.short=CDT
-US/Indiana-Starke.generic.short=CT
-US/Indiana-Starke.standard.short=CST
-US/Michigan.daylight.short=EDT
-US/Michigan.generic.short=ET
-US/Michigan.standard.short=EST
-US/Mountain.daylight.short=MDT
-US/Mountain.generic.short=MT
-US/Mountain.standard.short=MST
-US/Pacific.daylight.short=PDT
-US/Pacific.generic.short=PT
-US/Pacific-New.daylight.short=PDT
-US/Pacific-New.generic.short=PT
-US/Pacific-New.standard.short=PST
-US/Pacific.standard.short=PST
-US/Samoa.daylight.short=SDT
-US/Samoa.generic.short=ST
-US/Samoa.standard.short=SST
-UTC.daylight.short=UTC
-UTC.generic.short=UTC
-UTC.standard.short=UTC
-VST.daylight.short=ICST
-VST.generic.short=ICT
-VST.standard.short=ICT
-WET.daylight.short=WESZ
-WET.generic.short=WEZ
-WET.standard.short=WEZ
-W-SU.daylight.short=MSD
-W-SU.generic.short=MT
-W-SU.standard.short=MSK
-Zulu.daylight.short=UTC
-Zulu.generic.short=UTC
-Zulu.standard.short=UTC
diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_es.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_es.properties
deleted file mode 100644
index 830f0d2..0000000
--- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_es.properties
+++ /dev/null
@@ -1,651 +0,0 @@
-ACT.daylight.long=Hora de verano Central (territorio del Norte)
-ACT.generic.long=Hora Central (Territorio Septentrional)
-ACT.standard.long=Hora est\u00E1ndar Central (territorio del Norte)
-AET.daylight.long=Hora de verano Oriental (Nueva Gales del Sur)
-AET.generic.long=Hora Oriental (Nueva Gales del Sur)
-AET.standard.long=Hora est\u00E1ndar Oriental (Nueva Gales del Sur)
-AGT.generic.long=Hora de Argentina
-ART.generic.long=Hora de Europa Oriental
-AST.generic.long=Hora de Alaska
-Africa/Abidjan.generic.long=Hora del Meridiano de Greenwich
-Africa/Accra.generic.long=Hora central de Ghana
-Africa/Addis_Ababa.generic.long=Hora de \u00C1frica Oriental
-Africa/Algiers.generic.long=Hora de Europa Central
-Africa/Asmara.generic.long=Hora de \u00C1frica Oriental
-Africa/Asmera.generic.long=Hora de \u00C1frica Oriental
-Africa/Bamako.generic.long=Hora del Meridiano de Greenwich
-Africa/Bangui.generic.long=Hora de \u00C1frica Occidental
-Africa/Banjul.generic.long=Hora del Meridiano de Greenwich
-Africa/Bissau.generic.long=Hora del Meridiano de Greenwich
-Africa/Blantyre.generic.long=Hora de \u00C1frica Central
-Africa/Brazzaville.generic.long=Hora de \u00C1frica Occidental
-Africa/Bujumbura.generic.long=Hora de \u00C1frica Central
-Africa/Cairo.generic.long=Hora de Europa Oriental
-Africa/Casablanca.generic.long=Hora de Europa Occidental
-Africa/Ceuta.generic.long=Hora de Europa Central
-Africa/Conakry.generic.long=Hora del Meridiano de Greenwich
-Africa/Dakar.generic.long=Hora del Meridiano de Greenwich
-Africa/Dar_es_Salaam.generic.long=Hora de \u00C1frica Oriental
-Africa/Djibouti.generic.long=Hora de \u00C1frica Oriental
-Africa/Douala.generic.long=Hora de \u00C1frica Occidental
-Africa/El_Aaiun.generic.long=Hora de Europa Occidental
-Africa/Freetown.generic.long=Horario de Sierra Leona
-Africa/Gaborone.generic.long=Hora de \u00C1frica Central
-Africa/Harare.generic.long=Hora de \u00C1frica Central
-Africa/Johannesburg.generic.long=Hora de Sud\u00E1frica
-Africa/Juba.generic.long=Hora de \u00C1frica Oriental
-Africa/Kampala.generic.long=Hora de \u00C1frica Oriental
-Africa/Khartoum.generic.long=Hora de \u00C1frica Oriental
-Africa/Kigali.generic.long=Hora de \u00C1frica Central
-Africa/Kinshasa.generic.long=Hora de \u00C1frica Occidental
-Africa/Lagos.generic.long=Hora de \u00C1frica Occidental
-Africa/Libreville.generic.long=Hora de \u00C1frica Occidental
-Africa/Lome.generic.long=Hora del Meridiano de Greenwich
-Africa/Luanda.generic.long=Hora de \u00C1frica Occidental
-Africa/Lubumbashi.generic.long=Hora de \u00C1frica Central
-Africa/Lusaka.generic.long=Hora de \u00C1frica Central
-Africa/Malabo.generic.long=Hora de \u00C1frica Occidental
-Africa/Maputo.generic.long=Hora de \u00C1frica Central
-Africa/Maseru.generic.long=Hora de Sud\u00E1frica
-Africa/Mbabane.generic.long=Hora de Sud\u00E1frica
-Africa/Mogadishu.generic.long=Hora de \u00C1frica Oriental
-Africa/Monrovia.generic.long=Hora del Meridiano de Greenwich
-Africa/Nairobi.generic.long=Hora de \u00C1frica Oriental
-Africa/Ndjamena.generic.long=Hora de \u00C1frica Occidental
-Africa/Niamey.generic.long=Hora de \u00C1frica Occidental
-Africa/Nouakchott.generic.long=Hora del Meridiano de Greenwich
-Africa/Ouagadougou.generic.long=Hora del Meridiano de Greenwich
-Africa/Porto-Novo.generic.long=Hora de \u00C1frica Occidental
-Africa/Sao_Tome.generic.long=Hora del Meridiano de Greenwich
-Africa/Timbuktu.generic.long=Hora del Meridiano de Greenwich
-Africa/Tripoli.generic.long=Hora de Europa Oriental
-Africa/Tunis.generic.long=Hora de Europa Central
-Africa/Windhoek.generic.long=Hora de \u00C1frica Occidental
-America/Adak.generic.long=Hora de Hawaii-Aleutian
-America/Anchorage.generic.long=Hora de Alaska
-America/Anguilla.generic.long=Hora del Atl\u00E1ntico
-America/Antigua.generic.long=Hora del Atl\u00E1ntico
-America/Araguaina.generic.long=Hora de Brasil
-America/Argentina/Buenos_Aires.generic.long=Hora de Argentina
-America/Argentina/Catamarca.generic.long=Hora de Argentina
-America/Argentina/ComodRivadavia.generic.long=Hora de Argentina
-America/Argentina/Cordoba.generic.long=Hora de Argentina
-America/Argentina/Jujuy.generic.long=Hora de Argentina
-America/Argentina/La_Rioja.generic.long=Hora de Argentina
-America/Argentina/Mendoza.generic.long=Hora de Argentina
-America/Argentina/Rio_Gallegos.generic.long=Hora de Argentina
-America/Argentina/Salta.generic.long=Hora de Argentina
-America/Argentina/San_Juan.generic.long=Hora de Argentina
-America/Argentina/San_Luis.generic.long=Hora de Argentina
-America/Argentina/Tucuman.generic.long=Hora de Argentina
-America/Argentina/Ushuaia.generic.long=Hora de Argentina
-America/Aruba.generic.long=Hora del Atl\u00E1ntico
-America/Asuncion.generic.long=Hora de Paraguay
-America/Atikokan.generic.long=Hora Oriental
-America/Atka.generic.long=Hora de Hawaii-Aleutian
-America/Bahia.generic.long=Hora de Brasil
-America/Bahia_Banderas.generic.long=Hora Central
-America/Barbados.generic.long=Hora del Atl\u00E1ntico
-America/Belem.generic.long=Hora de Brasil
-America/Belize.generic.long=Hora Central
-America/Blanc-Sablon.generic.long=Hora del Atl\u00E1ntico
-America/Boa_Vista.generic.long=Hora est\u00E1ndar de Amazonia
-America/Bogota.generic.long=Hora de Colombia
-America/Boise.generic.long=Hora de las Monta\u00F1as Rocosas
-America/Buenos_Aires.generic.long=Hora de Argentina
-America/Cambridge_Bay.generic.long=Hora de las Monta\u00F1as Rocosas
-America/Campo_Grande.generic.long=Hora est\u00E1ndar de Amazonia
-America/Cancun.generic.long=Hora Central
-America/Caracas.generic.long=Hora de Venezuela
-America/Catamarca.generic.long=Hora de Argentina
-America/Cayenne.generic.long=Hora de la Guayana Francesa
-America/Cayman.generic.long=Hora Oriental
-America/Chicago.generic.long=Hora Central
-America/Chihuahua.generic.long=Hora de las Monta\u00F1as Rocosas
-America/Coral_Harbour.generic.long=Hora Oriental
-America/Cordoba.generic.long=Hora de Argentina
-America/Costa_Rica.generic.long=Hora Central
-America/Creston.generic.long=Hora de las Monta\u00F1as Rocosas
-America/Cuiaba.generic.long=Hora est\u00E1ndar de Amazonia
-America/Curacao.generic.long=Hora del Atl\u00E1ntico
-America/Danmarkshavn.generic.long=Hora del Meridiano de Greenwich
-America/Dawson.generic.long=Hora del Pac\u00EDfico
-America/Dawson_Creek.generic.long=Hora de las Monta\u00F1as Rocosas
-America/Denver.generic.long=Hora de las Monta\u00F1as Rocosas
-America/Detroit.generic.long=Hora Oriental
-America/Dominica.generic.long=Hora del Atl\u00E1ntico
-America/Edmonton.generic.long=Hora de las Monta\u00F1as Rocosas
-America/Eirunepe.generic.long=Hora de Acre
-America/El_Salvador.generic.long=Hora Central
-America/Ensenada.generic.long=Hora del Pac\u00EDfico
-America/Fort_Wayne.generic.long=Hora Oriental
-America/Fortaleza.generic.long=Hora de Brasil
-America/Glace_Bay.generic.long=Hora del Atl\u00E1ntico
-America/Godthab.generic.long=Hora de Groenlandia Occidental
-America/Goose_Bay.generic.long=Hora del Atl\u00E1ntico
-America/Grand_Turk.generic.long=Hora Oriental
-America/Grenada.generic.long=Hora del Atl\u00E1ntico
-America/Guadeloupe.generic.long=Hora del Atl\u00E1ntico
-America/Guatemala.generic.long=Hora Central
-America/Guayaquil.generic.long=Hora de Ecuador
-America/Guyana.generic.long=Hora de Guyana
-America/Halifax.generic.long=Hora del Atl\u00E1ntico
-America/Havana.generic.long=Hora de Cuba
-America/Hermosillo.generic.long=Hora de las Monta\u00F1as Rocosas
-America/Indiana/Indianapolis.generic.long=Hora Oriental
-America/Indiana/Knox.generic.long=Hora Central
-America/Indiana/Marengo.generic.long=Hora Oriental
-America/Indiana/Petersburg.generic.long=Hora Oriental
-America/Indiana/Tell_City.generic.long=Hora Central
-America/Indiana/Vevay.generic.long=Hora Oriental
-America/Indiana/Vincennes.generic.long=Hora Oriental
-America/Indiana/Winamac.generic.long=Hora Oriental
-America/Indianapolis.generic.long=Hora Oriental
-America/Inuvik.generic.long=Hora de las Monta\u00F1as Rocosas
-America/Iqaluit.generic.long=Hora Oriental
-America/Jamaica.generic.long=Hora Oriental
-America/Jujuy.generic.long=Hora de Argentina
-America/Juneau.generic.long=Hora de Alaska
-America/Kentucky/Louisville.generic.long=Hora Oriental
-America/Kentucky/Monticello.generic.long=Hora Oriental
-America/Knox_IN.generic.long=Hora Central
-America/Kralendijk.generic.long=Hora del Atl\u00E1ntico
-America/La_Paz.generic.long=Hora de Bolivia
-America/Lima.generic.long=Hora de Per\u00FA
-America/Los_Angeles.generic.long=Hora del Pac\u00EDfico
-America/Louisville.generic.long=Hora Oriental
-America/Lower_Princes.generic.long=Hora del Atl\u00E1ntico
-America/Maceio.generic.long=Hora de Brasil
-America/Managua.generic.long=Hora Central
-America/Manaus.generic.long=Hora est\u00E1ndar de Amazonia
-America/Marigot.generic.long=Hora del Atl\u00E1ntico
-America/Martinique.generic.long=Hora del Atl\u00E1ntico
-America/Matamoros.generic.long=Hora Central
-America/Mazatlan.generic.long=Hora de las Monta\u00F1as Rocosas
-America/Mendoza.generic.long=Hora de Argentina
-America/Menominee.generic.long=Hora Central
-America/Merida.generic.long=Hora Central
-America/Metlakatla.daylight.long=Hora de verano de Metlakatla
-America/Metlakatla.generic.long=Metlakatla Time
-America/Metlakatla.standard.long=Hora de Metlakatla
-America/Mexico_City.generic.long=Hora Central
-America/Miquelon.generic.long=Hora de San Pedro y Miquel\u00F3n
-America/Moncton.generic.long=Hora del Atl\u00E1ntico
-America/Monterrey.generic.long=Hora Central
-America/Montevideo.generic.long=Hora de Uruguay
-America/Montreal.generic.long=Hora Oriental
-America/Montserrat.generic.long=Hora del Atl\u00E1ntico
-America/Nassau.generic.long=Hora Oriental
-America/New_York.generic.long=Hora Oriental
-America/Nipigon.generic.long=Hora Oriental
-America/Nome.generic.long=Hora de Alaska
-America/Noronha.generic.long=Hora de Fernando de Noronha
-America/North_Dakota/Beulah.generic.long=Hora Central
-America/North_Dakota/Center.generic.long=Hora Central
-America/North_Dakota/New_Salem.generic.long=Hora Central
-America/Ojinaga.generic.long=Hora de las Monta\u00F1as Rocosas
-America/Panama.generic.long=Hora Oriental
-America/Pangnirtung.generic.long=Hora Oriental
-America/Paramaribo.generic.long=Hora de Surinam
-America/Phoenix.generic.long=Hora de las Monta\u00F1as Rocosas
-America/Port-au-Prince.generic.long=Hora Oriental
-America/Port_of_Spain.generic.long=Hora del Atl\u00E1ntico
-America/Porto_Acre.generic.long=Hora de Acre
-America/Porto_Velho.generic.long=Hora est\u00E1ndar de Amazonia
-America/Puerto_Rico.generic.long=Hora del Atl\u00E1ntico
-America/Rainy_River.generic.long=Hora Central
-America/Rankin_Inlet.generic.long=Hora Central
-America/Recife.generic.long=Hora de Brasil
-America/Regina.generic.long=Hora Central
-America/Resolute.generic.long=Hora Central
-America/Rio_Branco.generic.long=Hora de Acre
-America/Rosario.generic.long=Hora de Argentina
-America/Santa_Isabel.generic.long=Hora del Pac\u00EDfico
-America/Santarem.generic.long=Hora de Brasil
-America/Santiago.generic.long=Hora de Chile
-America/Santo_Domingo.generic.long=Hora del Atl\u00E1ntico
-America/Sao_Paulo.generic.long=Hora de Brasil
-America/Scoresbysund.generic.long=Hora de Groenlandia Oriental
-America/Shiprock.generic.long=Hora de las Monta\u00F1as Rocosas
-America/Sitka.generic.long=Hora de Alaska
-America/St_Barthelemy.generic.long=Hora del Atl\u00E1ntico
-America/St_Johns.generic.long=Hora de Terranova
-America/St_Kitts.generic.long=Hora del Atl\u00E1ntico
-America/St_Lucia.generic.long=Hora del Atl\u00E1ntico
-America/St_Thomas.generic.long=Hora del Atl\u00E1ntico
-America/St_Vincent.generic.long=Hora del Atl\u00E1ntico
-America/Swift_Current.generic.long=Hora Central
-America/Tegucigalpa.generic.long=Hora Central
-America/Thule.generic.long=Hora del Atl\u00E1ntico
-America/Thunder_Bay.generic.long=Hora Oriental
-America/Tijuana.generic.long=Hora del Pac\u00EDfico
-America/Toronto.generic.long=Hora Oriental
-America/Tortola.generic.long=Hora del Atl\u00E1ntico
-America/Vancouver.generic.long=Hora del Pac\u00EDfico
-America/Virgin.generic.long=Hora del Atl\u00E1ntico
-America/Whitehorse.generic.long=Hora del Pac\u00EDfico
-America/Winnipeg.generic.long=Hora Central
-America/Yakutat.generic.long=Hora de Alaska
-America/Yellowknife.generic.long=Hora de las Monta\u00F1as Rocosas
-Antarctica/Casey.daylight.long=Hora de verano Occidental (Australia)
-Antarctica/Casey.generic.long=Hora Occidental (Australia)
-Antarctica/Casey.standard.long=Hora est\u00E1ndar Occidental (Australia)
-Antarctica/Davis.generic.long=Hora de Davis
-Antarctica/DumontDUrville.generic.long=Hora de Dumont-d'Urville
-Antarctica/Macquarie.daylight.long=Hora de verano de Isla Macquarie
-Antarctica/Macquarie.generic.long=Hora de Isla Macquarie
-Antarctica/Macquarie.standard.long=Hora de Isla Macquarie
-Antarctica/Mawson.generic.long=Hora de Mawson
-Antarctica/McMurdo.generic.long=Hora de Nueva Zelanda
-Antarctica/Palmer.generic.long=Hora de Chile
-Antarctica/Rothera.generic.long=Hora de Rothera
-Antarctica/South_Pole.generic.long=Hora de Nueva Zelanda
-Antarctica/Syowa.generic.long=Hora de Syowa
-Antarctica/Vostok.generic.long=Hora de Vostok
-Arctic/Longyearbyen.generic.long=Hora de Europa Central
-Asia/Aden.generic.long=Hora de Arabia
-Asia/Almaty.generic.long=Hora de Alma-Ata
-Asia/Amman.generic.long=Hora de Arabia
-Asia/Anadyr.generic.long=Hora de Anadyr
-Asia/Aqtau.generic.long=Hora de Aqtau
-Asia/Aqtobe.generic.long=Hora de Aqtobe
-Asia/Ashgabat.generic.long=Hora de Turkmenist\u00E1n
-Asia/Ashkhabad.generic.long=Hora de Turkmenist\u00E1n
-Asia/Baghdad.generic.long=Hora de Arabia
-Asia/Bahrain.generic.long=Hora de Arabia
-Asia/Baku.generic.long=Hora de Azerbaiy\u00E1n
-Asia/Bangkok.generic.long=Hora de Indochina
-Asia/Beirut.generic.long=Hora de Europa Oriental
-Asia/Bishkek.generic.long=Hora de Kirguizist\u00E1n
-Asia/Brunei.generic.long=Hora de Brunei
-Asia/Calcutta.generic.long=Hora de India
-Asia/Choibalsan.generic.long=Hora de Choibalsan
-Asia/Chongqing.generic.long=Hora de China
-Asia/Chungking.generic.long=Hora de China
-Asia/Colombo.generic.long=Hora de India
-Asia/Dacca.generic.long=Hora de Bangladesh
-Asia/Damascus.generic.long=Hora de Europa Oriental
-Asia/Dhaka.generic.long=Hora de Bangladesh
-Asia/Dili.generic.long=Hora de Timor Leste
-Asia/Dubai.generic.long=Hora del Golfo
-Asia/Dushanbe.generic.long=Hora de Tajikist\u00E1n
-Asia/Gaza.generic.long=Hora de Europa Oriental
-Asia/Harbin.generic.long=Hora de China
-Asia/Hebron.generic.long=Hora de Europa Oriental
-Asia/Ho_Chi_Minh.generic.long=Hora de Indochina
-Asia/Hong_Kong.generic.long=Hora de Hong Kong
-Asia/Hovd.generic.long=Hora de Hovd
-Asia/Irkutsk.generic.long=Hora de Irkutsk
-Asia/Istanbul.generic.long=Hora de Europa Oriental
-Asia/Jakarta.generic.long=Hora de Indonesia Occidental
-Asia/Jayapura.generic.long=Hora de Indonesia Oriental
-Asia/Jerusalem.generic.long=Hora de Israel
-Asia/Kabul.generic.long=Hora de Afganist\u00E1n
-Asia/Kamchatka.generic.long=Hora de Petropavlovsk-Kamchatski
-Asia/Karachi.generic.long=Hora de Pakist\u00E1n
-Asia/Kashgar.generic.long=Hora de China
-Asia/Kathmandu.generic.long=Hora de Nepal
-Asia/Katmandu.generic.long=Hora de Nepal
-Asia/Khandyga.daylight.long=Hora de verano de Khandyga
-Asia/Khandyga.generic.long=Hora de Khandyga
-Asia/Khandyga.standard.long=Hora de Khandyga
-Asia/Kolkata.generic.long=Hora de India
-Asia/Krasnoyarsk.generic.long=Hora de Krasnoyarsk
-Asia/Kuala_Lumpur.generic.long=Hora de Malasia
-Asia/Kuching.generic.long=Hora de Malasia
-Asia/Kuwait.generic.long=Hora de Arabia
-Asia/Macao.generic.long=Hora de China
-Asia/Macau.generic.long=Hora de China
-Asia/Magadan.generic.long=Hora de Magad\u00E1n
-Asia/Makassar.generic.long=Hora de Indonesia Central
-Asia/Manila.generic.long=Hora de Filipinas
-Asia/Muscat.generic.long=Hora del Golfo
-Asia/Nicosia.generic.long=Hora de Europa Oriental
-Asia/Novokuznetsk.generic.long=Hora de Novosibirsk
-Asia/Novosibirsk.generic.long=Hora de Novosibirsk
-Asia/Omsk.generic.long=Hora de Omsk
-Asia/Oral.generic.long=Hora de Uralsk
-Asia/Phnom_Penh.generic.long=Hora de Indochina
-Asia/Pontianak.generic.long=Hora de Indonesia Occidental
-Asia/Pyongyang.generic.long=Hora de Corea
-Asia/Qatar.generic.long=Hora de Arabia
-Asia/Qyzylorda.generic.long=Hora de Qyzylorda
-Asia/Rangoon.generic.long=Hora de Myanmar
-Asia/Saigon.generic.long=Hora de Indochina
-Asia/Sakhalin.generic.long=Hora de Sajalin
-Asia/Samarkand.generic.long=Hora de Uzbekist\u00E1n
-Asia/Seoul.generic.long=Hora de Corea
-Asia/Shanghai.generic.long=Hora de China
-Asia/Singapore.generic.long=Hora de Singapur
-Asia/Taipei.generic.long=Hora de China
-Asia/Tashkent.generic.long=Hora de Uzbekist\u00E1n
-Asia/Tbilisi.generic.long=Hora de Georgia
-Asia/Tehran.generic.long=Hora de Ir\u00E1n
-Asia/Tel_Aviv.generic.long=Hora de Israel
-Asia/Thimbu.generic.long=Hora de But\u00E1n
-Asia/Thimphu.generic.long=Hora de But\u00E1n
-Asia/Tokyo.generic.long=Hora de Jap\u00F3n
-Asia/Ujung_Pandang.generic.long=Hora de Indonesia Central
-Asia/Ulaanbaatar.generic.long=Hora de Ulan Bator
-Asia/Ulan_Bator.generic.long=Hora de Ulan Bator
-Asia/Urumqi.generic.long=Hora de China
-Asia/Ust-Nera.daylight.long=Hora de verano de Ust-Nera
-Asia/Ust-Nera.generic.long=Hora de Ust-Nera
-Asia/Ust-Nera.standard.long=Hora de Ust-Nera
-Asia/Vientiane.generic.long=Hora de Indochina
-Asia/Vladivostok.generic.long=Hora de Vladivostok
-Asia/Yakutsk.generic.long=Hora de Yakutsk
-Asia/Yekaterinburg.generic.long=Hora de Ekaterinburgo
-Asia/Yerevan.generic.long=Hora de Armenia
-Atlantic/Azores.generic.long=Hora de Azores
-Atlantic/Bermuda.generic.long=Hora del Atl\u00E1ntico
-Atlantic/Canary.generic.long=Hora de Europa Occidental
-Atlantic/Cape_Verde.generic.long=Hora de Cabo Verde
-Atlantic/Faeroe.generic.long=Hora de Europa Occidental
-Atlantic/Faroe.generic.long=Hora de Europa Occidental
-Atlantic/Jan_Mayen.generic.long=Hora de Europa Central
-Atlantic/Madeira.generic.long=Hora de Europa Occidental
-Atlantic/Reykjavik.generic.long=Hora del Meridiano de Greenwich
-Atlantic/South_Georgia.generic.long=Hora de Georgia del Sur
-Atlantic/St_Helena.generic.long=Hora del Meridiano de Greenwich
-Atlantic/Stanley.generic.long=Hora de las islas Malvinas
-Australia/ACT.daylight.long=Hora de verano Oriental (Nueva Gales del Sur)
-Australia/ACT.generic.long=Hora Oriental (Nueva Gales del Sur)
-Australia/ACT.standard.long=Hora est\u00E1ndar Oriental (Nueva Gales del Sur)
-Australia/Adelaide.daylight.long=Hora de verano Central (Sur de Australia)
-Australia/Adelaide.generic.long=Hora Central (Australia del Sur)
-Australia/Adelaide.standard.long=Hora est\u00E1ndar Central (Sur de Australia)
-Australia/Brisbane.daylight.long=Hora est\u00E1ndar de verano del Este (Queensland)
-Australia/Brisbane.generic.long=Hora Oriental (Queensland)
-Australia/Brisbane.standard.long=Hora est\u00E1ndar del Este (Queensland)
-Australia/Broken_Hill.daylight.long=Hora de verano Central (Sur de Australia/Nueva Gales del Sur)
-Australia/Broken_Hill.generic.long=Hora Central (Australia del Sur/Nueva Gales del Sur)
-Australia/Broken_Hill.standard.long=Hora est\u00E1ndar Central (Sur de Australia/Nueva Gales del Sur)
-Australia/Canberra.daylight.long=Hora de verano Oriental (Nueva Gales del Sur)
-Australia/Canberra.generic.long=Hora Oriental (Nueva Gales del Sur)
-Australia/Canberra.standard.long=Hora est\u00E1ndar Oriental (Nueva Gales del Sur)
-Australia/Currie.daylight.long=Hora de verano Oriental (Nueva Gales del Sur)
-Australia/Currie.generic.long=Hora Oriental (Nueva Gales del Sur)
-Australia/Currie.standard.long=Hora est\u00E1ndar Oriental (Nueva Gales del Sur)
-Australia/Darwin.daylight.long=Hora de verano Central (territorio del Norte)
-Australia/Darwin.generic.long=Hora Central (Territorio Septentrional)
-Australia/Darwin.standard.long=Hora est\u00E1ndar Central (territorio del Norte)
-Australia/Eucla.daylight.long=Hora est\u00E1ndar de verano de Australia Central y Occidental
-Australia/Eucla.generic.long=Hora de Australia Central y Occidental
-Australia/Eucla.standard.long=Hora est\u00E1ndar de Australia Central y Occidental
-Australia/Hobart.daylight.long=Hora de verano del Este (Tasmania)
-Australia/Hobart.generic.long=Hora Oriental (Tasmania)
-Australia/Hobart.standard.long=Hora est\u00E1ndar del Este (Tasmania)
-Australia/LHI.generic.long=Hora de Lord Howe
-Australia/Lindeman.daylight.long=Hora est\u00E1ndar de verano del Este (Queensland)
-Australia/Lindeman.generic.long=Hora Oriental (Queensland)
-Australia/Lindeman.standard.long=Hora est\u00E1ndar del Este (Queensland)
-Australia/Lord_Howe.generic.long=Hora de Lord Howe
-Australia/Melbourne.daylight.long=Hora de verano del Este (Victoria)
-Australia/Melbourne.generic.long=Hora Oriental (Victoria)
-Australia/Melbourne.standard.long=Hora est\u00E1ndar del Este (Victoria)
-Australia/NSW.daylight.long=Hora de verano Oriental (Nueva Gales del Sur)
-Australia/NSW.generic.long=Hora Oriental (Nueva Gales del Sur)
-Australia/NSW.standard.long=Hora est\u00E1ndar Oriental (Nueva Gales del Sur)
-Australia/North.daylight.long=Hora de verano Central (territorio del Norte)
-Australia/North.generic.long=Hora Central (Territorio Septentrional)
-Australia/North.standard.long=Hora est\u00E1ndar Central (territorio del Norte)
-Australia/Perth.daylight.long=Hora de verano Occidental (Australia)
-Australia/Perth.generic.long=Hora Occidental (Australia)
-Australia/Perth.standard.long=Hora est\u00E1ndar Occidental (Australia)
-Australia/Queensland.daylight.long=Hora est\u00E1ndar de verano del Este (Queensland)
-Australia/Queensland.generic.long=Hora Oriental (Queensland)
-Australia/Queensland.standard.long=Hora est\u00E1ndar del Este (Queensland)
-Australia/South.daylight.long=Hora de verano Central (Sur de Australia)
-Australia/South.generic.long=Hora Central (Australia del Sur)
-Australia/South.standard.long=Hora est\u00E1ndar Central (Sur de Australia)
-Australia/Sydney.daylight.long=Hora de verano Oriental (Nueva Gales del Sur)
-Australia/Sydney.generic.long=Hora Oriental (Nueva Gales del Sur)
-Australia/Sydney.standard.long=Hora est\u00E1ndar Oriental (Nueva Gales del Sur)
-Australia/Tasmania.daylight.long=Hora de verano del Este (Tasmania)
-Australia/Tasmania.generic.long=Hora Oriental (Tasmania)
-Australia/Tasmania.standard.long=Hora est\u00E1ndar del Este (Tasmania)
-Australia/Victoria.daylight.long=Hora de verano del Este (Victoria)
-Australia/Victoria.generic.long=Hora Oriental (Victoria)
-Australia/Victoria.standard.long=Hora est\u00E1ndar del Este (Victoria)
-Australia/West.daylight.long=Hora de verano Occidental (Australia)
-Australia/West.generic.long=Hora Occidental (Australia)
-Australia/West.standard.long=Hora est\u00E1ndar Occidental (Australia)
-Australia/Yancowinna.daylight.long=Hora de verano Central (Sur de Australia/Nueva Gales del Sur)
-Australia/Yancowinna.generic.long=Hora Central (Australia del Sur/Nueva Gales del Sur)
-Australia/Yancowinna.standard.long=Hora est\u00E1ndar Central (Sur de Australia/Nueva Gales del Sur)
-BET.generic.long=Hora de Brasil
-BST.generic.long=Hora de Bangladesh
-Brazil/Acre.generic.long=Hora de Acre
-Brazil/DeNoronha.generic.long=Hora de Fernando de Noronha
-Brazil/East.generic.long=Hora de Brasil
-Brazil/West.generic.long=Hora est\u00E1ndar de Amazonia
-CAT.generic.long=Hora de \u00C1frica Central
-CET.generic.long=Hora de Europa Central
-CNT.generic.long=Hora de Terranova
-CST.generic.long=Hora Central
-CST6CDT.generic.long=Hora Central
-CTT.generic.long=Hora de China
-Canada/Atlantic.generic.long=Hora del Atl\u00E1ntico
-Canada/Central.generic.long=Hora Central
-Canada/East-Saskatchewan.generic.long=Hora Central
-Canada/Eastern.generic.long=Hora Oriental
-Canada/Mountain.generic.long=Hora de las Monta\u00F1as Rocosas
-Canada/Newfoundland.generic.long=Hora de Terranova
-Canada/Pacific.generic.long=Hora del Pac\u00EDfico
-Canada/Saskatchewan.generic.long=Hora Central
-Canada/Yukon.generic.long=Hora del Pac\u00EDfico
-Chile/Continental.generic.long=Hora de Chile
-Chile/EasterIsland.generic.long=Hora de la Isla de Pascua
-Cuba.generic.long=Hora de Cuba
-EAT.generic.long=Hora de \u00C1frica Oriental
-ECT.generic.long=Hora de Europa Central
-EET.generic.long=Hora de Europa Oriental
-EST.generic.long=Hora Oriental
-EST5EDT.generic.long=Hora Oriental
-Egypt.generic.long=Hora de Europa Oriental
-Eire.generic.long=Hora de Irlanda
-Etc/Greenwich.generic.long=Hora del Meridiano de Greenwich
-Etc/UCT.generic.long=Hora Universal Coordinada
-Etc/UTC.generic.long=Hora Universal Coordinada
-Etc/Universal.generic.long=Hora Universal Coordinada
-Etc/Zulu.generic.long=Hora Universal Coordinada
-Europe/Amsterdam.generic.long=Hora de Europa Central
-Europe/Andorra.generic.long=Hora de Europa Central
-Europe/Athens.generic.long=Hora de Europa Oriental
-Europe/Belfast.generic.long=Hora de Gran Breta\u00F1a
-Europe/Belgrade.generic.long=Hora de Europa Central
-Europe/Berlin.generic.long=Hora de Europa Central
-Europe/Bratislava.generic.long=Hora de Europa Central
-Europe/Brussels.generic.long=Hora de Europa Central
-Europe/Bucharest.generic.long=Hora de Europa Oriental
-Europe/Budapest.generic.long=Hora de Europa Central
-Europe/Busingen.generic.long=Hora de Europa Central
-Europe/Chisinau.generic.long=Hora de Europa Oriental
-Europe/Copenhagen.generic.long=Hora de Europa Central
-Europe/Dublin.generic.long=Hora de Irlanda
-Europe/Gibraltar.generic.long=Hora de Europa Central
-Europe/Guernsey.generic.long=Hora de Gran Breta\u00F1a
-Europe/Helsinki.generic.long=Hora de Europa Oriental
-Europe/Isle_of_Man.generic.long=Hora de Gran Breta\u00F1a
-Europe/Istanbul.generic.long=Hora de Europa Oriental
-Europe/Jersey.generic.long=Hora de Gran Breta\u00F1a
-Europe/Kaliningrad.daylight.long=Hora de verano de Europa m\u00E1s Oriental
-Europe/Kaliningrad.generic.long=Hora de Europa m\u00E1s Oriental
-Europe/Kaliningrad.standard.long=Hora de Europa m\u00E1s Oriental
-Europe/Kiev.generic.long=Hora de Europa Oriental
-Europe/Lisbon.generic.long=Hora de Europa Occidental
-Europe/Ljubljana.generic.long=Hora de Europa Central
-Europe/London.generic.long=Hora de Gran Breta\u00F1a
-Europe/Luxembourg.generic.long=Hora de Europa Central
-Europe/Madrid.generic.long=Hora de Europa Central
-Europe/Malta.generic.long=Hora de Europa Central
-Europe/Mariehamn.generic.long=Hora de Europa Oriental
-Europe/Minsk.daylight.long=Hora de verano de Europa m\u00E1s Oriental
-Europe/Minsk.generic.long=Hora de Europa m\u00E1s Oriental
-Europe/Minsk.standard.long=Hora de Europa m\u00E1s Oriental
-Europe/Monaco.generic.long=Hora de Europa Central
-Europe/Moscow.generic.long=Hora de Mosc\u00FA
-Europe/Nicosia.generic.long=Hora de Europa Oriental
-Europe/Oslo.generic.long=Hora de Europa Central
-Europe/Paris.generic.long=Hora de Europa Central
-Europe/Podgorica.generic.long=Hora de Europa Central
-Europe/Prague.generic.long=Hora de Europa Central
-Europe/Riga.generic.long=Hora de Europa Oriental
-Europe/Rome.generic.long=Hora de Europa Central
-Europe/Samara.generic.long=Hora de Samara
-Europe/San_Marino.generic.long=Hora de Europa Central
-Europe/Sarajevo.generic.long=Hora de Europa Central
-Europe/Simferopol.generic.long=Hora de Europa Oriental
-Europe/Skopje.generic.long=Hora de Europa Central
-Europe/Sofia.generic.long=Hora de Europa Oriental
-Europe/Stockholm.generic.long=Hora de Europa Central
-Europe/Tallinn.generic.long=Hora de Europa Oriental
-Europe/Tirane.generic.long=Hora de Europa Central
-Europe/Tiraspol.generic.long=Hora de Europa Oriental
-Europe/Uzhgorod.generic.long=Hora de Europa Oriental
-Europe/Vaduz.generic.long=Hora de Europa Central
-Europe/Vatican.generic.long=Hora de Europa Central
-Europe/Vienna.generic.long=Hora de Europa Central
-Europe/Vilnius.generic.long=Hora de Europa Oriental
-Europe/Volgograd.generic.long=Hora de Volgogrado
-Europe/Warsaw.generic.long=Hora de Europa Central
-Europe/Zagreb.generic.long=Hora de Europa Central
-Europe/Zaporozhye.generic.long=Hora de Europa Oriental
-Europe/Zurich.generic.long=Hora de Europa Central
-GB-Eire.generic.long=Hora de Gran Breta\u00F1a
-GB.generic.long=Hora de Gran Breta\u00F1a
-GMT.generic.long=Hora del Meridiano de Greenwich
-Greenwich.generic.long=Hora del Meridiano de Greenwich
-HST.generic.long=Hora de Hawaii
-Hongkong.generic.long=Hora de Hong Kong
-IET.generic.long=Hora Oriental
-IST.generic.long=Hora de India
-Iceland.generic.long=Hora del Meridiano de Greenwich
-Indian/Antananarivo.generic.long=Hora de \u00C1frica Oriental
-Indian/Chagos.generic.long=Hora del Territorio del Oc\u00E9ano \u00CDndico
-Indian/Christmas.generic.long=Hora de la isla de Christmas
-Indian/Cocos.generic.long=Hora de las islas Cocos
-Indian/Comoro.generic.long=Hora de \u00C1frica Oriental
-Indian/Kerguelen.generic.long=Hora de los Territorios Franceses del Sur y de la Ant\u00E1rtida
-Indian/Mahe.generic.long=Hora de Seychelles
-Indian/Maldives.generic.long=Hora de Maldivas
-Indian/Mauritius.generic.long=Hora de Mauricio
-Indian/Mayotte.generic.long=Hora de \u00C1frica Oriental
-Indian/Reunion.generic.long=Hora de Reuni\u00F3n
-Iran.generic.long=Hora de Ir\u00E1n
-Israel.generic.long=Hora de Israel
-JST.generic.long=Hora de Jap\u00F3n
-Jamaica.generic.long=Hora Oriental
-Japan.generic.long=Hora de Jap\u00F3n
-Kwajalein.generic.long=Hora de Islas Marshall
-Libya.generic.long=Hora de Europa Oriental
-MET.generic.long=MET
-MIT.generic.long=Hora de Samoa Occidental
-MST.generic.long=Hora de las Monta\u00f1as Rocosas
-MST7MDT.generic.long=Hora de las Monta\u00f1as Rocosas
-Mexico/BajaNorte.generic.long=Hora del Pac\u00EDfico
-Mexico/BajaSur.generic.long=Hora de las Monta\u00F1as Rocosas
-Mexico/General.generic.long=Hora Central
-NET.generic.long=Hora de Armenia
-NST.generic.long=Hora de Nueva Zelanda
-NZ-CHAT.generic.long=Hora de Chatam
-NZ.generic.long=Hora de Nueva Zelanda
-Navajo.generic.long=Hora de las Monta\u00F1as Rocosas
-PLT.generic.long=Hora de Pakist\u00E1n
-PNT.generic.long=Hora de las Monta\u00F1as Rocosas
-PRC.generic.long=Hora de China
-PRT.generic.long=Hora del Atl\u00E1ntico
-PST.generic.long=Hora del Pac\u00EDfico
-PST8PDT.generic.long=Hora del Pac\u00edfico
-Pacific/Apia.generic.long=Hora de Samoa Occidental
-Pacific/Auckland.generic.long=Hora de Nueva Zelanda
-Pacific/Chatham.generic.long=Hora de Chatam
-Pacific/Chuuk.daylight.long=Hora de verano de Chuuk
-Pacific/Chuuk.generic.long=Hora de Chuuk
-Pacific/Chuuk.standard.long=Hora de Chuuk
-Pacific/Easter.generic.long=Hora de la Isla de Pascua
-Pacific/Efate.generic.long=Hora de Vanuatu
-Pacific/Enderbury.generic.long=Hora de la isla Phoenix
-Pacific/Fakaofo.generic.long=Hora de Tokelau
-Pacific/Fiji.generic.long=Hora de Fiji
-Pacific/Funafuti.generic.long=Hora de Tuvalu
-Pacific/Galapagos.generic.long=Hora de Gal\u00E1pagos
-Pacific/Gambier.generic.long=Hora de Gambier
-Pacific/Guadalcanal.generic.long=Hora de las Islas Solomon
-Pacific/Guam.generic.long=Hora de Chamorro
-Pacific/Honolulu.generic.long=Hora de Hawaii
-Pacific/Johnston.generic.long=Hora de Hawaii
-Pacific/Kiritimati.generic.long=Hora de las islas Line
-Pacific/Kosrae.generic.long=Hora de Kosrae
-Pacific/Kwajalein.generic.long=Hora de Islas Marshall
-Pacific/Majuro.generic.long=Hora de Islas Marshall
-Pacific/Marquesas.generic.long=Hora de Marquesas
-Pacific/Midway.generic.long=Hora de Samoa
-Pacific/Nauru.generic.long=Hora de Nauru
-Pacific/Niue.generic.long=Hora de Niue
-Pacific/Norfolk.generic.long=Hora de Norfolk
-Pacific/Noumea.generic.long=Hora de Nueva Caledonia
-Pacific/Pago_Pago.generic.long=Hora de Samoa
-Pacific/Palau.generic.long=Hora de Palau
-Pacific/Pitcairn.generic.long=Hora de Islas Pitcairn
-Pacific/Pohnpei.daylight.long=Hora de verano de Pohnpei
-Pacific/Pohnpei.generic.long=Hora de Pohnpei
-Pacific/Pohnpei.standard.long=Hora de Pohnpei
-Pacific/Ponape.daylight.long=Hora de verano de Pohnpei
-Pacific/Ponape.generic.long=Hora de Pohnpei
-Pacific/Ponape.standard.long=Hora de Pohnpei
-Pacific/Port_Moresby.generic.long=Hora de Pap\u00FAa-Nueva Guinea
-Pacific/Rarotonga.generic.long=Hora de las islas Cook
-Pacific/Saipan.generic.long=Hora de Chamorro
-Pacific/Samoa.generic.long=Hora de Samoa
-Pacific/Tahiti.generic.long=Hora de Tahit\u00ED
-Pacific/Tarawa.generic.long=Hora de las islas Gilbert
-Pacific/Tongatapu.generic.long=Hora de Tonga
-Pacific/Truk.daylight.long=Hora de verano de Chuuk
-Pacific/Truk.generic.long=Hora de Chuuk
-Pacific/Truk.standard.long=Hora de Chuuk
-Pacific/Wake.generic.long=Hora de Wake
-Pacific/Wallis.generic.long=Hora de Wallis y Futuna
-Pacific/Yap.daylight.long=Hora de verano de Chuuk
-Pacific/Yap.generic.long=Hora de Chuuk
-Pacific/Yap.standard.long=Hora de Chuuk
-Poland.generic.long=Hora de Europa Central
-Portugal.generic.long=Hora de Europa Occidental
-ROK.generic.long=Hora de Corea
-SST.generic.long=Hora de las Islas Solomon
-Singapore.generic.long=Hora de Singapur
-SystemV/AST4.generic.long=Hora del Atl\u00E1ntico
-SystemV/AST4ADT.generic.long=Hora del Atl\u00E1ntico
-SystemV/CST6.generic.long=Hora Central
-SystemV/CST6CDT.generic.long=Hora Central
-SystemV/EST5.generic.long=Hora Oriental
-SystemV/EST5EDT.generic.long=Hora Oriental
-SystemV/HST10.generic.long=Hora de Hawaii
-SystemV/MST7.generic.long=Hora de las Monta\u00F1as Rocosas
-SystemV/MST7MDT.generic.long=Hora de las Monta\u00F1as Rocosas
-SystemV/PST8.generic.long=Hora del Pac\u00EDfico
-SystemV/PST8PDT.generic.long=Hora del Pac\u00EDfico
-SystemV/YST9.generic.long=Hora de Alaska
-SystemV/YST9YDT.generic.long=Hora de Alaska
-Turkey.generic.long=Hora de Europa Oriental
-UCT.generic.long=Hora Universal Coordinada
-US/Alaska.generic.long=Hora de Alaska
-US/Aleutian.generic.long=Hora de Hawaii-Aleutian
-US/Arizona.generic.long=Hora de las Monta\u00F1as Rocosas
-US/Central.generic.long=Hora Central
-US/East-Indiana.generic.long=Hora Oriental
-US/Eastern.generic.long=Hora Oriental
-US/Hawaii.generic.long=Hora de Hawaii
-US/Indiana-Starke.generic.long=Hora Central
-US/Michigan.generic.long=Hora Oriental
-US/Mountain.generic.long=Hora de las Monta\u00F1as Rocosas
-US/Pacific-New.generic.long=Hora del Pac\u00EDfico
-US/Pacific.generic.long=Hora del Pac\u00EDfico
-US/Samoa.generic.long=Hora de Samoa
-UTC.generic.long=Hora Universal Coordinada
-Universal.generic.long=Hora Universal Coordinada
-VST.generic.long=Hora de Indochina
-W-SU.generic.long=Hora de Mosc\u00FA
-WET.generic.long=Hora de Europa Occidental
-Zulu.generic.long=Hora Universal Coordinada
diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_es_short.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_es_short.properties
deleted file mode 100644
index 095522a..0000000
--- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_es_short.properties
+++ /dev/null
@@ -1,1743 +0,0 @@
-ACT.daylight.short=CST
-ACT.generic.short=CT
-ACT.standard.short=CST
-AET.daylight.short=EST
-AET.generic.short=ET
-AET.standard.short=EST
-Africa/Abidjan.daylight.short=GMT
-Africa/Abidjan.generic.short=GMT
-Africa/Abidjan.standard.short=GMT
-Africa/Accra.daylight.short=GHST
-Africa/Accra.generic.short=GMT
-Africa/Accra.standard.short=GMT
-Africa/Addis_Ababa.daylight.short=EAST
-Africa/Addis_Ababa.generic.short=EAT
-Africa/Addis_Ababa.standard.short=EAT
-Africa/Algiers.daylight.short=CEST
-Africa/Algiers.generic.short=CET
-Africa/Algiers.standard.short=CET
-Africa/Asmara.daylight.short=EAST
-Africa/Asmara.generic.short=EAT
-Africa/Asmara.standard.short=EAT
-Africa/Asmera.daylight.short=EAST
-Africa/Asmera.generic.short=EAT
-Africa/Asmera.standard.short=EAT
-Africa/Bamako.daylight.short=GMT
-Africa/Bamako.generic.short=GMT
-Africa/Bamako.standard.short=GMT
-Africa/Bangui.daylight.short=WAST
-Africa/Bangui.generic.short=WAT
-Africa/Bangui.standard.short=WAT
-Africa/Banjul.daylight.short=GMT
-Africa/Banjul.generic.short=GMT
-Africa/Banjul.standard.short=GMT
-Africa/Bissau.daylight.short=GMT
-Africa/Bissau.generic.short=GMT
-Africa/Bissau.standard.short=GMT
-Africa/Blantyre.daylight.short=CAST
-Africa/Blantyre.generic.short=CAT
-Africa/Blantyre.standard.short=CAT
-Africa/Brazzaville.daylight.short=WAST
-Africa/Brazzaville.generic.short=WAT
-Africa/Brazzaville.standard.short=WAT
-Africa/Bujumbura.daylight.short=CAST
-Africa/Bujumbura.generic.short=CAT
-Africa/Bujumbura.standard.short=CAT
-Africa/Cairo.daylight.short=EEST
-Africa/Cairo.generic.short=EET
-Africa/Cairo.standard.short=EET
-Africa/Casablanca.daylight.short=WEST
-Africa/Casablanca.generic.short=WET
-Africa/Casablanca.standard.short=WET
-Africa/Ceuta.daylight.short=CEST
-Africa/Ceuta.generic.short=CET
-Africa/Ceuta.standard.short=CET
-Africa/Conakry.daylight.short=GMT
-Africa/Conakry.generic.short=GMT
-Africa/Conakry.standard.short=GMT
-Africa/Dakar.daylight.short=GMT
-Africa/Dakar.generic.short=GMT
-Africa/Dakar.standard.short=GMT
-Africa/Dar_es_Salaam.daylight.short=EAST
-Africa/Dar_es_Salaam.generic.short=EAT
-Africa/Dar_es_Salaam.standard.short=EAT
-Africa/Djibouti.daylight.short=EAST
-Africa/Djibouti.generic.short=EAT
-Africa/Djibouti.standard.short=EAT
-Africa/Douala.daylight.short=WAST
-Africa/Douala.generic.short=WAT
-Africa/Douala.standard.short=WAT
-Africa/El_Aaiun.daylight.short=WEST
-Africa/El_Aaiun.generic.short=WET
-Africa/El_Aaiun.standard.short=WET
-Africa/Freetown.daylight.short=SLST
-Africa/Freetown.generic.short=SLT
-Africa/Freetown.standard.short=GMT
-Africa/Gaborone.daylight.short=CAST
-Africa/Gaborone.generic.short=CAT
-Africa/Gaborone.standard.short=CAT
-Africa/Harare.daylight.short=CAST
-Africa/Harare.generic.short=CAT
-Africa/Harare.standard.short=CAT
-Africa/Johannesburg.daylight.short=SAST
-Africa/Johannesburg.generic.short=SAT
-Africa/Johannesburg.standard.short=SAST
-Africa/Juba.daylight.short=EAST
-Africa/Juba.generic.short=EAT
-Africa/Juba.standard.short=EAT
-Africa/Kampala.daylight.short=EAST
-Africa/Kampala.generic.short=EAT
-Africa/Kampala.standard.short=EAT
-Africa/Khartoum.daylight.short=EAST
-Africa/Khartoum.generic.short=EAT
-Africa/Khartoum.standard.short=EAT
-Africa/Kigali.daylight.short=CAST
-Africa/Kigali.generic.short=CAT
-Africa/Kigali.standard.short=CAT
-Africa/Kinshasa.daylight.short=WAST
-Africa/Kinshasa.generic.short=WAT
-Africa/Kinshasa.standard.short=WAT
-Africa/Lagos.daylight.short=WAST
-Africa/Lagos.generic.short=WAT
-Africa/Lagos.standard.short=WAT
-Africa/Libreville.daylight.short=WAST
-Africa/Libreville.generic.short=WAT
-Africa/Libreville.standard.short=WAT
-Africa/Lome.daylight.short=GMT
-Africa/Lome.generic.short=GMT
-Africa/Lome.standard.short=GMT
-Africa/Luanda.daylight.short=WAST
-Africa/Luanda.generic.short=WAT
-Africa/Luanda.standard.short=WAT
-Africa/Lubumbashi.daylight.short=CAST
-Africa/Lubumbashi.generic.short=CAT
-Africa/Lubumbashi.standard.short=CAT
-Africa/Lusaka.daylight.short=CAST
-Africa/Lusaka.generic.short=CAT
-Africa/Lusaka.standard.short=CAT
-Africa/Malabo.daylight.short=WAST
-Africa/Malabo.generic.short=WAT
-Africa/Malabo.standard.short=WAT
-Africa/Maputo.daylight.short=CAST
-Africa/Maputo.generic.short=CAT
-Africa/Maputo.standard.short=CAT
-Africa/Maseru.daylight.short=SAST
-Africa/Maseru.generic.short=SAT
-Africa/Maseru.standard.short=SAST
-Africa/Mbabane.daylight.short=SAST
-Africa/Mbabane.generic.short=SAT
-Africa/Mbabane.standard.short=SAST
-Africa/Mogadishu.daylight.short=EAST
-Africa/Mogadishu.generic.short=EAT
-Africa/Mogadishu.standard.short=EAT
-Africa/Monrovia.daylight.short=GMT
-Africa/Monrovia.generic.short=GMT
-Africa/Monrovia.standard.short=GMT
-Africa/Nairobi.daylight.short=EAST
-Africa/Nairobi.generic.short=EAT
-Africa/Nairobi.standard.short=EAT
-Africa/Ndjamena.daylight.short=WAST
-Africa/Ndjamena.generic.short=WAT
-Africa/Ndjamena.standard.short=WAT
-Africa/Niamey.daylight.short=WAST
-Africa/Niamey.generic.short=WAT
-Africa/Niamey.standard.short=WAT
-Africa/Nouakchott.daylight.short=GMT
-Africa/Nouakchott.generic.short=GMT
-Africa/Nouakchott.standard.short=GMT
-Africa/Ouagadougou.daylight.short=GMT
-Africa/Ouagadougou.generic.short=GMT
-Africa/Ouagadougou.standard.short=GMT
-Africa/Porto-Novo.daylight.short=WAST
-Africa/Porto-Novo.generic.short=WAT
-Africa/Porto-Novo.standard.short=WAT
-Africa/Sao_Tome.daylight.short=GMT
-Africa/Sao_Tome.generic.short=GMT
-Africa/Sao_Tome.standard.short=GMT
-Africa/Timbuktu.daylight.short=GMT
-Africa/Timbuktu.generic.short=GMT
-Africa/Timbuktu.standard.short=GMT
-Africa/Tripoli.daylight.short=EEST
-Africa/Tripoli.generic.short=EET
-Africa/Tripoli.standard.short=EET
-Africa/Tunis.daylight.short=CEST
-Africa/Tunis.generic.short=CET
-Africa/Tunis.standard.short=CET
-Africa/Windhoek.daylight.short=WAST
-Africa/Windhoek.generic.short=WAT
-Africa/Windhoek.standard.short=WAT
-AGT.daylight.short=ARST
-AGT.generic.short=ART
-AGT.standard.short=ART
-America/Adak.daylight.short=HADT
-America/Adak.generic.short=HAT
-America/Adak.standard.short=HAST
-America/Anchorage.daylight.short=AKDT
-America/Anchorage.generic.short=AKT
-America/Anchorage.standard.short=AKST
-America/Anguilla.daylight.short=ADT
-America/Anguilla.generic.short=AT
-America/Anguilla.standard.short=AST
-America/Antigua.daylight.short=ADT
-America/Antigua.generic.short=AT
-America/Antigua.standard.short=AST
-America/Araguaina.daylight.short=BRST
-America/Araguaina.generic.short=BRT
-America/Araguaina.standard.short=BRT
-America/Argentina/Buenos_Aires.daylight.short=ARST
-America/Argentina/Buenos_Aires.generic.short=ART
-America/Argentina/Buenos_Aires.standard.short=ART
-America/Argentina/Catamarca.daylight.short=ARST
-America/Argentina/Catamarca.generic.short=ART
-America/Argentina/Catamarca.standard.short=ART
-America/Argentina/ComodRivadavia.daylight.short=ARST
-America/Argentina/ComodRivadavia.generic.short=ART
-America/Argentina/ComodRivadavia.standard.short=ART
-America/Argentina/Cordoba.daylight.short=ARST
-America/Argentina/Cordoba.generic.short=ART
-America/Argentina/Cordoba.standard.short=ART
-America/Argentina/Jujuy.daylight.short=ARST
-America/Argentina/Jujuy.generic.short=ART
-America/Argentina/Jujuy.standard.short=ART
-America/Argentina/La_Rioja.daylight.short=ARST
-America/Argentina/La_Rioja.generic.short=ART
-America/Argentina/La_Rioja.standard.short=ART
-America/Argentina/Mendoza.daylight.short=ARST
-America/Argentina/Mendoza.generic.short=ART
-America/Argentina/Mendoza.standard.short=ART
-America/Argentina/Rio_Gallegos.daylight.short=ARST
-America/Argentina/Rio_Gallegos.generic.short=ART
-America/Argentina/Rio_Gallegos.standard.short=ART
-America/Argentina/Salta.daylight.short=ARST
-America/Argentina/Salta.generic.short=ART
-America/Argentina/Salta.standard.short=ART
-America/Argentina/San_Juan.daylight.short=ARST
-America/Argentina/San_Juan.generic.short=ART
-America/Argentina/San_Juan.standard.short=ART
-America/Argentina/San_Luis.daylight.short=ARST
-America/Argentina/San_Luis.generic.short=ART
-America/Argentina/San_Luis.standard.short=ART
-America/Argentina/Tucuman.daylight.short=ARST
-America/Argentina/Tucuman.generic.short=ART
-America/Argentina/Tucuman.standard.short=ART
-America/Argentina/Ushuaia.daylight.short=ARST
-America/Argentina/Ushuaia.generic.short=ART
-America/Argentina/Ushuaia.standard.short=ART
-America/Aruba.daylight.short=ADT
-America/Aruba.generic.short=AT
-America/Aruba.standard.short=AST
-America/Asuncion.daylight.short=PYST
-America/Asuncion.generic.short=PYT
-America/Asuncion.standard.short=PYT
-America/Atikokan.daylight.short=EDT
-America/Atikokan.generic.short=ET
-America/Atikokan.standard.short=EST
-America/Atka.daylight.short=HADT
-America/Atka.generic.short=HAT
-America/Atka.standard.short=HAST
-America/Bahia_Banderas.daylight.short=CDT
-America/Bahia_Banderas.generic.short=CT
-America/Bahia_Banderas.standard.short=CST
-America/Bahia.daylight.short=BRST
-America/Bahia.generic.short=BRT
-America/Bahia.standard.short=BRT
-America/Barbados.daylight.short=ADT
-America/Barbados.generic.short=AT
-America/Barbados.standard.short=AST
-America/Belem.daylight.short=BRST
-America/Belem.generic.short=BRT
-America/Belem.standard.short=BRT
-America/Belize.daylight.short=CDT
-America/Belize.generic.short=CT
-America/Belize.standard.short=CST
-America/Blanc-Sablon.daylight.short=ADT
-America/Blanc-Sablon.generic.short=AT
-America/Blanc-Sablon.standard.short=AST
-America/Boa_Vista.daylight.short=AMST
-America/Boa_Vista.generic.short=AMT
-America/Boa_Vista.standard.short=AMT
-America/Bogota.daylight.short=COST
-America/Bogota.generic.short=COT
-America/Bogota.standard.short=COT
-America/Boise.daylight.short=MDT
-America/Boise.generic.short=MT
-America/Boise.standard.short=MST
-America/Buenos_Aires.daylight.short=ARST
-America/Buenos_Aires.generic.short=ART
-America/Buenos_Aires.standard.short=ART
-America/Cambridge_Bay.daylight.short=MDT
-America/Cambridge_Bay.generic.short=MT
-America/Cambridge_Bay.standard.short=MST
-America/Campo_Grande.daylight.short=AMST
-America/Campo_Grande.generic.short=AMT
-America/Campo_Grande.standard.short=AMT
-America/Cancun.daylight.short=CDT
-America/Cancun.generic.short=CT
-America/Cancun.standard.short=CST
-America/Caracas.daylight.short=VEST
-America/Caracas.generic.short=VET
-America/Caracas.standard.short=VET
-America/Catamarca.daylight.short=ARST
-America/Catamarca.generic.short=ART
-America/Catamarca.standard.short=ART
-America/Cayenne.daylight.short=GFST
-America/Cayenne.generic.short=GFT
-America/Cayenne.standard.short=GFT
-America/Cayman.daylight.short=EDT
-America/Cayman.generic.short=ET
-America/Cayman.standard.short=EST
-America/Chicago.daylight.short=CDT
-America/Chicago.generic.short=CT
-America/Chicago.standard.short=CST
-America/Chihuahua.daylight.short=MDT
-America/Chihuahua.generic.short=MT
-America/Chihuahua.standard.short=MST
-America/Coral_Harbour.daylight.short=EDT
-America/Coral_Harbour.generic.short=ET
-America/Coral_Harbour.standard.short=EST
-America/Cordoba.daylight.short=ARST
-America/Cordoba.generic.short=ART
-America/Cordoba.standard.short=ART
-America/Costa_Rica.daylight.short=CDT
-America/Costa_Rica.generic.short=CT
-America/Costa_Rica.standard.short=CST
-America/Creston.daylight.short=MDT
-America/Creston.generic.short=MT
-America/Creston.standard.short=MST
-America/Cuiaba.daylight.short=AMST
-America/Cuiaba.generic.short=AMT
-America/Cuiaba.standard.short=AMT
-America/Curacao.daylight.short=ADT
-America/Curacao.generic.short=AT
-America/Curacao.standard.short=AST
-America/Danmarkshavn.daylight.short=GMT
-America/Danmarkshavn.generic.short=GMT
-America/Danmarkshavn.standard.short=GMT
-America/Dawson_Creek.daylight.short=MDT
-America/Dawson_Creek.generic.short=MT
-America/Dawson_Creek.standard.short=MST
-America/Dawson.daylight.short=PDT
-America/Dawson.generic.short=PT
-America/Dawson.standard.short=PST
-America/Denver.daylight.short=MDT
-America/Denver.generic.short=MT
-America/Denver.standard.short=MST
-America/Detroit.daylight.short=EDT
-America/Detroit.generic.short=ET
-America/Detroit.standard.short=EST
-America/Dominica.daylight.short=ADT
-America/Dominica.generic.short=AT
-America/Dominica.standard.short=AST
-America/Edmonton.daylight.short=MDT
-America/Edmonton.generic.short=MT
-America/Edmonton.standard.short=MST
-America/Eirunepe.daylight.short=ACST
-America/Eirunepe.generic.short=ACT
-America/Eirunepe.standard.short=ACT
-America/El_Salvador.daylight.short=CDT
-America/El_Salvador.generic.short=CT
-America/El_Salvador.standard.short=CST
-America/Ensenada.daylight.short=PDT
-America/Ensenada.generic.short=PT
-America/Ensenada.standard.short=PST
-America/Fortaleza.daylight.short=BRST
-America/Fortaleza.generic.short=BRT
-America/Fortaleza.standard.short=BRT
-America/Fort_Wayne.daylight.short=EDT
-America/Fort_Wayne.generic.short=ET
-America/Fort_Wayne.standard.short=EST
-America/Glace_Bay.daylight.short=ADT
-America/Glace_Bay.generic.short=AT
-America/Glace_Bay.standard.short=AST
-America/Godthab.daylight.short=WGST
-America/Godthab.generic.short=WGT
-America/Godthab.standard.short=WGT
-America/Goose_Bay.daylight.short=ADT
-America/Goose_Bay.generic.short=AT
-America/Goose_Bay.standard.short=AST
-America/Grand_Turk.daylight.short=EDT
-America/Grand_Turk.generic.short=ET
-America/Grand_Turk.standard.short=EST
-America/Grenada.daylight.short=ADT
-America/Grenada.generic.short=AT
-America/Grenada.standard.short=AST
-America/Guadeloupe.daylight.short=ADT
-America/Guadeloupe.generic.short=AT
-America/Guadeloupe.standard.short=AST
-America/Guatemala.daylight.short=CDT
-America/Guatemala.generic.short=CT
-America/Guatemala.standard.short=CST
-America/Guayaquil.daylight.short=ECST
-America/Guayaquil.generic.short=ECT
-America/Guayaquil.standard.short=ECT
-America/Guyana.daylight.short=GYST
-America/Guyana.generic.short=GYT
-America/Guyana.standard.short=GYT
-America/Halifax.daylight.short=ADT
-America/Halifax.generic.short=AT
-America/Halifax.standard.short=AST
-America/Havana.daylight.short=CDT
-America/Havana.generic.short=CT
-America/Havana.standard.short=CST
-America/Hermosillo.daylight.short=MDT
-America/Hermosillo.generic.short=MT
-America/Hermosillo.standard.short=MST
-America/Indiana/Indianapolis.daylight.short=EDT
-America/Indiana/Indianapolis.generic.short=ET
-America/Indiana/Indianapolis.standard.short=EST
-America/Indiana/Knox.daylight.short=CDT
-America/Indiana/Knox.generic.short=CT
-America/Indiana/Knox.standard.short=CST
-America/Indiana/Marengo.daylight.short=EDT
-America/Indiana/Marengo.generic.short=ET
-America/Indiana/Marengo.standard.short=EST
-America/Indiana/Petersburg.daylight.short=EDT
-America/Indiana/Petersburg.generic.short=ET
-America/Indiana/Petersburg.standard.short=EST
-America/Indianapolis.daylight.short=EDT
-America/Indianapolis.generic.short=ET
-America/Indianapolis.standard.short=EST
-America/Indiana/Tell_City.daylight.short=CDT
-America/Indiana/Tell_City.generic.short=CT
-America/Indiana/Tell_City.standard.short=CST
-America/Indiana/Vevay.daylight.short=EDT
-America/Indiana/Vevay.generic.short=ET
-America/Indiana/Vevay.standard.short=EST
-America/Indiana/Vincennes.daylight.short=EDT
-America/Indiana/Vincennes.generic.short=ET
-America/Indiana/Vincennes.standard.short=EST
-America/Indiana/Winamac.daylight.short=EDT
-America/Indiana/Winamac.generic.short=ET
-America/Indiana/Winamac.standard.short=EST
-America/Inuvik.daylight.short=MDT
-America/Inuvik.generic.short=MT
-America/Inuvik.standard.short=MST
-America/Iqaluit.daylight.short=EDT
-America/Iqaluit.generic.short=ET
-America/Iqaluit.standard.short=EST
-America/Jamaica.daylight.short=EDT
-America/Jamaica.generic.short=ET
-America/Jamaica.standard.short=EST
-America/Jujuy.daylight.short=ARST
-America/Jujuy.generic.short=ART
-America/Jujuy.standard.short=ART
-America/Juneau.daylight.short=AKDT
-America/Juneau.generic.short=AKT
-America/Juneau.standard.short=AKST
-America/Kentucky/Louisville.daylight.short=EDT
-America/Kentucky/Louisville.generic.short=ET
-America/Kentucky/Louisville.standard.short=EST
-America/Kentucky/Monticello.daylight.short=EDT
-America/Kentucky/Monticello.generic.short=ET
-America/Kentucky/Monticello.standard.short=EST
-America/Knox_IN.daylight.short=CDT
-America/Knox_IN.generic.short=CT
-America/Knox_IN.standard.short=CST
-America/Kralendijk.daylight.short=ADT
-America/Kralendijk.generic.short=AT
-America/Kralendijk.standard.short=AST
-America/La_Paz.daylight.short=BOST
-America/La_Paz.generic.short=BOT
-America/La_Paz.standard.short=BOT
-America/Lima.daylight.short=PEST
-America/Lima.generic.short=PET
-America/Lima.standard.short=PET
-America/Los_Angeles.daylight.short=PDT
-America/Los_Angeles.generic.short=PT
-America/Los_Angeles.standard.short=PST
-America/Louisville.daylight.short=EDT
-America/Louisville.generic.short=ET
-America/Louisville.standard.short=EST
-America/Lower_Princes.daylight.short=ADT
-America/Lower_Princes.generic.short=AT
-America/Lower_Princes.standard.short=AST
-America/Maceio.daylight.short=BRST
-America/Maceio.generic.short=BRT
-America/Maceio.standard.short=BRT
-America/Managua.daylight.short=CDT
-America/Managua.generic.short=CT
-America/Managua.standard.short=CST
-America/Manaus.daylight.short=AMST
-America/Manaus.generic.short=AMT
-America/Manaus.standard.short=AMT
-America/Marigot.daylight.short=ADT
-America/Marigot.generic.short=AT
-America/Marigot.standard.short=AST
-America/Martinique.daylight.short=ADT
-America/Martinique.generic.short=AT
-America/Martinique.standard.short=AST
-America/Matamoros.daylight.short=CDT
-America/Matamoros.generic.short=CT
-America/Matamoros.standard.short=CST
-America/Mazatlan.daylight.short=MDT
-America/Mazatlan.generic.short=MT
-America/Mazatlan.standard.short=MST
-America/Mendoza.daylight.short=ARST
-America/Mendoza.generic.short=ART
-America/Mendoza.standard.short=ART
-America/Menominee.daylight.short=CDT
-America/Menominee.generic.short=CT
-America/Menominee.standard.short=CST
-America/Merida.daylight.short=CDT
-America/Merida.generic.short=CT
-America/Merida.standard.short=CST
-America/Metlakatla.daylight.short=MeDT
-America/Metlakatla.generic.short=MeT
-America/Metlakatla.standard.short=MeST
-America/Mexico_City.daylight.short=CDT
-America/Mexico_City.generic.short=CT
-America/Mexico_City.standard.short=CST
-America/Miquelon.daylight.short=PMDT
-America/Miquelon.generic.short=PMT
-America/Miquelon.standard.short=PMST
-America/Moncton.daylight.short=ADT
-America/Moncton.generic.short=AT
-America/Moncton.standard.short=AST
-America/Monterrey.daylight.short=CDT
-America/Monterrey.generic.short=CT
-America/Monterrey.standard.short=CST
-America/Montevideo.daylight.short=UYST
-America/Montevideo.generic.short=UYT
-America/Montevideo.standard.short=UYT
-America/Montreal.daylight.short=EDT
-America/Montreal.generic.short=ET
-America/Montreal.standard.short=EST
-America/Montserrat.daylight.short=ADT
-America/Montserrat.generic.short=AT
-America/Montserrat.standard.short=AST
-America/Nassau.daylight.short=EDT
-America/Nassau.generic.short=ET
-America/Nassau.standard.short=EST
-America/New_York.daylight.short=EDT
-America/New_York.generic.short=ET
-America/New_York.standard.short=EST
-America/Nipigon.daylight.short=EDT
-America/Nipigon.generic.short=ET
-America/Nipigon.standard.short=EST
-America/Nome.daylight.short=AKDT
-America/Nome.generic.short=AKT
-America/Nome.standard.short=AKST
-America/Noronha.daylight.short=FNST
-America/Noronha.generic.short=FNT
-America/Noronha.standard.short=FNT
-America/North_Dakota/Beulah.daylight.short=CDT
-America/North_Dakota/Beulah.generic.short=CT
-America/North_Dakota/Beulah.standard.short=CST
-America/North_Dakota/Center.daylight.short=CDT
-America/North_Dakota/Center.generic.short=CT
-America/North_Dakota/Center.standard.short=CST
-America/North_Dakota/New_Salem.daylight.short=CDT
-America/North_Dakota/New_Salem.generic.short=CT
-America/North_Dakota/New_Salem.standard.short=CST
-America/Ojinaga.daylight.short=MDT
-America/Ojinaga.generic.short=MT
-America/Ojinaga.standard.short=MST
-America/Panama.daylight.short=EDT
-America/Panama.generic.short=ET
-America/Panama.standard.short=EST
-America/Pangnirtung.daylight.short=EDT
-America/Pangnirtung.generic.short=ET
-America/Pangnirtung.standard.short=EST
-America/Paramaribo.daylight.short=SRST
-America/Paramaribo.generic.short=SRT
-America/Paramaribo.standard.short=SRT
-America/Phoenix.daylight.short=MDT
-America/Phoenix.generic.short=MT
-America/Phoenix.standard.short=MST
-America/Port-au-Prince.daylight.short=EDT
-America/Port-au-Prince.generic.short=ET
-America/Port-au-Prince.standard.short=EST
-America/Porto_Acre.daylight.short=ACST
-America/Porto_Acre.generic.short=ACT
-America/Porto_Acre.standard.short=ACT
-America/Port_of_Spain.daylight.short=ADT
-America/Port_of_Spain.generic.short=AT
-America/Port_of_Spain.standard.short=AST
-America/Porto_Velho.daylight.short=AMST
-America/Porto_Velho.generic.short=AMT
-America/Porto_Velho.standard.short=AMT
-America/Puerto_Rico.daylight.short=ADT
-America/Puerto_Rico.generic.short=AT
-America/Puerto_Rico.standard.short=AST
-America/Rainy_River.daylight.short=CDT
-America/Rainy_River.generic.short=CT
-America/Rainy_River.standard.short=CST
-America/Rankin_Inlet.daylight.short=CDT
-America/Rankin_Inlet.generic.short=CT
-America/Rankin_Inlet.standard.short=CST
-America/Recife.daylight.short=BRST
-America/Recife.generic.short=BRT
-America/Recife.standard.short=BRT
-America/Regina.daylight.short=CDT
-America/Regina.generic.short=CT
-America/Regina.standard.short=CST
-America/Resolute.daylight.short=CDT
-America/Resolute.generic.short=CT
-America/Resolute.standard.short=CST
-America/Rio_Branco.daylight.short=ACST
-America/Rio_Branco.generic.short=ACT
-America/Rio_Branco.standard.short=ACT
-America/Rosario.daylight.short=ARST
-America/Rosario.generic.short=ART
-America/Rosario.standard.short=ART
-America/Santa_Isabel.daylight.short=PDT
-America/Santa_Isabel.generic.short=PT
-America/Santa_Isabel.standard.short=PST
-America/Santarem.daylight.short=BRST
-America/Santarem.generic.short=BRT
-America/Santarem.standard.short=BRT
-America/Santiago.daylight.short=CLST
-America/Santiago.generic.short=CLT
-America/Santiago.standard.short=CLT
-America/Santo_Domingo.daylight.short=ADT
-America/Santo_Domingo.generic.short=AT
-America/Santo_Domingo.standard.short=AST
-America/Sao_Paulo.daylight.short=BRST
-America/Sao_Paulo.generic.short=BRT
-America/Sao_Paulo.standard.short=BRT
-America/Scoresbysund.daylight.short=EGST
-America/Scoresbysund.generic.short=EGT
-America/Scoresbysund.standard.short=EGT
-America/Shiprock.daylight.short=MDT
-America/Shiprock.generic.short=MT
-America/Shiprock.standard.short=MST
-America/Sitka.daylight.short=AKDT
-America/Sitka.generic.short=AKT
-America/Sitka.standard.short=AKST
-America/St_Barthelemy.daylight.short=ADT
-America/St_Barthelemy.generic.short=AT
-America/St_Barthelemy.standard.short=AST
-America/St_Johns.daylight.short=NDT
-America/St_Johns.generic.short=NT
-America/St_Johns.standard.short=NST
-America/St_Kitts.daylight.short=ADT
-America/St_Kitts.generic.short=AT
-America/St_Kitts.standard.short=AST
-America/St_Lucia.daylight.short=ADT
-America/St_Lucia.generic.short=AT
-America/St_Lucia.standard.short=AST
-America/St_Thomas.daylight.short=ADT
-America/St_Thomas.generic.short=AT
-America/St_Thomas.standard.short=AST
-America/St_Vincent.daylight.short=ADT
-America/St_Vincent.generic.short=AT
-America/St_Vincent.standard.short=AST
-America/Swift_Current.daylight.short=CDT
-America/Swift_Current.generic.short=CT
-America/Swift_Current.standard.short=CST
-America/Tegucigalpa.daylight.short=CDT
-America/Tegucigalpa.generic.short=CT
-America/Tegucigalpa.standard.short=CST
-America/Thule.daylight.short=ADT
-America/Thule.generic.short=AT
-America/Thule.standard.short=AST
-America/Thunder_Bay.daylight.short=EDT
-America/Thunder_Bay.generic.short=ET
-America/Thunder_Bay.standard.short=EST
-America/Tijuana.daylight.short=PDT
-America/Tijuana.generic.short=PT
-America/Tijuana.standard.short=PST
-America/Toronto.daylight.short=EDT
-America/Toronto.generic.short=ET
-America/Toronto.standard.short=EST
-America/Tortola.daylight.short=ADT
-America/Tortola.generic.short=AT
-America/Tortola.standard.short=AST
-America/Vancouver.daylight.short=PDT
-America/Vancouver.generic.short=PT
-America/Vancouver.standard.short=PST
-America/Virgin.daylight.short=ADT
-America/Virgin.generic.short=AT
-America/Virgin.standard.short=AST
-America/Whitehorse.daylight.short=PDT
-America/Whitehorse.generic.short=PT
-America/Whitehorse.standard.short=PST
-America/Winnipeg.daylight.short=CDT
-America/Winnipeg.generic.short=CT
-America/Winnipeg.standard.short=CST
-America/Yakutat.daylight.short=AKDT
-America/Yakutat.generic.short=AKT
-America/Yakutat.standard.short=AKST
-America/Yellowknife.daylight.short=MDT
-America/Yellowknife.generic.short=MT
-America/Yellowknife.standard.short=MST
-Antarctica/Casey.daylight.short=WST
-Antarctica/Casey.generic.short=WT
-Antarctica/Casey.standard.short=WST
-Antarctica/Davis.daylight.short=DAVST
-Antarctica/Davis.generic.short=DAVT
-Antarctica/Davis.standard.short=DAVT
-Antarctica/DumontDUrville.daylight.short=DDUST
-Antarctica/DumontDUrville.generic.short=DDUT
-Antarctica/DumontDUrville.standard.short=DDUT
-Antarctica/Macquarie.daylight.short=MIST
-Antarctica/Macquarie.generic.short=MIST
-Antarctica/Macquarie.standard.short=MIST
-Antarctica/Mawson.daylight.short=MAWST
-Antarctica/Mawson.generic.short=MAWT
-Antarctica/Mawson.standard.short=MAWT
-Antarctica/McMurdo.daylight.short=NZDT
-Antarctica/McMurdo.generic.short=NZT
-Antarctica/McMurdo.standard.short=NZST
-Antarctica/Palmer.daylight.short=CLST
-Antarctica/Palmer.generic.short=CLT
-Antarctica/Palmer.standard.short=CLT
-Antarctica/Rothera.daylight.short=ROTST
-Antarctica/Rothera.generic.short=ROTT
-Antarctica/Rothera.standard.short=ROTT
-Antarctica/South_Pole.daylight.short=NZDT
-Antarctica/South_Pole.generic.short=NZT
-Antarctica/South_Pole.standard.short=NZST
-Antarctica/Syowa.daylight.short=SYOST
-Antarctica/Syowa.generic.short=SYOT
-Antarctica/Syowa.standard.short=SYOT
-Antarctica/Vostok.daylight.short=VOSST
-Antarctica/Vostok.generic.short=VOST
-Antarctica/Vostok.standard.short=VOST
-Arctic/Longyearbyen.daylight.short=CEST
-Arctic/Longyearbyen.generic.short=CET
-Arctic/Longyearbyen.standard.short=CET
-ART.daylight.short=EEST
-ART.generic.short=EET
-ART.standard.short=EET
-Asia/Aden.daylight.short=ADT
-Asia/Aden.generic.short=AT
-Asia/Aden.standard.short=AST
-Asia/Almaty.daylight.short=ALMST
-Asia/Almaty.generic.short=ALMT
-Asia/Almaty.standard.short=ALMT
-Asia/Amman.daylight.short=ADT
-Asia/Amman.generic.short=AT
-Asia/Amman.standard.short=AST
-Asia/Anadyr.daylight.short=ANAST
-Asia/Anadyr.generic.short=ANAT
-Asia/Anadyr.standard.short=ANAT
-Asia/Aqtau.daylight.short=AQTST
-Asia/Aqtau.generic.short=AQTT
-Asia/Aqtau.standard.short=AQTT
-Asia/Aqtobe.daylight.short=AQTST
-Asia/Aqtobe.generic.short=AQTT
-Asia/Aqtobe.standard.short=AQTT
-Asia/Ashgabat.daylight.short=TMST
-Asia/Ashgabat.generic.short=TMT
-Asia/Ashgabat.standard.short=TMT
-Asia/Ashkhabad.daylight.short=TMST
-Asia/Ashkhabad.generic.short=TMT
-Asia/Ashkhabad.standard.short=TMT
-Asia/Baghdad.daylight.short=ADT
-Asia/Baghdad.generic.short=AT
-Asia/Baghdad.standard.short=AST
-Asia/Bahrain.daylight.short=ADT
-Asia/Bahrain.generic.short=AT
-Asia/Bahrain.standard.short=AST
-Asia/Baku.daylight.short=AZST
-Asia/Baku.generic.short=AZT
-Asia/Baku.standard.short=AZT
-Asia/Bangkok.daylight.short=ICST
-Asia/Bangkok.generic.short=ICT
-Asia/Bangkok.standard.short=ICT
-Asia/Beirut.daylight.short=EEST
-Asia/Beirut.generic.short=EET
-Asia/Beirut.standard.short=EET
-Asia/Bishkek.daylight.short=KGST
-Asia/Bishkek.generic.short=KGT
-Asia/Bishkek.standard.short=KGT
-Asia/Brunei.daylight.short=BNST
-Asia/Brunei.generic.short=BNT
-Asia/Brunei.standard.short=BNT
-Asia/Calcutta.daylight.short=IDT
-Asia/Calcutta.generic.short=IT
-Asia/Calcutta.standard.short=IST
-Asia/Choibalsan.daylight.short=CHOST
-Asia/Choibalsan.generic.short=CHOT
-Asia/Choibalsan.standard.short=CHOT
-Asia/Chongqing.daylight.short=CDT
-Asia/Chongqing.generic.short=CT
-Asia/Chongqing.standard.short=CST
-Asia/Chungking.daylight.short=CDT
-Asia/Chungking.generic.short=CT
-Asia/Chungking.standard.short=CST
-Asia/Colombo.daylight.short=IDT
-Asia/Colombo.generic.short=IT
-Asia/Colombo.standard.short=IST
-Asia/Dacca.daylight.short=BDST
-Asia/Dacca.generic.short=BDT
-Asia/Dacca.standard.short=BDT
-Asia/Damascus.daylight.short=EEST
-Asia/Damascus.generic.short=EET
-Asia/Damascus.standard.short=EET
-Asia/Dhaka.daylight.short=BDST
-Asia/Dhaka.generic.short=BDT
-Asia/Dhaka.standard.short=BDT
-Asia/Dili.daylight.short=TLST
-Asia/Dili.generic.short=TLT
-Asia/Dili.standard.short=TLT
-Asia/Dubai.daylight.short=GDT
-Asia/Dubai.generic.short=GT
-Asia/Dubai.standard.short=GST
-Asia/Dushanbe.daylight.short=TJST
-Asia/Dushanbe.generic.short=TJT
-Asia/Dushanbe.standard.short=TJT
-Asia/Gaza.daylight.short=EEST
-Asia/Gaza.generic.short=EET
-Asia/Gaza.standard.short=EET
-Asia/Harbin.daylight.short=CDT
-Asia/Harbin.generic.short=CT
-Asia/Harbin.standard.short=CST
-Asia/Hebron.daylight.short=EEST
-Asia/Hebron.generic.short=EET
-Asia/Hebron.standard.short=EET
-Asia/Ho_Chi_Minh.daylight.short=ICST
-Asia/Ho_Chi_Minh.generic.short=ICT
-Asia/Ho_Chi_Minh.standard.short=ICT
-Asia/Hong_Kong.daylight.short=HKST
-Asia/Hong_Kong.generic.short=HKT
-Asia/Hong_Kong.standard.short=HKT
-Asia/Hovd.daylight.short=HOVST
-Asia/Hovd.generic.short=HOVT
-Asia/Hovd.standard.short=HOVT
-Asia/Irkutsk.daylight.short=IRKST
-Asia/Irkutsk.generic.short=IRKT
-Asia/Irkutsk.standard.short=IRKT
-Asia/Istanbul.daylight.short=EEST
-Asia/Istanbul.generic.short=EET
-Asia/Istanbul.standard.short=EET
-Asia/Jakarta.daylight.short=WIST
-Asia/Jakarta.generic.short=WIB
-Asia/Jakarta.standard.short=WIB
-Asia/Jayapura.daylight.short=EIST
-Asia/Jayapura.generic.short=WIT
-Asia/Jayapura.standard.short=WIT
-Asia/Jerusalem.daylight.short=IDT
-Asia/Jerusalem.generic.short=IT
-Asia/Jerusalem.standard.short=IST
-Asia/Kabul.daylight.short=AFST
-Asia/Kabul.generic.short=AFT
-Asia/Kabul.standard.short=AFT
-Asia/Kamchatka.daylight.short=PETST
-Asia/Kamchatka.generic.short=PETT
-Asia/Kamchatka.standard.short=PETT
-Asia/Karachi.daylight.short=PKST
-Asia/Karachi.generic.short=PKT
-Asia/Karachi.standard.short=PKT
-Asia/Kashgar.daylight.short=CDT
-Asia/Kashgar.generic.short=CT
-Asia/Kashgar.standard.short=CST
-Asia/Kathmandu.daylight.short=NPST
-Asia/Kathmandu.generic.short=NPT
-Asia/Kathmandu.standard.short=NPT
-Asia/Katmandu.daylight.short=NPST
-Asia/Katmandu.generic.short=NPT
-Asia/Katmandu.standard.short=NPT
-Asia/Khandyga.daylight.short=YAKST
-Asia/Khandyga.generic.short=YAKT
-Asia/Khandyga.standard.short=YAKT
-Asia/Kolkata.daylight.short=IDT
-Asia/Kolkata.generic.short=IT
-Asia/Kolkata.standard.short=IST
-Asia/Krasnoyarsk.daylight.short=KRAST
-Asia/Krasnoyarsk.generic.short=KRAT
-Asia/Krasnoyarsk.standard.short=KRAT
-Asia/Kuala_Lumpur.daylight.short=MYST
-Asia/Kuala_Lumpur.generic.short=MYT
-Asia/Kuala_Lumpur.standard.short=MYT
-Asia/Kuching.daylight.short=MYST
-Asia/Kuching.generic.short=MYT
-Asia/Kuching.standard.short=MYT
-Asia/Kuwait.daylight.short=ADT
-Asia/Kuwait.generic.short=AT
-Asia/Kuwait.standard.short=AST
-Asia/Macao.daylight.short=CDT
-Asia/Macao.generic.short=CT
-Asia/Macao.standard.short=CST
-Asia/Macau.daylight.short=CDT
-Asia/Macau.generic.short=CT
-Asia/Macau.standard.short=CST
-Asia/Magadan.daylight.short=MAGST
-Asia/Magadan.generic.short=MAGT
-Asia/Magadan.standard.short=MAGT
-Asia/Makassar.daylight.short=CIST
-Asia/Makassar.generic.short=WITA
-Asia/Makassar.standard.short=WITA
-Asia/Manila.daylight.short=PHST
-Asia/Manila.generic.short=PHT
-Asia/Manila.standard.short=PHT
-Asia/Muscat.daylight.short=GDT
-Asia/Muscat.generic.short=GT
-Asia/Muscat.standard.short=GST
-Asia/Nicosia.daylight.short=EEST
-Asia/Nicosia.generic.short=EET
-Asia/Nicosia.standard.short=EET
-Asia/Novokuznetsk.daylight.short=NOVST
-Asia/Novokuznetsk.generic.short=NOVT
-Asia/Novokuznetsk.standard.short=NOVT
-Asia/Novosibirsk.daylight.short=NOVST
-Asia/Novosibirsk.generic.short=NOVT
-Asia/Novosibirsk.standard.short=NOVT
-Asia/Omsk.daylight.short=OMSST
-Asia/Omsk.generic.short=OMST
-Asia/Omsk.standard.short=OMST
-Asia/Oral.daylight.short=ORAST
-Asia/Oral.generic.short=ORAT
-Asia/Oral.standard.short=ORAT
-Asia/Phnom_Penh.daylight.short=ICST
-Asia/Phnom_Penh.generic.short=ICT
-Asia/Phnom_Penh.standard.short=ICT
-Asia/Pontianak.daylight.short=WIST
-Asia/Pontianak.generic.short=WIB
-Asia/Pontianak.standard.short=WIB
-Asia/Pyongyang.daylight.short=KDT
-Asia/Pyongyang.generic.short=KT
-Asia/Pyongyang.standard.short=KST
-Asia/Qatar.daylight.short=ADT
-Asia/Qatar.generic.short=AT
-Asia/Qatar.standard.short=AST
-Asia/Qyzylorda.daylight.short=QYZST
-Asia/Qyzylorda.generic.short=QYZT
-Asia/Qyzylorda.standard.short=QYZT
-Asia/Rangoon.daylight.short=MMST
-Asia/Rangoon.generic.short=MMT
-Asia/Rangoon.standard.short=MMT
-Asia/Saigon.daylight.short=ICST
-Asia/Saigon.generic.short=ICT
-Asia/Saigon.standard.short=ICT
-Asia/Sakhalin.daylight.short=SAKST
-Asia/Sakhalin.generic.short=SAKT
-Asia/Sakhalin.standard.short=SAKT
-Asia/Samarkand.daylight.short=UZST
-Asia/Samarkand.generic.short=UZT
-Asia/Samarkand.standard.short=UZT
-Asia/Seoul.daylight.short=KDT
-Asia/Seoul.generic.short=KT
-Asia/Seoul.standard.short=KST
-Asia/Shanghai.daylight.short=CDT
-Asia/Shanghai.generic.short=CT
-Asia/Shanghai.standard.short=CST
-Asia/Singapore.daylight.short=SGST
-Asia/Singapore.generic.short=SGT
-Asia/Singapore.standard.short=SGT
-Asia/Taipei.daylight.short=CDT
-Asia/Taipei.generic.short=CT
-Asia/Taipei.standard.short=CST
-Asia/Tashkent.daylight.short=UZST
-Asia/Tashkent.generic.short=UZT
-Asia/Tashkent.standard.short=UZT
-Asia/Tbilisi.daylight.short=GEST
-Asia/Tbilisi.generic.short=GET
-Asia/Tbilisi.standard.short=GET
-Asia/Tehran.daylight.short=IRDT
-Asia/Tehran.generic.short=IRT
-Asia/Tehran.standard.short=IRST
-Asia/Tel_Aviv.daylight.short=IDT
-Asia/Tel_Aviv.generic.short=IT
-Asia/Tel_Aviv.standard.short=IST
-Asia/Thimbu.daylight.short=BTST
-Asia/Thimbu.generic.short=BTT
-Asia/Thimbu.standard.short=BTT
-Asia/Thimphu.daylight.short=BTST
-Asia/Thimphu.generic.short=BTT
-Asia/Thimphu.standard.short=BTT
-Asia/Tokyo.daylight.short=JDT
-Asia/Tokyo.generic.short=JT
-Asia/Tokyo.standard.short=JST
-Asia/Ujung_Pandang.daylight.short=CIST
-Asia/Ujung_Pandang.generic.short=WITA
-Asia/Ujung_Pandang.standard.short=WITA
-Asia/Ulaanbaatar.daylight.short=ULAST
-Asia/Ulaanbaatar.generic.short=ULAT
-Asia/Ulaanbaatar.standard.short=ULAT
-Asia/Ulan_Bator.daylight.short=ULAST
-Asia/Ulan_Bator.generic.short=ULAT
-Asia/Ulan_Bator.standard.short=ULAT
-Asia/Urumqi.daylight.short=CDT
-Asia/Urumqi.generic.short=CT
-Asia/Urumqi.standard.short=CST
-Asia/Ust-Nera.daylight.short=VLAST
-Asia/Ust-Nera.generic.short=VLAT
-Asia/Ust-Nera.standard.short=VLAT
-Asia/Vientiane.daylight.short=ICST
-Asia/Vientiane.generic.short=ICT
-Asia/Vientiane.standard.short=ICT
-Asia/Vladivostok.daylight.short=VLAST
-Asia/Vladivostok.generic.short=VLAT
-Asia/Vladivostok.standard.short=VLAT
-Asia/Yakutsk.daylight.short=YAKST
-Asia/Yakutsk.generic.short=YAKT
-Asia/Yakutsk.standard.short=YAKT
-Asia/Yekaterinburg.daylight.short=YEKST
-Asia/Yekaterinburg.generic.short=YEKT
-Asia/Yekaterinburg.standard.short=YEKT
-Asia/Yerevan.daylight.short=AMST
-Asia/Yerevan.generic.short=AMT
-Asia/Yerevan.standard.short=AMT
-AST.daylight.short=AKDT
-AST.generic.short=AKT
-AST.standard.short=AKST
-Atlantic/Azores.daylight.short=AZOST
-Atlantic/Azores.generic.short=AZOT
-Atlantic/Azores.standard.short=AZOT
-Atlantic/Bermuda.daylight.short=ADT
-Atlantic/Bermuda.generic.short=AT
-Atlantic/Bermuda.standard.short=AST
-Atlantic/Canary.daylight.short=WEST
-Atlantic/Canary.generic.short=WET
-Atlantic/Canary.standard.short=WET
-Atlantic/Cape_Verde.daylight.short=CVST
-Atlantic/Cape_Verde.generic.short=CVT
-Atlantic/Cape_Verde.standard.short=CVT
-Atlantic/Faeroe.daylight.short=WEST
-Atlantic/Faeroe.generic.short=WET
-Atlantic/Faeroe.standard.short=WET
-Atlantic/Faroe.daylight.short=WEST
-Atlantic/Faroe.generic.short=WET
-Atlantic/Faroe.standard.short=WET
-Atlantic/Jan_Mayen.daylight.short=CEST
-Atlantic/Jan_Mayen.generic.short=CET
-Atlantic/Jan_Mayen.standard.short=CET
-Atlantic/Madeira.daylight.short=WEST
-Atlantic/Madeira.generic.short=WET
-Atlantic/Madeira.standard.short=WET
-Atlantic/Reykjavik.daylight.short=GMT
-Atlantic/Reykjavik.generic.short=GMT
-Atlantic/Reykjavik.standard.short=GMT
-Atlantic/South_Georgia.daylight.short=GDT
-Atlantic/South_Georgia.generic.short=GT
-Atlantic/South_Georgia.standard.short=GST
-Atlantic/Stanley.daylight.short=FKST
-Atlantic/Stanley.generic.short=FKT
-Atlantic/Stanley.standard.short=FKT
-Atlantic/St_Helena.daylight.short=GMT
-Atlantic/St_Helena.generic.short=GMT
-Atlantic/St_Helena.standard.short=GMT
-Australia/ACT.daylight.short=EST
-Australia/ACT.generic.short=ET
-Australia/ACT.standard.short=EST
-Australia/Adelaide.daylight.short=CST
-Australia/Adelaide.generic.short=CT
-Australia/Adelaide.standard.short=CST
-Australia/Brisbane.daylight.short=EST
-Australia/Brisbane.generic.short=ET
-Australia/Brisbane.standard.short=EST
-Australia/Broken_Hill.daylight.short=CST
-Australia/Broken_Hill.generic.short=CT
-Australia/Broken_Hill.standard.short=CST
-Australia/Canberra.daylight.short=EST
-Australia/Canberra.generic.short=ET
-Australia/Canberra.standard.short=EST
-Australia/Currie.daylight.short=EST
-Australia/Currie.generic.short=ET
-Australia/Currie.standard.short=EST
-Australia/Darwin.daylight.short=CST
-Australia/Darwin.generic.short=CT
-Australia/Darwin.standard.short=CST
-Australia/Eucla.daylight.short=CWST
-Australia/Eucla.generic.short=CWT
-Australia/Eucla.standard.short=CWST
-Australia/Hobart.daylight.short=EST
-Australia/Hobart.generic.short=ET
-Australia/Hobart.standard.short=EST
-Australia/LHI.daylight.short=LHST
-Australia/LHI.generic.short=LHT
-Australia/LHI.standard.short=LHST
-Australia/Lindeman.daylight.short=EST
-Australia/Lindeman.generic.short=ET
-Australia/Lindeman.standard.short=EST
-Australia/Lord_Howe.daylight.short=LHST
-Australia/Lord_Howe.generic.short=LHT
-Australia/Lord_Howe.standard.short=LHST
-Australia/Melbourne.daylight.short=EST
-Australia/Melbourne.generic.short=ET
-Australia/Melbourne.standard.short=EST
-Australia/North.daylight.short=CST
-Australia/North.generic.short=CT
-Australia/North.standard.short=CST
-Australia/NSW.daylight.short=EST
-Australia/NSW.generic.short=ET
-Australia/NSW.standard.short=EST
-Australia/Perth.daylight.short=WST
-Australia/Perth.generic.short=WT
-Australia/Perth.standard.short=WST
-Australia/Queensland.daylight.short=EST
-Australia/Queensland.generic.short=ET
-Australia/Queensland.standard.short=EST
-Australia/South.daylight.short=CST
-Australia/South.generic.short=CT
-Australia/South.standard.short=CST
-Australia/Sydney.daylight.short=EST
-Australia/Sydney.generic.short=ET
-Australia/Sydney.standard.short=EST
-Australia/Tasmania.daylight.short=EST
-Australia/Tasmania.generic.short=ET
-Australia/Tasmania.standard.short=EST
-Australia/Victoria.daylight.short=EST
-Australia/Victoria.generic.short=ET
-Australia/Victoria.standard.short=EST
-Australia/West.daylight.short=WST
-Australia/West.generic.short=WT
-Australia/West.standard.short=WST
-Australia/Yancowinna.daylight.short=CST
-Australia/Yancowinna.generic.short=CT
-Australia/Yancowinna.standard.short=CST
-BET.daylight.short=BRST
-BET.generic.short=BRT
-BET.standard.short=BRT
-Brazil/Acre.daylight.short=ACST
-Brazil/Acre.generic.short=ACT
-Brazil/Acre.standard.short=ACT
-Brazil/DeNoronha.daylight.short=FNST
-Brazil/DeNoronha.generic.short=FNT
-Brazil/DeNoronha.standard.short=FNT
-Brazil/East.daylight.short=BRST
-Brazil/East.generic.short=BRT
-Brazil/East.standard.short=BRT
-Brazil/West.daylight.short=AMST
-Brazil/West.generic.short=AMT
-Brazil/West.standard.short=AMT
-BST.daylight.short=BDST
-BST.generic.short=BDT
-BST.standard.short=BDT
-Canada/Atlantic.daylight.short=ADT
-Canada/Atlantic.generic.short=AT
-Canada/Atlantic.standard.short=AST
-Canada/Central.daylight.short=CDT
-Canada/Central.generic.short=CT
-Canada/Central.standard.short=CST
-Canada/Eastern.daylight.short=EDT
-Canada/Eastern.generic.short=ET
-Canada/Eastern.standard.short=EST
-Canada/East-Saskatchewan.daylight.short=CDT
-Canada/East-Saskatchewan.generic.short=CT
-Canada/East-Saskatchewan.standard.short=CST
-Canada/Mountain.daylight.short=MDT
-Canada/Mountain.generic.short=MT
-Canada/Mountain.standard.short=MST
-Canada/Newfoundland.daylight.short=NDT
-Canada/Newfoundland.generic.short=NT
-Canada/Newfoundland.standard.short=NST
-Canada/Pacific.daylight.short=PDT
-Canada/Pacific.generic.short=PT
-Canada/Pacific.standard.short=PST
-Canada/Saskatchewan.daylight.short=CDT
-Canada/Saskatchewan.generic.short=CT
-Canada/Saskatchewan.standard.short=CST
-Canada/Yukon.daylight.short=PDT
-Canada/Yukon.generic.short=PT
-Canada/Yukon.standard.short=PST
-CAT.daylight.short=CAST
-CAT.generic.short=CAT
-CAT.standard.short=CAT
-CET.daylight.short=CEST
-CET.generic.short=CET
-CET.standard.short=CET
-Chile/Continental.daylight.short=CLST
-Chile/Continental.generic.short=CLT
-Chile/Continental.standard.short=CLT
-Chile/EasterIsland.daylight.short=EASST
-Chile/EasterIsland.generic.short=EAST
-Chile/EasterIsland.standard.short=EAST
-CNT.daylight.short=NDT
-CNT.generic.short=NT
-CNT.standard.short=NST
-CST6CDT.daylight.short=CDT
-CST6CDT.generic.short=CT
-CST6CDT.standard.short=CST
-CST.daylight.short=CDT
-CST.generic.short=CT
-CST.standard.short=CST
-CTT.daylight.short=CDT
-CTT.generic.short=CT
-CTT.standard.short=CST
-Cuba.daylight.short=CDT
-Cuba.generic.short=CT
-Cuba.standard.short=CST
-EAT.daylight.short=EAST
-EAT.generic.short=EAT
-EAT.standard.short=EAT
-ECT.daylight.short=CEST
-ECT.generic.short=CET
-ECT.standard.short=CET
-EET.daylight.short=EEST
-EET.generic.short=EET
-EET.standard.short=EET
-Egypt.daylight.short=EEST
-Egypt.generic.short=EET
-Egypt.standard.short=EET
-Eire.daylight.short=IST
-Eire.generic.short=IT
-Eire.standard.short=GMT
-EST5EDT.daylight.short=EDT
-EST5EDT.generic.short=ET
-EST5EDT.standard.short=EST
-EST.daylight.short=EDT
-EST.generic.short=ET
-EST.standard.short=EST
-Etc/Greenwich.daylight.short=GMT
-Etc/Greenwich.generic.short=GMT
-Etc/Greenwich.standard.short=GMT
-Etc/UCT.daylight.short=UTC
-Etc/UCT.generic.short=UTC
-Etc/UCT.standard.short=UTC
-Etc/Universal.daylight.short=UTC
-Etc/Universal.generic.short=UTC
-Etc/Universal.standard.short=UTC
-Etc/UTC.daylight.short=UTC
-Etc/UTC.generic.short=UTC
-Etc/UTC.standard.short=UTC
-Etc/Zulu.daylight.short=UTC
-Etc/Zulu.generic.short=UTC
-Etc/Zulu.standard.short=UTC
-Europe/Amsterdam.daylight.short=CEST
-Europe/Amsterdam.generic.short=CET
-Europe/Amsterdam.standard.short=CET
-Europe/Andorra.daylight.short=CEST
-Europe/Andorra.generic.short=CET
-Europe/Andorra.standard.short=CET
-Europe/Athens.daylight.short=EEST
-Europe/Athens.generic.short=EET
-Europe/Athens.standard.short=EET
-Europe/Belfast.daylight.short=BST
-Europe/Belfast.generic.short=BT
-Europe/Belfast.standard.short=GMT
-Europe/Belgrade.daylight.short=CEST
-Europe/Belgrade.generic.short=CET
-Europe/Belgrade.standard.short=CET
-Europe/Berlin.daylight.short=CEST
-Europe/Berlin.generic.short=CET
-Europe/Berlin.standard.short=CET
-Europe/Bratislava.daylight.short=CEST
-Europe/Bratislava.generic.short=CET
-Europe/Bratislava.standard.short=CET
-Europe/Brussels.daylight.short=CEST
-Europe/Brussels.generic.short=CET
-Europe/Brussels.standard.short=CET
-Europe/Bucharest.daylight.short=EEST
-Europe/Bucharest.generic.short=EET
-Europe/Bucharest.standard.short=EET
-Europe/Budapest.daylight.short=CEST
-Europe/Budapest.generic.short=CET
-Europe/Budapest.standard.short=CET
-Europe/Busingen.daylight.short=CEST
-Europe/Busingen.generic.short=CET
-Europe/Busingen.standard.short=CET
-Europe/Chisinau.daylight.short=EEST
-Europe/Chisinau.generic.short=EET
-Europe/Chisinau.standard.short=EET
-Europe/Copenhagen.daylight.short=CEST
-Europe/Copenhagen.generic.short=CET
-Europe/Copenhagen.standard.short=CET
-Europe/Dublin.daylight.short=IST
-Europe/Dublin.generic.short=IT
-Europe/Dublin.standard.short=GMT
-Europe/Gibraltar.daylight.short=CEST
-Europe/Gibraltar.generic.short=CET
-Europe/Gibraltar.standard.short=CET
-Europe/Guernsey.daylight.short=BST
-Europe/Guernsey.generic.short=BT
-Europe/Guernsey.standard.short=GMT
-Europe/Helsinki.daylight.short=EEST
-Europe/Helsinki.generic.short=EET
-Europe/Helsinki.standard.short=EET
-Europe/Isle_of_Man.daylight.short=BST
-Europe/Isle_of_Man.generic.short=BT
-Europe/Isle_of_Man.standard.short=GMT
-Europe/Istanbul.daylight.short=EEST
-Europe/Istanbul.generic.short=EET
-Europe/Istanbul.standard.short=EET
-Europe/Jersey.daylight.short=BST
-Europe/Jersey.generic.short=BT
-Europe/Jersey.standard.short=GMT
-Europe/Kaliningrad.daylight.short=FEST
-Europe/Kaliningrad.generic.short=FET
-Europe/Kaliningrad.standard.short=FET
-Europe/Kiev.daylight.short=EEST
-Europe/Kiev.generic.short=EET
-Europe/Kiev.standard.short=EET
-Europe/Lisbon.daylight.short=WEST
-Europe/Lisbon.generic.short=WET
-Europe/Lisbon.standard.short=WET
-Europe/Ljubljana.daylight.short=CEST
-Europe/Ljubljana.generic.short=CET
-Europe/Ljubljana.standard.short=CET
-Europe/London.daylight.short=BST
-Europe/London.generic.short=BT
-Europe/London.standard.short=GMT
-Europe/Luxembourg.daylight.short=CEST
-Europe/Luxembourg.generic.short=CET
-Europe/Luxembourg.standard.short=CET
-Europe/Madrid.daylight.short=CEST
-Europe/Madrid.generic.short=CET
-Europe/Madrid.standard.short=CET
-Europe/Malta.daylight.short=CEST
-Europe/Malta.generic.short=CET
-Europe/Malta.standard.short=CET
-Europe/Mariehamn.daylight.short=EEST
-Europe/Mariehamn.generic.short=EET
-Europe/Mariehamn.standard.short=EET
-Europe/Minsk.daylight.short=FEST
-Europe/Minsk.generic.short=FET
-Europe/Minsk.standard.short=FET
-Europe/Monaco.daylight.short=CEST
-Europe/Monaco.generic.short=CET
-Europe/Monaco.standard.short=CET
-Europe/Moscow.daylight.short=MSD
-Europe/Moscow.generic.short=MT
-Europe/Moscow.standard.short=MSK
-Europe/Nicosia.daylight.short=EEST
-Europe/Nicosia.generic.short=EET
-Europe/Nicosia.standard.short=EET
-Europe/Oslo.daylight.short=CEST
-Europe/Oslo.generic.short=CET
-Europe/Oslo.standard.short=CET
-Europe/Paris.daylight.short=CEST
-Europe/Paris.generic.short=CET
-Europe/Paris.standard.short=CET
-Europe/Podgorica.daylight.short=CEST
-Europe/Podgorica.generic.short=CET
-Europe/Podgorica.standard.short=CET
-Europe/Prague.daylight.short=CEST
-Europe/Prague.generic.short=CET
-Europe/Prague.standard.short=CET
-Europe/Riga.daylight.short=EEST
-Europe/Riga.generic.short=EET
-Europe/Riga.standard.short=EET
-Europe/Rome.daylight.short=CEST
-Europe/Rome.generic.short=CET
-Europe/Rome.standard.short=CET
-Europe/Samara.daylight.short=SAMST
-Europe/Samara.generic.short=SAMT
-Europe/Samara.standard.short=SAMT
-Europe/San_Marino.daylight.short=CEST
-Europe/San_Marino.generic.short=CET
-Europe/San_Marino.standard.short=CET
-Europe/Sarajevo.daylight.short=CEST
-Europe/Sarajevo.generic.short=CET
-Europe/Sarajevo.standard.short=CET
-Europe/Simferopol.daylight.short=EEST
-Europe/Simferopol.generic.short=EET
-Europe/Simferopol.standard.short=EET
-Europe/Skopje.daylight.short=CEST
-Europe/Skopje.generic.short=CET
-Europe/Skopje.standard.short=CET
-Europe/Sofia.daylight.short=EEST
-Europe/Sofia.generic.short=EET
-Europe/Sofia.standard.short=EET
-Europe/Stockholm.daylight.short=CEST
-Europe/Stockholm.generic.short=CET
-Europe/Stockholm.standard.short=CET
-Europe/Tallinn.daylight.short=EEST
-Europe/Tallinn.generic.short=EET
-Europe/Tallinn.standard.short=EET
-Europe/Tirane.daylight.short=CEST
-Europe/Tirane.generic.short=CET
-Europe/Tirane.standard.short=CET
-Europe/Tiraspol.daylight.short=EEST
-Europe/Tiraspol.generic.short=EET
-Europe/Tiraspol.standard.short=EET
-Europe/Uzhgorod.daylight.short=EEST
-Europe/Uzhgorod.generic.short=EET
-Europe/Uzhgorod.standard.short=EET
-Europe/Vaduz.daylight.short=CEST
-Europe/Vaduz.generic.short=CET
-Europe/Vaduz.standard.short=CET
-Europe/Vatican.daylight.short=CEST
-Europe/Vatican.generic.short=CET
-Europe/Vatican.standard.short=CET
-Europe/Vienna.daylight.short=CEST
-Europe/Vienna.generic.short=CET
-Europe/Vienna.standard.short=CET
-Europe/Vilnius.daylight.short=EEST
-Europe/Vilnius.generic.short=EET
-Europe/Vilnius.standard.short=EET
-Europe/Volgograd.daylight.short=VOLST
-Europe/Volgograd.generic.short=VOLT
-Europe/Volgograd.standard.short=VOLT
-Europe/Warsaw.daylight.short=CEST
-Europe/Warsaw.generic.short=CET
-Europe/Warsaw.standard.short=CET
-Europe/Zagreb.daylight.short=CEST
-Europe/Zagreb.generic.short=CET
-Europe/Zagreb.standard.short=CET
-Europe/Zaporozhye.daylight.short=EEST
-Europe/Zaporozhye.generic.short=EET
-Europe/Zaporozhye.standard.short=EET
-Europe/Zurich.daylight.short=CEST
-Europe/Zurich.generic.short=CET
-Europe/Zurich.standard.short=CET
-GB.daylight.short=BST
-GB-Eire.daylight.short=BST
-GB-Eire.generic.short=BT
-GB-Eire.standard.short=GMT
-GB.generic.short=BT
-GB.standard.short=GMT
-GMT.daylight.short=GMT
-GMT.generic.short=GMT
-GMT.standard.short=GMT
-Greenwich.daylight.short=GMT
-Greenwich.generic.short=GMT
-Greenwich.standard.short=GMT
-Hongkong.daylight.short=HKST
-Hongkong.generic.short=HKT
-Hongkong.standard.short=HKT
-HST.daylight.short=HDT
-HST.generic.short=HT
-HST.standard.short=HST
-Iceland.daylight.short=GMT
-Iceland.generic.short=GMT
-Iceland.standard.short=GMT
-IET.daylight.short=EDT
-IET.generic.short=ET
-IET.standard.short=EST
-Indian/Antananarivo.daylight.short=EAST
-Indian/Antananarivo.generic.short=EAT
-Indian/Antananarivo.standard.short=EAT
-Indian/Chagos.daylight.short=IOST
-Indian/Chagos.generic.short=IOT
-Indian/Chagos.standard.short=IOT
-Indian/Christmas.daylight.short=CXST
-Indian/Christmas.generic.short=CIT
-Indian/Christmas.standard.short=CXT
-Indian/Cocos.daylight.short=CCST
-Indian/Cocos.generic.short=CCT
-Indian/Cocos.standard.short=CCT
-Indian/Comoro.daylight.short=EAST
-Indian/Comoro.generic.short=EAT
-Indian/Comoro.standard.short=EAT
-Indian/Kerguelen.daylight.short=TFST
-Indian/Kerguelen.generic.short=TFT
-Indian/Kerguelen.standard.short=TFT
-Indian/Mahe.daylight.short=SCST
-Indian/Mahe.generic.short=SCT
-Indian/Mahe.standard.short=SCT
-Indian/Maldives.daylight.short=MVST
-Indian/Maldives.generic.short=MVT
-Indian/Maldives.standard.short=MVT
-Indian/Mauritius.daylight.short=MUST
-Indian/Mauritius.generic.short=MUT
-Indian/Mauritius.standard.short=MUT
-Indian/Mayotte.daylight.short=EAST
-Indian/Mayotte.generic.short=EAT
-Indian/Mayotte.standard.short=EAT
-Indian/Reunion.daylight.short=REST
-Indian/Reunion.generic.short=RET
-Indian/Reunion.standard.short=RET
-Iran.daylight.short=IRDT
-Iran.generic.short=IRT
-Iran.standard.short=IRST
-Israel.daylight.short=IDT
-Israel.generic.short=IT
-Israel.standard.short=IST
-IST.daylight.short=IDT
-IST.generic.short=IT
-IST.standard.short=IST
-Jamaica.daylight.short=EDT
-Jamaica.generic.short=ET
-Jamaica.standard.short=EST
-Japan.daylight.short=JDT
-Japan.generic.short=JT
-Japan.standard.short=JST
-JST.daylight.short=JDT
-JST.generic.short=JT
-JST.standard.short=JST
-Kwajalein.daylight.short=MHST
-Kwajalein.generic.short=MHT
-Kwajalein.standard.short=MHT
-Libya.daylight.short=EEST
-Libya.generic.short=EET
-Libya.standard.short=EET
-MET.daylight.short=MEST
-MET.generic.short=MET
-MET.standard.short=MET
-Mexico/BajaNorte.daylight.short=PDT
-Mexico/BajaNorte.generic.short=PT
-Mexico/BajaNorte.standard.short=PST
-Mexico/BajaSur.daylight.short=MDT
-Mexico/BajaSur.generic.short=MT
-Mexico/BajaSur.standard.short=MST
-Mexico/General.daylight.short=CDT
-Mexico/General.generic.short=CT
-Mexico/General.standard.short=CST
-MIT.daylight.short=WSDT
-MIT.generic.short=WST
-MIT.standard.short=WST
-MST7MDT.daylight.short=MDT
-MST7MDT.generic.short=MT
-MST7MDT.standard.short=MST
-MST.daylight.short=MDT
-MST.generic.short=MT
-MST.standard.short=MST
-Navajo.daylight.short=MDT
-Navajo.generic.short=MT
-Navajo.standard.short=MST
-NET.daylight.short=AMST
-NET.generic.short=AMT
-NET.standard.short=AMT
-NST.daylight.short=NZDT
-NST.generic.short=NZT
-NST.standard.short=NZST
-NZ-CHAT.daylight.short=CHADT
-NZ-CHAT.generic.short=CHAT
-NZ-CHAT.standard.short=CHAST
-NZ.daylight.short=NZDT
-NZ.generic.short=NZT
-NZ.standard.short=NZST
-Pacific/Apia.daylight.short=WSDT
-Pacific/Apia.generic.short=WST
-Pacific/Apia.standard.short=WST
-Pacific/Auckland.daylight.short=NZDT
-Pacific/Auckland.generic.short=NZT
-Pacific/Auckland.standard.short=NZST
-Pacific/Chatham.daylight.short=CHADT
-Pacific/Chatham.generic.short=CHAT
-Pacific/Chatham.standard.short=CHAST
-Pacific/Chuuk.daylight.short=CHUST
-Pacific/Chuuk.generic.short=CHUT
-Pacific/Chuuk.standard.short=CHUT
-Pacific/Easter.daylight.short=EASST
-Pacific/Easter.generic.short=EAST
-Pacific/Easter.standard.short=EAST
-Pacific/Efate.daylight.short=VUST
-Pacific/Efate.generic.short=VUT
-Pacific/Efate.standard.short=VUT
-Pacific/Enderbury.daylight.short=PHOST
-Pacific/Enderbury.generic.short=PHOT
-Pacific/Enderbury.standard.short=PHOT
-Pacific/Fakaofo.daylight.short=TKST
-Pacific/Fakaofo.generic.short=TKT
-Pacific/Fakaofo.standard.short=TKT
-Pacific/Fiji.daylight.short=FJST
-Pacific/Fiji.generic.short=FJT
-Pacific/Fiji.standard.short=FJT
-Pacific/Funafuti.daylight.short=TVST
-Pacific/Funafuti.generic.short=TVT
-Pacific/Funafuti.standard.short=TVT
-Pacific/Galapagos.daylight.short=GALST
-Pacific/Galapagos.generic.short=GALT
-Pacific/Galapagos.standard.short=GALT
-Pacific/Gambier.daylight.short=GAMST
-Pacific/Gambier.generic.short=GAMT
-Pacific/Gambier.standard.short=GAMT
-Pacific/Guadalcanal.daylight.short=SBST
-Pacific/Guadalcanal.generic.short=SBT
-Pacific/Guadalcanal.standard.short=SBT
-Pacific/Guam.daylight.short=ChDT
-Pacific/Guam.generic.short=ChT
-Pacific/Guam.standard.short=ChST
-Pacific/Honolulu.daylight.short=HDT
-Pacific/Honolulu.generic.short=HT
-Pacific/Honolulu.standard.short=HST
-Pacific/Johnston.daylight.short=HDT
-Pacific/Johnston.generic.short=HT
-Pacific/Johnston.standard.short=HST
-Pacific/Kiritimati.daylight.short=LINST
-Pacific/Kiritimati.generic.short=LINT
-Pacific/Kiritimati.standard.short=LINT
-Pacific/Kosrae.daylight.short=KOSST
-Pacific/Kosrae.generic.short=KOST
-Pacific/Kosrae.standard.short=KOST
-Pacific/Kwajalein.daylight.short=MHST
-Pacific/Kwajalein.generic.short=MHT
-Pacific/Kwajalein.standard.short=MHT
-Pacific/Majuro.daylight.short=MHST
-Pacific/Majuro.generic.short=MHT
-Pacific/Majuro.standard.short=MHT
-Pacific/Marquesas.daylight.short=MARST
-Pacific/Marquesas.generic.short=MART
-Pacific/Marquesas.standard.short=MART
-Pacific/Midway.daylight.short=SDT
-Pacific/Midway.generic.short=ST
-Pacific/Midway.standard.short=SST
-Pacific/Nauru.daylight.short=NRST
-Pacific/Nauru.generic.short=NRT
-Pacific/Nauru.standard.short=NRT
-Pacific/Niue.daylight.short=NUST
-Pacific/Niue.generic.short=NUT
-Pacific/Niue.standard.short=NUT
-Pacific/Norfolk.daylight.short=NFST
-Pacific/Norfolk.generic.short=NFT
-Pacific/Norfolk.standard.short=NFT
-Pacific/Noumea.daylight.short=NCST
-Pacific/Noumea.generic.short=NCT
-Pacific/Noumea.standard.short=NCT
-Pacific/Pago_Pago.daylight.short=SDT
-Pacific/Pago_Pago.generic.short=ST
-Pacific/Pago_Pago.standard.short=SST
-Pacific/Palau.daylight.short=PWST
-Pacific/Palau.generic.short=PWT
-Pacific/Palau.standard.short=PWT
-Pacific/Pitcairn.daylight.short=PDT
-Pacific/Pitcairn.generic.short=PT
-Pacific/Pitcairn.standard.short=PST
-Pacific/Pohnpei.daylight.short=PONST
-Pacific/Pohnpei.generic.short=PONT
-Pacific/Pohnpei.standard.short=PONT
-Pacific/Ponape.daylight.short=PONST
-Pacific/Ponape.generic.short=PONT
-Pacific/Ponape.standard.short=PONT
-Pacific/Port_Moresby.daylight.short=PGST
-Pacific/Port_Moresby.generic.short=PGT
-Pacific/Port_Moresby.standard.short=PGT
-Pacific/Rarotonga.daylight.short=CKHST
-Pacific/Rarotonga.generic.short=CKT
-Pacific/Rarotonga.standard.short=CKT
-Pacific/Saipan.daylight.short=ChDT
-Pacific/Saipan.generic.short=ChT
-Pacific/Saipan.standard.short=ChST
-Pacific/Samoa.daylight.short=SDT
-Pacific/Samoa.generic.short=ST
-Pacific/Samoa.standard.short=SST
-Pacific/Tahiti.daylight.short=TAHST
-Pacific/Tahiti.generic.short=TAHT
-Pacific/Tahiti.standard.short=TAHT
-Pacific/Tarawa.daylight.short=GILST
-Pacific/Tarawa.generic.short=GILT
-Pacific/Tarawa.standard.short=GILT
-Pacific/Tongatapu.daylight.short=TOST
-Pacific/Tongatapu.generic.short=TOT
-Pacific/Tongatapu.standard.short=TOT
-Pacific/Truk.daylight.short=CHUST
-Pacific/Truk.generic.short=CHUT
-Pacific/Truk.standard.short=CHUT
-Pacific/Wake.daylight.short=WAKST
-Pacific/Wake.generic.short=WAKT
-Pacific/Wake.standard.short=WAKT
-Pacific/Wallis.daylight.short=WFST
-Pacific/Wallis.generic.short=WFT
-Pacific/Wallis.standard.short=WFT
-Pacific/Yap.daylight.short=CHUST
-Pacific/Yap.generic.short=CHUT
-Pacific/Yap.standard.short=CHUT
-PLT.daylight.short=PKST
-PLT.generic.short=PKT
-PLT.standard.short=PKT
-PNT.daylight.short=MDT
-PNT.generic.short=MT
-PNT.standard.short=MST
-Poland.daylight.short=CEST
-Poland.generic.short=CET
-Poland.standard.short=CET
-Portugal.daylight.short=WEST
-Portugal.generic.short=WET
-Portugal.standard.short=WET
-PRC.daylight.short=CDT
-PRC.generic.short=CT
-PRC.standard.short=CST
-PRT.daylight.short=ADT
-PRT.generic.short=AT
-PRT.standard.short=AST
-PST8PDT.daylight.short=PDT
-PST8PDT.generic.short=PT
-PST8PDT.standard.short=PST
-PST.daylight.short=PDT
-PST.generic.short=PT
-PST.standard.short=PST
-ROK.daylight.short=KDT
-ROK.generic.short=KT
-ROK.standard.short=KST
-Singapore.daylight.short=SGST
-Singapore.generic.short=SGT
-Singapore.standard.short=SGT
-SST.daylight.short=SBST
-SST.generic.short=SBT
-SST.standard.short=SBT
-SystemV/AST4ADT.daylight.short=ADT
-SystemV/AST4ADT.generic.short=AT
-SystemV/AST4ADT.standard.short=AST
-SystemV/AST4.daylight.short=ADT
-SystemV/AST4.generic.short=AT
-SystemV/AST4.standard.short=AST
-SystemV/CST6CDT.daylight.short=CDT
-SystemV/CST6CDT.generic.short=CT
-SystemV/CST6CDT.standard.short=CST
-SystemV/CST6.daylight.short=CDT
-SystemV/CST6.generic.short=CT
-SystemV/CST6.standard.short=CST
-SystemV/EST5.daylight.short=EDT
-SystemV/EST5EDT.daylight.short=EDT
-SystemV/EST5EDT.generic.short=ET
-SystemV/EST5EDT.standard.short=EST
-SystemV/EST5.generic.short=ET
-SystemV/EST5.standard.short=EST
-SystemV/HST10.daylight.short=HDT
-SystemV/HST10.generic.short=HT
-SystemV/HST10.standard.short=HST
-SystemV/MST7.daylight.short=MDT
-SystemV/MST7.generic.short=MT
-SystemV/MST7MDT.daylight.short=MDT
-SystemV/MST7MDT.generic.short=MT
-SystemV/MST7MDT.standard.short=MST
-SystemV/MST7.standard.short=MST
-SystemV/PST8.daylight.short=PDT
-SystemV/PST8.generic.short=PT
-SystemV/PST8PDT.daylight.short=PDT
-SystemV/PST8PDT.generic.short=PT
-SystemV/PST8PDT.standard.short=PST
-SystemV/PST8.standard.short=PST
-SystemV/YST9.daylight.short=AKDT
-SystemV/YST9.generic.short=AKT
-SystemV/YST9.standard.short=AKST
-SystemV/YST9YDT.daylight.short=AKDT
-SystemV/YST9YDT.generic.short=AKT
-SystemV/YST9YDT.standard.short=AKST
-Turkey.daylight.short=EEST
-Turkey.generic.short=EET
-Turkey.standard.short=EET
-UCT.daylight.short=UTC
-UCT.generic.short=UTC
-UCT.standard.short=UTC
-Universal.daylight.short=UTC
-Universal.generic.short=UTC
-Universal.standard.short=UTC
-US/Alaska.daylight.short=AKDT
-US/Alaska.generic.short=AKT
-US/Alaska.standard.short=AKST
-US/Aleutian.daylight.short=HADT
-US/Aleutian.generic.short=HAT
-US/Aleutian.standard.short=HAST
-US/Arizona.daylight.short=MDT
-US/Arizona.generic.short=MT
-US/Arizona.standard.short=MST
-US/Central.daylight.short=CDT
-US/Central.generic.short=CT
-US/Central.standard.short=CST
-US/Eastern.daylight.short=EDT
-US/Eastern.generic.short=ET
-US/Eastern.standard.short=EST
-US/East-Indiana.daylight.short=EDT
-US/East-Indiana.generic.short=ET
-US/East-Indiana.standard.short=EST
-US/Hawaii.daylight.short=HDT
-US/Hawaii.generic.short=HT
-US/Hawaii.standard.short=HST
-US/Indiana-Starke.daylight.short=CDT
-US/Indiana-Starke.generic.short=CT
-US/Indiana-Starke.standard.short=CST
-US/Michigan.daylight.short=EDT
-US/Michigan.generic.short=ET
-US/Michigan.standard.short=EST
-US/Mountain.daylight.short=MDT
-US/Mountain.generic.short=MT
-US/Mountain.standard.short=MST
-US/Pacific.daylight.short=PDT
-US/Pacific.generic.short=PT
-US/Pacific-New.daylight.short=PDT
-US/Pacific-New.generic.short=PT
-US/Pacific-New.standard.short=PST
-US/Pacific.standard.short=PST
-US/Samoa.daylight.short=SDT
-US/Samoa.generic.short=ST
-US/Samoa.standard.short=SST
-UTC.daylight.short=UTC
-UTC.generic.short=UTC
-UTC.standard.short=UTC
-VST.daylight.short=ICST
-VST.generic.short=ICT
-VST.standard.short=ICT
-WET.daylight.short=WEST
-WET.generic.short=WET
-WET.standard.short=WET
-W-SU.daylight.short=MSD
-W-SU.generic.short=MT
-W-SU.standard.short=MSK
-Zulu.daylight.short=UTC
-Zulu.generic.short=UTC
-Zulu.standard.short=UTC
diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_fr.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_fr.properties
deleted file mode 100644
index 6389940..0000000
--- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_fr.properties
+++ /dev/null
@@ -1,651 +0,0 @@
-ACT.daylight.long=Heure d'\u00E9t\u00E9 d'Australie centrale (Territoire du Nord)
-ACT.generic.long=Centre (Territoire du Nord)
-ACT.standard.long=Heure standard d'Australie centrale (Territoire du Nord)
-AET.daylight.long=Heure d'\u00E9t\u00E9 de l'Est (Nouvelle-Galles du Sud)
-AET.generic.long=C\u00F4te Est (Nouvelle-Galles du Sud)
-AET.standard.long=Heure normale de l'Est (Nouvelle-Galles du Sud)
-AGT.generic.long=Heure d'Argentine
-ART.generic.long=Heure d'Europe de l'Est
-AST.generic.long=Alaska
-Africa/Abidjan.generic.long=Heure de Greenwich
-Africa/Accra.generic.long=Heure du Ghana
-Africa/Addis_Ababa.generic.long=Heure d'Afrique de l'Est
-Africa/Algiers.generic.long=Heure d'Europe centrale
-Africa/Asmara.generic.long=Heure d'Afrique de l'Est
-Africa/Asmera.generic.long=Heure d'Afrique de l'Est
-Africa/Bamako.generic.long=Heure de Greenwich
-Africa/Bangui.generic.long=Heure d'Afrique de l'Ouest
-Africa/Banjul.generic.long=Heure de Greenwich
-Africa/Bissau.generic.long=Heure de Greenwich
-Africa/Blantyre.generic.long=Heure d'Afrique centrale
-Africa/Brazzaville.generic.long=Heure d'Afrique de l'Ouest
-Africa/Bujumbura.generic.long=Heure d'Afrique centrale
-Africa/Cairo.generic.long=Heure d'Europe de l'Est
-Africa/Casablanca.generic.long=Heure d'Europe de l'Ouest
-Africa/Ceuta.generic.long=Heure d'Europe centrale
-Africa/Conakry.generic.long=Heure de Greenwich
-Africa/Dakar.generic.long=Heure de Greenwich
-Africa/Dar_es_Salaam.generic.long=Heure d'Afrique de l'Est
-Africa/Djibouti.generic.long=Heure d'Afrique de l'Est
-Africa/Douala.generic.long=Heure d'Afrique de l'Ouest
-Africa/El_Aaiun.generic.long=Heure d'Europe de l'Ouest
-Africa/Freetown.generic.long=Heure de Sierra Leone
-Africa/Gaborone.generic.long=Heure d'Afrique centrale
-Africa/Harare.generic.long=Heure d'Afrique centrale
-Africa/Johannesburg.generic.long=Afrique du Sud
-Africa/Juba.generic.long=Heure d'Afrique de l'Est
-Africa/Kampala.generic.long=Heure d'Afrique de l'Est
-Africa/Khartoum.generic.long=Heure d'Afrique de l'Est
-Africa/Kigali.generic.long=Heure d'Afrique centrale
-Africa/Kinshasa.generic.long=Heure d'Afrique de l'Ouest
-Africa/Lagos.generic.long=Heure d'Afrique de l'Ouest
-Africa/Libreville.generic.long=Heure d'Afrique de l'Ouest
-Africa/Lome.generic.long=Heure de Greenwich
-Africa/Luanda.generic.long=Heure d'Afrique de l'Ouest
-Africa/Lubumbashi.generic.long=Heure d'Afrique centrale
-Africa/Lusaka.generic.long=Heure d'Afrique centrale
-Africa/Malabo.generic.long=Heure d'Afrique de l'Ouest
-Africa/Maputo.generic.long=Heure d'Afrique centrale
-Africa/Maseru.generic.long=Afrique du Sud
-Africa/Mbabane.generic.long=Afrique du Sud
-Africa/Mogadishu.generic.long=Heure d'Afrique de l'Est
-Africa/Monrovia.generic.long=Heure de Greenwich
-Africa/Nairobi.generic.long=Heure d'Afrique de l'Est
-Africa/Ndjamena.generic.long=Heure d'Afrique de l'Ouest
-Africa/Niamey.generic.long=Heure d'Afrique de l'Ouest
-Africa/Nouakchott.generic.long=Heure de Greenwich
-Africa/Ouagadougou.generic.long=Heure de Greenwich
-Africa/Porto-Novo.generic.long=Heure d'Afrique de l'Ouest
-Africa/Sao_Tome.generic.long=Heure de Greenwich
-Africa/Timbuktu.generic.long=Heure de Greenwich
-Africa/Tripoli.generic.long=Heure d'Europe de l'Est
-Africa/Tunis.generic.long=Heure d'Europe centrale
-Africa/Windhoek.generic.long=Heure d'Afrique de l'Ouest
-America/Adak.generic.long=Hawa\u00EF-Iles Al\u00E9outiennes
-America/Anchorage.generic.long=Alaska
-America/Anguilla.generic.long=Atlantique
-America/Antigua.generic.long=Atlantique
-America/Araguaina.generic.long=Heure du Br\u00E9sil
-America/Argentina/Buenos_Aires.generic.long=Heure d'Argentine
-America/Argentina/Catamarca.generic.long=Heure d'Argentine
-America/Argentina/ComodRivadavia.generic.long=Heure d'Argentine
-America/Argentina/Cordoba.generic.long=Heure d'Argentine
-America/Argentina/Jujuy.generic.long=Heure d'Argentine
-America/Argentina/La_Rioja.generic.long=Heure d'Argentine
-America/Argentina/Mendoza.generic.long=Heure d'Argentine
-America/Argentina/Rio_Gallegos.generic.long=Heure d'Argentine
-America/Argentina/Salta.generic.long=Heure d'Argentine
-America/Argentina/San_Juan.generic.long=Heure d'Argentine
-America/Argentina/San_Luis.generic.long=Heure d'Argentine
-America/Argentina/Tucuman.generic.long=Heure d'Argentine
-America/Argentina/Ushuaia.generic.long=Heure d'Argentine
-America/Aruba.generic.long=Atlantique
-America/Asuncion.generic.long=Heure du Paraguay
-America/Atikokan.generic.long=C\u00F4te Est
-America/Atka.generic.long=Hawa\u00EF-Iles Al\u00E9outiennes
-America/Bahia.generic.long=Heure du Br\u00E9sil
-America/Bahia_Banderas.generic.long=Centre
-America/Barbados.generic.long=Atlantique
-America/Belem.generic.long=Heure du Br\u00E9sil
-America/Belize.generic.long=Centre
-America/Blanc-Sablon.generic.long=Atlantique
-America/Boa_Vista.generic.long=Heure d'Amazonie
-America/Bogota.generic.long=Heure de Colombie
-America/Boise.generic.long=Rocheuses
-America/Buenos_Aires.generic.long=Heure d'Argentine
-America/Cambridge_Bay.generic.long=Rocheuses
-America/Campo_Grande.generic.long=Heure d'Amazonie
-America/Cancun.generic.long=Centre
-America/Caracas.generic.long=Heure du Venezuela
-America/Catamarca.generic.long=Heure d'Argentine
-America/Cayenne.generic.long=Heure de Guyane fran\u00E7aise
-America/Cayman.generic.long=C\u00F4te Est
-America/Chicago.generic.long=Centre
-America/Chihuahua.generic.long=Rocheuses
-America/Coral_Harbour.generic.long=C\u00F4te Est
-America/Cordoba.generic.long=Heure d'Argentine
-America/Costa_Rica.generic.long=Centre
-America/Creston.generic.long=Rocheuses
-America/Cuiaba.generic.long=Heure d'Amazonie
-America/Curacao.generic.long=Atlantique
-America/Danmarkshavn.generic.long=Heure de Greenwich
-America/Dawson.generic.long=Pacifique
-America/Dawson_Creek.generic.long=Rocheuses
-America/Denver.generic.long=Rocheuses
-America/Detroit.generic.long=C\u00F4te Est
-America/Dominica.generic.long=Atlantique
-America/Edmonton.generic.long=Rocheuses
-America/Eirunepe.generic.long=Heure de l'Acre
-America/El_Salvador.generic.long=Centre
-America/Ensenada.generic.long=Pacifique
-America/Fort_Wayne.generic.long=C\u00F4te Est
-America/Fortaleza.generic.long=Heure du Br\u00E9sil
-America/Glace_Bay.generic.long=Atlantique
-America/Godthab.generic.long=Heure du Groenland de l'Ouest
-America/Goose_Bay.generic.long=Atlantique
-America/Grand_Turk.generic.long=C\u00F4te Est
-America/Grenada.generic.long=Atlantique
-America/Guadeloupe.generic.long=Atlantique
-America/Guatemala.generic.long=Centre
-America/Guayaquil.generic.long=Heure de l'Equateur
-America/Guyana.generic.long=Heure de Guyana
-America/Halifax.generic.long=Atlantique
-America/Havana.generic.long=Heure de Cuba
-America/Hermosillo.generic.long=Rocheuses
-America/Indiana/Indianapolis.generic.long=C\u00F4te Est
-America/Indiana/Knox.generic.long=Centre
-America/Indiana/Marengo.generic.long=C\u00F4te Est
-America/Indiana/Petersburg.generic.long=C\u00F4te Est
-America/Indiana/Tell_City.generic.long=Centre
-America/Indiana/Vevay.generic.long=C\u00F4te Est
-America/Indiana/Vincennes.generic.long=C\u00F4te Est
-America/Indiana/Winamac.generic.long=C\u00F4te Est
-America/Indianapolis.generic.long=C\u00F4te Est
-America/Inuvik.generic.long=Rocheuses
-America/Iqaluit.generic.long=C\u00F4te Est
-America/Jamaica.generic.long=C\u00F4te Est
-America/Jujuy.generic.long=Heure d'Argentine
-America/Juneau.generic.long=Alaska
-America/Kentucky/Louisville.generic.long=C\u00F4te Est
-America/Kentucky/Monticello.generic.long=C\u00F4te Est
-America/Knox_IN.generic.long=Centre
-America/Kralendijk.generic.long=Atlantique
-America/La_Paz.generic.long=Heure de Bolivie
-America/Lima.generic.long=Heure du P\u00E9rou
-America/Los_Angeles.generic.long=Pacifique
-America/Louisville.generic.long=C\u00F4te Est
-America/Lower_Princes.generic.long=Atlantique
-America/Maceio.generic.long=Heure du Br\u00E9sil
-America/Managua.generic.long=Centre
-America/Manaus.generic.long=Heure d'Amazonie
-America/Marigot.generic.long=Atlantique
-America/Martinique.generic.long=Atlantique
-America/Matamoros.generic.long=Centre
-America/Mazatlan.generic.long=Rocheuses
-America/Mendoza.generic.long=Heure d'Argentine
-America/Menominee.generic.long=Centre
-America/Merida.generic.long=Centre
-America/Metlakatla.daylight.long=Heure avanc\u00E9e de Metlakatla
-America/Metlakatla.generic.long=Heure de Metlakatla
-America/Metlakatla.standard.long=Heure normale de Metlakatla
-America/Mexico_City.generic.long=Centre
-America/Miquelon.generic.long=Saint-Pierre-et-Miquelon
-America/Moncton.generic.long=Atlantique
-America/Monterrey.generic.long=Centre
-America/Montevideo.generic.long=Heure de l'Uruguay
-America/Montreal.generic.long=C\u00F4te Est
-America/Montserrat.generic.long=Atlantique
-America/Nassau.generic.long=C\u00F4te Est
-America/New_York.generic.long=C\u00F4te Est
-America/Nipigon.generic.long=C\u00F4te Est
-America/Nome.generic.long=Alaska
-America/Noronha.generic.long=Heure de Fernando de Noronha
-America/North_Dakota/Beulah.generic.long=Centre
-America/North_Dakota/Center.generic.long=Centre
-America/North_Dakota/New_Salem.generic.long=Centre
-America/Ojinaga.generic.long=Rocheuses
-America/Panama.generic.long=C\u00F4te Est
-America/Pangnirtung.generic.long=C\u00F4te Est
-America/Paramaribo.generic.long=Heure du Surinam
-America/Phoenix.generic.long=Rocheuses
-America/Port-au-Prince.generic.long=C\u00F4te Est
-America/Port_of_Spain.generic.long=Atlantique
-America/Porto_Acre.generic.long=Heure de l'Acre
-America/Porto_Velho.generic.long=Heure d'Amazonie
-America/Puerto_Rico.generic.long=Atlantique
-America/Rainy_River.generic.long=Centre
-America/Rankin_Inlet.generic.long=Centre
-America/Recife.generic.long=Heure du Br\u00E9sil
-America/Regina.generic.long=Centre
-America/Resolute.generic.long=Centre
-America/Rio_Branco.generic.long=Heure de l'Acre
-America/Rosario.generic.long=Heure d'Argentine
-America/Santa_Isabel.generic.long=Pacifique
-America/Santarem.generic.long=Heure du Br\u00E9sil
-America/Santiago.generic.long=Heure du Chili
-America/Santo_Domingo.generic.long=Atlantique
-America/Sao_Paulo.generic.long=Heure du Br\u00E9sil
-America/Scoresbysund.generic.long=Heure du Groenland de l'Est
-America/Shiprock.generic.long=Rocheuses
-America/Sitka.generic.long=Alaska
-America/St_Barthelemy.generic.long=Atlantique
-America/St_Johns.generic.long=Terre-Neuve
-America/St_Kitts.generic.long=Atlantique
-America/St_Lucia.generic.long=Atlantique
-America/St_Thomas.generic.long=Atlantique
-America/St_Vincent.generic.long=Atlantique
-America/Swift_Current.generic.long=Centre
-America/Tegucigalpa.generic.long=Centre
-America/Thule.generic.long=Atlantique
-America/Thunder_Bay.generic.long=C\u00F4te Est
-America/Tijuana.generic.long=Pacifique
-America/Toronto.generic.long=C\u00F4te Est
-America/Tortola.generic.long=Atlantique
-America/Vancouver.generic.long=Pacifique
-America/Virgin.generic.long=Atlantique
-America/Whitehorse.generic.long=Pacifique
-America/Winnipeg.generic.long=Centre
-America/Yakutat.generic.long=Alaska
-America/Yellowknife.generic.long=Rocheuses
-Antarctica/Casey.daylight.long=Heure d'\u00E9t\u00E9 de l'Ouest (Australie)
-Antarctica/Casey.generic.long=Ouest (Australie)
-Antarctica/Casey.standard.long=Heure normale de l'Ouest (Australie)
-Antarctica/Davis.generic.long=Heure de Davis
-Antarctica/DumontDUrville.generic.long=Heure de Dumont-d'Urville
-Antarctica/Macquarie.daylight.long=Heure d'\u00E9t\u00E9 de l'Ile Macquarie
-Antarctica/Macquarie.generic.long=Heure de l'Ile Macquarie
-Antarctica/Macquarie.standard.long=Heure de l'Ile Macquarie
-Antarctica/Mawson.generic.long=Heure de Mawson
-Antarctica/McMurdo.generic.long=Nouvelle-Z\u00E9lande
-Antarctica/Palmer.generic.long=Heure du Chili
-Antarctica/Rothera.generic.long=Heure de Rothera
-Antarctica/South_Pole.generic.long=Nouvelle-Z\u00E9lande
-Antarctica/Syowa.generic.long=Heure de Syowa
-Antarctica/Vostok.generic.long=Heure de Vostok
-Arctic/Longyearbyen.generic.long=Heure d'Europe centrale
-Asia/Aden.generic.long=Arabie
-Asia/Almaty.generic.long=Heure d'Alma-Ata
-Asia/Amman.generic.long=Arabie
-Asia/Anadyr.generic.long=Heure d'Anadyr
-Asia/Aqtau.generic.long=Heure d'Aqtau
-Asia/Aqtobe.generic.long=Heure d'Aqtobe
-Asia/Ashgabat.generic.long=Heure du Turkm\u00E9nistan
-Asia/Ashkhabad.generic.long=Heure du Turkm\u00E9nistan
-Asia/Baghdad.generic.long=Arabie
-Asia/Bahrain.generic.long=Arabie
-Asia/Baku.generic.long=Heure d'Azerba\u00EFdjan
-Asia/Bangkok.generic.long=Heure d'Indochine
-Asia/Beirut.generic.long=Heure d'Europe de l'Est
-Asia/Bishkek.generic.long=Heure du Kirghizistan
-Asia/Brunei.generic.long=Heure du Brunei
-Asia/Calcutta.generic.long=Inde
-Asia/Choibalsan.generic.long=Heure de Choibalsan
-Asia/Chongqing.generic.long=Chine
-Asia/Chungking.generic.long=Chine
-Asia/Colombo.generic.long=Inde
-Asia/Dacca.generic.long=Heure du Bangladesh
-Asia/Damascus.generic.long=Heure d'Europe de l'Est
-Asia/Dhaka.generic.long=Heure du Bangladesh
-Asia/Dili.generic.long=Heure de Timor-Leste
-Asia/Dubai.generic.long=Golfe
-Asia/Dushanbe.generic.long=Heure du Tadjikistan
-Asia/Gaza.generic.long=Heure d'Europe de l'Est
-Asia/Harbin.generic.long=Chine
-Asia/Hebron.generic.long=Heure d'Europe de l'Est
-Asia/Ho_Chi_Minh.generic.long=Heure d'Indochine
-Asia/Hong_Kong.generic.long=Heure de Hong-Kong
-Asia/Hovd.generic.long=Heure de Hovd
-Asia/Irkutsk.generic.long=Heure d'Irkutsk
-Asia/Istanbul.generic.long=Heure d'Europe de l'Est
-Asia/Jakarta.generic.long=Heure de l'Indon\u00E9sie occidentale
-Asia/Jayapura.generic.long=Heure d'Indon\u00E9sie orientale
-Asia/Jerusalem.generic.long=Isra\u00EBl
-Asia/Kabul.generic.long=Heure d'Afghanistan
-Asia/Kamchatka.generic.long=Heure de Petropavlovsk-Kamchatski
-Asia/Karachi.generic.long=Heure du Pakistan
-Asia/Kashgar.generic.long=Chine
-Asia/Kathmandu.generic.long=Heure du N\u00E9pal
-Asia/Katmandu.generic.long=Heure du N\u00E9pal
-Asia/Khandyga.daylight.long=Heure d'\u00E9t\u00E9 de Khandyga
-Asia/Khandyga.generic.long=Heure de Khandyga
-Asia/Khandyga.standard.long=Heure de Khandyga
-Asia/Kolkata.generic.long=Inde
-Asia/Krasnoyarsk.generic.long=Heure de Krasno\u00EFarsk
-Asia/Kuala_Lumpur.generic.long=Heure de Malaisie
-Asia/Kuching.generic.long=Heure de Malaisie
-Asia/Kuwait.generic.long=Arabie
-Asia/Macao.generic.long=Chine
-Asia/Macau.generic.long=Chine
-Asia/Magadan.generic.long=Heure de Magadan
-Asia/Makassar.generic.long=Heure d'Indon\u00E9sie centrale
-Asia/Manila.generic.long=Heure des Philippines
-Asia/Muscat.generic.long=Golfe
-Asia/Nicosia.generic.long=Heure d'Europe de l'Est
-Asia/Novokuznetsk.generic.long=Heure de Novossibirsk
-Asia/Novosibirsk.generic.long=Heure de Novossibirsk
-Asia/Omsk.generic.long=Heure d'Omsk
-Asia/Oral.generic.long=Heure d'Oral
-Asia/Phnom_Penh.generic.long=Heure d'Indochine
-Asia/Pontianak.generic.long=Heure de l'Indon\u00E9sie occidentale
-Asia/Pyongyang.generic.long=Cor\u00E9e
-Asia/Qatar.generic.long=Arabie
-Asia/Qyzylorda.generic.long=Heure de Kyzylorda
-Asia/Rangoon.generic.long=Heure de Myanmar
-Asia/Saigon.generic.long=Heure d'Indochine
-Asia/Sakhalin.generic.long=Heure de Sakhalin
-Asia/Samarkand.generic.long=Heure de l'Ouzb\u00E9kistan
-Asia/Seoul.generic.long=Cor\u00E9e
-Asia/Shanghai.generic.long=Chine
-Asia/Singapore.generic.long=Heure de Singapour
-Asia/Taipei.generic.long=Chine
-Asia/Tashkent.generic.long=Heure de l'Ouzb\u00E9kistan
-Asia/Tbilisi.generic.long=Heure de G\u00E9orgie
-Asia/Tehran.generic.long=Heure d'Iran
-Asia/Tel_Aviv.generic.long=Isra\u00EBl
-Asia/Thimbu.generic.long=Heure du Bhoutan
-Asia/Thimphu.generic.long=Heure du Bhoutan
-Asia/Tokyo.generic.long=Japon
-Asia/Ujung_Pandang.generic.long=Heure d'Indon\u00E9sie centrale
-Asia/Ulaanbaatar.generic.long=Heure de l'Ulaanbaatar
-Asia/Ulan_Bator.generic.long=Heure de l'Ulaanbaatar
-Asia/Urumqi.generic.long=Chine
-Asia/Ust-Nera.daylight.long=Heure d'\u00E9t\u00E9 d'Ust-Nera
-Asia/Ust-Nera.generic.long=Heure d'Ust-Nera
-Asia/Ust-Nera.standard.long=Heure d'Ust-Nera
-Asia/Vientiane.generic.long=Heure d'Indochine
-Asia/Vladivostok.generic.long=Heure de Vladivostok
-Asia/Yakutsk.generic.long=Heure du Iakoutsk
-Asia/Yekaterinburg.generic.long=Heure de Yekaterinburg
-Asia/Yerevan.generic.long=Heure d'Arm\u00E9nie
-Atlantic/Azores.generic.long=Heure des A\u00E7ores
-Atlantic/Bermuda.generic.long=Atlantique
-Atlantic/Canary.generic.long=Heure d'Europe de l'Ouest
-Atlantic/Cape_Verde.generic.long=Heure de Cap-Vert
-Atlantic/Faeroe.generic.long=Heure d'Europe de l'Ouest
-Atlantic/Faroe.generic.long=Heure d'Europe de l'Ouest
-Atlantic/Jan_Mayen.generic.long=Heure d'Europe centrale
-Atlantic/Madeira.generic.long=Heure d'Europe de l'Ouest
-Atlantic/Reykjavik.generic.long=Heure de Greenwich
-Atlantic/South_Georgia.generic.long=G\u00E9orgie du Sud
-Atlantic/St_Helena.generic.long=Heure de Greenwich
-Atlantic/Stanley.generic.long=Heure des \u00EEles Falkland
-Australia/ACT.daylight.long=Heure d'\u00E9t\u00E9 de l'Est (Nouvelle-Galles du Sud)
-Australia/ACT.generic.long=C\u00F4te Est (Nouvelle-Galles du Sud)
-Australia/ACT.standard.long=Heure normale de l'Est (Nouvelle-Galles du Sud)
-Australia/Adelaide.daylight.long=Heure d'\u00E9t\u00E9 d'Australie centrale (Australie du sud)
-Australia/Adelaide.generic.long=Centre (Australie-M\u00E9ridionale)
-Australia/Adelaide.standard.long=Heure standard d'Australie centrale (Australie du sud)
-Australia/Brisbane.daylight.long=Heure d'\u00E9t\u00E9 d'Australie orientale (Queensland)
-Australia/Brisbane.generic.long=C\u00F4te Est (Queensland)
-Australia/Brisbane.standard.long=Heure standard d'Australie orientale (Queensland)
-Australia/Broken_Hill.daylight.long=Heure d'\u00E9t\u00E9 d'Australie centrale (Australie du sud/Nouvelle-Galles du sud)
-Australia/Broken_Hill.generic.long=Centre (Australie-M\u00E9ridionale/Nouvelle-Galles du Sud)
-Australia/Broken_Hill.standard.long=Heure standard d'Australie centrale (Australie du sud/Nouvelle-Galles du sud)
-Australia/Canberra.daylight.long=Heure d'\u00E9t\u00E9 de l'Est (Nouvelle-Galles du Sud)
-Australia/Canberra.generic.long=C\u00F4te Est (Nouvelle-Galles du Sud)
-Australia/Canberra.standard.long=Heure normale de l'Est (Nouvelle-Galles du Sud)
-Australia/Currie.daylight.long=Heure d'\u00E9t\u00E9 de l'Est (Nouvelle-Galles du Sud)
-Australia/Currie.generic.long=C\u00F4te Est (Nouvelle-Galles du Sud)
-Australia/Currie.standard.long=Heure normale de l'Est (Nouvelle-Galles du Sud)
-Australia/Darwin.daylight.long=Heure d'\u00E9t\u00E9 d'Australie centrale (Territoire du Nord)
-Australia/Darwin.generic.long=Centre (Territoire du Nord)
-Australia/Darwin.standard.long=Heure standard d'Australie centrale (Territoire du Nord)
-Australia/Eucla.daylight.long=Heure d'\u00E9t\u00E9 de l'Australie occidentale (centre)
-Australia/Eucla.generic.long=Heure de l'Australie occidentale (centre)
-Australia/Eucla.standard.long=Heure standard de l'Australie occidentale (centre)
-Australia/Hobart.daylight.long=Heure d'\u00E9t\u00E9 d'Australie orientale (Tasmanie)
-Australia/Hobart.generic.long=C\u00F4te Est (Tasmanie)
-Australia/Hobart.standard.long=Heure standard d'Australie orientale (Tasmanie)
-Australia/LHI.generic.long=Heure de Lord Howe
-Australia/Lindeman.daylight.long=Heure d'\u00E9t\u00E9 d'Australie orientale (Queensland)
-Australia/Lindeman.generic.long=C\u00F4te Est (Queensland)
-Australia/Lindeman.standard.long=Heure standard d'Australie orientale (Queensland)
-Australia/Lord_Howe.generic.long=Heure de Lord Howe
-Australia/Melbourne.daylight.long=Heure d'\u00E9t\u00E9 d'Australie orientale (Victoria)
-Australia/Melbourne.generic.long=C\u00F4te Est (Victoria)
-Australia/Melbourne.standard.long=Heure standard d'Australie orientale (Victoria)
-Australia/NSW.daylight.long=Heure d'\u00E9t\u00E9 de l'Est (Nouvelle-Galles du Sud)
-Australia/NSW.generic.long=C\u00F4te Est (Nouvelle-Galles du Sud)
-Australia/NSW.standard.long=Heure normale de l'Est (Nouvelle-Galles du Sud)
-Australia/North.daylight.long=Heure d'\u00E9t\u00E9 d'Australie centrale (Territoire du Nord)
-Australia/North.generic.long=Centre (Territoire du Nord)
-Australia/North.standard.long=Heure standard d'Australie centrale (Territoire du Nord)
-Australia/Perth.daylight.long=Heure d'\u00E9t\u00E9 de l'Ouest (Australie)
-Australia/Perth.generic.long=Ouest (Australie)
-Australia/Perth.standard.long=Heure normale de l'Ouest (Australie)
-Australia/Queensland.daylight.long=Heure d'\u00E9t\u00E9 d'Australie orientale (Queensland)
-Australia/Queensland.generic.long=C\u00F4te Est (Queensland)
-Australia/Queensland.standard.long=Heure standard d'Australie orientale (Queensland)
-Australia/South.daylight.long=Heure d'\u00E9t\u00E9 d'Australie centrale (Australie du sud)
-Australia/South.generic.long=Centre (Australie-M\u00E9ridionale)
-Australia/South.standard.long=Heure standard d'Australie centrale (Australie du sud)
-Australia/Sydney.daylight.long=Heure d'\u00E9t\u00E9 de l'Est (Nouvelle-Galles du Sud)
-Australia/Sydney.generic.long=C\u00F4te Est (Nouvelle-Galles du Sud)
-Australia/Sydney.standard.long=Heure normale de l'Est (Nouvelle-Galles du Sud)
-Australia/Tasmania.daylight.long=Heure d'\u00E9t\u00E9 d'Australie orientale (Tasmanie)
-Australia/Tasmania.generic.long=C\u00F4te Est (Tasmanie)
-Australia/Tasmania.standard.long=Heure standard d'Australie orientale (Tasmanie)
-Australia/Victoria.daylight.long=Heure d'\u00E9t\u00E9 d'Australie orientale (Victoria)
-Australia/Victoria.generic.long=C\u00F4te Est (Victoria)
-Australia/Victoria.standard.long=Heure standard d'Australie orientale (Victoria)
-Australia/West.daylight.long=Heure d'\u00E9t\u00E9 de l'Ouest (Australie)
-Australia/West.generic.long=Ouest (Australie)
-Australia/West.standard.long=Heure normale de l'Ouest (Australie)
-Australia/Yancowinna.daylight.long=Heure d'\u00E9t\u00E9 d'Australie centrale (Australie du sud/Nouvelle-Galles du sud)
-Australia/Yancowinna.generic.long=Centre (Australie-M\u00E9ridionale/Nouvelle-Galles du Sud)
-Australia/Yancowinna.standard.long=Heure standard d'Australie centrale (Australie du sud/Nouvelle-Galles du sud)
-BET.generic.long=Heure du Br\u00E9sil
-BST.generic.long=Heure du Bangladesh
-Brazil/Acre.generic.long=Heure de l'Acre
-Brazil/DeNoronha.generic.long=Heure de Fernando de Noronha
-Brazil/East.generic.long=Heure du Br\u00E9sil
-Brazil/West.generic.long=Heure d'Amazonie
-CAT.generic.long=Heure d'Afrique centrale
-CET.generic.long=Heure d'Europe centrale
-CNT.generic.long=Terre-Neuve
-CST.generic.long=Centre
-CST6CDT.generic.long=Centre
-CTT.generic.long=Chine
-Canada/Atlantic.generic.long=Atlantique
-Canada/Central.generic.long=Centre
-Canada/East-Saskatchewan.generic.long=Centre
-Canada/Eastern.generic.long=C\u00F4te Est
-Canada/Mountain.generic.long=Rocheuses
-Canada/Newfoundland.generic.long=Terre-Neuve
-Canada/Pacific.generic.long=Pacifique
-Canada/Saskatchewan.generic.long=Centre
-Canada/Yukon.generic.long=Pacifique
-Chile/Continental.generic.long=Heure du Chili
-Chile/EasterIsland.generic.long=Heure de l'Ile de P\u00E2ques
-Cuba.generic.long=Heure de Cuba
-EAT.generic.long=Heure d'Afrique de l'Est
-ECT.generic.long=Heure d'Europe centrale
-EET.generic.long=Heure d'Europe de l'Est
-EST.generic.long=C\u00f4te Est
-EST5EDT.generic.long=C\u00f4te Est
-Egypt.generic.long=Heure d'Europe de l'Est
-Eire.generic.long=Heure irlandaise
-Etc/Greenwich.generic.long=Heure de Greenwich
-Etc/UCT.generic.long=Temps universel coordonn\u00E9
-Etc/UTC.generic.long=Temps universel coordonn\u00E9
-Etc/Universal.generic.long=Temps universel coordonn\u00E9
-Etc/Zulu.generic.long=Temps universel coordonn\u00E9
-Europe/Amsterdam.generic.long=Heure d'Europe centrale
-Europe/Andorra.generic.long=Heure d'Europe centrale
-Europe/Athens.generic.long=Heure d'Europe de l'Est
-Europe/Belfast.generic.long=Heure britannique
-Europe/Belgrade.generic.long=Heure d'Europe centrale
-Europe/Berlin.generic.long=Heure d'Europe centrale
-Europe/Bratislava.generic.long=Heure d'Europe centrale
-Europe/Brussels.generic.long=Heure d'Europe centrale
-Europe/Bucharest.generic.long=Heure d'Europe de l'Est
-Europe/Budapest.generic.long=Heure d'Europe centrale
-Europe/Busingen.generic.long=Heure d'Europe centrale
-Europe/Chisinau.generic.long=Heure d'Europe de l'Est
-Europe/Copenhagen.generic.long=Heure d'Europe centrale
-Europe/Dublin.generic.long=Heure irlandaise
-Europe/Gibraltar.generic.long=Heure d'Europe centrale
-Europe/Guernsey.generic.long=Heure britannique
-Europe/Helsinki.generic.long=Heure d'Europe de l'Est
-Europe/Isle_of_Man.generic.long=Heure britannique
-Europe/Istanbul.generic.long=Heure d'Europe de l'Est
-Europe/Jersey.generic.long=Heure britannique
-Europe/Kaliningrad.daylight.long=Heure d'\u00E9t\u00E9 d'Europe de l'Est UTC+3
-Europe/Kaliningrad.generic.long=Heure d'Europe de l'Est UTC+3
-Europe/Kaliningrad.standard.long=Heure d'Europe de l'Est UTC+3
-Europe/Kiev.generic.long=Heure d'Europe de l'Est
-Europe/Lisbon.generic.long=Heure d'Europe de l'Ouest
-Europe/Ljubljana.generic.long=Heure d'Europe centrale
-Europe/London.generic.long=Heure britannique
-Europe/Luxembourg.generic.long=Heure d'Europe centrale
-Europe/Madrid.generic.long=Heure d'Europe centrale
-Europe/Malta.generic.long=Heure d'Europe centrale
-Europe/Mariehamn.generic.long=Heure d'Europe de l'Est
-Europe/Minsk.daylight.long=Heure d'\u00E9t\u00E9 d'Europe de l'Est UTC+3
-Europe/Minsk.generic.long=Heure d'Europe de l'Est UTC+3
-Europe/Minsk.standard.long=Heure d'Europe de l'Est UTC+3
-Europe/Monaco.generic.long=Heure d'Europe centrale
-Europe/Moscow.generic.long=Moscou
-Europe/Nicosia.generic.long=Heure d'Europe de l'Est
-Europe/Oslo.generic.long=Heure d'Europe centrale
-Europe/Paris.generic.long=Heure d'Europe centrale
-Europe/Podgorica.generic.long=Heure d'Europe centrale
-Europe/Prague.generic.long=Heure d'Europe centrale
-Europe/Riga.generic.long=Heure d'Europe de l'Est
-Europe/Rome.generic.long=Heure d'Europe centrale
-Europe/Samara.generic.long=Heure de Samara
-Europe/San_Marino.generic.long=Heure d'Europe centrale
-Europe/Sarajevo.generic.long=Heure d'Europe centrale
-Europe/Simferopol.generic.long=Heure d'Europe de l'Est
-Europe/Skopje.generic.long=Heure d'Europe centrale
-Europe/Sofia.generic.long=Heure d'Europe de l'Est
-Europe/Stockholm.generic.long=Heure d'Europe centrale
-Europe/Tallinn.generic.long=Heure d'Europe de l'Est
-Europe/Tirane.generic.long=Heure d'Europe centrale
-Europe/Tiraspol.generic.long=Heure d'Europe de l'Est
-Europe/Uzhgorod.generic.long=Heure d'Europe de l'Est
-Europe/Vaduz.generic.long=Heure d'Europe centrale
-Europe/Vatican.generic.long=Heure d'Europe centrale
-Europe/Vienna.generic.long=Heure d'Europe centrale
-Europe/Vilnius.generic.long=Heure d'Europe de l'Est
-Europe/Volgograd.generic.long=Heure de Volgograd
-Europe/Warsaw.generic.long=Heure d'Europe centrale
-Europe/Zagreb.generic.long=Heure d'Europe centrale
-Europe/Zaporozhye.generic.long=Heure d'Europe de l'Est
-Europe/Zurich.generic.long=Heure d'Europe centrale
-GB-Eire.generic.long=Heure britannique
-GB.generic.long=Heure britannique
-GMT.generic.long=Heure de Greenwich
-Greenwich.generic.long=Heure de Greenwich
-HST.generic.long=Hawa\u00ef
-Hongkong.generic.long=Heure de Hong-Kong
-IET.generic.long=C\u00F4te Est
-IST.generic.long=Inde
-Iceland.generic.long=Heure de Greenwich
-Indian/Antananarivo.generic.long=Heure d'Afrique de l'Est
-Indian/Chagos.generic.long=Heure de l'oc\u00E9an Indien
-Indian/Christmas.generic.long=Heure de l'Ile Christmas
-Indian/Cocos.generic.long=Heure des Iles Cocos
-Indian/Comoro.generic.long=Heure d'Afrique de l'Est
-Indian/Kerguelen.generic.long=Heure des Terres australes antarctiques fran\u00E7aises
-Indian/Mahe.generic.long=Heure des Seychelles
-Indian/Maldives.generic.long=Heure des Maldives
-Indian/Mauritius.generic.long=Heure de Maurice
-Indian/Mayotte.generic.long=Heure d'Afrique de l'Est
-Indian/Reunion.generic.long=Heure de la R\u00E9union
-Iran.generic.long=Heure d'Iran
-Israel.generic.long=Isra\u00EBl
-JST.generic.long=Japon
-Jamaica.generic.long=C\u00F4te Est
-Japan.generic.long=Japon
-Kwajalein.generic.long=Heure des Iles Marshall
-Libya.generic.long=Heure d'Europe de l'Est
-MET.generic.long=MET
-MIT.generic.long=Heure des Samoas occidentales
-MST.generic.long=Rocheuses
-MST7MDT.generic.long=Rocheuses
-Mexico/BajaNorte.generic.long=Pacifique
-Mexico/BajaSur.generic.long=Rocheuses
-Mexico/General.generic.long=Centre
-NET.generic.long=Heure d'Arm\u00E9nie
-NST.generic.long=Nouvelle-Z\u00E9lande
-NZ-CHAT.generic.long=Chatham
-NZ.generic.long=Nouvelle-Z\u00E9lande
-Navajo.generic.long=Rocheuses
-PLT.generic.long=Heure du Pakistan
-PNT.generic.long=Rocheuses
-PRC.generic.long=Chine
-PRT.generic.long=Atlantique
-PST.generic.long=Pacifique
-PST8PDT.generic.long=Pacifique
-Pacific/Apia.generic.long=Heure des Samoas occidentales
-Pacific/Auckland.generic.long=Nouvelle-Z\u00E9lande
-Pacific/Chatham.generic.long=Chatham
-Pacific/Chuuk.daylight.long=Heure d'\u00E9t\u00E9 de Chuuk
-Pacific/Chuuk.generic.long=Heure de Chuuk
-Pacific/Chuuk.standard.long=Heure de Chuuk
-Pacific/Easter.generic.long=Heure de l'Ile de P\u00E2ques
-Pacific/Efate.generic.long=Heure du Vanuatu
-Pacific/Enderbury.generic.long=Heure de l'Ile de Phoenix
-Pacific/Fakaofo.generic.long=Heure de Tokelau
-Pacific/Fiji.generic.long=Heure de Fidji
-Pacific/Funafuti.generic.long=Heure de Tuvalu
-Pacific/Galapagos.generic.long=Heure des Galapagos
-Pacific/Gambier.generic.long=Heure de Gambi
-Pacific/Guadalcanal.generic.long=Heure des Iles Salomon
-Pacific/Guam.generic.long=Chamorro
-Pacific/Honolulu.generic.long=Hawa\u00EF
-Pacific/Johnston.generic.long=Hawa\u00EF
-Pacific/Kiritimati.generic.long=Heure de l'Ile de Line
-Pacific/Kosrae.generic.long=Heure de Kusaie
-Pacific/Kwajalein.generic.long=Heure des Iles Marshall
-Pacific/Majuro.generic.long=Heure des Iles Marshall
-Pacific/Marquesas.generic.long=Heure des Marquises
-Pacific/Midway.generic.long=Samoa
-Pacific/Nauru.generic.long=Heure de Nauru
-Pacific/Niue.generic.long=Heure de Niue
-Pacific/Norfolk.generic.long=Heure de Norfolk
-Pacific/Noumea.generic.long=Heure de Nouvelle-Cal\u00E9donie
-Pacific/Pago_Pago.generic.long=Samoa
-Pacific/Palau.generic.long=Heure de Palaos
-Pacific/Pitcairn.generic.long=Pitcairn
-Pacific/Pohnpei.daylight.long=Heure d'\u00E9t\u00E9 de Pohnpei
-Pacific/Pohnpei.generic.long=Ponape
-Pacific/Pohnpei.standard.long=Heure de Pohnpei
-Pacific/Ponape.daylight.long=Heure d'\u00E9t\u00E9 de Pohnpei
-Pacific/Ponape.generic.long=Ponape
-Pacific/Ponape.standard.long=Heure de Pohnpei
-Pacific/Port_Moresby.generic.long=Heure de Papouasie-Nouvelle-Guin\u00E9e
-Pacific/Rarotonga.generic.long=Heure des Iles Cook
-Pacific/Saipan.generic.long=Chamorro
-Pacific/Samoa.generic.long=Samoa
-Pacific/Tahiti.generic.long=Heure de Tahiti
-Pacific/Tarawa.generic.long=Heure de Kiribati
-Pacific/Tongatapu.generic.long=Heure de Tonga
-Pacific/Truk.daylight.long=Heure d'\u00E9t\u00E9 de Chuuk
-Pacific/Truk.generic.long=Heure de Chuuk
-Pacific/Truk.standard.long=Heure de Chuuk
-Pacific/Wake.generic.long=Heure de Wake
-Pacific/Wallis.generic.long=Heure de Wallis-et-Futuna
-Pacific/Yap.daylight.long=Heure d'\u00E9t\u00E9 de Chuuk
-Pacific/Yap.generic.long=Heure de Chuuk
-Pacific/Yap.standard.long=Heure de Chuuk
-Poland.generic.long=Heure d'Europe centrale
-Portugal.generic.long=Heure d'Europe de l'Ouest
-ROK.generic.long=Cor\u00E9e
-SST.generic.long=Heure des Iles Salomon
-Singapore.generic.long=Heure de Singapour
-SystemV/AST4.generic.long=Atlantique
-SystemV/AST4ADT.generic.long=Atlantique
-SystemV/CST6.generic.long=Centre
-SystemV/CST6CDT.generic.long=Centre
-SystemV/EST5.generic.long=C\u00F4te Est
-SystemV/EST5EDT.generic.long=C\u00F4te Est
-SystemV/HST10.generic.long=Hawa\u00EF
-SystemV/MST7.generic.long=Rocheuses
-SystemV/MST7MDT.generic.long=Rocheuses
-SystemV/PST8.generic.long=Pacifique
-SystemV/PST8PDT.generic.long=Pacifique
-SystemV/YST9.generic.long=Alaska
-SystemV/YST9YDT.generic.long=Alaska
-Turkey.generic.long=Heure d'Europe de l'Est
-UCT.generic.long=Temps universel coordonn\u00E9
-US/Alaska.generic.long=Alaska
-US/Aleutian.generic.long=Hawa\u00EF-Iles Al\u00E9outiennes
-US/Arizona.generic.long=Rocheuses
-US/Central.generic.long=Centre
-US/East-Indiana.generic.long=C\u00F4te Est
-US/Eastern.generic.long=C\u00F4te Est
-US/Hawaii.generic.long=Hawa\u00EF
-US/Indiana-Starke.generic.long=Centre
-US/Michigan.generic.long=C\u00F4te Est
-US/Mountain.generic.long=Rocheuses
-US/Pacific-New.generic.long=Pacifique
-US/Pacific.generic.long=Pacifique
-US/Samoa.generic.long=Samoa
-UTC.generic.long=Temps universel coordonn\u00E9
-Universal.generic.long=Temps universel coordonn\u00E9
-VST.generic.long=Heure d'Indochine
-W-SU.generic.long=Moscou
-WET.generic.long=Heure d'Europe de l'Ouest
-Zulu.generic.long=Temps universel coordonn\u00E9
diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_fr_short.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_fr_short.properties
deleted file mode 100644
index 095522a..0000000
--- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_fr_short.properties
+++ /dev/null
@@ -1,1743 +0,0 @@
-ACT.daylight.short=CST
-ACT.generic.short=CT
-ACT.standard.short=CST
-AET.daylight.short=EST
-AET.generic.short=ET
-AET.standard.short=EST
-Africa/Abidjan.daylight.short=GMT
-Africa/Abidjan.generic.short=GMT
-Africa/Abidjan.standard.short=GMT
-Africa/Accra.daylight.short=GHST
-Africa/Accra.generic.short=GMT
-Africa/Accra.standard.short=GMT
-Africa/Addis_Ababa.daylight.short=EAST
-Africa/Addis_Ababa.generic.short=EAT
-Africa/Addis_Ababa.standard.short=EAT
-Africa/Algiers.daylight.short=CEST
-Africa/Algiers.generic.short=CET
-Africa/Algiers.standard.short=CET
-Africa/Asmara.daylight.short=EAST
-Africa/Asmara.generic.short=EAT
-Africa/Asmara.standard.short=EAT
-Africa/Asmera.daylight.short=EAST
-Africa/Asmera.generic.short=EAT
-Africa/Asmera.standard.short=EAT
-Africa/Bamako.daylight.short=GMT
-Africa/Bamako.generic.short=GMT
-Africa/Bamako.standard.short=GMT
-Africa/Bangui.daylight.short=WAST
-Africa/Bangui.generic.short=WAT
-Africa/Bangui.standard.short=WAT
-Africa/Banjul.daylight.short=GMT
-Africa/Banjul.generic.short=GMT
-Africa/Banjul.standard.short=GMT
-Africa/Bissau.daylight.short=GMT
-Africa/Bissau.generic.short=GMT
-Africa/Bissau.standard.short=GMT
-Africa/Blantyre.daylight.short=CAST
-Africa/Blantyre.generic.short=CAT
-Africa/Blantyre.standard.short=CAT
-Africa/Brazzaville.daylight.short=WAST
-Africa/Brazzaville.generic.short=WAT
-Africa/Brazzaville.standard.short=WAT
-Africa/Bujumbura.daylight.short=CAST
-Africa/Bujumbura.generic.short=CAT
-Africa/Bujumbura.standard.short=CAT
-Africa/Cairo.daylight.short=EEST
-Africa/Cairo.generic.short=EET
-Africa/Cairo.standard.short=EET
-Africa/Casablanca.daylight.short=WEST
-Africa/Casablanca.generic.short=WET
-Africa/Casablanca.standard.short=WET
-Africa/Ceuta.daylight.short=CEST
-Africa/Ceuta.generic.short=CET
-Africa/Ceuta.standard.short=CET
-Africa/Conakry.daylight.short=GMT
-Africa/Conakry.generic.short=GMT
-Africa/Conakry.standard.short=GMT
-Africa/Dakar.daylight.short=GMT
-Africa/Dakar.generic.short=GMT
-Africa/Dakar.standard.short=GMT
-Africa/Dar_es_Salaam.daylight.short=EAST
-Africa/Dar_es_Salaam.generic.short=EAT
-Africa/Dar_es_Salaam.standard.short=EAT
-Africa/Djibouti.daylight.short=EAST
-Africa/Djibouti.generic.short=EAT
-Africa/Djibouti.standard.short=EAT
-Africa/Douala.daylight.short=WAST
-Africa/Douala.generic.short=WAT
-Africa/Douala.standard.short=WAT
-Africa/El_Aaiun.daylight.short=WEST
-Africa/El_Aaiun.generic.short=WET
-Africa/El_Aaiun.standard.short=WET
-Africa/Freetown.daylight.short=SLST
-Africa/Freetown.generic.short=SLT
-Africa/Freetown.standard.short=GMT
-Africa/Gaborone.daylight.short=CAST
-Africa/Gaborone.generic.short=CAT
-Africa/Gaborone.standard.short=CAT
-Africa/Harare.daylight.short=CAST
-Africa/Harare.generic.short=CAT
-Africa/Harare.standard.short=CAT
-Africa/Johannesburg.daylight.short=SAST
-Africa/Johannesburg.generic.short=SAT
-Africa/Johannesburg.standard.short=SAST
-Africa/Juba.daylight.short=EAST
-Africa/Juba.generic.short=EAT
-Africa/Juba.standard.short=EAT
-Africa/Kampala.daylight.short=EAST
-Africa/Kampala.generic.short=EAT
-Africa/Kampala.standard.short=EAT
-Africa/Khartoum.daylight.short=EAST
-Africa/Khartoum.generic.short=EAT
-Africa/Khartoum.standard.short=EAT
-Africa/Kigali.daylight.short=CAST
-Africa/Kigali.generic.short=CAT
-Africa/Kigali.standard.short=CAT
-Africa/Kinshasa.daylight.short=WAST
-Africa/Kinshasa.generic.short=WAT
-Africa/Kinshasa.standard.short=WAT
-Africa/Lagos.daylight.short=WAST
-Africa/Lagos.generic.short=WAT
-Africa/Lagos.standard.short=WAT
-Africa/Libreville.daylight.short=WAST
-Africa/Libreville.generic.short=WAT
-Africa/Libreville.standard.short=WAT
-Africa/Lome.daylight.short=GMT
-Africa/Lome.generic.short=GMT
-Africa/Lome.standard.short=GMT
-Africa/Luanda.daylight.short=WAST
-Africa/Luanda.generic.short=WAT
-Africa/Luanda.standard.short=WAT
-Africa/Lubumbashi.daylight.short=CAST
-Africa/Lubumbashi.generic.short=CAT
-Africa/Lubumbashi.standard.short=CAT
-Africa/Lusaka.daylight.short=CAST
-Africa/Lusaka.generic.short=CAT
-Africa/Lusaka.standard.short=CAT
-Africa/Malabo.daylight.short=WAST
-Africa/Malabo.generic.short=WAT
-Africa/Malabo.standard.short=WAT
-Africa/Maputo.daylight.short=CAST
-Africa/Maputo.generic.short=CAT
-Africa/Maputo.standard.short=CAT
-Africa/Maseru.daylight.short=SAST
-Africa/Maseru.generic.short=SAT
-Africa/Maseru.standard.short=SAST
-Africa/Mbabane.daylight.short=SAST
-Africa/Mbabane.generic.short=SAT
-Africa/Mbabane.standard.short=SAST
-Africa/Mogadishu.daylight.short=EAST
-Africa/Mogadishu.generic.short=EAT
-Africa/Mogadishu.standard.short=EAT
-Africa/Monrovia.daylight.short=GMT
-Africa/Monrovia.generic.short=GMT
-Africa/Monrovia.standard.short=GMT
-Africa/Nairobi.daylight.short=EAST
-Africa/Nairobi.generic.short=EAT
-Africa/Nairobi.standard.short=EAT
-Africa/Ndjamena.daylight.short=WAST
-Africa/Ndjamena.generic.short=WAT
-Africa/Ndjamena.standard.short=WAT
-Africa/Niamey.daylight.short=WAST
-Africa/Niamey.generic.short=WAT
-Africa/Niamey.standard.short=WAT
-Africa/Nouakchott.daylight.short=GMT
-Africa/Nouakchott.generic.short=GMT
-Africa/Nouakchott.standard.short=GMT
-Africa/Ouagadougou.daylight.short=GMT
-Africa/Ouagadougou.generic.short=GMT
-Africa/Ouagadougou.standard.short=GMT
-Africa/Porto-Novo.daylight.short=WAST
-Africa/Porto-Novo.generic.short=WAT
-Africa/Porto-Novo.standard.short=WAT
-Africa/Sao_Tome.daylight.short=GMT
-Africa/Sao_Tome.generic.short=GMT
-Africa/Sao_Tome.standard.short=GMT
-Africa/Timbuktu.daylight.short=GMT
-Africa/Timbuktu.generic.short=GMT
-Africa/Timbuktu.standard.short=GMT
-Africa/Tripoli.daylight.short=EEST
-Africa/Tripoli.generic.short=EET
-Africa/Tripoli.standard.short=EET
-Africa/Tunis.daylight.short=CEST
-Africa/Tunis.generic.short=CET
-Africa/Tunis.standard.short=CET
-Africa/Windhoek.daylight.short=WAST
-Africa/Windhoek.generic.short=WAT
-Africa/Windhoek.standard.short=WAT
-AGT.daylight.short=ARST
-AGT.generic.short=ART
-AGT.standard.short=ART
-America/Adak.daylight.short=HADT
-America/Adak.generic.short=HAT
-America/Adak.standard.short=HAST
-America/Anchorage.daylight.short=AKDT
-America/Anchorage.generic.short=AKT
-America/Anchorage.standard.short=AKST
-America/Anguilla.daylight.short=ADT
-America/Anguilla.generic.short=AT
-America/Anguilla.standard.short=AST
-America/Antigua.daylight.short=ADT
-America/Antigua.generic.short=AT
-America/Antigua.standard.short=AST
-America/Araguaina.daylight.short=BRST
-America/Araguaina.generic.short=BRT
-America/Araguaina.standard.short=BRT
-America/Argentina/Buenos_Aires.daylight.short=ARST
-America/Argentina/Buenos_Aires.generic.short=ART
-America/Argentina/Buenos_Aires.standard.short=ART
-America/Argentina/Catamarca.daylight.short=ARST
-America/Argentina/Catamarca.generic.short=ART
-America/Argentina/Catamarca.standard.short=ART
-America/Argentina/ComodRivadavia.daylight.short=ARST
-America/Argentina/ComodRivadavia.generic.short=ART
-America/Argentina/ComodRivadavia.standard.short=ART
-America/Argentina/Cordoba.daylight.short=ARST
-America/Argentina/Cordoba.generic.short=ART
-America/Argentina/Cordoba.standard.short=ART
-America/Argentina/Jujuy.daylight.short=ARST
-America/Argentina/Jujuy.generic.short=ART
-America/Argentina/Jujuy.standard.short=ART
-America/Argentina/La_Rioja.daylight.short=ARST
-America/Argentina/La_Rioja.generic.short=ART
-America/Argentina/La_Rioja.standard.short=ART
-America/Argentina/Mendoza.daylight.short=ARST
-America/Argentina/Mendoza.generic.short=ART
-America/Argentina/Mendoza.standard.short=ART
-America/Argentina/Rio_Gallegos.daylight.short=ARST
-America/Argentina/Rio_Gallegos.generic.short=ART
-America/Argentina/Rio_Gallegos.standard.short=ART
-America/Argentina/Salta.daylight.short=ARST
-America/Argentina/Salta.generic.short=ART
-America/Argentina/Salta.standard.short=ART
-America/Argentina/San_Juan.daylight.short=ARST
-America/Argentina/San_Juan.generic.short=ART
-America/Argentina/San_Juan.standard.short=ART
-America/Argentina/San_Luis.daylight.short=ARST
-America/Argentina/San_Luis.generic.short=ART
-America/Argentina/San_Luis.standard.short=ART
-America/Argentina/Tucuman.daylight.short=ARST
-America/Argentina/Tucuman.generic.short=ART
-America/Argentina/Tucuman.standard.short=ART
-America/Argentina/Ushuaia.daylight.short=ARST
-America/Argentina/Ushuaia.generic.short=ART
-America/Argentina/Ushuaia.standard.short=ART
-America/Aruba.daylight.short=ADT
-America/Aruba.generic.short=AT
-America/Aruba.standard.short=AST
-America/Asuncion.daylight.short=PYST
-America/Asuncion.generic.short=PYT
-America/Asuncion.standard.short=PYT
-America/Atikokan.daylight.short=EDT
-America/Atikokan.generic.short=ET
-America/Atikokan.standard.short=EST
-America/Atka.daylight.short=HADT
-America/Atka.generic.short=HAT
-America/Atka.standard.short=HAST
-America/Bahia_Banderas.daylight.short=CDT
-America/Bahia_Banderas.generic.short=CT
-America/Bahia_Banderas.standard.short=CST
-America/Bahia.daylight.short=BRST
-America/Bahia.generic.short=BRT
-America/Bahia.standard.short=BRT
-America/Barbados.daylight.short=ADT
-America/Barbados.generic.short=AT
-America/Barbados.standard.short=AST
-America/Belem.daylight.short=BRST
-America/Belem.generic.short=BRT
-America/Belem.standard.short=BRT
-America/Belize.daylight.short=CDT
-America/Belize.generic.short=CT
-America/Belize.standard.short=CST
-America/Blanc-Sablon.daylight.short=ADT
-America/Blanc-Sablon.generic.short=AT
-America/Blanc-Sablon.standard.short=AST
-America/Boa_Vista.daylight.short=AMST
-America/Boa_Vista.generic.short=AMT
-America/Boa_Vista.standard.short=AMT
-America/Bogota.daylight.short=COST
-America/Bogota.generic.short=COT
-America/Bogota.standard.short=COT
-America/Boise.daylight.short=MDT
-America/Boise.generic.short=MT
-America/Boise.standard.short=MST
-America/Buenos_Aires.daylight.short=ARST
-America/Buenos_Aires.generic.short=ART
-America/Buenos_Aires.standard.short=ART
-America/Cambridge_Bay.daylight.short=MDT
-America/Cambridge_Bay.generic.short=MT
-America/Cambridge_Bay.standard.short=MST
-America/Campo_Grande.daylight.short=AMST
-America/Campo_Grande.generic.short=AMT
-America/Campo_Grande.standard.short=AMT
-America/Cancun.daylight.short=CDT
-America/Cancun.generic.short=CT
-America/Cancun.standard.short=CST
-America/Caracas.daylight.short=VEST
-America/Caracas.generic.short=VET
-America/Caracas.standard.short=VET
-America/Catamarca.daylight.short=ARST
-America/Catamarca.generic.short=ART
-America/Catamarca.standard.short=ART
-America/Cayenne.daylight.short=GFST
-America/Cayenne.generic.short=GFT
-America/Cayenne.standard.short=GFT
-America/Cayman.daylight.short=EDT
-America/Cayman.generic.short=ET
-America/Cayman.standard.short=EST
-America/Chicago.daylight.short=CDT
-America/Chicago.generic.short=CT
-America/Chicago.standard.short=CST
-America/Chihuahua.daylight.short=MDT
-America/Chihuahua.generic.short=MT
-America/Chihuahua.standard.short=MST
-America/Coral_Harbour.daylight.short=EDT
-America/Coral_Harbour.generic.short=ET
-America/Coral_Harbour.standard.short=EST
-America/Cordoba.daylight.short=ARST
-America/Cordoba.generic.short=ART
-America/Cordoba.standard.short=ART
-America/Costa_Rica.daylight.short=CDT
-America/Costa_Rica.generic.short=CT
-America/Costa_Rica.standard.short=CST
-America/Creston.daylight.short=MDT
-America/Creston.generic.short=MT
-America/Creston.standard.short=MST
-America/Cuiaba.daylight.short=AMST
-America/Cuiaba.generic.short=AMT
-America/Cuiaba.standard.short=AMT
-America/Curacao.daylight.short=ADT
-America/Curacao.generic.short=AT
-America/Curacao.standard.short=AST
-America/Danmarkshavn.daylight.short=GMT
-America/Danmarkshavn.generic.short=GMT
-America/Danmarkshavn.standard.short=GMT
-America/Dawson_Creek.daylight.short=MDT
-America/Dawson_Creek.generic.short=MT
-America/Dawson_Creek.standard.short=MST
-America/Dawson.daylight.short=PDT
-America/Dawson.generic.short=PT
-America/Dawson.standard.short=PST
-America/Denver.daylight.short=MDT
-America/Denver.generic.short=MT
-America/Denver.standard.short=MST
-America/Detroit.daylight.short=EDT
-America/Detroit.generic.short=ET
-America/Detroit.standard.short=EST
-America/Dominica.daylight.short=ADT
-America/Dominica.generic.short=AT
-America/Dominica.standard.short=AST
-America/Edmonton.daylight.short=MDT
-America/Edmonton.generic.short=MT
-America/Edmonton.standard.short=MST
-America/Eirunepe.daylight.short=ACST
-America/Eirunepe.generic.short=ACT
-America/Eirunepe.standard.short=ACT
-America/El_Salvador.daylight.short=CDT
-America/El_Salvador.generic.short=CT
-America/El_Salvador.standard.short=CST
-America/Ensenada.daylight.short=PDT
-America/Ensenada.generic.short=PT
-America/Ensenada.standard.short=PST
-America/Fortaleza.daylight.short=BRST
-America/Fortaleza.generic.short=BRT
-America/Fortaleza.standard.short=BRT
-America/Fort_Wayne.daylight.short=EDT
-America/Fort_Wayne.generic.short=ET
-America/Fort_Wayne.standard.short=EST
-America/Glace_Bay.daylight.short=ADT
-America/Glace_Bay.generic.short=AT
-America/Glace_Bay.standard.short=AST
-America/Godthab.daylight.short=WGST
-America/Godthab.generic.short=WGT
-America/Godthab.standard.short=WGT
-America/Goose_Bay.daylight.short=ADT
-America/Goose_Bay.generic.short=AT
-America/Goose_Bay.standard.short=AST
-America/Grand_Turk.daylight.short=EDT
-America/Grand_Turk.generic.short=ET
-America/Grand_Turk.standard.short=EST
-America/Grenada.daylight.short=ADT
-America/Grenada.generic.short=AT
-America/Grenada.standard.short=AST
-America/Guadeloupe.daylight.short=ADT
-America/Guadeloupe.generic.short=AT
-America/Guadeloupe.standard.short=AST
-America/Guatemala.daylight.short=CDT
-America/Guatemala.generic.short=CT
-America/Guatemala.standard.short=CST
-America/Guayaquil.daylight.short=ECST
-America/Guayaquil.generic.short=ECT
-America/Guayaquil.standard.short=ECT
-America/Guyana.daylight.short=GYST
-America/Guyana.generic.short=GYT
-America/Guyana.standard.short=GYT
-America/Halifax.daylight.short=ADT
-America/Halifax.generic.short=AT
-America/Halifax.standard.short=AST
-America/Havana.daylight.short=CDT
-America/Havana.generic.short=CT
-America/Havana.standard.short=CST
-America/Hermosillo.daylight.short=MDT
-America/Hermosillo.generic.short=MT
-America/Hermosillo.standard.short=MST
-America/Indiana/Indianapolis.daylight.short=EDT
-America/Indiana/Indianapolis.generic.short=ET
-America/Indiana/Indianapolis.standard.short=EST
-America/Indiana/Knox.daylight.short=CDT
-America/Indiana/Knox.generic.short=CT
-America/Indiana/Knox.standard.short=CST
-America/Indiana/Marengo.daylight.short=EDT
-America/Indiana/Marengo.generic.short=ET
-America/Indiana/Marengo.standard.short=EST
-America/Indiana/Petersburg.daylight.short=EDT
-America/Indiana/Petersburg.generic.short=ET
-America/Indiana/Petersburg.standard.short=EST
-America/Indianapolis.daylight.short=EDT
-America/Indianapolis.generic.short=ET
-America/Indianapolis.standard.short=EST
-America/Indiana/Tell_City.daylight.short=CDT
-America/Indiana/Tell_City.generic.short=CT
-America/Indiana/Tell_City.standard.short=CST
-America/Indiana/Vevay.daylight.short=EDT
-America/Indiana/Vevay.generic.short=ET
-America/Indiana/Vevay.standard.short=EST
-America/Indiana/Vincennes.daylight.short=EDT
-America/Indiana/Vincennes.generic.short=ET
-America/Indiana/Vincennes.standard.short=EST
-America/Indiana/Winamac.daylight.short=EDT
-America/Indiana/Winamac.generic.short=ET
-America/Indiana/Winamac.standard.short=EST
-America/Inuvik.daylight.short=MDT
-America/Inuvik.generic.short=MT
-America/Inuvik.standard.short=MST
-America/Iqaluit.daylight.short=EDT
-America/Iqaluit.generic.short=ET
-America/Iqaluit.standard.short=EST
-America/Jamaica.daylight.short=EDT
-America/Jamaica.generic.short=ET
-America/Jamaica.standard.short=EST
-America/Jujuy.daylight.short=ARST
-America/Jujuy.generic.short=ART
-America/Jujuy.standard.short=ART
-America/Juneau.daylight.short=AKDT
-America/Juneau.generic.short=AKT
-America/Juneau.standard.short=AKST
-America/Kentucky/Louisville.daylight.short=EDT
-America/Kentucky/Louisville.generic.short=ET
-America/Kentucky/Louisville.standard.short=EST
-America/Kentucky/Monticello.daylight.short=EDT
-America/Kentucky/Monticello.generic.short=ET
-America/Kentucky/Monticello.standard.short=EST
-America/Knox_IN.daylight.short=CDT
-America/Knox_IN.generic.short=CT
-America/Knox_IN.standard.short=CST
-America/Kralendijk.daylight.short=ADT
-America/Kralendijk.generic.short=AT
-America/Kralendijk.standard.short=AST
-America/La_Paz.daylight.short=BOST
-America/La_Paz.generic.short=BOT
-America/La_Paz.standard.short=BOT
-America/Lima.daylight.short=PEST
-America/Lima.generic.short=PET
-America/Lima.standard.short=PET
-America/Los_Angeles.daylight.short=PDT
-America/Los_Angeles.generic.short=PT
-America/Los_Angeles.standard.short=PST
-America/Louisville.daylight.short=EDT
-America/Louisville.generic.short=ET
-America/Louisville.standard.short=EST
-America/Lower_Princes.daylight.short=ADT
-America/Lower_Princes.generic.short=AT
-America/Lower_Princes.standard.short=AST
-America/Maceio.daylight.short=BRST
-America/Maceio.generic.short=BRT
-America/Maceio.standard.short=BRT
-America/Managua.daylight.short=CDT
-America/Managua.generic.short=CT
-America/Managua.standard.short=CST
-America/Manaus.daylight.short=AMST
-America/Manaus.generic.short=AMT
-America/Manaus.standard.short=AMT
-America/Marigot.daylight.short=ADT
-America/Marigot.generic.short=AT
-America/Marigot.standard.short=AST
-America/Martinique.daylight.short=ADT
-America/Martinique.generic.short=AT
-America/Martinique.standard.short=AST
-America/Matamoros.daylight.short=CDT
-America/Matamoros.generic.short=CT
-America/Matamoros.standard.short=CST
-America/Mazatlan.daylight.short=MDT
-America/Mazatlan.generic.short=MT
-America/Mazatlan.standard.short=MST
-America/Mendoza.daylight.short=ARST
-America/Mendoza.generic.short=ART
-America/Mendoza.standard.short=ART
-America/Menominee.daylight.short=CDT
-America/Menominee.generic.short=CT
-America/Menominee.standard.short=CST
-America/Merida.daylight.short=CDT
-America/Merida.generic.short=CT
-America/Merida.standard.short=CST
-America/Metlakatla.daylight.short=MeDT
-America/Metlakatla.generic.short=MeT
-America/Metlakatla.standard.short=MeST
-America/Mexico_City.daylight.short=CDT
-America/Mexico_City.generic.short=CT
-America/Mexico_City.standard.short=CST
-America/Miquelon.daylight.short=PMDT
-America/Miquelon.generic.short=PMT
-America/Miquelon.standard.short=PMST
-America/Moncton.daylight.short=ADT
-America/Moncton.generic.short=AT
-America/Moncton.standard.short=AST
-America/Monterrey.daylight.short=CDT
-America/Monterrey.generic.short=CT
-America/Monterrey.standard.short=CST
-America/Montevideo.daylight.short=UYST
-America/Montevideo.generic.short=UYT
-America/Montevideo.standard.short=UYT
-America/Montreal.daylight.short=EDT
-America/Montreal.generic.short=ET
-America/Montreal.standard.short=EST
-America/Montserrat.daylight.short=ADT
-America/Montserrat.generic.short=AT
-America/Montserrat.standard.short=AST
-America/Nassau.daylight.short=EDT
-America/Nassau.generic.short=ET
-America/Nassau.standard.short=EST
-America/New_York.daylight.short=EDT
-America/New_York.generic.short=ET
-America/New_York.standard.short=EST
-America/Nipigon.daylight.short=EDT
-America/Nipigon.generic.short=ET
-America/Nipigon.standard.short=EST
-America/Nome.daylight.short=AKDT
-America/Nome.generic.short=AKT
-America/Nome.standard.short=AKST
-America/Noronha.daylight.short=FNST
-America/Noronha.generic.short=FNT
-America/Noronha.standard.short=FNT
-America/North_Dakota/Beulah.daylight.short=CDT
-America/North_Dakota/Beulah.generic.short=CT
-America/North_Dakota/Beulah.standard.short=CST
-America/North_Dakota/Center.daylight.short=CDT
-America/North_Dakota/Center.generic.short=CT
-America/North_Dakota/Center.standard.short=CST
-America/North_Dakota/New_Salem.daylight.short=CDT
-America/North_Dakota/New_Salem.generic.short=CT
-America/North_Dakota/New_Salem.standard.short=CST
-America/Ojinaga.daylight.short=MDT
-America/Ojinaga.generic.short=MT
-America/Ojinaga.standard.short=MST
-America/Panama.daylight.short=EDT
-America/Panama.generic.short=ET
-America/Panama.standard.short=EST
-America/Pangnirtung.daylight.short=EDT
-America/Pangnirtung.generic.short=ET
-America/Pangnirtung.standard.short=EST
-America/Paramaribo.daylight.short=SRST
-America/Paramaribo.generic.short=SRT
-America/Paramaribo.standard.short=SRT
-America/Phoenix.daylight.short=MDT
-America/Phoenix.generic.short=MT
-America/Phoenix.standard.short=MST
-America/Port-au-Prince.daylight.short=EDT
-America/Port-au-Prince.generic.short=ET
-America/Port-au-Prince.standard.short=EST
-America/Porto_Acre.daylight.short=ACST
-America/Porto_Acre.generic.short=ACT
-America/Porto_Acre.standard.short=ACT
-America/Port_of_Spain.daylight.short=ADT
-America/Port_of_Spain.generic.short=AT
-America/Port_of_Spain.standard.short=AST
-America/Porto_Velho.daylight.short=AMST
-America/Porto_Velho.generic.short=AMT
-America/Porto_Velho.standard.short=AMT
-America/Puerto_Rico.daylight.short=ADT
-America/Puerto_Rico.generic.short=AT
-America/Puerto_Rico.standard.short=AST
-America/Rainy_River.daylight.short=CDT
-America/Rainy_River.generic.short=CT
-America/Rainy_River.standard.short=CST
-America/Rankin_Inlet.daylight.short=CDT
-America/Rankin_Inlet.generic.short=CT
-America/Rankin_Inlet.standard.short=CST
-America/Recife.daylight.short=BRST
-America/Recife.generic.short=BRT
-America/Recife.standard.short=BRT
-America/Regina.daylight.short=CDT
-America/Regina.generic.short=CT
-America/Regina.standard.short=CST
-America/Resolute.daylight.short=CDT
-America/Resolute.generic.short=CT
-America/Resolute.standard.short=CST
-America/Rio_Branco.daylight.short=ACST
-America/Rio_Branco.generic.short=ACT
-America/Rio_Branco.standard.short=ACT
-America/Rosario.daylight.short=ARST
-America/Rosario.generic.short=ART
-America/Rosario.standard.short=ART
-America/Santa_Isabel.daylight.short=PDT
-America/Santa_Isabel.generic.short=PT
-America/Santa_Isabel.standard.short=PST
-America/Santarem.daylight.short=BRST
-America/Santarem.generic.short=BRT
-America/Santarem.standard.short=BRT
-America/Santiago.daylight.short=CLST
-America/Santiago.generic.short=CLT
-America/Santiago.standard.short=CLT
-America/Santo_Domingo.daylight.short=ADT
-America/Santo_Domingo.generic.short=AT
-America/Santo_Domingo.standard.short=AST
-America/Sao_Paulo.daylight.short=BRST
-America/Sao_Paulo.generic.short=BRT
-America/Sao_Paulo.standard.short=BRT
-America/Scoresbysund.daylight.short=EGST
-America/Scoresbysund.generic.short=EGT
-America/Scoresbysund.standard.short=EGT
-America/Shiprock.daylight.short=MDT
-America/Shiprock.generic.short=MT
-America/Shiprock.standard.short=MST
-America/Sitka.daylight.short=AKDT
-America/Sitka.generic.short=AKT
-America/Sitka.standard.short=AKST
-America/St_Barthelemy.daylight.short=ADT
-America/St_Barthelemy.generic.short=AT
-America/St_Barthelemy.standard.short=AST
-America/St_Johns.daylight.short=NDT
-America/St_Johns.generic.short=NT
-America/St_Johns.standard.short=NST
-America/St_Kitts.daylight.short=ADT
-America/St_Kitts.generic.short=AT
-America/St_Kitts.standard.short=AST
-America/St_Lucia.daylight.short=ADT
-America/St_Lucia.generic.short=AT
-America/St_Lucia.standard.short=AST
-America/St_Thomas.daylight.short=ADT
-America/St_Thomas.generic.short=AT
-America/St_Thomas.standard.short=AST
-America/St_Vincent.daylight.short=ADT
-America/St_Vincent.generic.short=AT
-America/St_Vincent.standard.short=AST
-America/Swift_Current.daylight.short=CDT
-America/Swift_Current.generic.short=CT
-America/Swift_Current.standard.short=CST
-America/Tegucigalpa.daylight.short=CDT
-America/Tegucigalpa.generic.short=CT
-America/Tegucigalpa.standard.short=CST
-America/Thule.daylight.short=ADT
-America/Thule.generic.short=AT
-America/Thule.standard.short=AST
-America/Thunder_Bay.daylight.short=EDT
-America/Thunder_Bay.generic.short=ET
-America/Thunder_Bay.standard.short=EST
-America/Tijuana.daylight.short=PDT
-America/Tijuana.generic.short=PT
-America/Tijuana.standard.short=PST
-America/Toronto.daylight.short=EDT
-America/Toronto.generic.short=ET
-America/Toronto.standard.short=EST
-America/Tortola.daylight.short=ADT
-America/Tortola.generic.short=AT
-America/Tortola.standard.short=AST
-America/Vancouver.daylight.short=PDT
-America/Vancouver.generic.short=PT
-America/Vancouver.standard.short=PST
-America/Virgin.daylight.short=ADT
-America/Virgin.generic.short=AT
-America/Virgin.standard.short=AST
-America/Whitehorse.daylight.short=PDT
-America/Whitehorse.generic.short=PT
-America/Whitehorse.standard.short=PST
-America/Winnipeg.daylight.short=CDT
-America/Winnipeg.generic.short=CT
-America/Winnipeg.standard.short=CST
-America/Yakutat.daylight.short=AKDT
-America/Yakutat.generic.short=AKT
-America/Yakutat.standard.short=AKST
-America/Yellowknife.daylight.short=MDT
-America/Yellowknife.generic.short=MT
-America/Yellowknife.standard.short=MST
-Antarctica/Casey.daylight.short=WST
-Antarctica/Casey.generic.short=WT
-Antarctica/Casey.standard.short=WST
-Antarctica/Davis.daylight.short=DAVST
-Antarctica/Davis.generic.short=DAVT
-Antarctica/Davis.standard.short=DAVT
-Antarctica/DumontDUrville.daylight.short=DDUST
-Antarctica/DumontDUrville.generic.short=DDUT
-Antarctica/DumontDUrville.standard.short=DDUT
-Antarctica/Macquarie.daylight.short=MIST
-Antarctica/Macquarie.generic.short=MIST
-Antarctica/Macquarie.standard.short=MIST
-Antarctica/Mawson.daylight.short=MAWST
-Antarctica/Mawson.generic.short=MAWT
-Antarctica/Mawson.standard.short=MAWT
-Antarctica/McMurdo.daylight.short=NZDT
-Antarctica/McMurdo.generic.short=NZT
-Antarctica/McMurdo.standard.short=NZST
-Antarctica/Palmer.daylight.short=CLST
-Antarctica/Palmer.generic.short=CLT
-Antarctica/Palmer.standard.short=CLT
-Antarctica/Rothera.daylight.short=ROTST
-Antarctica/Rothera.generic.short=ROTT
-Antarctica/Rothera.standard.short=ROTT
-Antarctica/South_Pole.daylight.short=NZDT
-Antarctica/South_Pole.generic.short=NZT
-Antarctica/South_Pole.standard.short=NZST
-Antarctica/Syowa.daylight.short=SYOST
-Antarctica/Syowa.generic.short=SYOT
-Antarctica/Syowa.standard.short=SYOT
-Antarctica/Vostok.daylight.short=VOSST
-Antarctica/Vostok.generic.short=VOST
-Antarctica/Vostok.standard.short=VOST
-Arctic/Longyearbyen.daylight.short=CEST
-Arctic/Longyearbyen.generic.short=CET
-Arctic/Longyearbyen.standard.short=CET
-ART.daylight.short=EEST
-ART.generic.short=EET
-ART.standard.short=EET
-Asia/Aden.daylight.short=ADT
-Asia/Aden.generic.short=AT
-Asia/Aden.standard.short=AST
-Asia/Almaty.daylight.short=ALMST
-Asia/Almaty.generic.short=ALMT
-Asia/Almaty.standard.short=ALMT
-Asia/Amman.daylight.short=ADT
-Asia/Amman.generic.short=AT
-Asia/Amman.standard.short=AST
-Asia/Anadyr.daylight.short=ANAST
-Asia/Anadyr.generic.short=ANAT
-Asia/Anadyr.standard.short=ANAT
-Asia/Aqtau.daylight.short=AQTST
-Asia/Aqtau.generic.short=AQTT
-Asia/Aqtau.standard.short=AQTT
-Asia/Aqtobe.daylight.short=AQTST
-Asia/Aqtobe.generic.short=AQTT
-Asia/Aqtobe.standard.short=AQTT
-Asia/Ashgabat.daylight.short=TMST
-Asia/Ashgabat.generic.short=TMT
-Asia/Ashgabat.standard.short=TMT
-Asia/Ashkhabad.daylight.short=TMST
-Asia/Ashkhabad.generic.short=TMT
-Asia/Ashkhabad.standard.short=TMT
-Asia/Baghdad.daylight.short=ADT
-Asia/Baghdad.generic.short=AT
-Asia/Baghdad.standard.short=AST
-Asia/Bahrain.daylight.short=ADT
-Asia/Bahrain.generic.short=AT
-Asia/Bahrain.standard.short=AST
-Asia/Baku.daylight.short=AZST
-Asia/Baku.generic.short=AZT
-Asia/Baku.standard.short=AZT
-Asia/Bangkok.daylight.short=ICST
-Asia/Bangkok.generic.short=ICT
-Asia/Bangkok.standard.short=ICT
-Asia/Beirut.daylight.short=EEST
-Asia/Beirut.generic.short=EET
-Asia/Beirut.standard.short=EET
-Asia/Bishkek.daylight.short=KGST
-Asia/Bishkek.generic.short=KGT
-Asia/Bishkek.standard.short=KGT
-Asia/Brunei.daylight.short=BNST
-Asia/Brunei.generic.short=BNT
-Asia/Brunei.standard.short=BNT
-Asia/Calcutta.daylight.short=IDT
-Asia/Calcutta.generic.short=IT
-Asia/Calcutta.standard.short=IST
-Asia/Choibalsan.daylight.short=CHOST
-Asia/Choibalsan.generic.short=CHOT
-Asia/Choibalsan.standard.short=CHOT
-Asia/Chongqing.daylight.short=CDT
-Asia/Chongqing.generic.short=CT
-Asia/Chongqing.standard.short=CST
-Asia/Chungking.daylight.short=CDT
-Asia/Chungking.generic.short=CT
-Asia/Chungking.standard.short=CST
-Asia/Colombo.daylight.short=IDT
-Asia/Colombo.generic.short=IT
-Asia/Colombo.standard.short=IST
-Asia/Dacca.daylight.short=BDST
-Asia/Dacca.generic.short=BDT
-Asia/Dacca.standard.short=BDT
-Asia/Damascus.daylight.short=EEST
-Asia/Damascus.generic.short=EET
-Asia/Damascus.standard.short=EET
-Asia/Dhaka.daylight.short=BDST
-Asia/Dhaka.generic.short=BDT
-Asia/Dhaka.standard.short=BDT
-Asia/Dili.daylight.short=TLST
-Asia/Dili.generic.short=TLT
-Asia/Dili.standard.short=TLT
-Asia/Dubai.daylight.short=GDT
-Asia/Dubai.generic.short=GT
-Asia/Dubai.standard.short=GST
-Asia/Dushanbe.daylight.short=TJST
-Asia/Dushanbe.generic.short=TJT
-Asia/Dushanbe.standard.short=TJT
-Asia/Gaza.daylight.short=EEST
-Asia/Gaza.generic.short=EET
-Asia/Gaza.standard.short=EET
-Asia/Harbin.daylight.short=CDT
-Asia/Harbin.generic.short=CT
-Asia/Harbin.standard.short=CST
-Asia/Hebron.daylight.short=EEST
-Asia/Hebron.generic.short=EET
-Asia/Hebron.standard.short=EET
-Asia/Ho_Chi_Minh.daylight.short=ICST
-Asia/Ho_Chi_Minh.generic.short=ICT
-Asia/Ho_Chi_Minh.standard.short=ICT
-Asia/Hong_Kong.daylight.short=HKST
-Asia/Hong_Kong.generic.short=HKT
-Asia/Hong_Kong.standard.short=HKT
-Asia/Hovd.daylight.short=HOVST
-Asia/Hovd.generic.short=HOVT
-Asia/Hovd.standard.short=HOVT
-Asia/Irkutsk.daylight.short=IRKST
-Asia/Irkutsk.generic.short=IRKT
-Asia/Irkutsk.standard.short=IRKT
-Asia/Istanbul.daylight.short=EEST
-Asia/Istanbul.generic.short=EET
-Asia/Istanbul.standard.short=EET
-Asia/Jakarta.daylight.short=WIST
-Asia/Jakarta.generic.short=WIB
-Asia/Jakarta.standard.short=WIB
-Asia/Jayapura.daylight.short=EIST
-Asia/Jayapura.generic.short=WIT
-Asia/Jayapura.standard.short=WIT
-Asia/Jerusalem.daylight.short=IDT
-Asia/Jerusalem.generic.short=IT
-Asia/Jerusalem.standard.short=IST
-Asia/Kabul.daylight.short=AFST
-Asia/Kabul.generic.short=AFT
-Asia/Kabul.standard.short=AFT
-Asia/Kamchatka.daylight.short=PETST
-Asia/Kamchatka.generic.short=PETT
-Asia/Kamchatka.standard.short=PETT
-Asia/Karachi.daylight.short=PKST
-Asia/Karachi.generic.short=PKT
-Asia/Karachi.standard.short=PKT
-Asia/Kashgar.daylight.short=CDT
-Asia/Kashgar.generic.short=CT
-Asia/Kashgar.standard.short=CST
-Asia/Kathmandu.daylight.short=NPST
-Asia/Kathmandu.generic.short=NPT
-Asia/Kathmandu.standard.short=NPT
-Asia/Katmandu.daylight.short=NPST
-Asia/Katmandu.generic.short=NPT
-Asia/Katmandu.standard.short=NPT
-Asia/Khandyga.daylight.short=YAKST
-Asia/Khandyga.generic.short=YAKT
-Asia/Khandyga.standard.short=YAKT
-Asia/Kolkata.daylight.short=IDT
-Asia/Kolkata.generic.short=IT
-Asia/Kolkata.standard.short=IST
-Asia/Krasnoyarsk.daylight.short=KRAST
-Asia/Krasnoyarsk.generic.short=KRAT
-Asia/Krasnoyarsk.standard.short=KRAT
-Asia/Kuala_Lumpur.daylight.short=MYST
-Asia/Kuala_Lumpur.generic.short=MYT
-Asia/Kuala_Lumpur.standard.short=MYT
-Asia/Kuching.daylight.short=MYST
-Asia/Kuching.generic.short=MYT
-Asia/Kuching.standard.short=MYT
-Asia/Kuwait.daylight.short=ADT
-Asia/Kuwait.generic.short=AT
-Asia/Kuwait.standard.short=AST
-Asia/Macao.daylight.short=CDT
-Asia/Macao.generic.short=CT
-Asia/Macao.standard.short=CST
-Asia/Macau.daylight.short=CDT
-Asia/Macau.generic.short=CT
-Asia/Macau.standard.short=CST
-Asia/Magadan.daylight.short=MAGST
-Asia/Magadan.generic.short=MAGT
-Asia/Magadan.standard.short=MAGT
-Asia/Makassar.daylight.short=CIST
-Asia/Makassar.generic.short=WITA
-Asia/Makassar.standard.short=WITA
-Asia/Manila.daylight.short=PHST
-Asia/Manila.generic.short=PHT
-Asia/Manila.standard.short=PHT
-Asia/Muscat.daylight.short=GDT
-Asia/Muscat.generic.short=GT
-Asia/Muscat.standard.short=GST
-Asia/Nicosia.daylight.short=EEST
-Asia/Nicosia.generic.short=EET
-Asia/Nicosia.standard.short=EET
-Asia/Novokuznetsk.daylight.short=NOVST
-Asia/Novokuznetsk.generic.short=NOVT
-Asia/Novokuznetsk.standard.short=NOVT
-Asia/Novosibirsk.daylight.short=NOVST
-Asia/Novosibirsk.generic.short=NOVT
-Asia/Novosibirsk.standard.short=NOVT
-Asia/Omsk.daylight.short=OMSST
-Asia/Omsk.generic.short=OMST
-Asia/Omsk.standard.short=OMST
-Asia/Oral.daylight.short=ORAST
-Asia/Oral.generic.short=ORAT
-Asia/Oral.standard.short=ORAT
-Asia/Phnom_Penh.daylight.short=ICST
-Asia/Phnom_Penh.generic.short=ICT
-Asia/Phnom_Penh.standard.short=ICT
-Asia/Pontianak.daylight.short=WIST
-Asia/Pontianak.generic.short=WIB
-Asia/Pontianak.standard.short=WIB
-Asia/Pyongyang.daylight.short=KDT
-Asia/Pyongyang.generic.short=KT
-Asia/Pyongyang.standard.short=KST
-Asia/Qatar.daylight.short=ADT
-Asia/Qatar.generic.short=AT
-Asia/Qatar.standard.short=AST
-Asia/Qyzylorda.daylight.short=QYZST
-Asia/Qyzylorda.generic.short=QYZT
-Asia/Qyzylorda.standard.short=QYZT
-Asia/Rangoon.daylight.short=MMST
-Asia/Rangoon.generic.short=MMT
-Asia/Rangoon.standard.short=MMT
-Asia/Saigon.daylight.short=ICST
-Asia/Saigon.generic.short=ICT
-Asia/Saigon.standard.short=ICT
-Asia/Sakhalin.daylight.short=SAKST
-Asia/Sakhalin.generic.short=SAKT
-Asia/Sakhalin.standard.short=SAKT
-Asia/Samarkand.daylight.short=UZST
-Asia/Samarkand.generic.short=UZT
-Asia/Samarkand.standard.short=UZT
-Asia/Seoul.daylight.short=KDT
-Asia/Seoul.generic.short=KT
-Asia/Seoul.standard.short=KST
-Asia/Shanghai.daylight.short=CDT
-Asia/Shanghai.generic.short=CT
-Asia/Shanghai.standard.short=CST
-Asia/Singapore.daylight.short=SGST
-Asia/Singapore.generic.short=SGT
-Asia/Singapore.standard.short=SGT
-Asia/Taipei.daylight.short=CDT
-Asia/Taipei.generic.short=CT
-Asia/Taipei.standard.short=CST
-Asia/Tashkent.daylight.short=UZST
-Asia/Tashkent.generic.short=UZT
-Asia/Tashkent.standard.short=UZT
-Asia/Tbilisi.daylight.short=GEST
-Asia/Tbilisi.generic.short=GET
-Asia/Tbilisi.standard.short=GET
-Asia/Tehran.daylight.short=IRDT
-Asia/Tehran.generic.short=IRT
-Asia/Tehran.standard.short=IRST
-Asia/Tel_Aviv.daylight.short=IDT
-Asia/Tel_Aviv.generic.short=IT
-Asia/Tel_Aviv.standard.short=IST
-Asia/Thimbu.daylight.short=BTST
-Asia/Thimbu.generic.short=BTT
-Asia/Thimbu.standard.short=BTT
-Asia/Thimphu.daylight.short=BTST
-Asia/Thimphu.generic.short=BTT
-Asia/Thimphu.standard.short=BTT
-Asia/Tokyo.daylight.short=JDT
-Asia/Tokyo.generic.short=JT
-Asia/Tokyo.standard.short=JST
-Asia/Ujung_Pandang.daylight.short=CIST
-Asia/Ujung_Pandang.generic.short=WITA
-Asia/Ujung_Pandang.standard.short=WITA
-Asia/Ulaanbaatar.daylight.short=ULAST
-Asia/Ulaanbaatar.generic.short=ULAT
-Asia/Ulaanbaatar.standard.short=ULAT
-Asia/Ulan_Bator.daylight.short=ULAST
-Asia/Ulan_Bator.generic.short=ULAT
-Asia/Ulan_Bator.standard.short=ULAT
-Asia/Urumqi.daylight.short=CDT
-Asia/Urumqi.generic.short=CT
-Asia/Urumqi.standard.short=CST
-Asia/Ust-Nera.daylight.short=VLAST
-Asia/Ust-Nera.generic.short=VLAT
-Asia/Ust-Nera.standard.short=VLAT
-Asia/Vientiane.daylight.short=ICST
-Asia/Vientiane.generic.short=ICT
-Asia/Vientiane.standard.short=ICT
-Asia/Vladivostok.daylight.short=VLAST
-Asia/Vladivostok.generic.short=VLAT
-Asia/Vladivostok.standard.short=VLAT
-Asia/Yakutsk.daylight.short=YAKST
-Asia/Yakutsk.generic.short=YAKT
-Asia/Yakutsk.standard.short=YAKT
-Asia/Yekaterinburg.daylight.short=YEKST
-Asia/Yekaterinburg.generic.short=YEKT
-Asia/Yekaterinburg.standard.short=YEKT
-Asia/Yerevan.daylight.short=AMST
-Asia/Yerevan.generic.short=AMT
-Asia/Yerevan.standard.short=AMT
-AST.daylight.short=AKDT
-AST.generic.short=AKT
-AST.standard.short=AKST
-Atlantic/Azores.daylight.short=AZOST
-Atlantic/Azores.generic.short=AZOT
-Atlantic/Azores.standard.short=AZOT
-Atlantic/Bermuda.daylight.short=ADT
-Atlantic/Bermuda.generic.short=AT
-Atlantic/Bermuda.standard.short=AST
-Atlantic/Canary.daylight.short=WEST
-Atlantic/Canary.generic.short=WET
-Atlantic/Canary.standard.short=WET
-Atlantic/Cape_Verde.daylight.short=CVST
-Atlantic/Cape_Verde.generic.short=CVT
-Atlantic/Cape_Verde.standard.short=CVT
-Atlantic/Faeroe.daylight.short=WEST
-Atlantic/Faeroe.generic.short=WET
-Atlantic/Faeroe.standard.short=WET
-Atlantic/Faroe.daylight.short=WEST
-Atlantic/Faroe.generic.short=WET
-Atlantic/Faroe.standard.short=WET
-Atlantic/Jan_Mayen.daylight.short=CEST
-Atlantic/Jan_Mayen.generic.short=CET
-Atlantic/Jan_Mayen.standard.short=CET
-Atlantic/Madeira.daylight.short=WEST
-Atlantic/Madeira.generic.short=WET
-Atlantic/Madeira.standard.short=WET
-Atlantic/Reykjavik.daylight.short=GMT
-Atlantic/Reykjavik.generic.short=GMT
-Atlantic/Reykjavik.standard.short=GMT
-Atlantic/South_Georgia.daylight.short=GDT
-Atlantic/South_Georgia.generic.short=GT
-Atlantic/South_Georgia.standard.short=GST
-Atlantic/Stanley.daylight.short=FKST
-Atlantic/Stanley.generic.short=FKT
-Atlantic/Stanley.standard.short=FKT
-Atlantic/St_Helena.daylight.short=GMT
-Atlantic/St_Helena.generic.short=GMT
-Atlantic/St_Helena.standard.short=GMT
-Australia/ACT.daylight.short=EST
-Australia/ACT.generic.short=ET
-Australia/ACT.standard.short=EST
-Australia/Adelaide.daylight.short=CST
-Australia/Adelaide.generic.short=CT
-Australia/Adelaide.standard.short=CST
-Australia/Brisbane.daylight.short=EST
-Australia/Brisbane.generic.short=ET
-Australia/Brisbane.standard.short=EST
-Australia/Broken_Hill.daylight.short=CST
-Australia/Broken_Hill.generic.short=CT
-Australia/Broken_Hill.standard.short=CST
-Australia/Canberra.daylight.short=EST
-Australia/Canberra.generic.short=ET
-Australia/Canberra.standard.short=EST
-Australia/Currie.daylight.short=EST
-Australia/Currie.generic.short=ET
-Australia/Currie.standard.short=EST
-Australia/Darwin.daylight.short=CST
-Australia/Darwin.generic.short=CT
-Australia/Darwin.standard.short=CST
-Australia/Eucla.daylight.short=CWST
-Australia/Eucla.generic.short=CWT
-Australia/Eucla.standard.short=CWST
-Australia/Hobart.daylight.short=EST
-Australia/Hobart.generic.short=ET
-Australia/Hobart.standard.short=EST
-Australia/LHI.daylight.short=LHST
-Australia/LHI.generic.short=LHT
-Australia/LHI.standard.short=LHST
-Australia/Lindeman.daylight.short=EST
-Australia/Lindeman.generic.short=ET
-Australia/Lindeman.standard.short=EST
-Australia/Lord_Howe.daylight.short=LHST
-Australia/Lord_Howe.generic.short=LHT
-Australia/Lord_Howe.standard.short=LHST
-Australia/Melbourne.daylight.short=EST
-Australia/Melbourne.generic.short=ET
-Australia/Melbourne.standard.short=EST
-Australia/North.daylight.short=CST
-Australia/North.generic.short=CT
-Australia/North.standard.short=CST
-Australia/NSW.daylight.short=EST
-Australia/NSW.generic.short=ET
-Australia/NSW.standard.short=EST
-Australia/Perth.daylight.short=WST
-Australia/Perth.generic.short=WT
-Australia/Perth.standard.short=WST
-Australia/Queensland.daylight.short=EST
-Australia/Queensland.generic.short=ET
-Australia/Queensland.standard.short=EST
-Australia/South.daylight.short=CST
-Australia/South.generic.short=CT
-Australia/South.standard.short=CST
-Australia/Sydney.daylight.short=EST
-Australia/Sydney.generic.short=ET
-Australia/Sydney.standard.short=EST
-Australia/Tasmania.daylight.short=EST
-Australia/Tasmania.generic.short=ET
-Australia/Tasmania.standard.short=EST
-Australia/Victoria.daylight.short=EST
-Australia/Victoria.generic.short=ET
-Australia/Victoria.standard.short=EST
-Australia/West.daylight.short=WST
-Australia/West.generic.short=WT
-Australia/West.standard.short=WST
-Australia/Yancowinna.daylight.short=CST
-Australia/Yancowinna.generic.short=CT
-Australia/Yancowinna.standard.short=CST
-BET.daylight.short=BRST
-BET.generic.short=BRT
-BET.standard.short=BRT
-Brazil/Acre.daylight.short=ACST
-Brazil/Acre.generic.short=ACT
-Brazil/Acre.standard.short=ACT
-Brazil/DeNoronha.daylight.short=FNST
-Brazil/DeNoronha.generic.short=FNT
-Brazil/DeNoronha.standard.short=FNT
-Brazil/East.daylight.short=BRST
-Brazil/East.generic.short=BRT
-Brazil/East.standard.short=BRT
-Brazil/West.daylight.short=AMST
-Brazil/West.generic.short=AMT
-Brazil/West.standard.short=AMT
-BST.daylight.short=BDST
-BST.generic.short=BDT
-BST.standard.short=BDT
-Canada/Atlantic.daylight.short=ADT
-Canada/Atlantic.generic.short=AT
-Canada/Atlantic.standard.short=AST
-Canada/Central.daylight.short=CDT
-Canada/Central.generic.short=CT
-Canada/Central.standard.short=CST
-Canada/Eastern.daylight.short=EDT
-Canada/Eastern.generic.short=ET
-Canada/Eastern.standard.short=EST
-Canada/East-Saskatchewan.daylight.short=CDT
-Canada/East-Saskatchewan.generic.short=CT
-Canada/East-Saskatchewan.standard.short=CST
-Canada/Mountain.daylight.short=MDT
-Canada/Mountain.generic.short=MT
-Canada/Mountain.standard.short=MST
-Canada/Newfoundland.daylight.short=NDT
-Canada/Newfoundland.generic.short=NT
-Canada/Newfoundland.standard.short=NST
-Canada/Pacific.daylight.short=PDT
-Canada/Pacific.generic.short=PT
-Canada/Pacific.standard.short=PST
-Canada/Saskatchewan.daylight.short=CDT
-Canada/Saskatchewan.generic.short=CT
-Canada/Saskatchewan.standard.short=CST
-Canada/Yukon.daylight.short=PDT
-Canada/Yukon.generic.short=PT
-Canada/Yukon.standard.short=PST
-CAT.daylight.short=CAST
-CAT.generic.short=CAT
-CAT.standard.short=CAT
-CET.daylight.short=CEST
-CET.generic.short=CET
-CET.standard.short=CET
-Chile/Continental.daylight.short=CLST
-Chile/Continental.generic.short=CLT
-Chile/Continental.standard.short=CLT
-Chile/EasterIsland.daylight.short=EASST
-Chile/EasterIsland.generic.short=EAST
-Chile/EasterIsland.standard.short=EAST
-CNT.daylight.short=NDT
-CNT.generic.short=NT
-CNT.standard.short=NST
-CST6CDT.daylight.short=CDT
-CST6CDT.generic.short=CT
-CST6CDT.standard.short=CST
-CST.daylight.short=CDT
-CST.generic.short=CT
-CST.standard.short=CST
-CTT.daylight.short=CDT
-CTT.generic.short=CT
-CTT.standard.short=CST
-Cuba.daylight.short=CDT
-Cuba.generic.short=CT
-Cuba.standard.short=CST
-EAT.daylight.short=EAST
-EAT.generic.short=EAT
-EAT.standard.short=EAT
-ECT.daylight.short=CEST
-ECT.generic.short=CET
-ECT.standard.short=CET
-EET.daylight.short=EEST
-EET.generic.short=EET
-EET.standard.short=EET
-Egypt.daylight.short=EEST
-Egypt.generic.short=EET
-Egypt.standard.short=EET
-Eire.daylight.short=IST
-Eire.generic.short=IT
-Eire.standard.short=GMT
-EST5EDT.daylight.short=EDT
-EST5EDT.generic.short=ET
-EST5EDT.standard.short=EST
-EST.daylight.short=EDT
-EST.generic.short=ET
-EST.standard.short=EST
-Etc/Greenwich.daylight.short=GMT
-Etc/Greenwich.generic.short=GMT
-Etc/Greenwich.standard.short=GMT
-Etc/UCT.daylight.short=UTC
-Etc/UCT.generic.short=UTC
-Etc/UCT.standard.short=UTC
-Etc/Universal.daylight.short=UTC
-Etc/Universal.generic.short=UTC
-Etc/Universal.standard.short=UTC
-Etc/UTC.daylight.short=UTC
-Etc/UTC.generic.short=UTC
-Etc/UTC.standard.short=UTC
-Etc/Zulu.daylight.short=UTC
-Etc/Zulu.generic.short=UTC
-Etc/Zulu.standard.short=UTC
-Europe/Amsterdam.daylight.short=CEST
-Europe/Amsterdam.generic.short=CET
-Europe/Amsterdam.standard.short=CET
-Europe/Andorra.daylight.short=CEST
-Europe/Andorra.generic.short=CET
-Europe/Andorra.standard.short=CET
-Europe/Athens.daylight.short=EEST
-Europe/Athens.generic.short=EET
-Europe/Athens.standard.short=EET
-Europe/Belfast.daylight.short=BST
-Europe/Belfast.generic.short=BT
-Europe/Belfast.standard.short=GMT
-Europe/Belgrade.daylight.short=CEST
-Europe/Belgrade.generic.short=CET
-Europe/Belgrade.standard.short=CET
-Europe/Berlin.daylight.short=CEST
-Europe/Berlin.generic.short=CET
-Europe/Berlin.standard.short=CET
-Europe/Bratislava.daylight.short=CEST
-Europe/Bratislava.generic.short=CET
-Europe/Bratislava.standard.short=CET
-Europe/Brussels.daylight.short=CEST
-Europe/Brussels.generic.short=CET
-Europe/Brussels.standard.short=CET
-Europe/Bucharest.daylight.short=EEST
-Europe/Bucharest.generic.short=EET
-Europe/Bucharest.standard.short=EET
-Europe/Budapest.daylight.short=CEST
-Europe/Budapest.generic.short=CET
-Europe/Budapest.standard.short=CET
-Europe/Busingen.daylight.short=CEST
-Europe/Busingen.generic.short=CET
-Europe/Busingen.standard.short=CET
-Europe/Chisinau.daylight.short=EEST
-Europe/Chisinau.generic.short=EET
-Europe/Chisinau.standard.short=EET
-Europe/Copenhagen.daylight.short=CEST
-Europe/Copenhagen.generic.short=CET
-Europe/Copenhagen.standard.short=CET
-Europe/Dublin.daylight.short=IST
-Europe/Dublin.generic.short=IT
-Europe/Dublin.standard.short=GMT
-Europe/Gibraltar.daylight.short=CEST
-Europe/Gibraltar.generic.short=CET
-Europe/Gibraltar.standard.short=CET
-Europe/Guernsey.daylight.short=BST
-Europe/Guernsey.generic.short=BT
-Europe/Guernsey.standard.short=GMT
-Europe/Helsinki.daylight.short=EEST
-Europe/Helsinki.generic.short=EET
-Europe/Helsinki.standard.short=EET
-Europe/Isle_of_Man.daylight.short=BST
-Europe/Isle_of_Man.generic.short=BT
-Europe/Isle_of_Man.standard.short=GMT
-Europe/Istanbul.daylight.short=EEST
-Europe/Istanbul.generic.short=EET
-Europe/Istanbul.standard.short=EET
-Europe/Jersey.daylight.short=BST
-Europe/Jersey.generic.short=BT
-Europe/Jersey.standard.short=GMT
-Europe/Kaliningrad.daylight.short=FEST
-Europe/Kaliningrad.generic.short=FET
-Europe/Kaliningrad.standard.short=FET
-Europe/Kiev.daylight.short=EEST
-Europe/Kiev.generic.short=EET
-Europe/Kiev.standard.short=EET
-Europe/Lisbon.daylight.short=WEST
-Europe/Lisbon.generic.short=WET
-Europe/Lisbon.standard.short=WET
-Europe/Ljubljana.daylight.short=CEST
-Europe/Ljubljana.generic.short=CET
-Europe/Ljubljana.standard.short=CET
-Europe/London.daylight.short=BST
-Europe/London.generic.short=BT
-Europe/London.standard.short=GMT
-Europe/Luxembourg.daylight.short=CEST
-Europe/Luxembourg.generic.short=CET
-Europe/Luxembourg.standard.short=CET
-Europe/Madrid.daylight.short=CEST
-Europe/Madrid.generic.short=CET
-Europe/Madrid.standard.short=CET
-Europe/Malta.daylight.short=CEST
-Europe/Malta.generic.short=CET
-Europe/Malta.standard.short=CET
-Europe/Mariehamn.daylight.short=EEST
-Europe/Mariehamn.generic.short=EET
-Europe/Mariehamn.standard.short=EET
-Europe/Minsk.daylight.short=FEST
-Europe/Minsk.generic.short=FET
-Europe/Minsk.standard.short=FET
-Europe/Monaco.daylight.short=CEST
-Europe/Monaco.generic.short=CET
-Europe/Monaco.standard.short=CET
-Europe/Moscow.daylight.short=MSD
-Europe/Moscow.generic.short=MT
-Europe/Moscow.standard.short=MSK
-Europe/Nicosia.daylight.short=EEST
-Europe/Nicosia.generic.short=EET
-Europe/Nicosia.standard.short=EET
-Europe/Oslo.daylight.short=CEST
-Europe/Oslo.generic.short=CET
-Europe/Oslo.standard.short=CET
-Europe/Paris.daylight.short=CEST
-Europe/Paris.generic.short=CET
-Europe/Paris.standard.short=CET
-Europe/Podgorica.daylight.short=CEST
-Europe/Podgorica.generic.short=CET
-Europe/Podgorica.standard.short=CET
-Europe/Prague.daylight.short=CEST
-Europe/Prague.generic.short=CET
-Europe/Prague.standard.short=CET
-Europe/Riga.daylight.short=EEST
-Europe/Riga.generic.short=EET
-Europe/Riga.standard.short=EET
-Europe/Rome.daylight.short=CEST
-Europe/Rome.generic.short=CET
-Europe/Rome.standard.short=CET
-Europe/Samara.daylight.short=SAMST
-Europe/Samara.generic.short=SAMT
-Europe/Samara.standard.short=SAMT
-Europe/San_Marino.daylight.short=CEST
-Europe/San_Marino.generic.short=CET
-Europe/San_Marino.standard.short=CET
-Europe/Sarajevo.daylight.short=CEST
-Europe/Sarajevo.generic.short=CET
-Europe/Sarajevo.standard.short=CET
-Europe/Simferopol.daylight.short=EEST
-Europe/Simferopol.generic.short=EET
-Europe/Simferopol.standard.short=EET
-Europe/Skopje.daylight.short=CEST
-Europe/Skopje.generic.short=CET
-Europe/Skopje.standard.short=CET
-Europe/Sofia.daylight.short=EEST
-Europe/Sofia.generic.short=EET
-Europe/Sofia.standard.short=EET
-Europe/Stockholm.daylight.short=CEST
-Europe/Stockholm.generic.short=CET
-Europe/Stockholm.standard.short=CET
-Europe/Tallinn.daylight.short=EEST
-Europe/Tallinn.generic.short=EET
-Europe/Tallinn.standard.short=EET
-Europe/Tirane.daylight.short=CEST
-Europe/Tirane.generic.short=CET
-Europe/Tirane.standard.short=CET
-Europe/Tiraspol.daylight.short=EEST
-Europe/Tiraspol.generic.short=EET
-Europe/Tiraspol.standard.short=EET
-Europe/Uzhgorod.daylight.short=EEST
-Europe/Uzhgorod.generic.short=EET
-Europe/Uzhgorod.standard.short=EET
-Europe/Vaduz.daylight.short=CEST
-Europe/Vaduz.generic.short=CET
-Europe/Vaduz.standard.short=CET
-Europe/Vatican.daylight.short=CEST
-Europe/Vatican.generic.short=CET
-Europe/Vatican.standard.short=CET
-Europe/Vienna.daylight.short=CEST
-Europe/Vienna.generic.short=CET
-Europe/Vienna.standard.short=CET
-Europe/Vilnius.daylight.short=EEST
-Europe/Vilnius.generic.short=EET
-Europe/Vilnius.standard.short=EET
-Europe/Volgograd.daylight.short=VOLST
-Europe/Volgograd.generic.short=VOLT
-Europe/Volgograd.standard.short=VOLT
-Europe/Warsaw.daylight.short=CEST
-Europe/Warsaw.generic.short=CET
-Europe/Warsaw.standard.short=CET
-Europe/Zagreb.daylight.short=CEST
-Europe/Zagreb.generic.short=CET
-Europe/Zagreb.standard.short=CET
-Europe/Zaporozhye.daylight.short=EEST
-Europe/Zaporozhye.generic.short=EET
-Europe/Zaporozhye.standard.short=EET
-Europe/Zurich.daylight.short=CEST
-Europe/Zurich.generic.short=CET
-Europe/Zurich.standard.short=CET
-GB.daylight.short=BST
-GB-Eire.daylight.short=BST
-GB-Eire.generic.short=BT
-GB-Eire.standard.short=GMT
-GB.generic.short=BT
-GB.standard.short=GMT
-GMT.daylight.short=GMT
-GMT.generic.short=GMT
-GMT.standard.short=GMT
-Greenwich.daylight.short=GMT
-Greenwich.generic.short=GMT
-Greenwich.standard.short=GMT
-Hongkong.daylight.short=HKST
-Hongkong.generic.short=HKT
-Hongkong.standard.short=HKT
-HST.daylight.short=HDT
-HST.generic.short=HT
-HST.standard.short=HST
-Iceland.daylight.short=GMT
-Iceland.generic.short=GMT
-Iceland.standard.short=GMT
-IET.daylight.short=EDT
-IET.generic.short=ET
-IET.standard.short=EST
-Indian/Antananarivo.daylight.short=EAST
-Indian/Antananarivo.generic.short=EAT
-Indian/Antananarivo.standard.short=EAT
-Indian/Chagos.daylight.short=IOST
-Indian/Chagos.generic.short=IOT
-Indian/Chagos.standard.short=IOT
-Indian/Christmas.daylight.short=CXST
-Indian/Christmas.generic.short=CIT
-Indian/Christmas.standard.short=CXT
-Indian/Cocos.daylight.short=CCST
-Indian/Cocos.generic.short=CCT
-Indian/Cocos.standard.short=CCT
-Indian/Comoro.daylight.short=EAST
-Indian/Comoro.generic.short=EAT
-Indian/Comoro.standard.short=EAT
-Indian/Kerguelen.daylight.short=TFST
-Indian/Kerguelen.generic.short=TFT
-Indian/Kerguelen.standard.short=TFT
-Indian/Mahe.daylight.short=SCST
-Indian/Mahe.generic.short=SCT
-Indian/Mahe.standard.short=SCT
-Indian/Maldives.daylight.short=MVST
-Indian/Maldives.generic.short=MVT
-Indian/Maldives.standard.short=MVT
-Indian/Mauritius.daylight.short=MUST
-Indian/Mauritius.generic.short=MUT
-Indian/Mauritius.standard.short=MUT
-Indian/Mayotte.daylight.short=EAST
-Indian/Mayotte.generic.short=EAT
-Indian/Mayotte.standard.short=EAT
-Indian/Reunion.daylight.short=REST
-Indian/Reunion.generic.short=RET
-Indian/Reunion.standard.short=RET
-Iran.daylight.short=IRDT
-Iran.generic.short=IRT
-Iran.standard.short=IRST
-Israel.daylight.short=IDT
-Israel.generic.short=IT
-Israel.standard.short=IST
-IST.daylight.short=IDT
-IST.generic.short=IT
-IST.standard.short=IST
-Jamaica.daylight.short=EDT
-Jamaica.generic.short=ET
-Jamaica.standard.short=EST
-Japan.daylight.short=JDT
-Japan.generic.short=JT
-Japan.standard.short=JST
-JST.daylight.short=JDT
-JST.generic.short=JT
-JST.standard.short=JST
-Kwajalein.daylight.short=MHST
-Kwajalein.generic.short=MHT
-Kwajalein.standard.short=MHT
-Libya.daylight.short=EEST
-Libya.generic.short=EET
-Libya.standard.short=EET
-MET.daylight.short=MEST
-MET.generic.short=MET
-MET.standard.short=MET
-Mexico/BajaNorte.daylight.short=PDT
-Mexico/BajaNorte.generic.short=PT
-Mexico/BajaNorte.standard.short=PST
-Mexico/BajaSur.daylight.short=MDT
-Mexico/BajaSur.generic.short=MT
-Mexico/BajaSur.standard.short=MST
-Mexico/General.daylight.short=CDT
-Mexico/General.generic.short=CT
-Mexico/General.standard.short=CST
-MIT.daylight.short=WSDT
-MIT.generic.short=WST
-MIT.standard.short=WST
-MST7MDT.daylight.short=MDT
-MST7MDT.generic.short=MT
-MST7MDT.standard.short=MST
-MST.daylight.short=MDT
-MST.generic.short=MT
-MST.standard.short=MST
-Navajo.daylight.short=MDT
-Navajo.generic.short=MT
-Navajo.standard.short=MST
-NET.daylight.short=AMST
-NET.generic.short=AMT
-NET.standard.short=AMT
-NST.daylight.short=NZDT
-NST.generic.short=NZT
-NST.standard.short=NZST
-NZ-CHAT.daylight.short=CHADT
-NZ-CHAT.generic.short=CHAT
-NZ-CHAT.standard.short=CHAST
-NZ.daylight.short=NZDT
-NZ.generic.short=NZT
-NZ.standard.short=NZST
-Pacific/Apia.daylight.short=WSDT
-Pacific/Apia.generic.short=WST
-Pacific/Apia.standard.short=WST
-Pacific/Auckland.daylight.short=NZDT
-Pacific/Auckland.generic.short=NZT
-Pacific/Auckland.standard.short=NZST
-Pacific/Chatham.daylight.short=CHADT
-Pacific/Chatham.generic.short=CHAT
-Pacific/Chatham.standard.short=CHAST
-Pacific/Chuuk.daylight.short=CHUST
-Pacific/Chuuk.generic.short=CHUT
-Pacific/Chuuk.standard.short=CHUT
-Pacific/Easter.daylight.short=EASST
-Pacific/Easter.generic.short=EAST
-Pacific/Easter.standard.short=EAST
-Pacific/Efate.daylight.short=VUST
-Pacific/Efate.generic.short=VUT
-Pacific/Efate.standard.short=VUT
-Pacific/Enderbury.daylight.short=PHOST
-Pacific/Enderbury.generic.short=PHOT
-Pacific/Enderbury.standard.short=PHOT
-Pacific/Fakaofo.daylight.short=TKST
-Pacific/Fakaofo.generic.short=TKT
-Pacific/Fakaofo.standard.short=TKT
-Pacific/Fiji.daylight.short=FJST
-Pacific/Fiji.generic.short=FJT
-Pacific/Fiji.standard.short=FJT
-Pacific/Funafuti.daylight.short=TVST
-Pacific/Funafuti.generic.short=TVT
-Pacific/Funafuti.standard.short=TVT
-Pacific/Galapagos.daylight.short=GALST
-Pacific/Galapagos.generic.short=GALT
-Pacific/Galapagos.standard.short=GALT
-Pacific/Gambier.daylight.short=GAMST
-Pacific/Gambier.generic.short=GAMT
-Pacific/Gambier.standard.short=GAMT
-Pacific/Guadalcanal.daylight.short=SBST
-Pacific/Guadalcanal.generic.short=SBT
-Pacific/Guadalcanal.standard.short=SBT
-Pacific/Guam.daylight.short=ChDT
-Pacific/Guam.generic.short=ChT
-Pacific/Guam.standard.short=ChST
-Pacific/Honolulu.daylight.short=HDT
-Pacific/Honolulu.generic.short=HT
-Pacific/Honolulu.standard.short=HST
-Pacific/Johnston.daylight.short=HDT
-Pacific/Johnston.generic.short=HT
-Pacific/Johnston.standard.short=HST
-Pacific/Kiritimati.daylight.short=LINST
-Pacific/Kiritimati.generic.short=LINT
-Pacific/Kiritimati.standard.short=LINT
-Pacific/Kosrae.daylight.short=KOSST
-Pacific/Kosrae.generic.short=KOST
-Pacific/Kosrae.standard.short=KOST
-Pacific/Kwajalein.daylight.short=MHST
-Pacific/Kwajalein.generic.short=MHT
-Pacific/Kwajalein.standard.short=MHT
-Pacific/Majuro.daylight.short=MHST
-Pacific/Majuro.generic.short=MHT
-Pacific/Majuro.standard.short=MHT
-Pacific/Marquesas.daylight.short=MARST
-Pacific/Marquesas.generic.short=MART
-Pacific/Marquesas.standard.short=MART
-Pacific/Midway.daylight.short=SDT
-Pacific/Midway.generic.short=ST
-Pacific/Midway.standard.short=SST
-Pacific/Nauru.daylight.short=NRST
-Pacific/Nauru.generic.short=NRT
-Pacific/Nauru.standard.short=NRT
-Pacific/Niue.daylight.short=NUST
-Pacific/Niue.generic.short=NUT
-Pacific/Niue.standard.short=NUT
-Pacific/Norfolk.daylight.short=NFST
-Pacific/Norfolk.generic.short=NFT
-Pacific/Norfolk.standard.short=NFT
-Pacific/Noumea.daylight.short=NCST
-Pacific/Noumea.generic.short=NCT
-Pacific/Noumea.standard.short=NCT
-Pacific/Pago_Pago.daylight.short=SDT
-Pacific/Pago_Pago.generic.short=ST
-Pacific/Pago_Pago.standard.short=SST
-Pacific/Palau.daylight.short=PWST
-Pacific/Palau.generic.short=PWT
-Pacific/Palau.standard.short=PWT
-Pacific/Pitcairn.daylight.short=PDT
-Pacific/Pitcairn.generic.short=PT
-Pacific/Pitcairn.standard.short=PST
-Pacific/Pohnpei.daylight.short=PONST
-Pacific/Pohnpei.generic.short=PONT
-Pacific/Pohnpei.standard.short=PONT
-Pacific/Ponape.daylight.short=PONST
-Pacific/Ponape.generic.short=PONT
-Pacific/Ponape.standard.short=PONT
-Pacific/Port_Moresby.daylight.short=PGST
-Pacific/Port_Moresby.generic.short=PGT
-Pacific/Port_Moresby.standard.short=PGT
-Pacific/Rarotonga.daylight.short=CKHST
-Pacific/Rarotonga.generic.short=CKT
-Pacific/Rarotonga.standard.short=CKT
-Pacific/Saipan.daylight.short=ChDT
-Pacific/Saipan.generic.short=ChT
-Pacific/Saipan.standard.short=ChST
-Pacific/Samoa.daylight.short=SDT
-Pacific/Samoa.generic.short=ST
-Pacific/Samoa.standard.short=SST
-Pacific/Tahiti.daylight.short=TAHST
-Pacific/Tahiti.generic.short=TAHT
-Pacific/Tahiti.standard.short=TAHT
-Pacific/Tarawa.daylight.short=GILST
-Pacific/Tarawa.generic.short=GILT
-Pacific/Tarawa.standard.short=GILT
-Pacific/Tongatapu.daylight.short=TOST
-Pacific/Tongatapu.generic.short=TOT
-Pacific/Tongatapu.standard.short=TOT
-Pacific/Truk.daylight.short=CHUST
-Pacific/Truk.generic.short=CHUT
-Pacific/Truk.standard.short=CHUT
-Pacific/Wake.daylight.short=WAKST
-Pacific/Wake.generic.short=WAKT
-Pacific/Wake.standard.short=WAKT
-Pacific/Wallis.daylight.short=WFST
-Pacific/Wallis.generic.short=WFT
-Pacific/Wallis.standard.short=WFT
-Pacific/Yap.daylight.short=CHUST
-Pacific/Yap.generic.short=CHUT
-Pacific/Yap.standard.short=CHUT
-PLT.daylight.short=PKST
-PLT.generic.short=PKT
-PLT.standard.short=PKT
-PNT.daylight.short=MDT
-PNT.generic.short=MT
-PNT.standard.short=MST
-Poland.daylight.short=CEST
-Poland.generic.short=CET
-Poland.standard.short=CET
-Portugal.daylight.short=WEST
-Portugal.generic.short=WET
-Portugal.standard.short=WET
-PRC.daylight.short=CDT
-PRC.generic.short=CT
-PRC.standard.short=CST
-PRT.daylight.short=ADT
-PRT.generic.short=AT
-PRT.standard.short=AST
-PST8PDT.daylight.short=PDT
-PST8PDT.generic.short=PT
-PST8PDT.standard.short=PST
-PST.daylight.short=PDT
-PST.generic.short=PT
-PST.standard.short=PST
-ROK.daylight.short=KDT
-ROK.generic.short=KT
-ROK.standard.short=KST
-Singapore.daylight.short=SGST
-Singapore.generic.short=SGT
-Singapore.standard.short=SGT
-SST.daylight.short=SBST
-SST.generic.short=SBT
-SST.standard.short=SBT
-SystemV/AST4ADT.daylight.short=ADT
-SystemV/AST4ADT.generic.short=AT
-SystemV/AST4ADT.standard.short=AST
-SystemV/AST4.daylight.short=ADT
-SystemV/AST4.generic.short=AT
-SystemV/AST4.standard.short=AST
-SystemV/CST6CDT.daylight.short=CDT
-SystemV/CST6CDT.generic.short=CT
-SystemV/CST6CDT.standard.short=CST
-SystemV/CST6.daylight.short=CDT
-SystemV/CST6.generic.short=CT
-SystemV/CST6.standard.short=CST
-SystemV/EST5.daylight.short=EDT
-SystemV/EST5EDT.daylight.short=EDT
-SystemV/EST5EDT.generic.short=ET
-SystemV/EST5EDT.standard.short=EST
-SystemV/EST5.generic.short=ET
-SystemV/EST5.standard.short=EST
-SystemV/HST10.daylight.short=HDT
-SystemV/HST10.generic.short=HT
-SystemV/HST10.standard.short=HST
-SystemV/MST7.daylight.short=MDT
-SystemV/MST7.generic.short=MT
-SystemV/MST7MDT.daylight.short=MDT
-SystemV/MST7MDT.generic.short=MT
-SystemV/MST7MDT.standard.short=MST
-SystemV/MST7.standard.short=MST
-SystemV/PST8.daylight.short=PDT
-SystemV/PST8.generic.short=PT
-SystemV/PST8PDT.daylight.short=PDT
-SystemV/PST8PDT.generic.short=PT
-SystemV/PST8PDT.standard.short=PST
-SystemV/PST8.standard.short=PST
-SystemV/YST9.daylight.short=AKDT
-SystemV/YST9.generic.short=AKT
-SystemV/YST9.standard.short=AKST
-SystemV/YST9YDT.daylight.short=AKDT
-SystemV/YST9YDT.generic.short=AKT
-SystemV/YST9YDT.standard.short=AKST
-Turkey.daylight.short=EEST
-Turkey.generic.short=EET
-Turkey.standard.short=EET
-UCT.daylight.short=UTC
-UCT.generic.short=UTC
-UCT.standard.short=UTC
-Universal.daylight.short=UTC
-Universal.generic.short=UTC
-Universal.standard.short=UTC
-US/Alaska.daylight.short=AKDT
-US/Alaska.generic.short=AKT
-US/Alaska.standard.short=AKST
-US/Aleutian.daylight.short=HADT
-US/Aleutian.generic.short=HAT
-US/Aleutian.standard.short=HAST
-US/Arizona.daylight.short=MDT
-US/Arizona.generic.short=MT
-US/Arizona.standard.short=MST
-US/Central.daylight.short=CDT
-US/Central.generic.short=CT
-US/Central.standard.short=CST
-US/Eastern.daylight.short=EDT
-US/Eastern.generic.short=ET
-US/Eastern.standard.short=EST
-US/East-Indiana.daylight.short=EDT
-US/East-Indiana.generic.short=ET
-US/East-Indiana.standard.short=EST
-US/Hawaii.daylight.short=HDT
-US/Hawaii.generic.short=HT
-US/Hawaii.standard.short=HST
-US/Indiana-Starke.daylight.short=CDT
-US/Indiana-Starke.generic.short=CT
-US/Indiana-Starke.standard.short=CST
-US/Michigan.daylight.short=EDT
-US/Michigan.generic.short=ET
-US/Michigan.standard.short=EST
-US/Mountain.daylight.short=MDT
-US/Mountain.generic.short=MT
-US/Mountain.standard.short=MST
-US/Pacific.daylight.short=PDT
-US/Pacific.generic.short=PT
-US/Pacific-New.daylight.short=PDT
-US/Pacific-New.generic.short=PT
-US/Pacific-New.standard.short=PST
-US/Pacific.standard.short=PST
-US/Samoa.daylight.short=SDT
-US/Samoa.generic.short=ST
-US/Samoa.standard.short=SST
-UTC.daylight.short=UTC
-UTC.generic.short=UTC
-UTC.standard.short=UTC
-VST.daylight.short=ICST
-VST.generic.short=ICT
-VST.standard.short=ICT
-WET.daylight.short=WEST
-WET.generic.short=WET
-WET.standard.short=WET
-W-SU.daylight.short=MSD
-W-SU.generic.short=MT
-W-SU.standard.short=MSK
-Zulu.daylight.short=UTC
-Zulu.generic.short=UTC
-Zulu.standard.short=UTC
diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_it.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_it.properties
deleted file mode 100644
index 6a4c828..0000000
--- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_it.properties
+++ /dev/null
@@ -1,651 +0,0 @@
-ACT.daylight.long=Ora estiva centrale (Territori del Nord)
-ACT.generic.long=Ora fuso centrale (Territori del Nord)
-ACT.standard.long=Ora standard centrale (Territori del Nord)
-AET.daylight.long=Ora estiva dell'Australia orientale (Nuovo Galles del Sud)
-AET.generic.long=Ora fuso orientale (Nuovo Galles del Sud)
-AET.standard.long=Ora standard dell'Australia orientale (Nuovo Galles del Sud)
-AGT.generic.long=Ora dell'Argentina
-ART.generic.long=Ora dell'Europa orientale
-AST.generic.long=Ora Alaska
-Africa/Abidjan.generic.long=Ora media di Greenwich
-Africa/Accra.generic.long=Ora media del Ghana
-Africa/Addis_Ababa.generic.long=Ora dell'Africa orientale
-Africa/Algiers.generic.long=Ora dell'Europa centrale
-Africa/Asmara.generic.long=Ora dell'Africa orientale
-Africa/Asmera.generic.long=Ora dell'Africa orientale
-Africa/Bamako.generic.long=Ora media di Greenwich
-Africa/Bangui.generic.long=Ora dell'Africa occidentale
-Africa/Banjul.generic.long=Ora media di Greenwich
-Africa/Bissau.generic.long=Ora media di Greenwich
-Africa/Blantyre.generic.long=Ora dell'Africa centrale
-Africa/Brazzaville.generic.long=Ora dell'Africa occidentale
-Africa/Bujumbura.generic.long=Ora dell'Africa centrale
-Africa/Cairo.generic.long=Ora dell'Europa orientale
-Africa/Casablanca.generic.long=Ora dell'Europa occidentale
-Africa/Ceuta.generic.long=Ora dell'Europa centrale
-Africa/Conakry.generic.long=Ora media di Greenwich
-Africa/Dakar.generic.long=Ora media di Greenwich
-Africa/Dar_es_Salaam.generic.long=Ora dell'Africa orientale
-Africa/Djibouti.generic.long=Ora dell'Africa orientale
-Africa/Douala.generic.long=Ora dell'Africa occidentale
-Africa/El_Aaiun.generic.long=Ora dell'Europa occidentale
-Africa/Freetown.generic.long=Ora della Sierra Leone
-Africa/Gaborone.generic.long=Ora dell'Africa centrale
-Africa/Harare.generic.long=Ora dell'Africa centrale
-Africa/Johannesburg.generic.long=Ora Sudafrica
-Africa/Juba.generic.long=Ora dell'Africa orientale
-Africa/Kampala.generic.long=Ora dell'Africa orientale
-Africa/Khartoum.generic.long=Ora dell'Africa orientale
-Africa/Kigali.generic.long=Ora dell'Africa centrale
-Africa/Kinshasa.generic.long=Ora dell'Africa occidentale
-Africa/Lagos.generic.long=Ora dell'Africa occidentale
-Africa/Libreville.generic.long=Ora dell'Africa occidentale
-Africa/Lome.generic.long=Ora media di Greenwich
-Africa/Luanda.generic.long=Ora dell'Africa occidentale
-Africa/Lubumbashi.generic.long=Ora dell'Africa centrale
-Africa/Lusaka.generic.long=Ora dell'Africa centrale
-Africa/Malabo.generic.long=Ora dell'Africa occidentale
-Africa/Maputo.generic.long=Ora dell'Africa centrale
-Africa/Maseru.generic.long=Ora Sudafrica
-Africa/Mbabane.generic.long=Ora Sudafrica
-Africa/Mogadishu.generic.long=Ora dell'Africa orientale
-Africa/Monrovia.generic.long=Ora media di Greenwich
-Africa/Nairobi.generic.long=Ora dell'Africa orientale
-Africa/Ndjamena.generic.long=Ora dell'Africa occidentale
-Africa/Niamey.generic.long=Ora dell'Africa occidentale
-Africa/Nouakchott.generic.long=Ora media di Greenwich
-Africa/Ouagadougou.generic.long=Ora media di Greenwich
-Africa/Porto-Novo.generic.long=Ora dell'Africa occidentale
-Africa/Sao_Tome.generic.long=Ora media di Greenwich
-Africa/Timbuktu.generic.long=Ora media di Greenwich
-Africa/Tripoli.generic.long=Ora dell'Europa orientale
-Africa/Tunis.generic.long=Ora dell'Europa centrale
-Africa/Windhoek.generic.long=Ora dell'Africa occidentale
-America/Adak.generic.long=Ora Hawaii-Aleutine
-America/Anchorage.generic.long=Ora Alaska
-America/Anguilla.generic.long=Fuso dell'Atlantico
-America/Antigua.generic.long=Fuso dell'Atlantico
-America/Araguaina.generic.long=Ora di Brasilia
-America/Argentina/Buenos_Aires.generic.long=Ora dell'Argentina
-America/Argentina/Catamarca.generic.long=Ora dell'Argentina
-America/Argentina/ComodRivadavia.generic.long=Ora dell'Argentina
-America/Argentina/Cordoba.generic.long=Ora dell'Argentina
-America/Argentina/Jujuy.generic.long=Ora dell'Argentina
-America/Argentina/La_Rioja.generic.long=Ora dell'Argentina
-America/Argentina/Mendoza.generic.long=Ora dell'Argentina
-America/Argentina/Rio_Gallegos.generic.long=Ora dell'Argentina
-America/Argentina/Salta.generic.long=Ora dell'Argentina
-America/Argentina/San_Juan.generic.long=Ora dell'Argentina
-America/Argentina/San_Luis.generic.long=Ora dell'Argentina
-America/Argentina/Tucuman.generic.long=Ora dell'Argentina
-America/Argentina/Ushuaia.generic.long=Ora dell'Argentina
-America/Aruba.generic.long=Fuso dell'Atlantico
-America/Asuncion.generic.long=Ora del Paraguay
-America/Atikokan.generic.long=Fuso orientale
-America/Atka.generic.long=Ora Hawaii-Aleutine
-America/Bahia.generic.long=Ora di Brasilia
-America/Bahia_Banderas.generic.long=Ora fuso centrale
-America/Barbados.generic.long=Fuso dell'Atlantico
-America/Belem.generic.long=Ora di Brasilia
-America/Belize.generic.long=Ora fuso centrale
-America/Blanc-Sablon.generic.long=Fuso dell'Atlantico
-America/Boa_Vista.generic.long=Ora dell'Amazzonia
-America/Bogota.generic.long=Ora della Colombia
-America/Boise.generic.long=Ora fuso occidentale
-America/Buenos_Aires.generic.long=Ora dell'Argentina
-America/Cambridge_Bay.generic.long=Ora fuso occidentale
-America/Campo_Grande.generic.long=Ora dell'Amazzonia
-America/Cancun.generic.long=Ora fuso centrale
-America/Caracas.generic.long=Ora del Venezuela
-America/Catamarca.generic.long=Ora dell'Argentina
-America/Cayenne.generic.long=Ora della Guyana Francese
-America/Cayman.generic.long=Fuso orientale
-America/Chicago.generic.long=Ora fuso centrale
-America/Chihuahua.generic.long=Ora fuso occidentale
-America/Coral_Harbour.generic.long=Fuso orientale
-America/Cordoba.generic.long=Ora dell'Argentina
-America/Costa_Rica.generic.long=Ora fuso centrale
-America/Creston.generic.long=Ora fuso occidentale
-America/Cuiaba.generic.long=Ora dell'Amazzonia
-America/Curacao.generic.long=Fuso dell'Atlantico
-America/Danmarkshavn.generic.long=Ora media di Greenwich
-America/Dawson.generic.long=Fuso del Pacifico
-America/Dawson_Creek.generic.long=Ora fuso occidentale
-America/Denver.generic.long=Ora fuso occidentale
-America/Detroit.generic.long=Fuso orientale
-America/Dominica.generic.long=Fuso dell'Atlantico
-America/Edmonton.generic.long=Ora fuso occidentale
-America/Eirunepe.generic.long=Ora di Acre
-America/El_Salvador.generic.long=Ora fuso centrale
-America/Ensenada.generic.long=Fuso del Pacifico
-America/Fort_Wayne.generic.long=Fuso orientale
-America/Fortaleza.generic.long=Ora di Brasilia
-America/Glace_Bay.generic.long=Fuso dell'Atlantico
-America/Godthab.generic.long=Ora della Groenlandia occidentale
-America/Goose_Bay.generic.long=Fuso dell'Atlantico
-America/Grand_Turk.generic.long=Fuso orientale
-America/Grenada.generic.long=Fuso dell'Atlantico
-America/Guadeloupe.generic.long=Fuso dell'Atlantico
-America/Guatemala.generic.long=Ora fuso centrale
-America/Guayaquil.generic.long=Ora dell'Ecuador
-America/Guyana.generic.long=Ora della Guyana
-America/Halifax.generic.long=Fuso dell'Atlantico
-America/Havana.generic.long=Ora di Cuba
-America/Hermosillo.generic.long=Ora fuso occidentale
-America/Indiana/Indianapolis.generic.long=Fuso orientale
-America/Indiana/Knox.generic.long=Ora fuso centrale
-America/Indiana/Marengo.generic.long=Fuso orientale
-America/Indiana/Petersburg.generic.long=Fuso orientale
-America/Indiana/Tell_City.generic.long=Ora fuso centrale
-America/Indiana/Vevay.generic.long=Fuso orientale
-America/Indiana/Vincennes.generic.long=Fuso orientale
-America/Indiana/Winamac.generic.long=Fuso orientale
-America/Indianapolis.generic.long=Fuso orientale
-America/Inuvik.generic.long=Ora fuso occidentale
-America/Iqaluit.generic.long=Fuso orientale
-America/Jamaica.generic.long=Fuso orientale
-America/Jujuy.generic.long=Ora dell'Argentina
-America/Juneau.generic.long=Ora Alaska
-America/Kentucky/Louisville.generic.long=Fuso orientale
-America/Kentucky/Monticello.generic.long=Fuso orientale
-America/Knox_IN.generic.long=Ora fuso centrale
-America/Kralendijk.generic.long=Fuso dell'Atlantico
-America/La_Paz.generic.long=Ora della Bolivia
-America/Lima.generic.long=Ora del Per\u00F9
-America/Los_Angeles.generic.long=Fuso del Pacifico
-America/Louisville.generic.long=Fuso orientale
-America/Lower_Princes.generic.long=Fuso dell'Atlantico
-America/Maceio.generic.long=Ora di Brasilia
-America/Managua.generic.long=Ora fuso centrale
-America/Manaus.generic.long=Ora dell'Amazzonia
-America/Marigot.generic.long=Fuso dell'Atlantico
-America/Martinique.generic.long=Fuso dell'Atlantico
-America/Matamoros.generic.long=Ora fuso centrale
-America/Mazatlan.generic.long=Ora fuso occidentale
-America/Mendoza.generic.long=Ora dell'Argentina
-America/Menominee.generic.long=Ora fuso centrale
-America/Merida.generic.long=Ora fuso centrale
-America/Metlakatla.daylight.long=Ora legale di Metlakatla
-America/Metlakatla.generic.long=Ora di Metlakatla
-America/Metlakatla.standard.long=Ora standard di Metlakatla
-America/Mexico_City.generic.long=Ora fuso centrale
-America/Miquelon.generic.long=Ora Saint-Pierre e Miquelon
-America/Moncton.generic.long=Fuso dell'Atlantico
-America/Monterrey.generic.long=Ora fuso centrale
-America/Montevideo.generic.long=Ora dell'Uruguay
-America/Montreal.generic.long=Fuso orientale
-America/Montserrat.generic.long=Fuso dell'Atlantico
-America/Nassau.generic.long=Fuso orientale
-America/New_York.generic.long=Fuso orientale
-America/Nipigon.generic.long=Fuso orientale
-America/Nome.generic.long=Ora Alaska
-America/Noronha.generic.long=Ora di Fernando de Noronha
-America/North_Dakota/Beulah.generic.long=Ora fuso centrale
-America/North_Dakota/Center.generic.long=Ora fuso centrale
-America/North_Dakota/New_Salem.generic.long=Ora fuso centrale
-America/Ojinaga.generic.long=Ora fuso occidentale
-America/Panama.generic.long=Fuso orientale
-America/Pangnirtung.generic.long=Fuso orientale
-America/Paramaribo.generic.long=Ora di Suriname
-America/Phoenix.generic.long=Ora fuso occidentale
-America/Port-au-Prince.generic.long=Fuso orientale
-America/Port_of_Spain.generic.long=Fuso dell'Atlantico
-America/Porto_Acre.generic.long=Ora di Acre
-America/Porto_Velho.generic.long=Ora dell'Amazzonia
-America/Puerto_Rico.generic.long=Fuso dell'Atlantico
-America/Rainy_River.generic.long=Ora fuso centrale
-America/Rankin_Inlet.generic.long=Ora fuso centrale
-America/Recife.generic.long=Ora di Brasilia
-America/Regina.generic.long=Ora fuso centrale
-America/Resolute.generic.long=Ora fuso centrale
-America/Rio_Branco.generic.long=Ora di Acre
-America/Rosario.generic.long=Ora dell'Argentina
-America/Santa_Isabel.generic.long=Fuso del Pacifico
-America/Santarem.generic.long=Ora di Brasilia
-America/Santiago.generic.long=Ora del Cile
-America/Santo_Domingo.generic.long=Fuso dell'Atlantico
-America/Sao_Paulo.generic.long=Ora di Brasilia
-America/Scoresbysund.generic.long=Ora della Groenlandia orientale
-America/Shiprock.generic.long=Ora fuso occidentale
-America/Sitka.generic.long=Ora Alaska
-America/St_Barthelemy.generic.long=Fuso dell'Atlantico
-America/St_Johns.generic.long=Ora Terranova
-America/St_Kitts.generic.long=Fuso dell'Atlantico
-America/St_Lucia.generic.long=Fuso dell'Atlantico
-America/St_Thomas.generic.long=Fuso dell'Atlantico
-America/St_Vincent.generic.long=Fuso dell'Atlantico
-America/Swift_Current.generic.long=Ora fuso centrale
-America/Tegucigalpa.generic.long=Ora fuso centrale
-America/Thule.generic.long=Fuso dell'Atlantico
-America/Thunder_Bay.generic.long=Fuso orientale
-America/Tijuana.generic.long=Fuso del Pacifico
-America/Toronto.generic.long=Fuso orientale
-America/Tortola.generic.long=Fuso dell'Atlantico
-America/Vancouver.generic.long=Fuso del Pacifico
-America/Virgin.generic.long=Fuso dell'Atlantico
-America/Whitehorse.generic.long=Fuso del Pacifico
-America/Winnipeg.generic.long=Ora fuso centrale
-America/Yakutat.generic.long=Ora Alaska
-America/Yellowknife.generic.long=Ora fuso occidentale
-Antarctica/Casey.daylight.long=Ora estiva dell'Australia occidentale
-Antarctica/Casey.generic.long=Ora Australia occidentale
-Antarctica/Casey.standard.long=Ora standard dell'Australia occidentale
-Antarctica/Davis.generic.long=Ora di Davis
-Antarctica/DumontDUrville.generic.long=Ora di Dumont-d'Urville
-Antarctica/Macquarie.daylight.long=Ora estiva dell'Isola Macquarie
-Antarctica/Macquarie.generic.long=Ora dell'Isola Macquarie
-Antarctica/Macquarie.standard.long=Ora dell'Isola Macquarie
-Antarctica/Mawson.generic.long=Ora di Mawson
-Antarctica/McMurdo.generic.long=Ora Nuova Zelanda
-Antarctica/Palmer.generic.long=Ora del Cile
-Antarctica/Rothera.generic.long=Ora di Rothera
-Antarctica/South_Pole.generic.long=Ora Nuova Zelanda
-Antarctica/Syowa.generic.long=Ora di Syowa
-Antarctica/Vostok.generic.long=Ora di Vostok
-Arctic/Longyearbyen.generic.long=Ora dell'Europa centrale
-Asia/Aden.generic.long=Ora Arabia Saudita
-Asia/Almaty.generic.long=Ora di Alma-Ata
-Asia/Amman.generic.long=Ora Arabia Saudita
-Asia/Anadyr.generic.long=Ora di Anadyr
-Asia/Aqtau.generic.long=Ora di Aqtau
-Asia/Aqtobe.generic.long=Ora di Aqtobe
-Asia/Ashgabat.generic.long=Ora del Turkmenistan
-Asia/Ashkhabad.generic.long=Ora del Turkmenistan
-Asia/Baghdad.generic.long=Ora Arabia Saudita
-Asia/Bahrain.generic.long=Ora Arabia Saudita
-Asia/Baku.generic.long=Ora dell'Azerbaigian
-Asia/Bangkok.generic.long=Ora dell'Indocina
-Asia/Beirut.generic.long=Ora dell'Europa orientale
-Asia/Bishkek.generic.long=Ora del Kirghizistan
-Asia/Brunei.generic.long=Ora del Brunei
-Asia/Calcutta.generic.long=Ora India
-Asia/Choibalsan.generic.long=Ora di Choibalsan
-Asia/Chongqing.generic.long=Ora Cina
-Asia/Chungking.generic.long=Ora Cina
-Asia/Colombo.generic.long=Ora India
-Asia/Dacca.generic.long=Ora del Bangladesh
-Asia/Damascus.generic.long=Ora dell'Europa orientale
-Asia/Dhaka.generic.long=Ora del Bangladesh
-Asia/Dili.generic.long=Ora di Timor Est
-Asia/Dubai.generic.long=Ora del golfo
-Asia/Dushanbe.generic.long=Ora del Tagikistan
-Asia/Gaza.generic.long=Ora dell'Europa orientale
-Asia/Harbin.generic.long=Ora Cina
-Asia/Hebron.generic.long=Ora dell'Europa orientale
-Asia/Ho_Chi_Minh.generic.long=Ora dell'Indocina
-Asia/Hong_Kong.generic.long=Ora di Hong Kong
-Asia/Hovd.generic.long=Ora di Hovd
-Asia/Irkutsk.generic.long=Ora di Irkutsk
-Asia/Istanbul.generic.long=Ora dell'Europa orientale
-Asia/Jakarta.generic.long=Ora dell'Indonesia occidentale
-Asia/Jayapura.generic.long=Ora dell'Indonesia orientale
-Asia/Jerusalem.generic.long=Ora Israele
-Asia/Kabul.generic.long=Ora dell'Afghanistan
-Asia/Kamchatka.generic.long=Ora di Petropavlovsk-Kamchatski
-Asia/Karachi.generic.long=Ora del Pakistan
-Asia/Kashgar.generic.long=Ora Cina
-Asia/Kathmandu.generic.long=Ora del Nepal
-Asia/Katmandu.generic.long=Ora del Nepal
-Asia/Khandyga.daylight.long=Ora estiva di Khandyga
-Asia/Khandyga.generic.long=Ora di Khandyga
-Asia/Khandyga.standard.long=Ora di Khandyga
-Asia/Kolkata.generic.long=Ora India
-Asia/Krasnoyarsk.generic.long=Ora di Krasnojarsk
-Asia/Kuala_Lumpur.generic.long=Ora della Malaysia
-Asia/Kuching.generic.long=Ora della Malaysia
-Asia/Kuwait.generic.long=Ora Arabia Saudita
-Asia/Macao.generic.long=Ora Cina
-Asia/Macau.generic.long=Ora Cina
-Asia/Magadan.generic.long=Ora di Magadan
-Asia/Makassar.generic.long=Ora dell'Indonesia centrale
-Asia/Manila.generic.long=Ora delle Filippine
-Asia/Muscat.generic.long=Ora del golfo
-Asia/Nicosia.generic.long=Ora dell'Europa orientale
-Asia/Novokuznetsk.generic.long=Ora di Novosibirsk
-Asia/Novosibirsk.generic.long=Ora di Novosibirsk
-Asia/Omsk.generic.long=Ora di Omsk
-Asia/Oral.generic.long=Ora di Oral
-Asia/Phnom_Penh.generic.long=Ora dell'Indocina
-Asia/Pontianak.generic.long=Ora dell'Indonesia occidentale
-Asia/Pyongyang.generic.long=Ora Corea
-Asia/Qatar.generic.long=Ora Arabia Saudita
-Asia/Qyzylorda.generic.long=Ora di Qyzylorda
-Asia/Rangoon.generic.long=Ora della Birmania/Myanmar
-Asia/Saigon.generic.long=Ora dell'Indocina
-Asia/Sakhalin.generic.long=Ora di Sakhalin
-Asia/Samarkand.generic.long=Ora dell'Uzbekistan
-Asia/Seoul.generic.long=Ora Corea
-Asia/Shanghai.generic.long=Ora Cina
-Asia/Singapore.generic.long=Ora di Singapore
-Asia/Taipei.generic.long=Ora Cina
-Asia/Tashkent.generic.long=Ora dell'Uzbekistan
-Asia/Tbilisi.generic.long=Ora della Georgia
-Asia/Tehran.generic.long=Ora Iran
-Asia/Tel_Aviv.generic.long=Ora Israele
-Asia/Thimbu.generic.long=Ora del Bhutan
-Asia/Thimphu.generic.long=Ora del Bhutan
-Asia/Tokyo.generic.long=Ora Giappone
-Asia/Ujung_Pandang.generic.long=Ora dell'Indonesia centrale
-Asia/Ulaanbaatar.generic.long=Ora di Ulaanbaatar
-Asia/Ulan_Bator.generic.long=Ora di Ulaanbaatar
-Asia/Urumqi.generic.long=Ora Cina
-Asia/Ust-Nera.daylight.long=Ora estiva di Ust-Nera
-Asia/Ust-Nera.generic.long=Ora di Ust-Nera
-Asia/Ust-Nera.standard.long=Ora di Ust-Nera
-Asia/Vientiane.generic.long=Ora dell'Indocina
-Asia/Vladivostok.generic.long=Ora di Vladivostok
-Asia/Yakutsk.generic.long=Ora di Yakutsk
-Asia/Yekaterinburg.generic.long=Ora di Ekaterinburg
-Asia/Yerevan.generic.long=Ora dell'Armenia
-Atlantic/Azores.generic.long=Ora delle Azzorre
-Atlantic/Bermuda.generic.long=Fuso dell'Atlantico
-Atlantic/Canary.generic.long=Ora dell'Europa occidentale
-Atlantic/Cape_Verde.generic.long=Ora di Capo Verde
-Atlantic/Faeroe.generic.long=Ora dell'Europa occidentale
-Atlantic/Faroe.generic.long=Ora dell'Europa occidentale
-Atlantic/Jan_Mayen.generic.long=Ora dell'Europa centrale
-Atlantic/Madeira.generic.long=Ora dell'Europa occidentale
-Atlantic/Reykjavik.generic.long=Ora media di Greenwich
-Atlantic/South_Georgia.generic.long=Ora Georgia del Sud
-Atlantic/St_Helena.generic.long=Ora media di Greenwich
-Atlantic/Stanley.generic.long=Ora delle Falkland
-Australia/ACT.daylight.long=Ora estiva dell'Australia orientale (Nuovo Galles del Sud)
-Australia/ACT.generic.long=Ora fuso orientale (Nuovo Galles del Sud)
-Australia/ACT.standard.long=Ora standard dell'Australia orientale (Nuovo Galles del Sud)
-Australia/Adelaide.daylight.long=Ora estiva centrale (Australia del Sud)
-Australia/Adelaide.generic.long=Ora fuso centrale (Australia del Sud)
-Australia/Adelaide.standard.long=Ora standard centrale (Australia del Sud)
-Australia/Brisbane.daylight.long=Ora estiva orientale (Queensland)
-Australia/Brisbane.generic.long=Ora fuso orientale (Queensland)
-Australia/Brisbane.standard.long=Ora standard orientale (Queensland)
-Australia/Broken_Hill.daylight.long=Ora estiva centrale (Australia del Sud/Nuovo Galles del Sud)
-Australia/Broken_Hill.generic.long=Ora fuso centrale (Australia del Sud/Nuovo Galles del Sud)
-Australia/Broken_Hill.standard.long=Ora standard centrale (Australia del Sud/Nuovo Galles del Sud)
-Australia/Canberra.daylight.long=Ora estiva dell'Australia orientale (Nuovo Galles del Sud)
-Australia/Canberra.generic.long=Ora fuso orientale (Nuovo Galles del Sud)
-Australia/Canberra.standard.long=Ora standard dell'Australia orientale (Nuovo Galles del Sud)
-Australia/Currie.daylight.long=Ora estiva dell'Australia orientale (Nuovo Galles del Sud)
-Australia/Currie.generic.long=Ora fuso orientale (Nuovo Galles del Sud)
-Australia/Currie.standard.long=Ora standard dell'Australia orientale (Nuovo Galles del Sud)
-Australia/Darwin.daylight.long=Ora estiva centrale (Territori del Nord)
-Australia/Darwin.generic.long=Ora fuso centrale (Territori del Nord)
-Australia/Darwin.standard.long=Ora standard centrale (Territori del Nord)
-Australia/Eucla.daylight.long=Ora estiva Australia centro-occidentale
-Australia/Eucla.generic.long=Ora Australia centro-occidentale
-Australia/Eucla.standard.long=Ora standard Australia centro-occidentale
-Australia/Hobart.daylight.long=Ora estiva orientale (Tasmania)
-Australia/Hobart.generic.long=Ora fuso orientale (Tasmania)
-Australia/Hobart.standard.long=Ora standard orientale (Tasmania)
-Australia/LHI.generic.long=Ora di Lord Howe
-Australia/Lindeman.daylight.long=Ora estiva orientale (Queensland)
-Australia/Lindeman.generic.long=Ora fuso orientale (Queensland)
-Australia/Lindeman.standard.long=Ora standard orientale (Queensland)
-Australia/Lord_Howe.generic.long=Ora di Lord Howe
-Australia/Melbourne.daylight.long=Ora estiva orientale (Victoria)
-Australia/Melbourne.generic.long=Ora fuso orientale (Victoria)
-Australia/Melbourne.standard.long=Ora standard orientale (Victoria)
-Australia/NSW.daylight.long=Ora estiva dell'Australia orientale (Nuovo Galles del Sud)
-Australia/NSW.generic.long=Ora fuso orientale (Nuovo Galles del Sud)
-Australia/NSW.standard.long=Ora standard dell'Australia orientale (Nuovo Galles del Sud)
-Australia/North.daylight.long=Ora estiva centrale (Territori del Nord)
-Australia/North.generic.long=Ora fuso centrale (Territori del Nord)
-Australia/North.standard.long=Ora standard centrale (Territori del Nord)
-Australia/Perth.daylight.long=Ora estiva dell'Australia occidentale
-Australia/Perth.generic.long=Ora Australia occidentale
-Australia/Perth.standard.long=Ora standard dell'Australia occidentale
-Australia/Queensland.daylight.long=Ora estiva orientale (Queensland)
-Australia/Queensland.generic.long=Ora fuso orientale (Queensland)
-Australia/Queensland.standard.long=Ora standard orientale (Queensland)
-Australia/South.daylight.long=Ora estiva centrale (Australia del Sud)
-Australia/South.generic.long=Ora fuso centrale (Australia del Sud)
-Australia/South.standard.long=Ora standard centrale (Australia del Sud)
-Australia/Sydney.daylight.long=Ora estiva dell'Australia orientale (Nuovo Galles del Sud)
-Australia/Sydney.generic.long=Ora fuso orientale (Nuovo Galles del Sud)
-Australia/Sydney.standard.long=Ora standard dell'Australia orientale (Nuovo Galles del Sud)
-Australia/Tasmania.daylight.long=Ora estiva orientale (Tasmania)
-Australia/Tasmania.generic.long=Ora fuso orientale (Tasmania)
-Australia/Tasmania.standard.long=Ora standard orientale (Tasmania)
-Australia/Victoria.daylight.long=Ora estiva orientale (Victoria)
-Australia/Victoria.generic.long=Ora fuso orientale (Victoria)
-Australia/Victoria.standard.long=Ora standard orientale (Victoria)
-Australia/West.daylight.long=Ora estiva dell'Australia occidentale
-Australia/West.generic.long=Ora Australia occidentale
-Australia/West.standard.long=Ora standard dell'Australia occidentale
-Australia/Yancowinna.daylight.long=Ora estiva centrale (Australia del Sud/Nuovo Galles del Sud)
-Australia/Yancowinna.generic.long=Ora fuso centrale (Australia del Sud/Nuovo Galles del Sud)
-Australia/Yancowinna.standard.long=Ora standard centrale (Australia del Sud/Nuovo Galles del Sud)
-BET.generic.long=Ora di Brasilia
-BST.generic.long=Ora del Bangladesh
-Brazil/Acre.generic.long=Ora di Acre
-Brazil/DeNoronha.generic.long=Ora di Fernando de Noronha
-Brazil/East.generic.long=Ora di Brasilia
-Brazil/West.generic.long=Ora dell'Amazzonia
-CAT.generic.long=Ora dell'Africa centrale
-CET.generic.long=Ora dell'Europa centrale
-CNT.generic.long=Ora Terranova
-CST.generic.long=Ora fuso centrale
-CST6CDT.generic.long=Ora fuso centrale
-CTT.generic.long=Ora Cina
-Canada/Atlantic.generic.long=Fuso dell'Atlantico
-Canada/Central.generic.long=Ora fuso centrale
-Canada/East-Saskatchewan.generic.long=Ora fuso centrale
-Canada/Eastern.generic.long=Fuso orientale
-Canada/Mountain.generic.long=Ora fuso occidentale
-Canada/Newfoundland.generic.long=Ora Terranova
-Canada/Pacific.generic.long=Fuso del Pacifico
-Canada/Saskatchewan.generic.long=Ora fuso centrale
-Canada/Yukon.generic.long=Fuso del Pacifico
-Chile/Continental.generic.long=Ora del Cile
-Chile/EasterIsland.generic.long=Ora dell'Isola di Pasqua
-Cuba.generic.long=Ora di Cuba
-EAT.generic.long=Ora dell'Africa orientale
-ECT.generic.long=Ora dell'Europa centrale
-EET.generic.long=Ora dell'Europa orientale
-EST.generic.long=Fuso orientale
-EST5EDT.generic.long=Fuso orientale
-Egypt.generic.long=Ora dell'Europa orientale
-Eire.generic.long=Ora irlandese
-Etc/Greenwich.generic.long=Ora media di Greenwich
-Etc/UCT.generic.long=Tempo universale coordinato
-Etc/UTC.generic.long=Tempo universale coordinato
-Etc/Universal.generic.long=Tempo universale coordinato
-Etc/Zulu.generic.long=Tempo universale coordinato
-Europe/Amsterdam.generic.long=Ora dell'Europa centrale
-Europe/Andorra.generic.long=Ora dell'Europa centrale
-Europe/Athens.generic.long=Ora dell'Europa orientale
-Europe/Belfast.generic.long=Ora britannica
-Europe/Belgrade.generic.long=Ora dell'Europa centrale
-Europe/Berlin.generic.long=Ora dell'Europa centrale
-Europe/Bratislava.generic.long=Ora dell'Europa centrale
-Europe/Brussels.generic.long=Ora dell'Europa centrale
-Europe/Bucharest.generic.long=Ora dell'Europa orientale
-Europe/Budapest.generic.long=Ora dell'Europa centrale
-Europe/Busingen.generic.long=Ora dell'Europa centrale
-Europe/Chisinau.generic.long=Ora dell'Europa orientale
-Europe/Copenhagen.generic.long=Ora dell'Europa centrale
-Europe/Dublin.generic.long=Ora irlandese
-Europe/Gibraltar.generic.long=Ora dell'Europa centrale
-Europe/Guernsey.generic.long=Ora britannica
-Europe/Helsinki.generic.long=Ora dell'Europa orientale
-Europe/Isle_of_Man.generic.long=Ora britannica
-Europe/Istanbul.generic.long=Ora dell'Europa orientale
-Europe/Jersey.generic.long=Ora britannica
-Europe/Kaliningrad.daylight.long=Ora estiva dei paesi europei pi\u00F9 orientali
-Europe/Kaliningrad.generic.long=Ora dei paesi europei pi\u00F9 orientali
-Europe/Kaliningrad.standard.long=Ora dei paesi europei pi\u00F9 orientali
-Europe/Kiev.generic.long=Ora dell'Europa orientale
-Europe/Lisbon.generic.long=Ora dell'Europa occidentale
-Europe/Ljubljana.generic.long=Ora dell'Europa centrale
-Europe/London.generic.long=Ora britannica
-Europe/Luxembourg.generic.long=Ora dell'Europa centrale
-Europe/Madrid.generic.long=Ora dell'Europa centrale
-Europe/Malta.generic.long=Ora dell'Europa centrale
-Europe/Mariehamn.generic.long=Ora dell'Europa orientale
-Europe/Minsk.daylight.long=Ora estiva dei paesi europei pi\u00F9 orientali
-Europe/Minsk.generic.long=Ora dei paesi europei pi\u00F9 orientali
-Europe/Minsk.standard.long=Ora dei paesi europei pi\u00F9 orientali
-Europe/Monaco.generic.long=Ora dell'Europa centrale
-Europe/Moscow.generic.long=Ora Mosca
-Europe/Nicosia.generic.long=Ora dell'Europa orientale
-Europe/Oslo.generic.long=Ora dell'Europa centrale
-Europe/Paris.generic.long=Ora dell'Europa centrale
-Europe/Podgorica.generic.long=Ora dell'Europa centrale
-Europe/Prague.generic.long=Ora dell'Europa centrale
-Europe/Riga.generic.long=Ora dell'Europa orientale
-Europe/Rome.generic.long=Ora dell'Europa centrale
-Europe/Samara.generic.long=Ora di Samara
-Europe/San_Marino.generic.long=Ora dell'Europa centrale
-Europe/Sarajevo.generic.long=Ora dell'Europa centrale
-Europe/Simferopol.generic.long=Ora dell'Europa orientale
-Europe/Skopje.generic.long=Ora dell'Europa centrale
-Europe/Sofia.generic.long=Ora dell'Europa orientale
-Europe/Stockholm.generic.long=Ora dell'Europa centrale
-Europe/Tallinn.generic.long=Ora dell'Europa orientale
-Europe/Tirane.generic.long=Ora dell'Europa centrale
-Europe/Tiraspol.generic.long=Ora dell'Europa orientale
-Europe/Uzhgorod.generic.long=Ora dell'Europa orientale
-Europe/Vaduz.generic.long=Ora dell'Europa centrale
-Europe/Vatican.generic.long=Ora dell'Europa centrale
-Europe/Vienna.generic.long=Ora dell'Europa centrale
-Europe/Vilnius.generic.long=Ora dell'Europa orientale
-Europe/Volgograd.generic.long=Ora di Volgograd
-Europe/Warsaw.generic.long=Ora dell'Europa centrale
-Europe/Zagreb.generic.long=Ora dell'Europa centrale
-Europe/Zaporozhye.generic.long=Ora dell'Europa orientale
-Europe/Zurich.generic.long=Ora dell'Europa centrale
-GB-Eire.generic.long=Ora britannica
-GB.generic.long=Ora britannica
-GMT.generic.long=Ora media di Greenwich
-Greenwich.generic.long=Ora media di Greenwich
-HST.generic.long=Ora Hawaii
-Hongkong.generic.long=Ora di Hong Kong
-IET.generic.long=Fuso orientale
-IST.generic.long=Ora India
-Iceland.generic.long=Ora media di Greenwich
-Indian/Antananarivo.generic.long=Ora dell'Africa orientale
-Indian/Chagos.generic.long=Ora del Territorio Britannico dell'Oceano Indiano
-Indian/Christmas.generic.long=Ora dell'Isola Christmas
-Indian/Cocos.generic.long=Ora delle Isole Cocos
-Indian/Comoro.generic.long=Ora dell'Africa orientale
-Indian/Kerguelen.generic.long=Ora delle Terre Australi e Antartiche Francesi
-Indian/Mahe.generic.long=Ora delle Seychelles
-Indian/Maldives.generic.long=Ora delle Maldive
-Indian/Mauritius.generic.long=Ora di Mauritius
-Indian/Mayotte.generic.long=Ora dell'Africa orientale
-Indian/Reunion.generic.long=Ora di Reunion
-Iran.generic.long=Ora Iran
-Israel.generic.long=Ora Israele
-JST.generic.long=Ora Giappone
-Jamaica.generic.long=Fuso orientale
-Japan.generic.long=Ora Giappone
-Kwajalein.generic.long=Ora delle Isole Marshall
-Libya.generic.long=Ora dell'Europa orientale
-MET.generic.long=MET
-MIT.generic.long=Ora di Samoa occidentale
-MST.generic.long=Ora fuso occidentale
-MST7MDT.generic.long=Ora fuso occidentale
-Mexico/BajaNorte.generic.long=Fuso del Pacifico
-Mexico/BajaSur.generic.long=Ora fuso occidentale
-Mexico/General.generic.long=Ora fuso centrale
-NET.generic.long=Ora dell'Armenia
-NST.generic.long=Ora Nuova Zelanda
-NZ-CHAT.generic.long=Ora Chatham
-NZ.generic.long=Ora Nuova Zelanda
-Navajo.generic.long=Ora fuso occidentale
-PLT.generic.long=Ora del Pakistan
-PNT.generic.long=Ora fuso occidentale
-PRC.generic.long=Ora Cina
-PRT.generic.long=Fuso dell'Atlantico
-PST.generic.long=Fuso del Pacifico
-PST8PDT.generic.long=Fuso del Pacifico
-Pacific/Apia.generic.long=Ora di Samoa occidentale
-Pacific/Auckland.generic.long=Ora Nuova Zelanda
-Pacific/Chatham.generic.long=Ora Chatham
-Pacific/Chuuk.daylight.long=Ora estiva di Chuuk
-Pacific/Chuuk.generic.long=Ora di Chuuk
-Pacific/Chuuk.standard.long=Ora di Chuuk
-Pacific/Easter.generic.long=Ora dell'Isola di Pasqua
-Pacific/Efate.generic.long=Ora di Vanuatu
-Pacific/Enderbury.generic.long=Ora delle Isole Phoenix
-Pacific/Fakaofo.generic.long=Ora di Tokelau
-Pacific/Fiji.generic.long=Ora di Figi
-Pacific/Funafuti.generic.long=Ora di Tuvalu
-Pacific/Galapagos.generic.long=Ora delle Galapagos
-Pacific/Gambier.generic.long=Ora di Gambier
-Pacific/Guadalcanal.generic.long=Ora delle Isole Salomone
-Pacific/Guam.generic.long=Ora Chamorro
-Pacific/Honolulu.generic.long=Ora Hawaii
-Pacific/Johnston.generic.long=Ora Hawaii
-Pacific/Kiritimati.generic.long=Ora delle Line Islands
-Pacific/Kosrae.generic.long=Ora di Kosrae
-Pacific/Kwajalein.generic.long=Ora delle Isole Marshall
-Pacific/Majuro.generic.long=Ora delle Isole Marshall
-Pacific/Marquesas.generic.long=Ora delle Isole Marchesi
-Pacific/Midway.generic.long=Ora Samoa
-Pacific/Nauru.generic.long=Ora di Nauru
-Pacific/Niue.generic.long=Ora di Niue
-Pacific/Norfolk.generic.long=Ora di Norfolk
-Pacific/Noumea.generic.long=Ora della Nuova Caledonia
-Pacific/Pago_Pago.generic.long=Ora Samoa
-Pacific/Palau.generic.long=Ora di Palau
-Pacific/Pitcairn.generic.long=Ora Pitcairn
-Pacific/Pohnpei.daylight.long=Ora estiva di Pohnpei
-Pacific/Pohnpei.generic.long=Ora Ponape
-Pacific/Pohnpei.standard.long=Ora di Pohnpei
-Pacific/Ponape.daylight.long=Ora estiva di Pohnpei
-Pacific/Ponape.generic.long=Ora Ponape
-Pacific/Ponape.standard.long=Ora di Pohnpei
-Pacific/Port_Moresby.generic.long=Ora di Papua Nuova Guinea
-Pacific/Rarotonga.generic.long=Ora delle Isole Cook
-Pacific/Saipan.generic.long=Ora Chamorro
-Pacific/Samoa.generic.long=Ora Samoa
-Pacific/Tahiti.generic.long=Ora di Tahiti
-Pacific/Tarawa.generic.long=Ora delle Isole Gilbert
-Pacific/Tongatapu.generic.long=Ora di Tonga
-Pacific/Truk.daylight.long=Ora estiva di Chuuk
-Pacific/Truk.generic.long=Ora di Chuuk
-Pacific/Truk.standard.long=Ora di Chuuk
-Pacific/Wake.generic.long=Ora di Wake
-Pacific/Wallis.generic.long=Ora di Wallis e Futuna
-Pacific/Yap.daylight.long=Ora estiva di Chuuk
-Pacific/Yap.generic.long=Ora di Chuuk
-Pacific/Yap.standard.long=Ora di Chuuk
-Poland.generic.long=Ora dell'Europa centrale
-Portugal.generic.long=Ora dell'Europa occidentale
-ROK.generic.long=Ora Corea
-SST.generic.long=Ora delle Isole Salomone
-Singapore.generic.long=Ora di Singapore
-SystemV/AST4.generic.long=Fuso dell'Atlantico
-SystemV/AST4ADT.generic.long=Fuso dell'Atlantico
-SystemV/CST6.generic.long=Ora fuso centrale
-SystemV/CST6CDT.generic.long=Ora fuso centrale
-SystemV/EST5.generic.long=Fuso orientale
-SystemV/EST5EDT.generic.long=Fuso orientale
-SystemV/HST10.generic.long=Ora Hawaii
-SystemV/MST7.generic.long=Ora fuso occidentale
-SystemV/MST7MDT.generic.long=Ora fuso occidentale
-SystemV/PST8.generic.long=Fuso del Pacifico
-SystemV/PST8PDT.generic.long=Fuso del Pacifico
-SystemV/YST9.generic.long=Ora Alaska
-SystemV/YST9YDT.generic.long=Ora Alaska
-Turkey.generic.long=Ora dell'Europa orientale
-UCT.generic.long=Tempo universale coordinato
-US/Alaska.generic.long=Ora Alaska
-US/Aleutian.generic.long=Ora Hawaii-Aleutine
-US/Arizona.generic.long=Ora fuso occidentale
-US/Central.generic.long=Ora fuso centrale
-US/East-Indiana.generic.long=Fuso orientale
-US/Eastern.generic.long=Fuso orientale
-US/Hawaii.generic.long=Ora Hawaii
-US/Indiana-Starke.generic.long=Ora fuso centrale
-US/Michigan.generic.long=Fuso orientale
-US/Mountain.generic.long=Ora fuso occidentale
-US/Pacific-New.generic.long=Fuso del Pacifico
-US/Pacific.generic.long=Fuso del Pacifico
-US/Samoa.generic.long=Ora Samoa
-UTC.generic.long=Tempo universale coordinato
-Universal.generic.long=Tempo universale coordinato
-VST.generic.long=Ora dell'Indocina
-W-SU.generic.long=Ora Mosca
-WET.generic.long=Ora dell'Europa occidentale
-Zulu.generic.long=Tempo universale coordinato
diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_it_short.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_it_short.properties
deleted file mode 100644
index 095522a..0000000
--- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_it_short.properties
+++ /dev/null
@@ -1,1743 +0,0 @@
-ACT.daylight.short=CST
-ACT.generic.short=CT
-ACT.standard.short=CST
-AET.daylight.short=EST
-AET.generic.short=ET
-AET.standard.short=EST
-Africa/Abidjan.daylight.short=GMT
-Africa/Abidjan.generic.short=GMT
-Africa/Abidjan.standard.short=GMT
-Africa/Accra.daylight.short=GHST
-Africa/Accra.generic.short=GMT
-Africa/Accra.standard.short=GMT
-Africa/Addis_Ababa.daylight.short=EAST
-Africa/Addis_Ababa.generic.short=EAT
-Africa/Addis_Ababa.standard.short=EAT
-Africa/Algiers.daylight.short=CEST
-Africa/Algiers.generic.short=CET
-Africa/Algiers.standard.short=CET
-Africa/Asmara.daylight.short=EAST
-Africa/Asmara.generic.short=EAT
-Africa/Asmara.standard.short=EAT
-Africa/Asmera.daylight.short=EAST
-Africa/Asmera.generic.short=EAT
-Africa/Asmera.standard.short=EAT
-Africa/Bamako.daylight.short=GMT
-Africa/Bamako.generic.short=GMT
-Africa/Bamako.standard.short=GMT
-Africa/Bangui.daylight.short=WAST
-Africa/Bangui.generic.short=WAT
-Africa/Bangui.standard.short=WAT
-Africa/Banjul.daylight.short=GMT
-Africa/Banjul.generic.short=GMT
-Africa/Banjul.standard.short=GMT
-Africa/Bissau.daylight.short=GMT
-Africa/Bissau.generic.short=GMT
-Africa/Bissau.standard.short=GMT
-Africa/Blantyre.daylight.short=CAST
-Africa/Blantyre.generic.short=CAT
-Africa/Blantyre.standard.short=CAT
-Africa/Brazzaville.daylight.short=WAST
-Africa/Brazzaville.generic.short=WAT
-Africa/Brazzaville.standard.short=WAT
-Africa/Bujumbura.daylight.short=CAST
-Africa/Bujumbura.generic.short=CAT
-Africa/Bujumbura.standard.short=CAT
-Africa/Cairo.daylight.short=EEST
-Africa/Cairo.generic.short=EET
-Africa/Cairo.standard.short=EET
-Africa/Casablanca.daylight.short=WEST
-Africa/Casablanca.generic.short=WET
-Africa/Casablanca.standard.short=WET
-Africa/Ceuta.daylight.short=CEST
-Africa/Ceuta.generic.short=CET
-Africa/Ceuta.standard.short=CET
-Africa/Conakry.daylight.short=GMT
-Africa/Conakry.generic.short=GMT
-Africa/Conakry.standard.short=GMT
-Africa/Dakar.daylight.short=GMT
-Africa/Dakar.generic.short=GMT
-Africa/Dakar.standard.short=GMT
-Africa/Dar_es_Salaam.daylight.short=EAST
-Africa/Dar_es_Salaam.generic.short=EAT
-Africa/Dar_es_Salaam.standard.short=EAT
-Africa/Djibouti.daylight.short=EAST
-Africa/Djibouti.generic.short=EAT
-Africa/Djibouti.standard.short=EAT
-Africa/Douala.daylight.short=WAST
-Africa/Douala.generic.short=WAT
-Africa/Douala.standard.short=WAT
-Africa/El_Aaiun.daylight.short=WEST
-Africa/El_Aaiun.generic.short=WET
-Africa/El_Aaiun.standard.short=WET
-Africa/Freetown.daylight.short=SLST
-Africa/Freetown.generic.short=SLT
-Africa/Freetown.standard.short=GMT
-Africa/Gaborone.daylight.short=CAST
-Africa/Gaborone.generic.short=CAT
-Africa/Gaborone.standard.short=CAT
-Africa/Harare.daylight.short=CAST
-Africa/Harare.generic.short=CAT
-Africa/Harare.standard.short=CAT
-Africa/Johannesburg.daylight.short=SAST
-Africa/Johannesburg.generic.short=SAT
-Africa/Johannesburg.standard.short=SAST
-Africa/Juba.daylight.short=EAST
-Africa/Juba.generic.short=EAT
-Africa/Juba.standard.short=EAT
-Africa/Kampala.daylight.short=EAST
-Africa/Kampala.generic.short=EAT
-Africa/Kampala.standard.short=EAT
-Africa/Khartoum.daylight.short=EAST
-Africa/Khartoum.generic.short=EAT
-Africa/Khartoum.standard.short=EAT
-Africa/Kigali.daylight.short=CAST
-Africa/Kigali.generic.short=CAT
-Africa/Kigali.standard.short=CAT
-Africa/Kinshasa.daylight.short=WAST
-Africa/Kinshasa.generic.short=WAT
-Africa/Kinshasa.standard.short=WAT
-Africa/Lagos.daylight.short=WAST
-Africa/Lagos.generic.short=WAT
-Africa/Lagos.standard.short=WAT
-Africa/Libreville.daylight.short=WAST
-Africa/Libreville.generic.short=WAT
-Africa/Libreville.standard.short=WAT
-Africa/Lome.daylight.short=GMT
-Africa/Lome.generic.short=GMT
-Africa/Lome.standard.short=GMT
-Africa/Luanda.daylight.short=WAST
-Africa/Luanda.generic.short=WAT
-Africa/Luanda.standard.short=WAT
-Africa/Lubumbashi.daylight.short=CAST
-Africa/Lubumbashi.generic.short=CAT
-Africa/Lubumbashi.standard.short=CAT
-Africa/Lusaka.daylight.short=CAST
-Africa/Lusaka.generic.short=CAT
-Africa/Lusaka.standard.short=CAT
-Africa/Malabo.daylight.short=WAST
-Africa/Malabo.generic.short=WAT
-Africa/Malabo.standard.short=WAT
-Africa/Maputo.daylight.short=CAST
-Africa/Maputo.generic.short=CAT
-Africa/Maputo.standard.short=CAT
-Africa/Maseru.daylight.short=SAST
-Africa/Maseru.generic.short=SAT
-Africa/Maseru.standard.short=SAST
-Africa/Mbabane.daylight.short=SAST
-Africa/Mbabane.generic.short=SAT
-Africa/Mbabane.standard.short=SAST
-Africa/Mogadishu.daylight.short=EAST
-Africa/Mogadishu.generic.short=EAT
-Africa/Mogadishu.standard.short=EAT
-Africa/Monrovia.daylight.short=GMT
-Africa/Monrovia.generic.short=GMT
-Africa/Monrovia.standard.short=GMT
-Africa/Nairobi.daylight.short=EAST
-Africa/Nairobi.generic.short=EAT
-Africa/Nairobi.standard.short=EAT
-Africa/Ndjamena.daylight.short=WAST
-Africa/Ndjamena.generic.short=WAT
-Africa/Ndjamena.standard.short=WAT
-Africa/Niamey.daylight.short=WAST
-Africa/Niamey.generic.short=WAT
-Africa/Niamey.standard.short=WAT
-Africa/Nouakchott.daylight.short=GMT
-Africa/Nouakchott.generic.short=GMT
-Africa/Nouakchott.standard.short=GMT
-Africa/Ouagadougou.daylight.short=GMT
-Africa/Ouagadougou.generic.short=GMT
-Africa/Ouagadougou.standard.short=GMT
-Africa/Porto-Novo.daylight.short=WAST
-Africa/Porto-Novo.generic.short=WAT
-Africa/Porto-Novo.standard.short=WAT
-Africa/Sao_Tome.daylight.short=GMT
-Africa/Sao_Tome.generic.short=GMT
-Africa/Sao_Tome.standard.short=GMT
-Africa/Timbuktu.daylight.short=GMT
-Africa/Timbuktu.generic.short=GMT
-Africa/Timbuktu.standard.short=GMT
-Africa/Tripoli.daylight.short=EEST
-Africa/Tripoli.generic.short=EET
-Africa/Tripoli.standard.short=EET
-Africa/Tunis.daylight.short=CEST
-Africa/Tunis.generic.short=CET
-Africa/Tunis.standard.short=CET
-Africa/Windhoek.daylight.short=WAST
-Africa/Windhoek.generic.short=WAT
-Africa/Windhoek.standard.short=WAT
-AGT.daylight.short=ARST
-AGT.generic.short=ART
-AGT.standard.short=ART
-America/Adak.daylight.short=HADT
-America/Adak.generic.short=HAT
-America/Adak.standard.short=HAST
-America/Anchorage.daylight.short=AKDT
-America/Anchorage.generic.short=AKT
-America/Anchorage.standard.short=AKST
-America/Anguilla.daylight.short=ADT
-America/Anguilla.generic.short=AT
-America/Anguilla.standard.short=AST
-America/Antigua.daylight.short=ADT
-America/Antigua.generic.short=AT
-America/Antigua.standard.short=AST
-America/Araguaina.daylight.short=BRST
-America/Araguaina.generic.short=BRT
-America/Araguaina.standard.short=BRT
-America/Argentina/Buenos_Aires.daylight.short=ARST
-America/Argentina/Buenos_Aires.generic.short=ART
-America/Argentina/Buenos_Aires.standard.short=ART
-America/Argentina/Catamarca.daylight.short=ARST
-America/Argentina/Catamarca.generic.short=ART
-America/Argentina/Catamarca.standard.short=ART
-America/Argentina/ComodRivadavia.daylight.short=ARST
-America/Argentina/ComodRivadavia.generic.short=ART
-America/Argentina/ComodRivadavia.standard.short=ART
-America/Argentina/Cordoba.daylight.short=ARST
-America/Argentina/Cordoba.generic.short=ART
-America/Argentina/Cordoba.standard.short=ART
-America/Argentina/Jujuy.daylight.short=ARST
-America/Argentina/Jujuy.generic.short=ART
-America/Argentina/Jujuy.standard.short=ART
-America/Argentina/La_Rioja.daylight.short=ARST
-America/Argentina/La_Rioja.generic.short=ART
-America/Argentina/La_Rioja.standard.short=ART
-America/Argentina/Mendoza.daylight.short=ARST
-America/Argentina/Mendoza.generic.short=ART
-America/Argentina/Mendoza.standard.short=ART
-America/Argentina/Rio_Gallegos.daylight.short=ARST
-America/Argentina/Rio_Gallegos.generic.short=ART
-America/Argentina/Rio_Gallegos.standard.short=ART
-America/Argentina/Salta.daylight.short=ARST
-America/Argentina/Salta.generic.short=ART
-America/Argentina/Salta.standard.short=ART
-America/Argentina/San_Juan.daylight.short=ARST
-America/Argentina/San_Juan.generic.short=ART
-America/Argentina/San_Juan.standard.short=ART
-America/Argentina/San_Luis.daylight.short=ARST
-America/Argentina/San_Luis.generic.short=ART
-America/Argentina/San_Luis.standard.short=ART
-America/Argentina/Tucuman.daylight.short=ARST
-America/Argentina/Tucuman.generic.short=ART
-America/Argentina/Tucuman.standard.short=ART
-America/Argentina/Ushuaia.daylight.short=ARST
-America/Argentina/Ushuaia.generic.short=ART
-America/Argentina/Ushuaia.standard.short=ART
-America/Aruba.daylight.short=ADT
-America/Aruba.generic.short=AT
-America/Aruba.standard.short=AST
-America/Asuncion.daylight.short=PYST
-America/Asuncion.generic.short=PYT
-America/Asuncion.standard.short=PYT
-America/Atikokan.daylight.short=EDT
-America/Atikokan.generic.short=ET
-America/Atikokan.standard.short=EST
-America/Atka.daylight.short=HADT
-America/Atka.generic.short=HAT
-America/Atka.standard.short=HAST
-America/Bahia_Banderas.daylight.short=CDT
-America/Bahia_Banderas.generic.short=CT
-America/Bahia_Banderas.standard.short=CST
-America/Bahia.daylight.short=BRST
-America/Bahia.generic.short=BRT
-America/Bahia.standard.short=BRT
-America/Barbados.daylight.short=ADT
-America/Barbados.generic.short=AT
-America/Barbados.standard.short=AST
-America/Belem.daylight.short=BRST
-America/Belem.generic.short=BRT
-America/Belem.standard.short=BRT
-America/Belize.daylight.short=CDT
-America/Belize.generic.short=CT
-America/Belize.standard.short=CST
-America/Blanc-Sablon.daylight.short=ADT
-America/Blanc-Sablon.generic.short=AT
-America/Blanc-Sablon.standard.short=AST
-America/Boa_Vista.daylight.short=AMST
-America/Boa_Vista.generic.short=AMT
-America/Boa_Vista.standard.short=AMT
-America/Bogota.daylight.short=COST
-America/Bogota.generic.short=COT
-America/Bogota.standard.short=COT
-America/Boise.daylight.short=MDT
-America/Boise.generic.short=MT
-America/Boise.standard.short=MST
-America/Buenos_Aires.daylight.short=ARST
-America/Buenos_Aires.generic.short=ART
-America/Buenos_Aires.standard.short=ART
-America/Cambridge_Bay.daylight.short=MDT
-America/Cambridge_Bay.generic.short=MT
-America/Cambridge_Bay.standard.short=MST
-America/Campo_Grande.daylight.short=AMST
-America/Campo_Grande.generic.short=AMT
-America/Campo_Grande.standard.short=AMT
-America/Cancun.daylight.short=CDT
-America/Cancun.generic.short=CT
-America/Cancun.standard.short=CST
-America/Caracas.daylight.short=VEST
-America/Caracas.generic.short=VET
-America/Caracas.standard.short=VET
-America/Catamarca.daylight.short=ARST
-America/Catamarca.generic.short=ART
-America/Catamarca.standard.short=ART
-America/Cayenne.daylight.short=GFST
-America/Cayenne.generic.short=GFT
-America/Cayenne.standard.short=GFT
-America/Cayman.daylight.short=EDT
-America/Cayman.generic.short=ET
-America/Cayman.standard.short=EST
-America/Chicago.daylight.short=CDT
-America/Chicago.generic.short=CT
-America/Chicago.standard.short=CST
-America/Chihuahua.daylight.short=MDT
-America/Chihuahua.generic.short=MT
-America/Chihuahua.standard.short=MST
-America/Coral_Harbour.daylight.short=EDT
-America/Coral_Harbour.generic.short=ET
-America/Coral_Harbour.standard.short=EST
-America/Cordoba.daylight.short=ARST
-America/Cordoba.generic.short=ART
-America/Cordoba.standard.short=ART
-America/Costa_Rica.daylight.short=CDT
-America/Costa_Rica.generic.short=CT
-America/Costa_Rica.standard.short=CST
-America/Creston.daylight.short=MDT
-America/Creston.generic.short=MT
-America/Creston.standard.short=MST
-America/Cuiaba.daylight.short=AMST
-America/Cuiaba.generic.short=AMT
-America/Cuiaba.standard.short=AMT
-America/Curacao.daylight.short=ADT
-America/Curacao.generic.short=AT
-America/Curacao.standard.short=AST
-America/Danmarkshavn.daylight.short=GMT
-America/Danmarkshavn.generic.short=GMT
-America/Danmarkshavn.standard.short=GMT
-America/Dawson_Creek.daylight.short=MDT
-America/Dawson_Creek.generic.short=MT
-America/Dawson_Creek.standard.short=MST
-America/Dawson.daylight.short=PDT
-America/Dawson.generic.short=PT
-America/Dawson.standard.short=PST
-America/Denver.daylight.short=MDT
-America/Denver.generic.short=MT
-America/Denver.standard.short=MST
-America/Detroit.daylight.short=EDT
-America/Detroit.generic.short=ET
-America/Detroit.standard.short=EST
-America/Dominica.daylight.short=ADT
-America/Dominica.generic.short=AT
-America/Dominica.standard.short=AST
-America/Edmonton.daylight.short=MDT
-America/Edmonton.generic.short=MT
-America/Edmonton.standard.short=MST
-America/Eirunepe.daylight.short=ACST
-America/Eirunepe.generic.short=ACT
-America/Eirunepe.standard.short=ACT
-America/El_Salvador.daylight.short=CDT
-America/El_Salvador.generic.short=CT
-America/El_Salvador.standard.short=CST
-America/Ensenada.daylight.short=PDT
-America/Ensenada.generic.short=PT
-America/Ensenada.standard.short=PST
-America/Fortaleza.daylight.short=BRST
-America/Fortaleza.generic.short=BRT
-America/Fortaleza.standard.short=BRT
-America/Fort_Wayne.daylight.short=EDT
-America/Fort_Wayne.generic.short=ET
-America/Fort_Wayne.standard.short=EST
-America/Glace_Bay.daylight.short=ADT
-America/Glace_Bay.generic.short=AT
-America/Glace_Bay.standard.short=AST
-America/Godthab.daylight.short=WGST
-America/Godthab.generic.short=WGT
-America/Godthab.standard.short=WGT
-America/Goose_Bay.daylight.short=ADT
-America/Goose_Bay.generic.short=AT
-America/Goose_Bay.standard.short=AST
-America/Grand_Turk.daylight.short=EDT
-America/Grand_Turk.generic.short=ET
-America/Grand_Turk.standard.short=EST
-America/Grenada.daylight.short=ADT
-America/Grenada.generic.short=AT
-America/Grenada.standard.short=AST
-America/Guadeloupe.daylight.short=ADT
-America/Guadeloupe.generic.short=AT
-America/Guadeloupe.standard.short=AST
-America/Guatemala.daylight.short=CDT
-America/Guatemala.generic.short=CT
-America/Guatemala.standard.short=CST
-America/Guayaquil.daylight.short=ECST
-America/Guayaquil.generic.short=ECT
-America/Guayaquil.standard.short=ECT
-America/Guyana.daylight.short=GYST
-America/Guyana.generic.short=GYT
-America/Guyana.standard.short=GYT
-America/Halifax.daylight.short=ADT
-America/Halifax.generic.short=AT
-America/Halifax.standard.short=AST
-America/Havana.daylight.short=CDT
-America/Havana.generic.short=CT
-America/Havana.standard.short=CST
-America/Hermosillo.daylight.short=MDT
-America/Hermosillo.generic.short=MT
-America/Hermosillo.standard.short=MST
-America/Indiana/Indianapolis.daylight.short=EDT
-America/Indiana/Indianapolis.generic.short=ET
-America/Indiana/Indianapolis.standard.short=EST
-America/Indiana/Knox.daylight.short=CDT
-America/Indiana/Knox.generic.short=CT
-America/Indiana/Knox.standard.short=CST
-America/Indiana/Marengo.daylight.short=EDT
-America/Indiana/Marengo.generic.short=ET
-America/Indiana/Marengo.standard.short=EST
-America/Indiana/Petersburg.daylight.short=EDT
-America/Indiana/Petersburg.generic.short=ET
-America/Indiana/Petersburg.standard.short=EST
-America/Indianapolis.daylight.short=EDT
-America/Indianapolis.generic.short=ET
-America/Indianapolis.standard.short=EST
-America/Indiana/Tell_City.daylight.short=CDT
-America/Indiana/Tell_City.generic.short=CT
-America/Indiana/Tell_City.standard.short=CST
-America/Indiana/Vevay.daylight.short=EDT
-America/Indiana/Vevay.generic.short=ET
-America/Indiana/Vevay.standard.short=EST
-America/Indiana/Vincennes.daylight.short=EDT
-America/Indiana/Vincennes.generic.short=ET
-America/Indiana/Vincennes.standard.short=EST
-America/Indiana/Winamac.daylight.short=EDT
-America/Indiana/Winamac.generic.short=ET
-America/Indiana/Winamac.standard.short=EST
-America/Inuvik.daylight.short=MDT
-America/Inuvik.generic.short=MT
-America/Inuvik.standard.short=MST
-America/Iqaluit.daylight.short=EDT
-America/Iqaluit.generic.short=ET
-America/Iqaluit.standard.short=EST
-America/Jamaica.daylight.short=EDT
-America/Jamaica.generic.short=ET
-America/Jamaica.standard.short=EST
-America/Jujuy.daylight.short=ARST
-America/Jujuy.generic.short=ART
-America/Jujuy.standard.short=ART
-America/Juneau.daylight.short=AKDT
-America/Juneau.generic.short=AKT
-America/Juneau.standard.short=AKST
-America/Kentucky/Louisville.daylight.short=EDT
-America/Kentucky/Louisville.generic.short=ET
-America/Kentucky/Louisville.standard.short=EST
-America/Kentucky/Monticello.daylight.short=EDT
-America/Kentucky/Monticello.generic.short=ET
-America/Kentucky/Monticello.standard.short=EST
-America/Knox_IN.daylight.short=CDT
-America/Knox_IN.generic.short=CT
-America/Knox_IN.standard.short=CST
-America/Kralendijk.daylight.short=ADT
-America/Kralendijk.generic.short=AT
-America/Kralendijk.standard.short=AST
-America/La_Paz.daylight.short=BOST
-America/La_Paz.generic.short=BOT
-America/La_Paz.standard.short=BOT
-America/Lima.daylight.short=PEST
-America/Lima.generic.short=PET
-America/Lima.standard.short=PET
-America/Los_Angeles.daylight.short=PDT
-America/Los_Angeles.generic.short=PT
-America/Los_Angeles.standard.short=PST
-America/Louisville.daylight.short=EDT
-America/Louisville.generic.short=ET
-America/Louisville.standard.short=EST
-America/Lower_Princes.daylight.short=ADT
-America/Lower_Princes.generic.short=AT
-America/Lower_Princes.standard.short=AST
-America/Maceio.daylight.short=BRST
-America/Maceio.generic.short=BRT
-America/Maceio.standard.short=BRT
-America/Managua.daylight.short=CDT
-America/Managua.generic.short=CT
-America/Managua.standard.short=CST
-America/Manaus.daylight.short=AMST
-America/Manaus.generic.short=AMT
-America/Manaus.standard.short=AMT
-America/Marigot.daylight.short=ADT
-America/Marigot.generic.short=AT
-America/Marigot.standard.short=AST
-America/Martinique.daylight.short=ADT
-America/Martinique.generic.short=AT
-America/Martinique.standard.short=AST
-America/Matamoros.daylight.short=CDT
-America/Matamoros.generic.short=CT
-America/Matamoros.standard.short=CST
-America/Mazatlan.daylight.short=MDT
-America/Mazatlan.generic.short=MT
-America/Mazatlan.standard.short=MST
-America/Mendoza.daylight.short=ARST
-America/Mendoza.generic.short=ART
-America/Mendoza.standard.short=ART
-America/Menominee.daylight.short=CDT
-America/Menominee.generic.short=CT
-America/Menominee.standard.short=CST
-America/Merida.daylight.short=CDT
-America/Merida.generic.short=CT
-America/Merida.standard.short=CST
-America/Metlakatla.daylight.short=MeDT
-America/Metlakatla.generic.short=MeT
-America/Metlakatla.standard.short=MeST
-America/Mexico_City.daylight.short=CDT
-America/Mexico_City.generic.short=CT
-America/Mexico_City.standard.short=CST
-America/Miquelon.daylight.short=PMDT
-America/Miquelon.generic.short=PMT
-America/Miquelon.standard.short=PMST
-America/Moncton.daylight.short=ADT
-America/Moncton.generic.short=AT
-America/Moncton.standard.short=AST
-America/Monterrey.daylight.short=CDT
-America/Monterrey.generic.short=CT
-America/Monterrey.standard.short=CST
-America/Montevideo.daylight.short=UYST
-America/Montevideo.generic.short=UYT
-America/Montevideo.standard.short=UYT
-America/Montreal.daylight.short=EDT
-America/Montreal.generic.short=ET
-America/Montreal.standard.short=EST
-America/Montserrat.daylight.short=ADT
-America/Montserrat.generic.short=AT
-America/Montserrat.standard.short=AST
-America/Nassau.daylight.short=EDT
-America/Nassau.generic.short=ET
-America/Nassau.standard.short=EST
-America/New_York.daylight.short=EDT
-America/New_York.generic.short=ET
-America/New_York.standard.short=EST
-America/Nipigon.daylight.short=EDT
-America/Nipigon.generic.short=ET
-America/Nipigon.standard.short=EST
-America/Nome.daylight.short=AKDT
-America/Nome.generic.short=AKT
-America/Nome.standard.short=AKST
-America/Noronha.daylight.short=FNST
-America/Noronha.generic.short=FNT
-America/Noronha.standard.short=FNT
-America/North_Dakota/Beulah.daylight.short=CDT
-America/North_Dakota/Beulah.generic.short=CT
-America/North_Dakota/Beulah.standard.short=CST
-America/North_Dakota/Center.daylight.short=CDT
-America/North_Dakota/Center.generic.short=CT
-America/North_Dakota/Center.standard.short=CST
-America/North_Dakota/New_Salem.daylight.short=CDT
-America/North_Dakota/New_Salem.generic.short=CT
-America/North_Dakota/New_Salem.standard.short=CST
-America/Ojinaga.daylight.short=MDT
-America/Ojinaga.generic.short=MT
-America/Ojinaga.standard.short=MST
-America/Panama.daylight.short=EDT
-America/Panama.generic.short=ET
-America/Panama.standard.short=EST
-America/Pangnirtung.daylight.short=EDT
-America/Pangnirtung.generic.short=ET
-America/Pangnirtung.standard.short=EST
-America/Paramaribo.daylight.short=SRST
-America/Paramaribo.generic.short=SRT
-America/Paramaribo.standard.short=SRT
-America/Phoenix.daylight.short=MDT
-America/Phoenix.generic.short=MT
-America/Phoenix.standard.short=MST
-America/Port-au-Prince.daylight.short=EDT
-America/Port-au-Prince.generic.short=ET
-America/Port-au-Prince.standard.short=EST
-America/Porto_Acre.daylight.short=ACST
-America/Porto_Acre.generic.short=ACT
-America/Porto_Acre.standard.short=ACT
-America/Port_of_Spain.daylight.short=ADT
-America/Port_of_Spain.generic.short=AT
-America/Port_of_Spain.standard.short=AST
-America/Porto_Velho.daylight.short=AMST
-America/Porto_Velho.generic.short=AMT
-America/Porto_Velho.standard.short=AMT
-America/Puerto_Rico.daylight.short=ADT
-America/Puerto_Rico.generic.short=AT
-America/Puerto_Rico.standard.short=AST
-America/Rainy_River.daylight.short=CDT
-America/Rainy_River.generic.short=CT
-America/Rainy_River.standard.short=CST
-America/Rankin_Inlet.daylight.short=CDT
-America/Rankin_Inlet.generic.short=CT
-America/Rankin_Inlet.standard.short=CST
-America/Recife.daylight.short=BRST
-America/Recife.generic.short=BRT
-America/Recife.standard.short=BRT
-America/Regina.daylight.short=CDT
-America/Regina.generic.short=CT
-America/Regina.standard.short=CST
-America/Resolute.daylight.short=CDT
-America/Resolute.generic.short=CT
-America/Resolute.standard.short=CST
-America/Rio_Branco.daylight.short=ACST
-America/Rio_Branco.generic.short=ACT
-America/Rio_Branco.standard.short=ACT
-America/Rosario.daylight.short=ARST
-America/Rosario.generic.short=ART
-America/Rosario.standard.short=ART
-America/Santa_Isabel.daylight.short=PDT
-America/Santa_Isabel.generic.short=PT
-America/Santa_Isabel.standard.short=PST
-America/Santarem.daylight.short=BRST
-America/Santarem.generic.short=BRT
-America/Santarem.standard.short=BRT
-America/Santiago.daylight.short=CLST
-America/Santiago.generic.short=CLT
-America/Santiago.standard.short=CLT
-America/Santo_Domingo.daylight.short=ADT
-America/Santo_Domingo.generic.short=AT
-America/Santo_Domingo.standard.short=AST
-America/Sao_Paulo.daylight.short=BRST
-America/Sao_Paulo.generic.short=BRT
-America/Sao_Paulo.standard.short=BRT
-America/Scoresbysund.daylight.short=EGST
-America/Scoresbysund.generic.short=EGT
-America/Scoresbysund.standard.short=EGT
-America/Shiprock.daylight.short=MDT
-America/Shiprock.generic.short=MT
-America/Shiprock.standard.short=MST
-America/Sitka.daylight.short=AKDT
-America/Sitka.generic.short=AKT
-America/Sitka.standard.short=AKST
-America/St_Barthelemy.daylight.short=ADT
-America/St_Barthelemy.generic.short=AT
-America/St_Barthelemy.standard.short=AST
-America/St_Johns.daylight.short=NDT
-America/St_Johns.generic.short=NT
-America/St_Johns.standard.short=NST
-America/St_Kitts.daylight.short=ADT
-America/St_Kitts.generic.short=AT
-America/St_Kitts.standard.short=AST
-America/St_Lucia.daylight.short=ADT
-America/St_Lucia.generic.short=AT
-America/St_Lucia.standard.short=AST
-America/St_Thomas.daylight.short=ADT
-America/St_Thomas.generic.short=AT
-America/St_Thomas.standard.short=AST
-America/St_Vincent.daylight.short=ADT
-America/St_Vincent.generic.short=AT
-America/St_Vincent.standard.short=AST
-America/Swift_Current.daylight.short=CDT
-America/Swift_Current.generic.short=CT
-America/Swift_Current.standard.short=CST
-America/Tegucigalpa.daylight.short=CDT
-America/Tegucigalpa.generic.short=CT
-America/Tegucigalpa.standard.short=CST
-America/Thule.daylight.short=ADT
-America/Thule.generic.short=AT
-America/Thule.standard.short=AST
-America/Thunder_Bay.daylight.short=EDT
-America/Thunder_Bay.generic.short=ET
-America/Thunder_Bay.standard.short=EST
-America/Tijuana.daylight.short=PDT
-America/Tijuana.generic.short=PT
-America/Tijuana.standard.short=PST
-America/Toronto.daylight.short=EDT
-America/Toronto.generic.short=ET
-America/Toronto.standard.short=EST
-America/Tortola.daylight.short=ADT
-America/Tortola.generic.short=AT
-America/Tortola.standard.short=AST
-America/Vancouver.daylight.short=PDT
-America/Vancouver.generic.short=PT
-America/Vancouver.standard.short=PST
-America/Virgin.daylight.short=ADT
-America/Virgin.generic.short=AT
-America/Virgin.standard.short=AST
-America/Whitehorse.daylight.short=PDT
-America/Whitehorse.generic.short=PT
-America/Whitehorse.standard.short=PST
-America/Winnipeg.daylight.short=CDT
-America/Winnipeg.generic.short=CT
-America/Winnipeg.standard.short=CST
-America/Yakutat.daylight.short=AKDT
-America/Yakutat.generic.short=AKT
-America/Yakutat.standard.short=AKST
-America/Yellowknife.daylight.short=MDT
-America/Yellowknife.generic.short=MT
-America/Yellowknife.standard.short=MST
-Antarctica/Casey.daylight.short=WST
-Antarctica/Casey.generic.short=WT
-Antarctica/Casey.standard.short=WST
-Antarctica/Davis.daylight.short=DAVST
-Antarctica/Davis.generic.short=DAVT
-Antarctica/Davis.standard.short=DAVT
-Antarctica/DumontDUrville.daylight.short=DDUST
-Antarctica/DumontDUrville.generic.short=DDUT
-Antarctica/DumontDUrville.standard.short=DDUT
-Antarctica/Macquarie.daylight.short=MIST
-Antarctica/Macquarie.generic.short=MIST
-Antarctica/Macquarie.standard.short=MIST
-Antarctica/Mawson.daylight.short=MAWST
-Antarctica/Mawson.generic.short=MAWT
-Antarctica/Mawson.standard.short=MAWT
-Antarctica/McMurdo.daylight.short=NZDT
-Antarctica/McMurdo.generic.short=NZT
-Antarctica/McMurdo.standard.short=NZST
-Antarctica/Palmer.daylight.short=CLST
-Antarctica/Palmer.generic.short=CLT
-Antarctica/Palmer.standard.short=CLT
-Antarctica/Rothera.daylight.short=ROTST
-Antarctica/Rothera.generic.short=ROTT
-Antarctica/Rothera.standard.short=ROTT
-Antarctica/South_Pole.daylight.short=NZDT
-Antarctica/South_Pole.generic.short=NZT
-Antarctica/South_Pole.standard.short=NZST
-Antarctica/Syowa.daylight.short=SYOST
-Antarctica/Syowa.generic.short=SYOT
-Antarctica/Syowa.standard.short=SYOT
-Antarctica/Vostok.daylight.short=VOSST
-Antarctica/Vostok.generic.short=VOST
-Antarctica/Vostok.standard.short=VOST
-Arctic/Longyearbyen.daylight.short=CEST
-Arctic/Longyearbyen.generic.short=CET
-Arctic/Longyearbyen.standard.short=CET
-ART.daylight.short=EEST
-ART.generic.short=EET
-ART.standard.short=EET
-Asia/Aden.daylight.short=ADT
-Asia/Aden.generic.short=AT
-Asia/Aden.standard.short=AST
-Asia/Almaty.daylight.short=ALMST
-Asia/Almaty.generic.short=ALMT
-Asia/Almaty.standard.short=ALMT
-Asia/Amman.daylight.short=ADT
-Asia/Amman.generic.short=AT
-Asia/Amman.standard.short=AST
-Asia/Anadyr.daylight.short=ANAST
-Asia/Anadyr.generic.short=ANAT
-Asia/Anadyr.standard.short=ANAT
-Asia/Aqtau.daylight.short=AQTST
-Asia/Aqtau.generic.short=AQTT
-Asia/Aqtau.standard.short=AQTT
-Asia/Aqtobe.daylight.short=AQTST
-Asia/Aqtobe.generic.short=AQTT
-Asia/Aqtobe.standard.short=AQTT
-Asia/Ashgabat.daylight.short=TMST
-Asia/Ashgabat.generic.short=TMT
-Asia/Ashgabat.standard.short=TMT
-Asia/Ashkhabad.daylight.short=TMST
-Asia/Ashkhabad.generic.short=TMT
-Asia/Ashkhabad.standard.short=TMT
-Asia/Baghdad.daylight.short=ADT
-Asia/Baghdad.generic.short=AT
-Asia/Baghdad.standard.short=AST
-Asia/Bahrain.daylight.short=ADT
-Asia/Bahrain.generic.short=AT
-Asia/Bahrain.standard.short=AST
-Asia/Baku.daylight.short=AZST
-Asia/Baku.generic.short=AZT
-Asia/Baku.standard.short=AZT
-Asia/Bangkok.daylight.short=ICST
-Asia/Bangkok.generic.short=ICT
-Asia/Bangkok.standard.short=ICT
-Asia/Beirut.daylight.short=EEST
-Asia/Beirut.generic.short=EET
-Asia/Beirut.standard.short=EET
-Asia/Bishkek.daylight.short=KGST
-Asia/Bishkek.generic.short=KGT
-Asia/Bishkek.standard.short=KGT
-Asia/Brunei.daylight.short=BNST
-Asia/Brunei.generic.short=BNT
-Asia/Brunei.standard.short=BNT
-Asia/Calcutta.daylight.short=IDT
-Asia/Calcutta.generic.short=IT
-Asia/Calcutta.standard.short=IST
-Asia/Choibalsan.daylight.short=CHOST
-Asia/Choibalsan.generic.short=CHOT
-Asia/Choibalsan.standard.short=CHOT
-Asia/Chongqing.daylight.short=CDT
-Asia/Chongqing.generic.short=CT
-Asia/Chongqing.standard.short=CST
-Asia/Chungking.daylight.short=CDT
-Asia/Chungking.generic.short=CT
-Asia/Chungking.standard.short=CST
-Asia/Colombo.daylight.short=IDT
-Asia/Colombo.generic.short=IT
-Asia/Colombo.standard.short=IST
-Asia/Dacca.daylight.short=BDST
-Asia/Dacca.generic.short=BDT
-Asia/Dacca.standard.short=BDT
-Asia/Damascus.daylight.short=EEST
-Asia/Damascus.generic.short=EET
-Asia/Damascus.standard.short=EET
-Asia/Dhaka.daylight.short=BDST
-Asia/Dhaka.generic.short=BDT
-Asia/Dhaka.standard.short=BDT
-Asia/Dili.daylight.short=TLST
-Asia/Dili.generic.short=TLT
-Asia/Dili.standard.short=TLT
-Asia/Dubai.daylight.short=GDT
-Asia/Dubai.generic.short=GT
-Asia/Dubai.standard.short=GST
-Asia/Dushanbe.daylight.short=TJST
-Asia/Dushanbe.generic.short=TJT
-Asia/Dushanbe.standard.short=TJT
-Asia/Gaza.daylight.short=EEST
-Asia/Gaza.generic.short=EET
-Asia/Gaza.standard.short=EET
-Asia/Harbin.daylight.short=CDT
-Asia/Harbin.generic.short=CT
-Asia/Harbin.standard.short=CST
-Asia/Hebron.daylight.short=EEST
-Asia/Hebron.generic.short=EET
-Asia/Hebron.standard.short=EET
-Asia/Ho_Chi_Minh.daylight.short=ICST
-Asia/Ho_Chi_Minh.generic.short=ICT
-Asia/Ho_Chi_Minh.standard.short=ICT
-Asia/Hong_Kong.daylight.short=HKST
-Asia/Hong_Kong.generic.short=HKT
-Asia/Hong_Kong.standard.short=HKT
-Asia/Hovd.daylight.short=HOVST
-Asia/Hovd.generic.short=HOVT
-Asia/Hovd.standard.short=HOVT
-Asia/Irkutsk.daylight.short=IRKST
-Asia/Irkutsk.generic.short=IRKT
-Asia/Irkutsk.standard.short=IRKT
-Asia/Istanbul.daylight.short=EEST
-Asia/Istanbul.generic.short=EET
-Asia/Istanbul.standard.short=EET
-Asia/Jakarta.daylight.short=WIST
-Asia/Jakarta.generic.short=WIB
-Asia/Jakarta.standard.short=WIB
-Asia/Jayapura.daylight.short=EIST
-Asia/Jayapura.generic.short=WIT
-Asia/Jayapura.standard.short=WIT
-Asia/Jerusalem.daylight.short=IDT
-Asia/Jerusalem.generic.short=IT
-Asia/Jerusalem.standard.short=IST
-Asia/Kabul.daylight.short=AFST
-Asia/Kabul.generic.short=AFT
-Asia/Kabul.standard.short=AFT
-Asia/Kamchatka.daylight.short=PETST
-Asia/Kamchatka.generic.short=PETT
-Asia/Kamchatka.standard.short=PETT
-Asia/Karachi.daylight.short=PKST
-Asia/Karachi.generic.short=PKT
-Asia/Karachi.standard.short=PKT
-Asia/Kashgar.daylight.short=CDT
-Asia/Kashgar.generic.short=CT
-Asia/Kashgar.standard.short=CST
-Asia/Kathmandu.daylight.short=NPST
-Asia/Kathmandu.generic.short=NPT
-Asia/Kathmandu.standard.short=NPT
-Asia/Katmandu.daylight.short=NPST
-Asia/Katmandu.generic.short=NPT
-Asia/Katmandu.standard.short=NPT
-Asia/Khandyga.daylight.short=YAKST
-Asia/Khandyga.generic.short=YAKT
-Asia/Khandyga.standard.short=YAKT
-Asia/Kolkata.daylight.short=IDT
-Asia/Kolkata.generic.short=IT
-Asia/Kolkata.standard.short=IST
-Asia/Krasnoyarsk.daylight.short=KRAST
-Asia/Krasnoyarsk.generic.short=KRAT
-Asia/Krasnoyarsk.standard.short=KRAT
-Asia/Kuala_Lumpur.daylight.short=MYST
-Asia/Kuala_Lumpur.generic.short=MYT
-Asia/Kuala_Lumpur.standard.short=MYT
-Asia/Kuching.daylight.short=MYST
-Asia/Kuching.generic.short=MYT
-Asia/Kuching.standard.short=MYT
-Asia/Kuwait.daylight.short=ADT
-Asia/Kuwait.generic.short=AT
-Asia/Kuwait.standard.short=AST
-Asia/Macao.daylight.short=CDT
-Asia/Macao.generic.short=CT
-Asia/Macao.standard.short=CST
-Asia/Macau.daylight.short=CDT
-Asia/Macau.generic.short=CT
-Asia/Macau.standard.short=CST
-Asia/Magadan.daylight.short=MAGST
-Asia/Magadan.generic.short=MAGT
-Asia/Magadan.standard.short=MAGT
-Asia/Makassar.daylight.short=CIST
-Asia/Makassar.generic.short=WITA
-Asia/Makassar.standard.short=WITA
-Asia/Manila.daylight.short=PHST
-Asia/Manila.generic.short=PHT
-Asia/Manila.standard.short=PHT
-Asia/Muscat.daylight.short=GDT
-Asia/Muscat.generic.short=GT
-Asia/Muscat.standard.short=GST
-Asia/Nicosia.daylight.short=EEST
-Asia/Nicosia.generic.short=EET
-Asia/Nicosia.standard.short=EET
-Asia/Novokuznetsk.daylight.short=NOVST
-Asia/Novokuznetsk.generic.short=NOVT
-Asia/Novokuznetsk.standard.short=NOVT
-Asia/Novosibirsk.daylight.short=NOVST
-Asia/Novosibirsk.generic.short=NOVT
-Asia/Novosibirsk.standard.short=NOVT
-Asia/Omsk.daylight.short=OMSST
-Asia/Omsk.generic.short=OMST
-Asia/Omsk.standard.short=OMST
-Asia/Oral.daylight.short=ORAST
-Asia/Oral.generic.short=ORAT
-Asia/Oral.standard.short=ORAT
-Asia/Phnom_Penh.daylight.short=ICST
-Asia/Phnom_Penh.generic.short=ICT
-Asia/Phnom_Penh.standard.short=ICT
-Asia/Pontianak.daylight.short=WIST
-Asia/Pontianak.generic.short=WIB
-Asia/Pontianak.standard.short=WIB
-Asia/Pyongyang.daylight.short=KDT
-Asia/Pyongyang.generic.short=KT
-Asia/Pyongyang.standard.short=KST
-Asia/Qatar.daylight.short=ADT
-Asia/Qatar.generic.short=AT
-Asia/Qatar.standard.short=AST
-Asia/Qyzylorda.daylight.short=QYZST
-Asia/Qyzylorda.generic.short=QYZT
-Asia/Qyzylorda.standard.short=QYZT
-Asia/Rangoon.daylight.short=MMST
-Asia/Rangoon.generic.short=MMT
-Asia/Rangoon.standard.short=MMT
-Asia/Saigon.daylight.short=ICST
-Asia/Saigon.generic.short=ICT
-Asia/Saigon.standard.short=ICT
-Asia/Sakhalin.daylight.short=SAKST
-Asia/Sakhalin.generic.short=SAKT
-Asia/Sakhalin.standard.short=SAKT
-Asia/Samarkand.daylight.short=UZST
-Asia/Samarkand.generic.short=UZT
-Asia/Samarkand.standard.short=UZT
-Asia/Seoul.daylight.short=KDT
-Asia/Seoul.generic.short=KT
-Asia/Seoul.standard.short=KST
-Asia/Shanghai.daylight.short=CDT
-Asia/Shanghai.generic.short=CT
-Asia/Shanghai.standard.short=CST
-Asia/Singapore.daylight.short=SGST
-Asia/Singapore.generic.short=SGT
-Asia/Singapore.standard.short=SGT
-Asia/Taipei.daylight.short=CDT
-Asia/Taipei.generic.short=CT
-Asia/Taipei.standard.short=CST
-Asia/Tashkent.daylight.short=UZST
-Asia/Tashkent.generic.short=UZT
-Asia/Tashkent.standard.short=UZT
-Asia/Tbilisi.daylight.short=GEST
-Asia/Tbilisi.generic.short=GET
-Asia/Tbilisi.standard.short=GET
-Asia/Tehran.daylight.short=IRDT
-Asia/Tehran.generic.short=IRT
-Asia/Tehran.standard.short=IRST
-Asia/Tel_Aviv.daylight.short=IDT
-Asia/Tel_Aviv.generic.short=IT
-Asia/Tel_Aviv.standard.short=IST
-Asia/Thimbu.daylight.short=BTST
-Asia/Thimbu.generic.short=BTT
-Asia/Thimbu.standard.short=BTT
-Asia/Thimphu.daylight.short=BTST
-Asia/Thimphu.generic.short=BTT
-Asia/Thimphu.standard.short=BTT
-Asia/Tokyo.daylight.short=JDT
-Asia/Tokyo.generic.short=JT
-Asia/Tokyo.standard.short=JST
-Asia/Ujung_Pandang.daylight.short=CIST
-Asia/Ujung_Pandang.generic.short=WITA
-Asia/Ujung_Pandang.standard.short=WITA
-Asia/Ulaanbaatar.daylight.short=ULAST
-Asia/Ulaanbaatar.generic.short=ULAT
-Asia/Ulaanbaatar.standard.short=ULAT
-Asia/Ulan_Bator.daylight.short=ULAST
-Asia/Ulan_Bator.generic.short=ULAT
-Asia/Ulan_Bator.standard.short=ULAT
-Asia/Urumqi.daylight.short=CDT
-Asia/Urumqi.generic.short=CT
-Asia/Urumqi.standard.short=CST
-Asia/Ust-Nera.daylight.short=VLAST
-Asia/Ust-Nera.generic.short=VLAT
-Asia/Ust-Nera.standard.short=VLAT
-Asia/Vientiane.daylight.short=ICST
-Asia/Vientiane.generic.short=ICT
-Asia/Vientiane.standard.short=ICT
-Asia/Vladivostok.daylight.short=VLAST
-Asia/Vladivostok.generic.short=VLAT
-Asia/Vladivostok.standard.short=VLAT
-Asia/Yakutsk.daylight.short=YAKST
-Asia/Yakutsk.generic.short=YAKT
-Asia/Yakutsk.standard.short=YAKT
-Asia/Yekaterinburg.daylight.short=YEKST
-Asia/Yekaterinburg.generic.short=YEKT
-Asia/Yekaterinburg.standard.short=YEKT
-Asia/Yerevan.daylight.short=AMST
-Asia/Yerevan.generic.short=AMT
-Asia/Yerevan.standard.short=AMT
-AST.daylight.short=AKDT
-AST.generic.short=AKT
-AST.standard.short=AKST
-Atlantic/Azores.daylight.short=AZOST
-Atlantic/Azores.generic.short=AZOT
-Atlantic/Azores.standard.short=AZOT
-Atlantic/Bermuda.daylight.short=ADT
-Atlantic/Bermuda.generic.short=AT
-Atlantic/Bermuda.standard.short=AST
-Atlantic/Canary.daylight.short=WEST
-Atlantic/Canary.generic.short=WET
-Atlantic/Canary.standard.short=WET
-Atlantic/Cape_Verde.daylight.short=CVST
-Atlantic/Cape_Verde.generic.short=CVT
-Atlantic/Cape_Verde.standard.short=CVT
-Atlantic/Faeroe.daylight.short=WEST
-Atlantic/Faeroe.generic.short=WET
-Atlantic/Faeroe.standard.short=WET
-Atlantic/Faroe.daylight.short=WEST
-Atlantic/Faroe.generic.short=WET
-Atlantic/Faroe.standard.short=WET
-Atlantic/Jan_Mayen.daylight.short=CEST
-Atlantic/Jan_Mayen.generic.short=CET
-Atlantic/Jan_Mayen.standard.short=CET
-Atlantic/Madeira.daylight.short=WEST
-Atlantic/Madeira.generic.short=WET
-Atlantic/Madeira.standard.short=WET
-Atlantic/Reykjavik.daylight.short=GMT
-Atlantic/Reykjavik.generic.short=GMT
-Atlantic/Reykjavik.standard.short=GMT
-Atlantic/South_Georgia.daylight.short=GDT
-Atlantic/South_Georgia.generic.short=GT
-Atlantic/South_Georgia.standard.short=GST
-Atlantic/Stanley.daylight.short=FKST
-Atlantic/Stanley.generic.short=FKT
-Atlantic/Stanley.standard.short=FKT
-Atlantic/St_Helena.daylight.short=GMT
-Atlantic/St_Helena.generic.short=GMT
-Atlantic/St_Helena.standard.short=GMT
-Australia/ACT.daylight.short=EST
-Australia/ACT.generic.short=ET
-Australia/ACT.standard.short=EST
-Australia/Adelaide.daylight.short=CST
-Australia/Adelaide.generic.short=CT
-Australia/Adelaide.standard.short=CST
-Australia/Brisbane.daylight.short=EST
-Australia/Brisbane.generic.short=ET
-Australia/Brisbane.standard.short=EST
-Australia/Broken_Hill.daylight.short=CST
-Australia/Broken_Hill.generic.short=CT
-Australia/Broken_Hill.standard.short=CST
-Australia/Canberra.daylight.short=EST
-Australia/Canberra.generic.short=ET
-Australia/Canberra.standard.short=EST
-Australia/Currie.daylight.short=EST
-Australia/Currie.generic.short=ET
-Australia/Currie.standard.short=EST
-Australia/Darwin.daylight.short=CST
-Australia/Darwin.generic.short=CT
-Australia/Darwin.standard.short=CST
-Australia/Eucla.daylight.short=CWST
-Australia/Eucla.generic.short=CWT
-Australia/Eucla.standard.short=CWST
-Australia/Hobart.daylight.short=EST
-Australia/Hobart.generic.short=ET
-Australia/Hobart.standard.short=EST
-Australia/LHI.daylight.short=LHST
-Australia/LHI.generic.short=LHT
-Australia/LHI.standard.short=LHST
-Australia/Lindeman.daylight.short=EST
-Australia/Lindeman.generic.short=ET
-Australia/Lindeman.standard.short=EST
-Australia/Lord_Howe.daylight.short=LHST
-Australia/Lord_Howe.generic.short=LHT
-Australia/Lord_Howe.standard.short=LHST
-Australia/Melbourne.daylight.short=EST
-Australia/Melbourne.generic.short=ET
-Australia/Melbourne.standard.short=EST
-Australia/North.daylight.short=CST
-Australia/North.generic.short=CT
-Australia/North.standard.short=CST
-Australia/NSW.daylight.short=EST
-Australia/NSW.generic.short=ET
-Australia/NSW.standard.short=EST
-Australia/Perth.daylight.short=WST
-Australia/Perth.generic.short=WT
-Australia/Perth.standard.short=WST
-Australia/Queensland.daylight.short=EST
-Australia/Queensland.generic.short=ET
-Australia/Queensland.standard.short=EST
-Australia/South.daylight.short=CST
-Australia/South.generic.short=CT
-Australia/South.standard.short=CST
-Australia/Sydney.daylight.short=EST
-Australia/Sydney.generic.short=ET
-Australia/Sydney.standard.short=EST
-Australia/Tasmania.daylight.short=EST
-Australia/Tasmania.generic.short=ET
-Australia/Tasmania.standard.short=EST
-Australia/Victoria.daylight.short=EST
-Australia/Victoria.generic.short=ET
-Australia/Victoria.standard.short=EST
-Australia/West.daylight.short=WST
-Australia/West.generic.short=WT
-Australia/West.standard.short=WST
-Australia/Yancowinna.daylight.short=CST
-Australia/Yancowinna.generic.short=CT
-Australia/Yancowinna.standard.short=CST
-BET.daylight.short=BRST
-BET.generic.short=BRT
-BET.standard.short=BRT
-Brazil/Acre.daylight.short=ACST
-Brazil/Acre.generic.short=ACT
-Brazil/Acre.standard.short=ACT
-Brazil/DeNoronha.daylight.short=FNST
-Brazil/DeNoronha.generic.short=FNT
-Brazil/DeNoronha.standard.short=FNT
-Brazil/East.daylight.short=BRST
-Brazil/East.generic.short=BRT
-Brazil/East.standard.short=BRT
-Brazil/West.daylight.short=AMST
-Brazil/West.generic.short=AMT
-Brazil/West.standard.short=AMT
-BST.daylight.short=BDST
-BST.generic.short=BDT
-BST.standard.short=BDT
-Canada/Atlantic.daylight.short=ADT
-Canada/Atlantic.generic.short=AT
-Canada/Atlantic.standard.short=AST
-Canada/Central.daylight.short=CDT
-Canada/Central.generic.short=CT
-Canada/Central.standard.short=CST
-Canada/Eastern.daylight.short=EDT
-Canada/Eastern.generic.short=ET
-Canada/Eastern.standard.short=EST
-Canada/East-Saskatchewan.daylight.short=CDT
-Canada/East-Saskatchewan.generic.short=CT
-Canada/East-Saskatchewan.standard.short=CST
-Canada/Mountain.daylight.short=MDT
-Canada/Mountain.generic.short=MT
-Canada/Mountain.standard.short=MST
-Canada/Newfoundland.daylight.short=NDT
-Canada/Newfoundland.generic.short=NT
-Canada/Newfoundland.standard.short=NST
-Canada/Pacific.daylight.short=PDT
-Canada/Pacific.generic.short=PT
-Canada/Pacific.standard.short=PST
-Canada/Saskatchewan.daylight.short=CDT
-Canada/Saskatchewan.generic.short=CT
-Canada/Saskatchewan.standard.short=CST
-Canada/Yukon.daylight.short=PDT
-Canada/Yukon.generic.short=PT
-Canada/Yukon.standard.short=PST
-CAT.daylight.short=CAST
-CAT.generic.short=CAT
-CAT.standard.short=CAT
-CET.daylight.short=CEST
-CET.generic.short=CET
-CET.standard.short=CET
-Chile/Continental.daylight.short=CLST
-Chile/Continental.generic.short=CLT
-Chile/Continental.standard.short=CLT
-Chile/EasterIsland.daylight.short=EASST
-Chile/EasterIsland.generic.short=EAST
-Chile/EasterIsland.standard.short=EAST
-CNT.daylight.short=NDT
-CNT.generic.short=NT
-CNT.standard.short=NST
-CST6CDT.daylight.short=CDT
-CST6CDT.generic.short=CT
-CST6CDT.standard.short=CST
-CST.daylight.short=CDT
-CST.generic.short=CT
-CST.standard.short=CST
-CTT.daylight.short=CDT
-CTT.generic.short=CT
-CTT.standard.short=CST
-Cuba.daylight.short=CDT
-Cuba.generic.short=CT
-Cuba.standard.short=CST
-EAT.daylight.short=EAST
-EAT.generic.short=EAT
-EAT.standard.short=EAT
-ECT.daylight.short=CEST
-ECT.generic.short=CET
-ECT.standard.short=CET
-EET.daylight.short=EEST
-EET.generic.short=EET
-EET.standard.short=EET
-Egypt.daylight.short=EEST
-Egypt.generic.short=EET
-Egypt.standard.short=EET
-Eire.daylight.short=IST
-Eire.generic.short=IT
-Eire.standard.short=GMT
-EST5EDT.daylight.short=EDT
-EST5EDT.generic.short=ET
-EST5EDT.standard.short=EST
-EST.daylight.short=EDT
-EST.generic.short=ET
-EST.standard.short=EST
-Etc/Greenwich.daylight.short=GMT
-Etc/Greenwich.generic.short=GMT
-Etc/Greenwich.standard.short=GMT
-Etc/UCT.daylight.short=UTC
-Etc/UCT.generic.short=UTC
-Etc/UCT.standard.short=UTC
-Etc/Universal.daylight.short=UTC
-Etc/Universal.generic.short=UTC
-Etc/Universal.standard.short=UTC
-Etc/UTC.daylight.short=UTC
-Etc/UTC.generic.short=UTC
-Etc/UTC.standard.short=UTC
-Etc/Zulu.daylight.short=UTC
-Etc/Zulu.generic.short=UTC
-Etc/Zulu.standard.short=UTC
-Europe/Amsterdam.daylight.short=CEST
-Europe/Amsterdam.generic.short=CET
-Europe/Amsterdam.standard.short=CET
-Europe/Andorra.daylight.short=CEST
-Europe/Andorra.generic.short=CET
-Europe/Andorra.standard.short=CET
-Europe/Athens.daylight.short=EEST
-Europe/Athens.generic.short=EET
-Europe/Athens.standard.short=EET
-Europe/Belfast.daylight.short=BST
-Europe/Belfast.generic.short=BT
-Europe/Belfast.standard.short=GMT
-Europe/Belgrade.daylight.short=CEST
-Europe/Belgrade.generic.short=CET
-Europe/Belgrade.standard.short=CET
-Europe/Berlin.daylight.short=CEST
-Europe/Berlin.generic.short=CET
-Europe/Berlin.standard.short=CET
-Europe/Bratislava.daylight.short=CEST
-Europe/Bratislava.generic.short=CET
-Europe/Bratislava.standard.short=CET
-Europe/Brussels.daylight.short=CEST
-Europe/Brussels.generic.short=CET
-Europe/Brussels.standard.short=CET
-Europe/Bucharest.daylight.short=EEST
-Europe/Bucharest.generic.short=EET
-Europe/Bucharest.standard.short=EET
-Europe/Budapest.daylight.short=CEST
-Europe/Budapest.generic.short=CET
-Europe/Budapest.standard.short=CET
-Europe/Busingen.daylight.short=CEST
-Europe/Busingen.generic.short=CET
-Europe/Busingen.standard.short=CET
-Europe/Chisinau.daylight.short=EEST
-Europe/Chisinau.generic.short=EET
-Europe/Chisinau.standard.short=EET
-Europe/Copenhagen.daylight.short=CEST
-Europe/Copenhagen.generic.short=CET
-Europe/Copenhagen.standard.short=CET
-Europe/Dublin.daylight.short=IST
-Europe/Dublin.generic.short=IT
-Europe/Dublin.standard.short=GMT
-Europe/Gibraltar.daylight.short=CEST
-Europe/Gibraltar.generic.short=CET
-Europe/Gibraltar.standard.short=CET
-Europe/Guernsey.daylight.short=BST
-Europe/Guernsey.generic.short=BT
-Europe/Guernsey.standard.short=GMT
-Europe/Helsinki.daylight.short=EEST
-Europe/Helsinki.generic.short=EET
-Europe/Helsinki.standard.short=EET
-Europe/Isle_of_Man.daylight.short=BST
-Europe/Isle_of_Man.generic.short=BT
-Europe/Isle_of_Man.standard.short=GMT
-Europe/Istanbul.daylight.short=EEST
-Europe/Istanbul.generic.short=EET
-Europe/Istanbul.standard.short=EET
-Europe/Jersey.daylight.short=BST
-Europe/Jersey.generic.short=BT
-Europe/Jersey.standard.short=GMT
-Europe/Kaliningrad.daylight.short=FEST
-Europe/Kaliningrad.generic.short=FET
-Europe/Kaliningrad.standard.short=FET
-Europe/Kiev.daylight.short=EEST
-Europe/Kiev.generic.short=EET
-Europe/Kiev.standard.short=EET
-Europe/Lisbon.daylight.short=WEST
-Europe/Lisbon.generic.short=WET
-Europe/Lisbon.standard.short=WET
-Europe/Ljubljana.daylight.short=CEST
-Europe/Ljubljana.generic.short=CET
-Europe/Ljubljana.standard.short=CET
-Europe/London.daylight.short=BST
-Europe/London.generic.short=BT
-Europe/London.standard.short=GMT
-Europe/Luxembourg.daylight.short=CEST
-Europe/Luxembourg.generic.short=CET
-Europe/Luxembourg.standard.short=CET
-Europe/Madrid.daylight.short=CEST
-Europe/Madrid.generic.short=CET
-Europe/Madrid.standard.short=CET
-Europe/Malta.daylight.short=CEST
-Europe/Malta.generic.short=CET
-Europe/Malta.standard.short=CET
-Europe/Mariehamn.daylight.short=EEST
-Europe/Mariehamn.generic.short=EET
-Europe/Mariehamn.standard.short=EET
-Europe/Minsk.daylight.short=FEST
-Europe/Minsk.generic.short=FET
-Europe/Minsk.standard.short=FET
-Europe/Monaco.daylight.short=CEST
-Europe/Monaco.generic.short=CET
-Europe/Monaco.standard.short=CET
-Europe/Moscow.daylight.short=MSD
-Europe/Moscow.generic.short=MT
-Europe/Moscow.standard.short=MSK
-Europe/Nicosia.daylight.short=EEST
-Europe/Nicosia.generic.short=EET
-Europe/Nicosia.standard.short=EET
-Europe/Oslo.daylight.short=CEST
-Europe/Oslo.generic.short=CET
-Europe/Oslo.standard.short=CET
-Europe/Paris.daylight.short=CEST
-Europe/Paris.generic.short=CET
-Europe/Paris.standard.short=CET
-Europe/Podgorica.daylight.short=CEST
-Europe/Podgorica.generic.short=CET
-Europe/Podgorica.standard.short=CET
-Europe/Prague.daylight.short=CEST
-Europe/Prague.generic.short=CET
-Europe/Prague.standard.short=CET
-Europe/Riga.daylight.short=EEST
-Europe/Riga.generic.short=EET
-Europe/Riga.standard.short=EET
-Europe/Rome.daylight.short=CEST
-Europe/Rome.generic.short=CET
-Europe/Rome.standard.short=CET
-Europe/Samara.daylight.short=SAMST
-Europe/Samara.generic.short=SAMT
-Europe/Samara.standard.short=SAMT
-Europe/San_Marino.daylight.short=CEST
-Europe/San_Marino.generic.short=CET
-Europe/San_Marino.standard.short=CET
-Europe/Sarajevo.daylight.short=CEST
-Europe/Sarajevo.generic.short=CET
-Europe/Sarajevo.standard.short=CET
-Europe/Simferopol.daylight.short=EEST
-Europe/Simferopol.generic.short=EET
-Europe/Simferopol.standard.short=EET
-Europe/Skopje.daylight.short=CEST
-Europe/Skopje.generic.short=CET
-Europe/Skopje.standard.short=CET
-Europe/Sofia.daylight.short=EEST
-Europe/Sofia.generic.short=EET
-Europe/Sofia.standard.short=EET
-Europe/Stockholm.daylight.short=CEST
-Europe/Stockholm.generic.short=CET
-Europe/Stockholm.standard.short=CET
-Europe/Tallinn.daylight.short=EEST
-Europe/Tallinn.generic.short=EET
-Europe/Tallinn.standard.short=EET
-Europe/Tirane.daylight.short=CEST
-Europe/Tirane.generic.short=CET
-Europe/Tirane.standard.short=CET
-Europe/Tiraspol.daylight.short=EEST
-Europe/Tiraspol.generic.short=EET
-Europe/Tiraspol.standard.short=EET
-Europe/Uzhgorod.daylight.short=EEST
-Europe/Uzhgorod.generic.short=EET
-Europe/Uzhgorod.standard.short=EET
-Europe/Vaduz.daylight.short=CEST
-Europe/Vaduz.generic.short=CET
-Europe/Vaduz.standard.short=CET
-Europe/Vatican.daylight.short=CEST
-Europe/Vatican.generic.short=CET
-Europe/Vatican.standard.short=CET
-Europe/Vienna.daylight.short=CEST
-Europe/Vienna.generic.short=CET
-Europe/Vienna.standard.short=CET
-Europe/Vilnius.daylight.short=EEST
-Europe/Vilnius.generic.short=EET
-Europe/Vilnius.standard.short=EET
-Europe/Volgograd.daylight.short=VOLST
-Europe/Volgograd.generic.short=VOLT
-Europe/Volgograd.standard.short=VOLT
-Europe/Warsaw.daylight.short=CEST
-Europe/Warsaw.generic.short=CET
-Europe/Warsaw.standard.short=CET
-Europe/Zagreb.daylight.short=CEST
-Europe/Zagreb.generic.short=CET
-Europe/Zagreb.standard.short=CET
-Europe/Zaporozhye.daylight.short=EEST
-Europe/Zaporozhye.generic.short=EET
-Europe/Zaporozhye.standard.short=EET
-Europe/Zurich.daylight.short=CEST
-Europe/Zurich.generic.short=CET
-Europe/Zurich.standard.short=CET
-GB.daylight.short=BST
-GB-Eire.daylight.short=BST
-GB-Eire.generic.short=BT
-GB-Eire.standard.short=GMT
-GB.generic.short=BT
-GB.standard.short=GMT
-GMT.daylight.short=GMT
-GMT.generic.short=GMT
-GMT.standard.short=GMT
-Greenwich.daylight.short=GMT
-Greenwich.generic.short=GMT
-Greenwich.standard.short=GMT
-Hongkong.daylight.short=HKST
-Hongkong.generic.short=HKT
-Hongkong.standard.short=HKT
-HST.daylight.short=HDT
-HST.generic.short=HT
-HST.standard.short=HST
-Iceland.daylight.short=GMT
-Iceland.generic.short=GMT
-Iceland.standard.short=GMT
-IET.daylight.short=EDT
-IET.generic.short=ET
-IET.standard.short=EST
-Indian/Antananarivo.daylight.short=EAST
-Indian/Antananarivo.generic.short=EAT
-Indian/Antananarivo.standard.short=EAT
-Indian/Chagos.daylight.short=IOST
-Indian/Chagos.generic.short=IOT
-Indian/Chagos.standard.short=IOT
-Indian/Christmas.daylight.short=CXST
-Indian/Christmas.generic.short=CIT
-Indian/Christmas.standard.short=CXT
-Indian/Cocos.daylight.short=CCST
-Indian/Cocos.generic.short=CCT
-Indian/Cocos.standard.short=CCT
-Indian/Comoro.daylight.short=EAST
-Indian/Comoro.generic.short=EAT
-Indian/Comoro.standard.short=EAT
-Indian/Kerguelen.daylight.short=TFST
-Indian/Kerguelen.generic.short=TFT
-Indian/Kerguelen.standard.short=TFT
-Indian/Mahe.daylight.short=SCST
-Indian/Mahe.generic.short=SCT
-Indian/Mahe.standard.short=SCT
-Indian/Maldives.daylight.short=MVST
-Indian/Maldives.generic.short=MVT
-Indian/Maldives.standard.short=MVT
-Indian/Mauritius.daylight.short=MUST
-Indian/Mauritius.generic.short=MUT
-Indian/Mauritius.standard.short=MUT
-Indian/Mayotte.daylight.short=EAST
-Indian/Mayotte.generic.short=EAT
-Indian/Mayotte.standard.short=EAT
-Indian/Reunion.daylight.short=REST
-Indian/Reunion.generic.short=RET
-Indian/Reunion.standard.short=RET
-Iran.daylight.short=IRDT
-Iran.generic.short=IRT
-Iran.standard.short=IRST
-Israel.daylight.short=IDT
-Israel.generic.short=IT
-Israel.standard.short=IST
-IST.daylight.short=IDT
-IST.generic.short=IT
-IST.standard.short=IST
-Jamaica.daylight.short=EDT
-Jamaica.generic.short=ET
-Jamaica.standard.short=EST
-Japan.daylight.short=JDT
-Japan.generic.short=JT
-Japan.standard.short=JST
-JST.daylight.short=JDT
-JST.generic.short=JT
-JST.standard.short=JST
-Kwajalein.daylight.short=MHST
-Kwajalein.generic.short=MHT
-Kwajalein.standard.short=MHT
-Libya.daylight.short=EEST
-Libya.generic.short=EET
-Libya.standard.short=EET
-MET.daylight.short=MEST
-MET.generic.short=MET
-MET.standard.short=MET
-Mexico/BajaNorte.daylight.short=PDT
-Mexico/BajaNorte.generic.short=PT
-Mexico/BajaNorte.standard.short=PST
-Mexico/BajaSur.daylight.short=MDT
-Mexico/BajaSur.generic.short=MT
-Mexico/BajaSur.standard.short=MST
-Mexico/General.daylight.short=CDT
-Mexico/General.generic.short=CT
-Mexico/General.standard.short=CST
-MIT.daylight.short=WSDT
-MIT.generic.short=WST
-MIT.standard.short=WST
-MST7MDT.daylight.short=MDT
-MST7MDT.generic.short=MT
-MST7MDT.standard.short=MST
-MST.daylight.short=MDT
-MST.generic.short=MT
-MST.standard.short=MST
-Navajo.daylight.short=MDT
-Navajo.generic.short=MT
-Navajo.standard.short=MST
-NET.daylight.short=AMST
-NET.generic.short=AMT
-NET.standard.short=AMT
-NST.daylight.short=NZDT
-NST.generic.short=NZT
-NST.standard.short=NZST
-NZ-CHAT.daylight.short=CHADT
-NZ-CHAT.generic.short=CHAT
-NZ-CHAT.standard.short=CHAST
-NZ.daylight.short=NZDT
-NZ.generic.short=NZT
-NZ.standard.short=NZST
-Pacific/Apia.daylight.short=WSDT
-Pacific/Apia.generic.short=WST
-Pacific/Apia.standard.short=WST
-Pacific/Auckland.daylight.short=NZDT
-Pacific/Auckland.generic.short=NZT
-Pacific/Auckland.standard.short=NZST
-Pacific/Chatham.daylight.short=CHADT
-Pacific/Chatham.generic.short=CHAT
-Pacific/Chatham.standard.short=CHAST
-Pacific/Chuuk.daylight.short=CHUST
-Pacific/Chuuk.generic.short=CHUT
-Pacific/Chuuk.standard.short=CHUT
-Pacific/Easter.daylight.short=EASST
-Pacific/Easter.generic.short=EAST
-Pacific/Easter.standard.short=EAST
-Pacific/Efate.daylight.short=VUST
-Pacific/Efate.generic.short=VUT
-Pacific/Efate.standard.short=VUT
-Pacific/Enderbury.daylight.short=PHOST
-Pacific/Enderbury.generic.short=PHOT
-Pacific/Enderbury.standard.short=PHOT
-Pacific/Fakaofo.daylight.short=TKST
-Pacific/Fakaofo.generic.short=TKT
-Pacific/Fakaofo.standard.short=TKT
-Pacific/Fiji.daylight.short=FJST
-Pacific/Fiji.generic.short=FJT
-Pacific/Fiji.standard.short=FJT
-Pacific/Funafuti.daylight.short=TVST
-Pacific/Funafuti.generic.short=TVT
-Pacific/Funafuti.standard.short=TVT
-Pacific/Galapagos.daylight.short=GALST
-Pacific/Galapagos.generic.short=GALT
-Pacific/Galapagos.standard.short=GALT
-Pacific/Gambier.daylight.short=GAMST
-Pacific/Gambier.generic.short=GAMT
-Pacific/Gambier.standard.short=GAMT
-Pacific/Guadalcanal.daylight.short=SBST
-Pacific/Guadalcanal.generic.short=SBT
-Pacific/Guadalcanal.standard.short=SBT
-Pacific/Guam.daylight.short=ChDT
-Pacific/Guam.generic.short=ChT
-Pacific/Guam.standard.short=ChST
-Pacific/Honolulu.daylight.short=HDT
-Pacific/Honolulu.generic.short=HT
-Pacific/Honolulu.standard.short=HST
-Pacific/Johnston.daylight.short=HDT
-Pacific/Johnston.generic.short=HT
-Pacific/Johnston.standard.short=HST
-Pacific/Kiritimati.daylight.short=LINST
-Pacific/Kiritimati.generic.short=LINT
-Pacific/Kiritimati.standard.short=LINT
-Pacific/Kosrae.daylight.short=KOSST
-Pacific/Kosrae.generic.short=KOST
-Pacific/Kosrae.standard.short=KOST
-Pacific/Kwajalein.daylight.short=MHST
-Pacific/Kwajalein.generic.short=MHT
-Pacific/Kwajalein.standard.short=MHT
-Pacific/Majuro.daylight.short=MHST
-Pacific/Majuro.generic.short=MHT
-Pacific/Majuro.standard.short=MHT
-Pacific/Marquesas.daylight.short=MARST
-Pacific/Marquesas.generic.short=MART
-Pacific/Marquesas.standard.short=MART
-Pacific/Midway.daylight.short=SDT
-Pacific/Midway.generic.short=ST
-Pacific/Midway.standard.short=SST
-Pacific/Nauru.daylight.short=NRST
-Pacific/Nauru.generic.short=NRT
-Pacific/Nauru.standard.short=NRT
-Pacific/Niue.daylight.short=NUST
-Pacific/Niue.generic.short=NUT
-Pacific/Niue.standard.short=NUT
-Pacific/Norfolk.daylight.short=NFST
-Pacific/Norfolk.generic.short=NFT
-Pacific/Norfolk.standard.short=NFT
-Pacific/Noumea.daylight.short=NCST
-Pacific/Noumea.generic.short=NCT
-Pacific/Noumea.standard.short=NCT
-Pacific/Pago_Pago.daylight.short=SDT
-Pacific/Pago_Pago.generic.short=ST
-Pacific/Pago_Pago.standard.short=SST
-Pacific/Palau.daylight.short=PWST
-Pacific/Palau.generic.short=PWT
-Pacific/Palau.standard.short=PWT
-Pacific/Pitcairn.daylight.short=PDT
-Pacific/Pitcairn.generic.short=PT
-Pacific/Pitcairn.standard.short=PST
-Pacific/Pohnpei.daylight.short=PONST
-Pacific/Pohnpei.generic.short=PONT
-Pacific/Pohnpei.standard.short=PONT
-Pacific/Ponape.daylight.short=PONST
-Pacific/Ponape.generic.short=PONT
-Pacific/Ponape.standard.short=PONT
-Pacific/Port_Moresby.daylight.short=PGST
-Pacific/Port_Moresby.generic.short=PGT
-Pacific/Port_Moresby.standard.short=PGT
-Pacific/Rarotonga.daylight.short=CKHST
-Pacific/Rarotonga.generic.short=CKT
-Pacific/Rarotonga.standard.short=CKT
-Pacific/Saipan.daylight.short=ChDT
-Pacific/Saipan.generic.short=ChT
-Pacific/Saipan.standard.short=ChST
-Pacific/Samoa.daylight.short=SDT
-Pacific/Samoa.generic.short=ST
-Pacific/Samoa.standard.short=SST
-Pacific/Tahiti.daylight.short=TAHST
-Pacific/Tahiti.generic.short=TAHT
-Pacific/Tahiti.standard.short=TAHT
-Pacific/Tarawa.daylight.short=GILST
-Pacific/Tarawa.generic.short=GILT
-Pacific/Tarawa.standard.short=GILT
-Pacific/Tongatapu.daylight.short=TOST
-Pacific/Tongatapu.generic.short=TOT
-Pacific/Tongatapu.standard.short=TOT
-Pacific/Truk.daylight.short=CHUST
-Pacific/Truk.generic.short=CHUT
-Pacific/Truk.standard.short=CHUT
-Pacific/Wake.daylight.short=WAKST
-Pacific/Wake.generic.short=WAKT
-Pacific/Wake.standard.short=WAKT
-Pacific/Wallis.daylight.short=WFST
-Pacific/Wallis.generic.short=WFT
-Pacific/Wallis.standard.short=WFT
-Pacific/Yap.daylight.short=CHUST
-Pacific/Yap.generic.short=CHUT
-Pacific/Yap.standard.short=CHUT
-PLT.daylight.short=PKST
-PLT.generic.short=PKT
-PLT.standard.short=PKT
-PNT.daylight.short=MDT
-PNT.generic.short=MT
-PNT.standard.short=MST
-Poland.daylight.short=CEST
-Poland.generic.short=CET
-Poland.standard.short=CET
-Portugal.daylight.short=WEST
-Portugal.generic.short=WET
-Portugal.standard.short=WET
-PRC.daylight.short=CDT
-PRC.generic.short=CT
-PRC.standard.short=CST
-PRT.daylight.short=ADT
-PRT.generic.short=AT
-PRT.standard.short=AST
-PST8PDT.daylight.short=PDT
-PST8PDT.generic.short=PT
-PST8PDT.standard.short=PST
-PST.daylight.short=PDT
-PST.generic.short=PT
-PST.standard.short=PST
-ROK.daylight.short=KDT
-ROK.generic.short=KT
-ROK.standard.short=KST
-Singapore.daylight.short=SGST
-Singapore.generic.short=SGT
-Singapore.standard.short=SGT
-SST.daylight.short=SBST
-SST.generic.short=SBT
-SST.standard.short=SBT
-SystemV/AST4ADT.daylight.short=ADT
-SystemV/AST4ADT.generic.short=AT
-SystemV/AST4ADT.standard.short=AST
-SystemV/AST4.daylight.short=ADT
-SystemV/AST4.generic.short=AT
-SystemV/AST4.standard.short=AST
-SystemV/CST6CDT.daylight.short=CDT
-SystemV/CST6CDT.generic.short=CT
-SystemV/CST6CDT.standard.short=CST
-SystemV/CST6.daylight.short=CDT
-SystemV/CST6.generic.short=CT
-SystemV/CST6.standard.short=CST
-SystemV/EST5.daylight.short=EDT
-SystemV/EST5EDT.daylight.short=EDT
-SystemV/EST5EDT.generic.short=ET
-SystemV/EST5EDT.standard.short=EST
-SystemV/EST5.generic.short=ET
-SystemV/EST5.standard.short=EST
-SystemV/HST10.daylight.short=HDT
-SystemV/HST10.generic.short=HT
-SystemV/HST10.standard.short=HST
-SystemV/MST7.daylight.short=MDT
-SystemV/MST7.generic.short=MT
-SystemV/MST7MDT.daylight.short=MDT
-SystemV/MST7MDT.generic.short=MT
-SystemV/MST7MDT.standard.short=MST
-SystemV/MST7.standard.short=MST
-SystemV/PST8.daylight.short=PDT
-SystemV/PST8.generic.short=PT
-SystemV/PST8PDT.daylight.short=PDT
-SystemV/PST8PDT.generic.short=PT
-SystemV/PST8PDT.standard.short=PST
-SystemV/PST8.standard.short=PST
-SystemV/YST9.daylight.short=AKDT
-SystemV/YST9.generic.short=AKT
-SystemV/YST9.standard.short=AKST
-SystemV/YST9YDT.daylight.short=AKDT
-SystemV/YST9YDT.generic.short=AKT
-SystemV/YST9YDT.standard.short=AKST
-Turkey.daylight.short=EEST
-Turkey.generic.short=EET
-Turkey.standard.short=EET
-UCT.daylight.short=UTC
-UCT.generic.short=UTC
-UCT.standard.short=UTC
-Universal.daylight.short=UTC
-Universal.generic.short=UTC
-Universal.standard.short=UTC
-US/Alaska.daylight.short=AKDT
-US/Alaska.generic.short=AKT
-US/Alaska.standard.short=AKST
-US/Aleutian.daylight.short=HADT
-US/Aleutian.generic.short=HAT
-US/Aleutian.standard.short=HAST
-US/Arizona.daylight.short=MDT
-US/Arizona.generic.short=MT
-US/Arizona.standard.short=MST
-US/Central.daylight.short=CDT
-US/Central.generic.short=CT
-US/Central.standard.short=CST
-US/Eastern.daylight.short=EDT
-US/Eastern.generic.short=ET
-US/Eastern.standard.short=EST
-US/East-Indiana.daylight.short=EDT
-US/East-Indiana.generic.short=ET
-US/East-Indiana.standard.short=EST
-US/Hawaii.daylight.short=HDT
-US/Hawaii.generic.short=HT
-US/Hawaii.standard.short=HST
-US/Indiana-Starke.daylight.short=CDT
-US/Indiana-Starke.generic.short=CT
-US/Indiana-Starke.standard.short=CST
-US/Michigan.daylight.short=EDT
-US/Michigan.generic.short=ET
-US/Michigan.standard.short=EST
-US/Mountain.daylight.short=MDT
-US/Mountain.generic.short=MT
-US/Mountain.standard.short=MST
-US/Pacific.daylight.short=PDT
-US/Pacific.generic.short=PT
-US/Pacific-New.daylight.short=PDT
-US/Pacific-New.generic.short=PT
-US/Pacific-New.standard.short=PST
-US/Pacific.standard.short=PST
-US/Samoa.daylight.short=SDT
-US/Samoa.generic.short=ST
-US/Samoa.standard.short=SST
-UTC.daylight.short=UTC
-UTC.generic.short=UTC
-UTC.standard.short=UTC
-VST.daylight.short=ICST
-VST.generic.short=ICT
-VST.standard.short=ICT
-WET.daylight.short=WEST
-WET.generic.short=WET
-WET.standard.short=WET
-W-SU.daylight.short=MSD
-W-SU.generic.short=MT
-W-SU.standard.short=MSK
-Zulu.daylight.short=UTC
-Zulu.generic.short=UTC
-Zulu.standard.short=UTC
diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_ja.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_ja.properties
deleted file mode 100644
index ac5a86d..0000000
--- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_ja.properties
+++ /dev/null
@@ -1,651 +0,0 @@
-ACT.daylight.long=\u4E2D\u90E8\u590F\u6642\u9593(\u30CE\u30FC\u30B6\u30F3\u30C6\u30EA\u30C8\u30EA\u30FC)
-ACT.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642(\u30CE\u30FC\u30B6\u30F3\u30C6\u30EA\u30C8\u30EA\u30FC)
-ACT.standard.long=\u4E2D\u90E8\u6A19\u6E96\u6642(\u30CE\u30FC\u30B6\u30F3\u30C6\u30EA\u30C8\u30EA\u30FC)
-AET.daylight.long=\u6771\u90E8\u590F\u6642\u9593(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)
-AET.generic.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)
-AET.standard.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)
-AGT.generic.long=\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593
-ART.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-AST.generic.long=\u30A2\u30E9\u30B9\u30AB\u6642\u9593
-Africa/Abidjan.generic.long=\u30B0\u30EA\u30CB\u30C3\u30B8\u6A19\u6E96\u6642
-Africa/Accra.generic.long=\u30AC\u30FC\u30CA\u6A19\u6E96\u6642
-Africa/Addis_Ababa.generic.long=\u6771\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593
-Africa/Algiers.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Africa/Asmara.generic.long=\u6771\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593
-Africa/Asmera.generic.long=\u6771\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593
-Africa/Bamako.generic.long=\u30B0\u30EA\u30CB\u30C3\u30B8\u6A19\u6E96\u6642
-Africa/Bangui.generic.long=\u897F\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593
-Africa/Banjul.generic.long=\u30B0\u30EA\u30CB\u30C3\u30B8\u6A19\u6E96\u6642
-Africa/Bissau.generic.long=\u30B0\u30EA\u30CB\u30C3\u30B8\u6A19\u6E96\u6642
-Africa/Blantyre.generic.long=\u4E2D\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593
-Africa/Brazzaville.generic.long=\u897F\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593
-Africa/Bujumbura.generic.long=\u4E2D\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593
-Africa/Cairo.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Africa/Casablanca.generic.long=\u897F\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Africa/Ceuta.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Africa/Conakry.generic.long=\u30B0\u30EA\u30CB\u30C3\u30B8\u6A19\u6E96\u6642
-Africa/Dakar.generic.long=\u30B0\u30EA\u30CB\u30C3\u30B8\u6A19\u6E96\u6642
-Africa/Dar_es_Salaam.generic.long=\u6771\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593
-Africa/Djibouti.generic.long=\u6771\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593
-Africa/Douala.generic.long=\u897F\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593
-Africa/El_Aaiun.generic.long=\u897F\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Africa/Freetown.generic.long=\u30B7\u30A8\u30E9\u30EC\u30AA\u30CD\u6642\u9593
-Africa/Gaborone.generic.long=\u4E2D\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593
-Africa/Harare.generic.long=\u4E2D\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593
-Africa/Johannesburg.generic.long=\u5357\u30A2\u30D5\u30EA\u30AB\u6642\u9593
-Africa/Juba.generic.long=\u6771\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593
-Africa/Kampala.generic.long=\u6771\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593
-Africa/Khartoum.generic.long=\u6771\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593
-Africa/Kigali.generic.long=\u4E2D\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593
-Africa/Kinshasa.generic.long=\u897F\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593
-Africa/Lagos.generic.long=\u897F\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593
-Africa/Libreville.generic.long=\u897F\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593
-Africa/Lome.generic.long=\u30B0\u30EA\u30CB\u30C3\u30B8\u6A19\u6E96\u6642
-Africa/Luanda.generic.long=\u897F\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593
-Africa/Lubumbashi.generic.long=\u4E2D\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593
-Africa/Lusaka.generic.long=\u4E2D\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593
-Africa/Malabo.generic.long=\u897F\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593
-Africa/Maputo.generic.long=\u4E2D\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593
-Africa/Maseru.generic.long=\u5357\u30A2\u30D5\u30EA\u30AB\u6642\u9593
-Africa/Mbabane.generic.long=\u5357\u30A2\u30D5\u30EA\u30AB\u6642\u9593
-Africa/Mogadishu.generic.long=\u6771\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593
-Africa/Monrovia.generic.long=\u30B0\u30EA\u30CB\u30C3\u30B8\u6A19\u6E96\u6642
-Africa/Nairobi.generic.long=\u6771\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593
-Africa/Ndjamena.generic.long=\u897F\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593
-Africa/Niamey.generic.long=\u897F\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593
-Africa/Nouakchott.generic.long=\u30B0\u30EA\u30CB\u30C3\u30B8\u6A19\u6E96\u6642
-Africa/Ouagadougou.generic.long=\u30B0\u30EA\u30CB\u30C3\u30B8\u6A19\u6E96\u6642
-Africa/Porto-Novo.generic.long=\u897F\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593
-Africa/Sao_Tome.generic.long=\u30B0\u30EA\u30CB\u30C3\u30B8\u6A19\u6E96\u6642
-Africa/Timbuktu.generic.long=\u30B0\u30EA\u30CB\u30C3\u30B8\u6A19\u6E96\u6642
-Africa/Tripoli.generic.long=\u6771\u90e8\u30e8\u30fc\u30ed\u30c3\u30d1\u6642\u9593
-Africa/Tunis.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Africa/Windhoek.generic.long=\u897F\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593
-America/Adak.generic.long=\u30CF\u30EF\u30A4\u30FB\u30A2\u30EA\u30E5\u30FC\u30B7\u30E3\u30F3\u6642\u9593
-America/Anchorage.generic.long=\u30A2\u30E9\u30B9\u30AB\u6642\u9593
-America/Anguilla.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642
-America/Antigua.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642
-America/Araguaina.generic.long=\u30D6\u30E9\u30B8\u30EA\u30A2\u6642\u9593
-America/Argentina/Buenos_Aires.generic.long=\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593
-America/Argentina/Catamarca.generic.long=\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593
-America/Argentina/ComodRivadavia.generic.long=\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593
-America/Argentina/Cordoba.generic.long=\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593
-America/Argentina/Jujuy.generic.long=\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593
-America/Argentina/La_Rioja.generic.long=\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593
-America/Argentina/Mendoza.generic.long=\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593
-America/Argentina/Rio_Gallegos.generic.long=\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593
-America/Argentina/Salta.generic.long=\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593
-America/Argentina/San_Juan.generic.long=\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593
-America/Argentina/San_Luis.generic.long=\u30a2\u30eb\u30bc\u30f3\u30c1\u30f3\u6642\u9593
-America/Argentina/Tucuman.generic.long=\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593
-America/Argentina/Ushuaia.generic.long=\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593
-America/Aruba.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642
-America/Asuncion.generic.long=\u30D1\u30E9\u30B0\u30A2\u30A4\u6642\u9593
-America/Atikokan.generic.long=\u6771\u90E8\u6A19\u6E96\u6642
-America/Atka.generic.long=\u30CF\u30EF\u30A4\u30FB\u30A2\u30EA\u30E5\u30FC\u30B7\u30E3\u30F3\u6642\u9593
-America/Bahia.generic.long=\u30D6\u30E9\u30B8\u30EA\u30A2\u6642\u9593
-America/Bahia_Banderas.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642
-America/Barbados.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642
-America/Belem.generic.long=\u30D6\u30E9\u30B8\u30EA\u30A2\u6642\u9593
-America/Belize.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642
-America/Blanc-Sablon.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642
-America/Boa_Vista.generic.long=\u30A2\u30DE\u30BE\u30F3\u6642\u9593
-America/Bogota.generic.long=\u30B3\u30ED\u30F3\u30D3\u30A2\u6642\u9593
-America/Boise.generic.long=\u5C71\u5730\u6A19\u6E96\u6642
-America/Buenos_Aires.generic.long=\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593
-America/Cambridge_Bay.generic.long=\u5C71\u5730\u6A19\u6E96\u6642
-America/Campo_Grande.generic.long=\u30A2\u30DE\u30BE\u30F3\u6642\u9593
-America/Cancun.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642
-America/Caracas.generic.long=\u30D9\u30CD\u30BA\u30A8\u30E9\u6642\u9593
-America/Catamarca.generic.long=\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593
-America/Cayenne.generic.long=\u30D5\u30E9\u30F3\u30B9\u9818\u30AE\u30A2\u30CA\u6642\u9593
-America/Cayman.generic.long=\u6771\u90E8\u6A19\u6E96\u6642
-America/Chicago.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642
-America/Chihuahua.generic.long=\u5C71\u5730\u6A19\u6E96\u6642
-America/Coral_Harbour.generic.long=\u6771\u90E8\u6A19\u6E96\u6642
-America/Cordoba.generic.long=\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593
-America/Costa_Rica.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642
-America/Creston.generic.long=\u5C71\u5730\u6A19\u6E96\u6642
-America/Cuiaba.generic.long=\u30A2\u30DE\u30BE\u30F3\u6642\u9593
-America/Curacao.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642
-America/Danmarkshavn.generic.long=\u30B0\u30EA\u30CB\u30C3\u30B8\u6A19\u6E96\u6642
-America/Dawson.generic.long=\u592A\u5E73\u6D0B\u6A19\u6E96\u6642
-America/Dawson_Creek.generic.long=\u5C71\u5730\u6A19\u6E96\u6642
-America/Denver.generic.long=\u5C71\u5730\u6A19\u6E96\u6642
-America/Detroit.generic.long=\u6771\u90E8\u6A19\u6E96\u6642
-America/Dominica.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642
-America/Edmonton.generic.long=\u5C71\u5730\u6A19\u6E96\u6642
-America/Eirunepe.generic.long=\u30a2\u30af\u30ec\u6642\u9593
-America/El_Salvador.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642
-America/Ensenada.generic.long=\u592A\u5E73\u6D0B\u6A19\u6E96\u6642
-America/Fort_Wayne.generic.long=\u6771\u90E8\u6A19\u6E96\u6642
-America/Fortaleza.generic.long=\u30D6\u30E9\u30B8\u30EA\u30A2\u6642\u9593
-America/Glace_Bay.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642
-America/Godthab.generic.long=\u897F\u90E8\u30B0\u30EA\u30FC\u30F3\u30E9\u30F3\u30C9\u6642\u9593
-America/Goose_Bay.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642
-America/Grand_Turk.generic.long=\u6771\u90E8\u6A19\u6E96\u6642
-America/Grenada.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642
-America/Guadeloupe.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642
-America/Guatemala.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642
-America/Guayaquil.generic.long=\u30A8\u30AF\u30A2\u30C9\u30EB\u6642\u9593
-America/Guyana.generic.long=\u30AC\u30A4\u30A2\u30CA\u6642\u9593
-America/Halifax.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642
-America/Havana.generic.long=\u30AD\u30E5\u30FC\u30D0\u6642\u9593
-America/Hermosillo.generic.long=\u5C71\u5730\u6A19\u6E96\u6642
-America/Indiana/Indianapolis.generic.long=\u6771\u90E8\u6A19\u6E96\u6642
-America/Indiana/Knox.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642
-America/Indiana/Marengo.generic.long=\u6771\u90E8\u6A19\u6E96\u6642
-America/Indiana/Petersburg.generic.long=\u6771\u90E8\u6A19\u6E96\u6642
-America/Indiana/Tell_City.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642
-America/Indiana/Vevay.generic.long=\u6771\u90E8\u6A19\u6E96\u6642
-America/Indiana/Vincennes.generic.long=\u6771\u90E8\u6A19\u6E96\u6642
-America/Indiana/Winamac.generic.long=\u6771\u90E8\u6A19\u6E96\u6642
-America/Indianapolis.generic.long=\u6771\u90E8\u6A19\u6E96\u6642
-America/Inuvik.generic.long=\u5C71\u5730\u6A19\u6E96\u6642
-America/Iqaluit.generic.long=\u6771\u90E8\u6A19\u6E96\u6642
-America/Jamaica.generic.long=\u6771\u90E8\u6A19\u6E96\u6642
-America/Jujuy.generic.long=\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593
-America/Juneau.generic.long=\u30A2\u30E9\u30B9\u30AB\u6642\u9593
-America/Kentucky/Louisville.generic.long=\u6771\u90E8\u6A19\u6E96\u6642
-America/Kentucky/Monticello.generic.long=\u6771\u90E8\u6A19\u6E96\u6642
-America/Knox_IN.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642
-America/Kralendijk.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642
-America/La_Paz.generic.long=\u30DC\u30EA\u30D3\u30A2\u6642\u9593
-America/Lima.generic.long=\u30DA\u30EB\u30FC\u6642\u9593
-America/Los_Angeles.generic.long=\u592A\u5E73\u6D0B\u6A19\u6E96\u6642
-America/Louisville.generic.long=\u6771\u90E8\u6A19\u6E96\u6642
-America/Lower_Princes.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642
-America/Maceio.generic.long=\u30D6\u30E9\u30B8\u30EA\u30A2\u6642\u9593
-America/Managua.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642
-America/Manaus.generic.long=\u30A2\u30DE\u30BE\u30F3\u6642\u9593
-America/Marigot.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642
-America/Martinique.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642
-America/Matamoros.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642
-America/Mazatlan.generic.long=\u5C71\u5730\u6A19\u6E96\u6642
-America/Mendoza.generic.long=\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593
-America/Menominee.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642
-America/Merida.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642
-America/Metlakatla.daylight.long=\u30E1\u30C8\u30E9\u30AB\u30C8\u30E9\u590F\u6642\u9593
-America/Metlakatla.generic.long=\u30E1\u30C8\u30E9\u30AB\u30C8\u30E9\u6642\u9593
-America/Metlakatla.standard.long=\u30E1\u30C8\u30E9\u30AB\u30C8\u30E9\u6A19\u6E96\u6642\u9593
-America/Mexico_City.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642
-America/Miquelon.generic.long=\u30D4\u30A8\u30FC\u30EB\u30FB\u30DF\u30AF\u30ED\u30F3\u6642\u9593
-America/Moncton.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642
-America/Monterrey.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642
-America/Montevideo.generic.long=\u30A6\u30EB\u30B0\u30A2\u30A4\u6642\u9593
-America/Montreal.generic.long=\u6771\u90E8\u6A19\u6E96\u6642
-America/Montserrat.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642
-America/Nassau.generic.long=\u6771\u90E8\u6A19\u6E96\u6642
-America/New_York.generic.long=\u6771\u90E8\u6A19\u6E96\u6642
-America/Nipigon.generic.long=\u6771\u90E8\u6A19\u6E96\u6642
-America/Nome.generic.long=\u30A2\u30E9\u30B9\u30AB\u6642\u9593
-America/Noronha.generic.long=\u30D5\u30A7\u30EB\u30CA\u30F3\u30C9\u30FB\u30C7\u30FB\u30CE\u30ED\u30FC\u30CB\u30E3\u6642\u9593
-America/North_Dakota/Beulah.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642
-America/North_Dakota/Center.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642
-America/North_Dakota/New_Salem.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642
-America/Ojinaga.generic.long=\u5C71\u5730\u6A19\u6E96\u6642
-America/Panama.generic.long=\u6771\u90E8\u6A19\u6E96\u6642
-America/Pangnirtung.generic.long=\u6771\u90E8\u6A19\u6E96\u6642
-America/Paramaribo.generic.long=\u30B9\u30EA\u30CA\u30E0\u6642\u9593
-America/Phoenix.generic.long=\u5C71\u5730\u6A19\u6E96\u6642
-America/Port-au-Prince.generic.long=\u6771\u90E8\u6A19\u6E96\u6642
-America/Port_of_Spain.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642
-America/Porto_Acre.generic.long=\u30a2\u30af\u30ec\u6642\u9593
-America/Porto_Velho.generic.long=\u30A2\u30DE\u30BE\u30F3\u6642\u9593
-America/Puerto_Rico.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642
-America/Rainy_River.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642
-America/Rankin_Inlet.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642
-America/Recife.generic.long=\u30D6\u30E9\u30B8\u30EA\u30A2\u6642\u9593
-America/Regina.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642
-America/Resolute.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642
-America/Rio_Branco.generic.long=\u30a2\u30af\u30ec\u6642\u9593
-America/Rosario.generic.long=\u30A2\u30EB\u30BC\u30F3\u30C1\u30F3\u6642\u9593
-America/Santa_Isabel.generic.long=\u592A\u5E73\u6D0B\u6A19\u6E96\u6642
-America/Santarem.generic.long=\u30D6\u30E9\u30B8\u30EA\u30A2\u6642\u9593
-America/Santiago.generic.long=\u30C1\u30EA\u6642\u9593
-America/Santo_Domingo.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642
-America/Sao_Paulo.generic.long=\u30D6\u30E9\u30B8\u30EA\u30A2\u6642\u9593
-America/Scoresbysund.generic.long=\u6771\u90E8\u30B0\u30EA\u30FC\u30F3\u30E9\u30F3\u30C9\u6642\u9593
-America/Shiprock.generic.long=\u5C71\u5730\u6A19\u6E96\u6642
-America/Sitka.generic.long=\u30A2\u30E9\u30B9\u30AB\u6642\u9593
-America/St_Barthelemy.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642
-America/St_Johns.generic.long=\u30CB\u30E5\u30FC\u30D5\u30A1\u30F3\u30C9\u30E9\u30F3\u30C9\u6642\u9593
-America/St_Kitts.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642
-America/St_Lucia.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642
-America/St_Thomas.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642
-America/St_Vincent.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642
-America/Swift_Current.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642
-America/Tegucigalpa.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642
-America/Thule.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642
-America/Thunder_Bay.generic.long=\u6771\u90E8\u6A19\u6E96\u6642
-America/Tijuana.generic.long=\u592A\u5E73\u6D0B\u6A19\u6E96\u6642
-America/Toronto.generic.long=\u6771\u90E8\u6A19\u6E96\u6642
-America/Tortola.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642
-America/Vancouver.generic.long=\u592A\u5E73\u6D0B\u6A19\u6E96\u6642
-America/Virgin.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642
-America/Whitehorse.generic.long=\u592A\u5E73\u6D0B\u6A19\u6E96\u6642
-America/Winnipeg.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642
-America/Yakutat.generic.long=\u30A2\u30E9\u30B9\u30AB\u6642\u9593
-America/Yellowknife.generic.long=\u5C71\u5730\u6A19\u6E96\u6642
-Antarctica/Casey.daylight.long=\u897F\u90E8\u590F\u6642\u9593(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)
-Antarctica/Casey.generic.long=\u897F\u90E8\u6642\u9593(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)
-Antarctica/Casey.standard.long=\u897F\u90E8\u6A19\u6E96\u6642(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)
-Antarctica/Davis.generic.long=\u30C7\u30FC\u30D3\u30B9\u6642\u9593
-Antarctica/DumontDUrville.generic.long=\u30C7\u30E5\u30E2\u30F3\u30FB\u30C7\u30E5\u30EB\u30D3\u30EB\u6642\u9593
-Antarctica/Macquarie.daylight.long=\u30DE\u30C3\u30B3\u30FC\u30EA\u30FC\u5CF6\u590F\u6642\u9593
-Antarctica/Macquarie.generic.long=\u30DE\u30C3\u30B3\u30FC\u30EA\u30FC\u5CF6\u6642\u9593
-Antarctica/Macquarie.standard.long=\u30DE\u30C3\u30B3\u30FC\u30EA\u30FC\u5CF6\u6642\u9593
-Antarctica/Mawson.generic.long=\u30E2\u30FC\u30BD\u30F3\u6642\u9593
-Antarctica/McMurdo.generic.long=\u30CB\u30E5\u30FC\u30B8\u30FC\u30E9\u30F3\u30C9\u6642\u9593
-Antarctica/Palmer.generic.long=\u30C1\u30EA\u6642\u9593
-Antarctica/Rothera.generic.long=\u30ED\u30BC\u30E9\u6642\u9593
-Antarctica/South_Pole.generic.long=\u30CB\u30E5\u30FC\u30B8\u30FC\u30E9\u30F3\u30C9\u6642\u9593
-Antarctica/Syowa.generic.long=\u662D\u548C\u57FA\u5730\u6642\u9593
-Antarctica/Vostok.generic.long=\u30DC\u30B9\u30C8\u30FC\u30AF\u6642\u9593
-Arctic/Longyearbyen.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Asia/Aden.generic.long=\u30A2\u30E9\u30D3\u30A2\u6642\u9593
-Asia/Almaty.generic.long=\u30A2\u30EB\u30DE\u30A2\u30BF\u6642\u9593
-Asia/Amman.generic.long=\u30a2\u30e9\u30d3\u30a2\u6642\u9593
-Asia/Anadyr.generic.long=\u30A2\u30CA\u30C7\u30A3\u30EA\u6642\u9593
-Asia/Aqtau.generic.long=\u30A2\u30AF\u30BF\u30A6\u6642\u9593
-Asia/Aqtobe.generic.long=\u30A2\u30AF\u30C8\u30D9\u6642\u9593
-Asia/Ashgabat.generic.long=\u30C8\u30EB\u30AF\u30E1\u30CB\u30B9\u30BF\u30F3\u6642\u9593
-Asia/Ashkhabad.generic.long=\u30C8\u30EB\u30AF\u30E1\u30CB\u30B9\u30BF\u30F3\u6642\u9593
-Asia/Baghdad.generic.long=\u30A2\u30E9\u30D3\u30A2\u6642\u9593
-Asia/Bahrain.generic.long=\u30A2\u30E9\u30D3\u30A2\u6642\u9593
-Asia/Baku.generic.long=\u30A2\u30BC\u30EB\u30D0\u30A4\u30B8\u30E3\u30F3\u6642\u9593
-Asia/Bangkok.generic.long=\u30A4\u30F3\u30C9\u30B7\u30CA\u6642\u9593
-Asia/Beirut.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Asia/Bishkek.generic.long=\u30AD\u30EB\u30AE\u30B9\u6642\u9593
-Asia/Brunei.generic.long=\u30D6\u30EB\u30CD\u30A4\u6642\u9593
-Asia/Calcutta.generic.long=\u30A4\u30F3\u30C9\u6642\u9593
-Asia/Choibalsan.generic.long=\u30C1\u30E7\u30A4\u30D0\u30EB\u30B5\u30F3\u6642\u9593
-Asia/Chongqing.generic.long=\u4E2D\u56FD\u6642\u9593
-Asia/Chungking.generic.long=\u4E2D\u56FD\u6642\u9593
-Asia/Colombo.generic.long=\u30A4\u30F3\u30C9\u6642\u9593
-Asia/Dacca.generic.long=\u30D0\u30F3\u30B0\u30E9\u30C7\u30B7\u30E5\u6642\u9593
-Asia/Damascus.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Asia/Dhaka.generic.long=\u30D0\u30F3\u30B0\u30E9\u30C7\u30B7\u30E5\u6642\u9593
-Asia/Dili.generic.long=\u6771\u30C6\u30A3\u30E2\u30FC\u30EB\u6642\u9593
-Asia/Dubai.generic.long=\u6E7E\u5CB8\u6642\u9593
-Asia/Dushanbe.generic.long=\u30BF\u30B8\u30AD\u30B9\u30BF\u30F3\u6642\u9593
-Asia/Gaza.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Asia/Harbin.generic.long=\u4E2D\u56FD\u6642\u9593
-Asia/Hebron.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Asia/Ho_Chi_Minh.generic.long=\u30A4\u30F3\u30C9\u30B7\u30CA\u6642\u9593
-Asia/Hong_Kong.generic.long=\u9999\u6E2F\u6642\u9593
-Asia/Hovd.generic.long=\u30DB\u30D6\u30C9\u6642\u9593
-Asia/Irkutsk.generic.long=\u30A4\u30EB\u30AF\u30FC\u30C4\u30AF\u6642\u9593
-Asia/Istanbul.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Asia/Jakarta.generic.long=\u897F\u90E8\u30A4\u30F3\u30C9\u30CD\u30B7\u30A2\u6642\u9593
-Asia/Jayapura.generic.long=\u6771\u90E8\u30A4\u30F3\u30C9\u30CD\u30B7\u30A2\u6642\u9593
-Asia/Jerusalem.generic.long=\u30A4\u30B9\u30E9\u30A8\u30EB\u6642\u9593
-Asia/Kabul.generic.long=\u30A2\u30D5\u30AC\u30CB\u30B9\u30BF\u30F3\u6642\u9593
-Asia/Kamchatka.generic.long=\u30DA\u30C8\u30ED\u30D1\u30D6\u30ED\u30D5\u30B9\u30AF\u30FB\u30AB\u30E0\u30C1\u30E3\u30C4\u30AD\u30FC\u6642\u9593
-Asia/Karachi.generic.long=\u30D1\u30AD\u30B9\u30BF\u30F3\u6642\u9593
-Asia/Kashgar.generic.long=\u4E2D\u56FD\u6642\u9593
-Asia/Kathmandu.generic.long=\u30CD\u30D1\u30FC\u30EB\u6642\u9593
-Asia/Katmandu.generic.long=\u30CD\u30D1\u30FC\u30EB\u6642\u9593
-Asia/Khandyga.daylight.long=\u30CF\u30F3\u30C9\u30A5\u30A4\u30AC\u590F\u6642\u9593
-Asia/Khandyga.generic.long=\u30CF\u30F3\u30C9\u30A5\u30A4\u30AC\u6642\u9593
-Asia/Khandyga.standard.long=\u30CF\u30F3\u30C9\u30A5\u30A4\u30AC\u6642\u9593
-Asia/Kolkata.generic.long=\u30A4\u30F3\u30C9\u6642\u9593
-Asia/Krasnoyarsk.generic.long=\u30AF\u30E9\u30B9\u30CE\u30E4\u30EB\u30B9\u30AF\u6642\u9593
-Asia/Kuala_Lumpur.generic.long=\u30DE\u30EC\u30FC\u30B7\u30A2\u6642\u9593
-Asia/Kuching.generic.long=\u30DE\u30EC\u30FC\u30B7\u30A2\u6642\u9593
-Asia/Kuwait.generic.long=\u30A2\u30E9\u30D3\u30A2\u6642\u9593
-Asia/Macao.generic.long=\u4E2D\u56FD\u6642\u9593
-Asia/Macau.generic.long=\u4E2D\u56FD\u6642\u9593
-Asia/Magadan.generic.long=\u30DE\u30AC\u30C0\u30F3\u6642\u9593
-Asia/Makassar.generic.long=\u4E2D\u90E8\u30A4\u30F3\u30C9\u30CD\u30B7\u30A2\u6642\u9593
-Asia/Manila.generic.long=\u30D5\u30A3\u30EA\u30D4\u30F3\u6642\u9593
-Asia/Muscat.generic.long=\u6E7E\u5CB8\u6642\u9593
-Asia/Nicosia.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Asia/Novokuznetsk.generic.long=\u30CE\u30F4\u30A9\u30B7\u30D3\u30EB\u30B9\u30AF\u6642\u9593
-Asia/Novosibirsk.generic.long=\u30CE\u30F4\u30A9\u30B7\u30D3\u30EB\u30B9\u30AF\u6642\u9593
-Asia/Omsk.generic.long=\u30AA\u30E0\u30B9\u30AF\u6642\u9593
-Asia/Oral.generic.long=\u30AA\u30E9\u30EB\u6642\u9593
-Asia/Phnom_Penh.generic.long=\u30A4\u30F3\u30C9\u30B7\u30CA\u6642\u9593
-Asia/Pontianak.generic.long=\u897F\u90E8\u30A4\u30F3\u30C9\u30CD\u30B7\u30A2\u6642\u9593
-Asia/Pyongyang.generic.long=\u97D3\u56FD\u6642\u9593
-Asia/Qatar.generic.long=\u30A2\u30E9\u30D3\u30A2\u6642\u9593
-Asia/Qyzylorda.generic.long=\u30AF\u30BA\u30ED\u30EB\u30C0\u6642\u9593
-Asia/Rangoon.generic.long=\u30DF\u30E3\u30F3\u30DE\u30FC\u6642\u9593
-Asia/Saigon.generic.long=\u30A4\u30F3\u30C9\u30B7\u30CA\u6642\u9593
-Asia/Sakhalin.generic.long=\u30B5\u30CF\u30EA\u30F3\u6642\u9593
-Asia/Samarkand.generic.long=\u30A6\u30BA\u30D9\u30AD\u30B9\u30BF\u30F3\u6642\u9593
-Asia/Seoul.generic.long=\u97D3\u56FD\u6642\u9593
-Asia/Shanghai.generic.long=\u4E2D\u56FD\u6642\u9593
-Asia/Singapore.generic.long=\u30B7\u30F3\u30AC\u30DD\u30FC\u30EB\u6642\u9593
-Asia/Taipei.generic.long=\u4E2D\u56FD\u6642\u9593
-Asia/Tashkent.generic.long=\u30A6\u30BA\u30D9\u30AD\u30B9\u30BF\u30F3\u6642\u9593
-Asia/Tbilisi.generic.long=\u30B0\u30EB\u30B8\u30A2\u6642\u9593
-Asia/Tehran.generic.long=\u30A4\u30E9\u30F3\u6642\u9593
-Asia/Tel_Aviv.generic.long=\u30A4\u30B9\u30E9\u30A8\u30EB\u6642\u9593
-Asia/Thimbu.generic.long=\u30D6\u30FC\u30BF\u30F3\u6642\u9593
-Asia/Thimphu.generic.long=\u30D6\u30FC\u30BF\u30F3\u6642\u9593
-Asia/Tokyo.generic.long=\u65E5\u672C\u6642\u9593
-Asia/Ujung_Pandang.generic.long=\u4E2D\u90E8\u30A4\u30F3\u30C9\u30CD\u30B7\u30A2\u6642\u9593
-Asia/Ulaanbaatar.generic.long=\u30A6\u30E9\u30F3\u30D0\u30FC\u30C8\u30EB\u6642\u9593
-Asia/Ulan_Bator.generic.long=\u30A6\u30E9\u30F3\u30D0\u30FC\u30C8\u30EB\u6642\u9593
-Asia/Urumqi.generic.long=\u4E2D\u56FD\u6642\u9593
-Asia/Ust-Nera.daylight.long=\u30A6\u30B9\u30C1\u30CD\u30E9\u590F\u6642\u9593
-Asia/Ust-Nera.generic.long=\u30A6\u30B9\u30C1\u30CD\u30E9\u6642\u9593
-Asia/Ust-Nera.standard.long=\u30A6\u30B9\u30C1\u30CD\u30E9\u6642\u9593
-Asia/Vientiane.generic.long=\u30A4\u30F3\u30C9\u30B7\u30CA\u6642\u9593
-Asia/Vladivostok.generic.long=\u30A6\u30E9\u30B8\u30AA\u30B9\u30C8\u30AF\u6642\u9593
-Asia/Yakutsk.generic.long=\u30E4\u30AF\u30FC\u30C4\u30AF\u6642\u9593
-Asia/Yekaterinburg.generic.long=\u30A8\u30AB\u30C6\u30EA\u30F3\u30D6\u30EB\u30AF\u6642\u9593
-Asia/Yerevan.generic.long=\u30A2\u30EB\u30E1\u30CB\u30A2\u6642\u9593
-Atlantic/Azores.generic.long=\u30A2\u30BE\u30EC\u30B9\u6642\u9593
-Atlantic/Bermuda.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642
-Atlantic/Canary.generic.long=\u897F\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Atlantic/Cape_Verde.generic.long=\u30AB\u30FC\u30DC\u30D9\u30EB\u30C7\u6642\u9593
-Atlantic/Faeroe.generic.long=\u897F\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Atlantic/Faroe.generic.long=\u897F\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Atlantic/Jan_Mayen.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Atlantic/Madeira.generic.long=\u897F\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Atlantic/Reykjavik.generic.long=\u30B0\u30EA\u30CB\u30C3\u30B8\u6A19\u6E96\u6642
-Atlantic/South_Georgia.generic.long=\u5357\u30B8\u30E7\u30FC\u30B8\u30A2\u6642\u9593
-Atlantic/St_Helena.generic.long=\u30B0\u30EA\u30CB\u30C3\u30B8\u6A19\u6E96\u6642
-Atlantic/Stanley.generic.long=\u30D5\u30A9\u30FC\u30AF\u30E9\u30F3\u30C9\u8AF8\u5CF6\u6642\u9593
-Australia/ACT.daylight.long=\u6771\u90E8\u590F\u6642\u9593(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)
-Australia/ACT.generic.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)
-Australia/ACT.standard.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)
-Australia/Adelaide.daylight.long=\u4E2D\u90E8\u590F\u6642\u9593(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)
-Australia/Adelaide.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)
-Australia/Adelaide.standard.long=\u4E2D\u90E8\u6A19\u6E96\u6642(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)
-Australia/Brisbane.daylight.long=\u6771\u90E8\u590F\u6642\u9593(\u30AF\u30A4\u30FC\u30F3\u30BA\u30E9\u30F3\u30C9)
-Australia/Brisbane.generic.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30AF\u30A4\u30FC\u30F3\u30BA\u30E9\u30F3\u30C9)
-Australia/Brisbane.standard.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30AF\u30A4\u30FC\u30F3\u30BA\u30E9\u30F3\u30C9)
-Australia/Broken_Hill.daylight.long=\u4E2D\u90E8\u590F\u6642\u9593(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2/\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)
-Australia/Broken_Hill.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2/\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)
-Australia/Broken_Hill.standard.long=\u4E2D\u90E8\u6A19\u6E96\u6642(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2/\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)
-Australia/Canberra.daylight.long=\u6771\u90E8\u590F\u6642\u9593(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)
-Australia/Canberra.generic.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)
-Australia/Canberra.standard.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)
-Australia/Currie.daylight.long=\u6771\u90E8\u590F\u6642\u9593(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)
-Australia/Currie.generic.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)
-Australia/Currie.standard.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)
-Australia/Darwin.daylight.long=\u4E2D\u90E8\u590F\u6642\u9593(\u30CE\u30FC\u30B6\u30F3\u30C6\u30EA\u30C8\u30EA\u30FC)
-Australia/Darwin.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642(\u30CE\u30FC\u30B6\u30F3\u30C6\u30EA\u30C8\u30EA\u30FC)
-Australia/Darwin.standard.long=\u4E2D\u90E8\u6A19\u6E96\u6642(\u30CE\u30FC\u30B6\u30F3\u30C6\u30EA\u30C8\u30EA\u30FC)
-Australia/Eucla.daylight.long=\u4E2D\u897F\u90E8\u590F\u6642\u9593(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)
-Australia/Eucla.generic.long=\u4E2D\u897F\u90E8\u6642\u9593(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)
-Australia/Eucla.standard.long=\u4E2D\u897F\u90E8\u6A19\u6E96\u6642(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)
-Australia/Hobart.daylight.long=\u6771\u90E8\u590F\u6642\u9593(\u30BF\u30B9\u30DE\u30CB\u30A2)
-Australia/Hobart.generic.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30BF\u30B9\u30DE\u30CB\u30A2)
-Australia/Hobart.standard.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30BF\u30B9\u30DE\u30CB\u30A2)
-Australia/LHI.generic.long=\u30ED\u30FC\u30C9\u30CF\u30A6\u6642\u9593
-Australia/Lindeman.daylight.long=\u6771\u90E8\u590F\u6642\u9593(\u30AF\u30A4\u30FC\u30F3\u30BA\u30E9\u30F3\u30C9)
-Australia/Lindeman.generic.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30AF\u30A4\u30FC\u30F3\u30BA\u30E9\u30F3\u30C9)
-Australia/Lindeman.standard.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30AF\u30A4\u30FC\u30F3\u30BA\u30E9\u30F3\u30C9)
-Australia/Lord_Howe.generic.long=\u30ED\u30FC\u30C9\u30CF\u30A6\u6642\u9593
-Australia/Melbourne.daylight.long=\u6771\u90E8\u590F\u6642\u9593(\u30D3\u30AF\u30C8\u30EA\u30A2)
-Australia/Melbourne.generic.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30D3\u30AF\u30C8\u30EA\u30A2)
-Australia/Melbourne.standard.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30D3\u30AF\u30C8\u30EA\u30A2)
-Australia/NSW.daylight.long=\u6771\u90E8\u590F\u6642\u9593(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)
-Australia/NSW.generic.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)
-Australia/NSW.standard.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)
-Australia/North.daylight.long=\u4E2D\u90E8\u590F\u6642\u9593(\u30CE\u30FC\u30B6\u30F3\u30C6\u30EA\u30C8\u30EA\u30FC)
-Australia/North.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642(\u30CE\u30FC\u30B6\u30F3\u30C6\u30EA\u30C8\u30EA\u30FC)
-Australia/North.standard.long=\u4E2D\u90E8\u6A19\u6E96\u6642(\u30CE\u30FC\u30B6\u30F3\u30C6\u30EA\u30C8\u30EA\u30FC)
-Australia/Perth.daylight.long=\u897F\u90E8\u590F\u6642\u9593(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)
-Australia/Perth.generic.long=\u897F\u90E8\u6642\u9593(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)
-Australia/Perth.standard.long=\u897F\u90E8\u6A19\u6E96\u6642(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)
-Australia/Queensland.daylight.long=\u6771\u90E8\u590F\u6642\u9593(\u30AF\u30A4\u30FC\u30F3\u30BA\u30E9\u30F3\u30C9)
-Australia/Queensland.generic.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30AF\u30A4\u30FC\u30F3\u30BA\u30E9\u30F3\u30C9)
-Australia/Queensland.standard.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30AF\u30A4\u30FC\u30F3\u30BA\u30E9\u30F3\u30C9)
-Australia/South.daylight.long=\u4E2D\u90E8\u590F\u6642\u9593(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)
-Australia/South.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)
-Australia/South.standard.long=\u4E2D\u90E8\u6A19\u6E96\u6642(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)
-Australia/Sydney.daylight.long=\u6771\u90E8\u590F\u6642\u9593(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)
-Australia/Sydney.generic.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)
-Australia/Sydney.standard.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)
-Australia/Tasmania.daylight.long=\u6771\u90E8\u590F\u6642\u9593(\u30BF\u30B9\u30DE\u30CB\u30A2)
-Australia/Tasmania.generic.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30BF\u30B9\u30DE\u30CB\u30A2)
-Australia/Tasmania.standard.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30BF\u30B9\u30DE\u30CB\u30A2)
-Australia/Victoria.daylight.long=\u6771\u90E8\u590F\u6642\u9593(\u30D3\u30AF\u30C8\u30EA\u30A2)
-Australia/Victoria.generic.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30D3\u30AF\u30C8\u30EA\u30A2)
-Australia/Victoria.standard.long=\u6771\u90E8\u6A19\u6E96\u6642(\u30D3\u30AF\u30C8\u30EA\u30A2)
-Australia/West.daylight.long=\u897F\u90E8\u590F\u6642\u9593(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)
-Australia/West.generic.long=\u897F\u90E8\u6642\u9593(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)
-Australia/West.standard.long=\u897F\u90E8\u6A19\u6E96\u6642(\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2)
-Australia/Yancowinna.daylight.long=\u4E2D\u90E8\u590F\u6642\u9593(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2/\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)
-Australia/Yancowinna.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2/\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)
-Australia/Yancowinna.standard.long=\u4E2D\u90E8\u6A19\u6E96\u6642(\u5357\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2/\u30CB\u30E5\u30FC\u30B5\u30A6\u30B9\u30A6\u30A7\u30FC\u30EB\u30BA)
-BET.generic.long=\u30D6\u30E9\u30B8\u30EA\u30A2\u6642\u9593
-BST.generic.long=\u30D0\u30F3\u30B0\u30E9\u30C7\u30B7\u30E5\u6642\u9593
-Brazil/Acre.generic.long=\u30a2\u30af\u30ec\u6642\u9593
-Brazil/DeNoronha.generic.long=\u30D5\u30A7\u30EB\u30CA\u30F3\u30C9\u30FB\u30C7\u30FB\u30CE\u30ED\u30FC\u30CB\u30E3\u6642\u9593
-Brazil/East.generic.long=\u30D6\u30E9\u30B8\u30EA\u30A2\u6642\u9593
-Brazil/West.generic.long=\u30A2\u30DE\u30BE\u30F3\u6642\u9593
-CAT.generic.long=\u4E2D\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593
-CET.generic.long=\u4e2d\u90e8\u30e8\u30fc\u30ed\u30c3\u30d1\u6642\u9593
-CNT.generic.long=\u30CB\u30E5\u30FC\u30D5\u30A1\u30F3\u30C9\u30E9\u30F3\u30C9\u6642\u9593
-CST.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642
-CST6CDT.generic.long=\u4e2d\u90e8\u6a19\u6e96\u6642
-CTT.generic.long=\u4E2D\u56FD\u6642\u9593
-Canada/Atlantic.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642
-Canada/Central.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642
-Canada/East-Saskatchewan.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642
-Canada/Eastern.generic.long=\u6771\u90E8\u6A19\u6E96\u6642
-Canada/Mountain.generic.long=\u5C71\u5730\u6A19\u6E96\u6642
-Canada/Newfoundland.generic.long=\u30CB\u30E5\u30FC\u30D5\u30A1\u30F3\u30C9\u30E9\u30F3\u30C9\u6642\u9593
-Canada/Pacific.generic.long=\u592A\u5E73\u6D0B\u6A19\u6E96\u6642
-Canada/Saskatchewan.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642
-Canada/Yukon.generic.long=\u592A\u5E73\u6D0B\u6A19\u6E96\u6642
-Chile/Continental.generic.long=\u30C1\u30EA\u6642\u9593
-Chile/EasterIsland.generic.long=\u30A4\u30FC\u30B9\u30BF\u30FC\u5CF6\u6642\u9593
-Cuba.generic.long=\u30AD\u30E5\u30FC\u30D0\u6642\u9593
-EAT.generic.long=\u6771\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593
-ECT.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-EET.generic.long=\u6771\u90e8\u30e8\u30fc\u30ed\u30c3\u30d1\u6642\u9593
-EST.generic.long=\u6771\u90e8\u6a19\u6e96\u6642
-EST5EDT.generic.long=\u6771\u90e8\u6a19\u6e96\u6642
-Egypt.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Eire.generic.long=\u30A2\u30A4\u30EB\u30E9\u30F3\u30C9\u6642\u9593
-Etc/Greenwich.generic.long=\u30B0\u30EA\u30CB\u30C3\u30B8\u6A19\u6E96\u6642
-Etc/UCT.generic.long=\u5354\u5B9A\u4E16\u754C\u6642
-Etc/UTC.generic.long=\u5354\u5B9A\u4E16\u754C\u6642
-Etc/Universal.generic.long=\u5354\u5B9A\u4E16\u754C\u6642
-Etc/Zulu.generic.long=\u5354\u5B9A\u4E16\u754C\u6642
-Europe/Amsterdam.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Europe/Andorra.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Europe/Athens.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Europe/Belfast.generic.long=\u30A4\u30AE\u30EA\u30B9\u6642\u9593
-Europe/Belgrade.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Europe/Berlin.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Europe/Bratislava.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Europe/Brussels.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Europe/Bucharest.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Europe/Budapest.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Europe/Busingen.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Europe/Chisinau.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Europe/Copenhagen.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Europe/Dublin.generic.long=\u30A2\u30A4\u30EB\u30E9\u30F3\u30C9\u6642\u9593
-Europe/Gibraltar.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Europe/Guernsey.generic.long=\u30A4\u30AE\u30EA\u30B9\u6642\u9593
-Europe/Helsinki.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Europe/Isle_of_Man.generic.long=\u30A4\u30AE\u30EA\u30B9\u6642\u9593
-Europe/Istanbul.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Europe/Jersey.generic.long=\u30A4\u30AE\u30EA\u30B9\u6642\u9593
-Europe/Kaliningrad.daylight.long=\u6975\u6771\u30E8\u30FC\u30ED\u30C3\u30D1\u590F\u6642\u9593
-Europe/Kaliningrad.generic.long=\u6975\u6771\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Europe/Kaliningrad.standard.long=\u6975\u6771\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Europe/Kiev.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Europe/Lisbon.generic.long=\u897F\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Europe/Ljubljana.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Europe/London.generic.long=\u30A4\u30AE\u30EA\u30B9\u6642\u9593
-Europe/Luxembourg.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Europe/Madrid.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Europe/Malta.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Europe/Mariehamn.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Europe/Minsk.daylight.long=\u6975\u6771\u30E8\u30FC\u30ED\u30C3\u30D1\u590F\u6642\u9593
-Europe/Minsk.generic.long=\u6975\u6771\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Europe/Minsk.standard.long=\u6975\u6771\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Europe/Monaco.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Europe/Moscow.generic.long=\u30E2\u30B9\u30AF\u30EF\u6642\u9593
-Europe/Nicosia.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Europe/Oslo.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Europe/Paris.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Europe/Podgorica.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Europe/Prague.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Europe/Riga.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Europe/Rome.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Europe/Samara.generic.long=\u30B5\u30DE\u30E9\u6642\u9593
-Europe/San_Marino.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Europe/Sarajevo.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Europe/Simferopol.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Europe/Skopje.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Europe/Sofia.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Europe/Stockholm.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Europe/Tallinn.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Europe/Tirane.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Europe/Tiraspol.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Europe/Uzhgorod.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Europe/Vaduz.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Europe/Vatican.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Europe/Vienna.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Europe/Vilnius.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Europe/Volgograd.generic.long=\u30DC\u30EB\u30B4\u30B0\u30E9\u30FC\u30C9\u6642\u9593
-Europe/Warsaw.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Europe/Zagreb.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Europe/Zaporozhye.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Europe/Zurich.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-GB-Eire.generic.long=\u30A4\u30AE\u30EA\u30B9\u6642\u9593
-GB.generic.long=\u30A4\u30AE\u30EA\u30B9\u6642\u9593
-GMT.generic.long=\u30B0\u30EA\u30CB\u30C3\u30B8\u6A19\u6E96\u6642
-Greenwich.generic.long=\u30B0\u30EA\u30CB\u30C3\u30B8\u6A19\u6E96\u6642
-HST.generic.long=\u30cf\u30ef\u30a4\u6642\u9593
-Hongkong.generic.long=\u9999\u6E2F\u6642\u9593
-IET.generic.long=\u6771\u90E8\u6A19\u6E96\u6642
-IST.generic.long=\u30A4\u30F3\u30C9\u6642\u9593
-Iceland.generic.long=\u30B0\u30EA\u30CB\u30C3\u30B8\u6A19\u6E96\u6642
-Indian/Antananarivo.generic.long=\u6771\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593
-Indian/Chagos.generic.long=\u30A4\u30F3\u30C9\u6D0B\u5730\u57DF\u6642\u9593
-Indian/Christmas.generic.long=\u30AF\u30EA\u30B9\u30DE\u30B9\u5CF6\u6642\u9593
-Indian/Cocos.generic.long=\u30B3\u30B3\u30B9\u8AF8\u5CF6\u6642\u9593
-Indian/Comoro.generic.long=\u6771\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593
-Indian/Kerguelen.generic.long=\u30D5\u30E9\u30F3\u30B9\u9818\u5357\u65B9\u304A\u3088\u3073\u5357\u6975\u5927\u9678\u6642\u9593
-Indian/Mahe.generic.long=\u30BB\u30FC\u30B7\u30A7\u30EB\u6642\u9593
-Indian/Maldives.generic.long=\u30E2\u30EB\u30B8\u30D6\u6642\u9593
-Indian/Mauritius.generic.long=\u30E2\u30FC\u30EA\u30B7\u30E3\u30B9\u6642\u9593
-Indian/Mayotte.generic.long=\u6771\u90E8\u30A2\u30D5\u30EA\u30AB\u6642\u9593
-Indian/Reunion.generic.long=\u30EC\u30E6\u30CB\u30AA\u30F3\u6642\u9593
-Iran.generic.long=\u30A4\u30E9\u30F3\u6642\u9593
-Israel.generic.long=\u30A4\u30B9\u30E9\u30A8\u30EB\u6642\u9593
-JST.generic.long=\u65E5\u672C\u6642\u9593
-Jamaica.generic.long=\u6771\u90E8\u6A19\u6E96\u6642
-Japan.generic.long=\u65E5\u672C\u6642\u9593
-Kwajalein.generic.long=\u30DE\u30FC\u30B7\u30E3\u30EB\u8AF8\u5CF6\u6642\u9593
-Libya.generic.long=\u6771\u90e8\u30e8\u30fc\u30ed\u30c3\u30d1\u6642\u9593
-MET.generic.long=MET
-MIT.generic.long=\u897F\u30B5\u30E2\u30A2\u6642\u9593
-MST.generic.long=\u5c71\u5730\u6a19\u6e96\u6642
-MST7MDT.generic.long=\u5c71\u5730\u6a19\u6e96\u6642
-Mexico/BajaNorte.generic.long=\u592A\u5E73\u6D0B\u6A19\u6E96\u6642
-Mexico/BajaSur.generic.long=\u5C71\u5730\u6A19\u6E96\u6642
-Mexico/General.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642
-NET.generic.long=\u30A2\u30EB\u30E1\u30CB\u30A2\u6642\u9593
-NST.generic.long=\u30CB\u30E5\u30FC\u30B8\u30FC\u30E9\u30F3\u30C9\u6642\u9593
-NZ-CHAT.generic.long=\u30C1\u30E3\u30BF\u30E0\u6642\u9593
-NZ.generic.long=\u30CB\u30E5\u30FC\u30B8\u30FC\u30E9\u30F3\u30C9\u6642\u9593
-Navajo.generic.long=\u5C71\u5730\u6A19\u6E96\u6642
-PLT.generic.long=\u30D1\u30AD\u30B9\u30BF\u30F3\u6642\u9593
-PNT.generic.long=\u5C71\u5730\u6A19\u6E96\u6642
-PRC.generic.long=\u4E2D\u56FD\u6642\u9593
-PRT.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642
-PST.generic.long=\u592A\u5E73\u6D0B\u6A19\u6E96\u6642
-PST8PDT.generic.long=\u592a\u5e73\u6d0b\u6a19\u6e96\u6642
-Pacific/Apia.generic.long=\u897F\u30B5\u30E2\u30A2\u6642\u9593
-Pacific/Auckland.generic.long=\u30CB\u30E5\u30FC\u30B8\u30FC\u30E9\u30F3\u30C9\u6642\u9593
-Pacific/Chatham.generic.long=\u30C1\u30E3\u30BF\u30E0\u6642\u9593
-Pacific/Chuuk.daylight.long=Chuuk Time
-Pacific/Chuuk.generic.long=\u30C1\u30E5\u30FC\u30AF\u6642\u9593
-Pacific/Chuuk.standard.long=\u30C1\u30E5\u30FC\u30AF\u6642\u9593
-Pacific/Easter.generic.long=\u30A4\u30FC\u30B9\u30BF\u30FC\u5CF6\u6642\u9593
-Pacific/Efate.generic.long=\u30D0\u30CC\u30A2\u30C4\u6642\u9593
-Pacific/Enderbury.generic.long=\u30D5\u30A7\u30CB\u30C3\u30AF\u30B9\u8AF8\u5CF6\u6642\u9593
-Pacific/Fakaofo.generic.long=\u30C8\u30B1\u30E9\u30A6\u6642\u9593
-Pacific/Fiji.generic.long=\u30D5\u30A3\u30B8\u30FC\u6642\u9593
-Pacific/Funafuti.generic.long=\u30C4\u30D0\u30EB\u6642\u9593
-Pacific/Galapagos.generic.long=\u30AC\u30E9\u30D1\u30B4\u30B9\u6642\u9593
-Pacific/Gambier.generic.long=\u30AC\u30F3\u30D3\u30A8\u6642\u9593
-Pacific/Guadalcanal.generic.long=\u30BD\u30ED\u30E2\u30F3\u8AF8\u5CF6\u6642\u9593
-Pacific/Guam.generic.long=\u30C1\u30E3\u30E2\u30ED\u6642\u9593
-Pacific/Honolulu.generic.long=\u30CF\u30EF\u30A4\u6642\u9593
-Pacific/Johnston.generic.long=\u30CF\u30EF\u30A4\u6642\u9593
-Pacific/Kiritimati.generic.long=\u30E9\u30A4\u30F3\u8AF8\u5CF6\u6642\u9593
-Pacific/Kosrae.generic.long=\u30B3\u30B9\u30E9\u30A8\u6642\u9593
-Pacific/Kwajalein.generic.long=\u30DE\u30FC\u30B7\u30E3\u30EB\u8AF8\u5CF6\u6642\u9593
-Pacific/Majuro.generic.long=\u30DE\u30FC\u30B7\u30E3\u30EB\u8AF8\u5CF6\u6642\u9593
-Pacific/Marquesas.generic.long=\u30DE\u30EB\u30AD\u30FC\u30BA\u6642\u9593
-Pacific/Midway.generic.long=\u30B5\u30E2\u30A2\u6642\u9593
-Pacific/Nauru.generic.long=\u30CA\u30A6\u30EB\u6642\u9593
-Pacific/Niue.generic.long=\u30CB\u30A6\u30A8\u6642\u9593
-Pacific/Norfolk.generic.long=\u30CE\u30FC\u30D5\u30A9\u30FC\u30AF\u6642\u9593
-Pacific/Noumea.generic.long=\u30CB\u30E5\u30FC\u30AB\u30EC\u30C9\u30CB\u30A2\u6642\u9593
-Pacific/Pago_Pago.generic.long=\u30B5\u30E2\u30A2\u6642\u9593
-Pacific/Palau.generic.long=\u30D1\u30E9\u30AA\u6642\u9593
-Pacific/Pitcairn.generic.long=\u30D4\u30C8\u30B1\u30A2\u30F3\u6642\u9593
-Pacific/Pohnpei.daylight.long=\u30DD\u30F3\u30DA\u30A4\u590F\u6642\u9593
-Pacific/Pohnpei.generic.long=\u30DD\u30CA\u30DA\u6642\u9593
-Pacific/Pohnpei.standard.long=\u30DD\u30F3\u30DA\u30A4\u6642\u9593
-Pacific/Ponape.daylight.long=\u30DD\u30F3\u30DA\u30A4\u590F\u6642\u9593
-Pacific/Ponape.generic.long=\u30DD\u30CA\u30DA\u6642\u9593
-Pacific/Ponape.standard.long=\u30DD\u30F3\u30DA\u30A4\u6642\u9593
-Pacific/Port_Moresby.generic.long=\u30D1\u30D7\u30A2\u30CB\u30E5\u30FC\u30AE\u30CB\u30A2\u6642\u9593
-Pacific/Rarotonga.generic.long=\u30AF\u30C3\u30AF\u8AF8\u5CF6\u6642\u9593
-Pacific/Saipan.generic.long=\u30C1\u30E3\u30E2\u30ED\u6642\u9593
-Pacific/Samoa.generic.long=\u30B5\u30E2\u30A2\u6642\u9593
-Pacific/Tahiti.generic.long=\u30BF\u30D2\u30C1\u6642\u9593
-Pacific/Tarawa.generic.long=\u30AE\u30EB\u30D0\u30FC\u30C8\u8AF8\u5CF6\u6642\u9593
-Pacific/Tongatapu.generic.long=\u30C8\u30F3\u30AC\u6642\u9593
-Pacific/Truk.daylight.long=Chuuk Time
-Pacific/Truk.generic.long=\u30C1\u30E5\u30FC\u30AF\u6642\u9593
-Pacific/Truk.standard.long=\u30C1\u30E5\u30FC\u30AF\u6642\u9593
-Pacific/Wake.generic.long=\u30A6\u30A7\u30FC\u30AF\u6642\u9593
-Pacific/Wallis.generic.long=\u30A6\u30A9\u30EA\u30B9\u30FB\u30D5\u30C4\u30CA\u6642\u9593
-Pacific/Yap.daylight.long=Chuuk Time
-Pacific/Yap.generic.long=\u30C1\u30E5\u30FC\u30AF\u6642\u9593
-Pacific/Yap.standard.long=\u30C1\u30E5\u30FC\u30AF\u6642\u9593
-Poland.generic.long=\u4E2D\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-Portugal.generic.long=\u897F\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-ROK.generic.long=\u97D3\u56FD\u6642\u9593
-SST.generic.long=\u30BD\u30ED\u30E2\u30F3\u8AF8\u5CF6\u6642\u9593
-Singapore.generic.long=\u30B7\u30F3\u30AC\u30DD\u30FC\u30EB\u6642\u9593
-SystemV/AST4.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642
-SystemV/AST4ADT.generic.long=\u5927\u897F\u6D0B\u6A19\u6E96\u6642
-SystemV/CST6.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642
-SystemV/CST6CDT.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642
-SystemV/EST5.generic.long=\u6771\u90E8\u6A19\u6E96\u6642
-SystemV/EST5EDT.generic.long=\u6771\u90E8\u6A19\u6E96\u6642
-SystemV/HST10.generic.long=\u30CF\u30EF\u30A4\u6642\u9593
-SystemV/MST7.generic.long=\u5C71\u5730\u6A19\u6E96\u6642
-SystemV/MST7MDT.generic.long=\u5C71\u5730\u6A19\u6E96\u6642
-SystemV/PST8.generic.long=\u592A\u5E73\u6D0B\u6A19\u6E96\u6642
-SystemV/PST8PDT.generic.long=\u592A\u5E73\u6D0B\u6A19\u6E96\u6642
-SystemV/YST9.generic.long=\u30A2\u30E9\u30B9\u30AB\u6642\u9593
-SystemV/YST9YDT.generic.long=\u30A2\u30E9\u30B9\u30AB\u6642\u9593
-Turkey.generic.long=\u6771\u90E8\u30E8\u30FC\u30ED\u30C3\u30D1\u6642\u9593
-UCT.generic.long=\u5354\u5B9A\u4E16\u754C\u6642
-US/Alaska.generic.long=\u30A2\u30E9\u30B9\u30AB\u6642\u9593
-US/Aleutian.generic.long=\u30CF\u30EF\u30A4\u30FB\u30A2\u30EA\u30E5\u30FC\u30B7\u30E3\u30F3\u6642\u9593
-US/Arizona.generic.long=\u5C71\u5730\u6A19\u6E96\u6642
-US/Central.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642
-US/East-Indiana.generic.long=\u6771\u90E8\u6A19\u6E96\u6642
-US/Eastern.generic.long=\u6771\u90E8\u6A19\u6E96\u6642
-US/Hawaii.generic.long=\u30CF\u30EF\u30A4\u6642\u9593
-US/Indiana-Starke.generic.long=\u4E2D\u90E8\u6A19\u6E96\u6642
-US/Michigan.generic.long=\u6771\u90E8\u6A19\u6E96\u6642
-US/Mountain.generic.long=\u5C71\u5730\u6A19\u6E96\u6642
-US/Pacific-New.generic.long=\u592A\u5E73\u6D0B\u6A19\u6E96\u6642
-US/Pacific.generic.long=\u592A\u5E73\u6D0B\u6A19\u6E96\u6642
-US/Samoa.generic.long=\u30B5\u30E2\u30A2\u6642\u9593
-UTC.generic.long=\u5354\u5B9A\u4E16\u754C\u6642
-Universal.generic.long=\u5354\u5B9A\u4E16\u754C\u6642
-VST.generic.long=\u30A4\u30F3\u30C9\u30B7\u30CA\u6642\u9593
-W-SU.generic.long=\u30E2\u30B9\u30AF\u30EF\u6642\u9593
-WET.generic.long=\u897f\u90e8\u30e8\u30fc\u30ed\u30c3\u30d1\u6642\u9593
-Zulu.generic.long=\u5354\u5B9A\u4E16\u754C\u6642
diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_ja_short.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_ja_short.properties
deleted file mode 100644
index 095522a..0000000
--- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_ja_short.properties
+++ /dev/null
@@ -1,1743 +0,0 @@
-ACT.daylight.short=CST
-ACT.generic.short=CT
-ACT.standard.short=CST
-AET.daylight.short=EST
-AET.generic.short=ET
-AET.standard.short=EST
-Africa/Abidjan.daylight.short=GMT
-Africa/Abidjan.generic.short=GMT
-Africa/Abidjan.standard.short=GMT
-Africa/Accra.daylight.short=GHST
-Africa/Accra.generic.short=GMT
-Africa/Accra.standard.short=GMT
-Africa/Addis_Ababa.daylight.short=EAST
-Africa/Addis_Ababa.generic.short=EAT
-Africa/Addis_Ababa.standard.short=EAT
-Africa/Algiers.daylight.short=CEST
-Africa/Algiers.generic.short=CET
-Africa/Algiers.standard.short=CET
-Africa/Asmara.daylight.short=EAST
-Africa/Asmara.generic.short=EAT
-Africa/Asmara.standard.short=EAT
-Africa/Asmera.daylight.short=EAST
-Africa/Asmera.generic.short=EAT
-Africa/Asmera.standard.short=EAT
-Africa/Bamako.daylight.short=GMT
-Africa/Bamako.generic.short=GMT
-Africa/Bamako.standard.short=GMT
-Africa/Bangui.daylight.short=WAST
-Africa/Bangui.generic.short=WAT
-Africa/Bangui.standard.short=WAT
-Africa/Banjul.daylight.short=GMT
-Africa/Banjul.generic.short=GMT
-Africa/Banjul.standard.short=GMT
-Africa/Bissau.daylight.short=GMT
-Africa/Bissau.generic.short=GMT
-Africa/Bissau.standard.short=GMT
-Africa/Blantyre.daylight.short=CAST
-Africa/Blantyre.generic.short=CAT
-Africa/Blantyre.standard.short=CAT
-Africa/Brazzaville.daylight.short=WAST
-Africa/Brazzaville.generic.short=WAT
-Africa/Brazzaville.standard.short=WAT
-Africa/Bujumbura.daylight.short=CAST
-Africa/Bujumbura.generic.short=CAT
-Africa/Bujumbura.standard.short=CAT
-Africa/Cairo.daylight.short=EEST
-Africa/Cairo.generic.short=EET
-Africa/Cairo.standard.short=EET
-Africa/Casablanca.daylight.short=WEST
-Africa/Casablanca.generic.short=WET
-Africa/Casablanca.standard.short=WET
-Africa/Ceuta.daylight.short=CEST
-Africa/Ceuta.generic.short=CET
-Africa/Ceuta.standard.short=CET
-Africa/Conakry.daylight.short=GMT
-Africa/Conakry.generic.short=GMT
-Africa/Conakry.standard.short=GMT
-Africa/Dakar.daylight.short=GMT
-Africa/Dakar.generic.short=GMT
-Africa/Dakar.standard.short=GMT
-Africa/Dar_es_Salaam.daylight.short=EAST
-Africa/Dar_es_Salaam.generic.short=EAT
-Africa/Dar_es_Salaam.standard.short=EAT
-Africa/Djibouti.daylight.short=EAST
-Africa/Djibouti.generic.short=EAT
-Africa/Djibouti.standard.short=EAT
-Africa/Douala.daylight.short=WAST
-Africa/Douala.generic.short=WAT
-Africa/Douala.standard.short=WAT
-Africa/El_Aaiun.daylight.short=WEST
-Africa/El_Aaiun.generic.short=WET
-Africa/El_Aaiun.standard.short=WET
-Africa/Freetown.daylight.short=SLST
-Africa/Freetown.generic.short=SLT
-Africa/Freetown.standard.short=GMT
-Africa/Gaborone.daylight.short=CAST
-Africa/Gaborone.generic.short=CAT
-Africa/Gaborone.standard.short=CAT
-Africa/Harare.daylight.short=CAST
-Africa/Harare.generic.short=CAT
-Africa/Harare.standard.short=CAT
-Africa/Johannesburg.daylight.short=SAST
-Africa/Johannesburg.generic.short=SAT
-Africa/Johannesburg.standard.short=SAST
-Africa/Juba.daylight.short=EAST
-Africa/Juba.generic.short=EAT
-Africa/Juba.standard.short=EAT
-Africa/Kampala.daylight.short=EAST
-Africa/Kampala.generic.short=EAT
-Africa/Kampala.standard.short=EAT
-Africa/Khartoum.daylight.short=EAST
-Africa/Khartoum.generic.short=EAT
-Africa/Khartoum.standard.short=EAT
-Africa/Kigali.daylight.short=CAST
-Africa/Kigali.generic.short=CAT
-Africa/Kigali.standard.short=CAT
-Africa/Kinshasa.daylight.short=WAST
-Africa/Kinshasa.generic.short=WAT
-Africa/Kinshasa.standard.short=WAT
-Africa/Lagos.daylight.short=WAST
-Africa/Lagos.generic.short=WAT
-Africa/Lagos.standard.short=WAT
-Africa/Libreville.daylight.short=WAST
-Africa/Libreville.generic.short=WAT
-Africa/Libreville.standard.short=WAT
-Africa/Lome.daylight.short=GMT
-Africa/Lome.generic.short=GMT
-Africa/Lome.standard.short=GMT
-Africa/Luanda.daylight.short=WAST
-Africa/Luanda.generic.short=WAT
-Africa/Luanda.standard.short=WAT
-Africa/Lubumbashi.daylight.short=CAST
-Africa/Lubumbashi.generic.short=CAT
-Africa/Lubumbashi.standard.short=CAT
-Africa/Lusaka.daylight.short=CAST
-Africa/Lusaka.generic.short=CAT
-Africa/Lusaka.standard.short=CAT
-Africa/Malabo.daylight.short=WAST
-Africa/Malabo.generic.short=WAT
-Africa/Malabo.standard.short=WAT
-Africa/Maputo.daylight.short=CAST
-Africa/Maputo.generic.short=CAT
-Africa/Maputo.standard.short=CAT
-Africa/Maseru.daylight.short=SAST
-Africa/Maseru.generic.short=SAT
-Africa/Maseru.standard.short=SAST
-Africa/Mbabane.daylight.short=SAST
-Africa/Mbabane.generic.short=SAT
-Africa/Mbabane.standard.short=SAST
-Africa/Mogadishu.daylight.short=EAST
-Africa/Mogadishu.generic.short=EAT
-Africa/Mogadishu.standard.short=EAT
-Africa/Monrovia.daylight.short=GMT
-Africa/Monrovia.generic.short=GMT
-Africa/Monrovia.standard.short=GMT
-Africa/Nairobi.daylight.short=EAST
-Africa/Nairobi.generic.short=EAT
-Africa/Nairobi.standard.short=EAT
-Africa/Ndjamena.daylight.short=WAST
-Africa/Ndjamena.generic.short=WAT
-Africa/Ndjamena.standard.short=WAT
-Africa/Niamey.daylight.short=WAST
-Africa/Niamey.generic.short=WAT
-Africa/Niamey.standard.short=WAT
-Africa/Nouakchott.daylight.short=GMT
-Africa/Nouakchott.generic.short=GMT
-Africa/Nouakchott.standard.short=GMT
-Africa/Ouagadougou.daylight.short=GMT
-Africa/Ouagadougou.generic.short=GMT
-Africa/Ouagadougou.standard.short=GMT
-Africa/Porto-Novo.daylight.short=WAST
-Africa/Porto-Novo.generic.short=WAT
-Africa/Porto-Novo.standard.short=WAT
-Africa/Sao_Tome.daylight.short=GMT
-Africa/Sao_Tome.generic.short=GMT
-Africa/Sao_Tome.standard.short=GMT
-Africa/Timbuktu.daylight.short=GMT
-Africa/Timbuktu.generic.short=GMT
-Africa/Timbuktu.standard.short=GMT
-Africa/Tripoli.daylight.short=EEST
-Africa/Tripoli.generic.short=EET
-Africa/Tripoli.standard.short=EET
-Africa/Tunis.daylight.short=CEST
-Africa/Tunis.generic.short=CET
-Africa/Tunis.standard.short=CET
-Africa/Windhoek.daylight.short=WAST
-Africa/Windhoek.generic.short=WAT
-Africa/Windhoek.standard.short=WAT
-AGT.daylight.short=ARST
-AGT.generic.short=ART
-AGT.standard.short=ART
-America/Adak.daylight.short=HADT
-America/Adak.generic.short=HAT
-America/Adak.standard.short=HAST
-America/Anchorage.daylight.short=AKDT
-America/Anchorage.generic.short=AKT
-America/Anchorage.standard.short=AKST
-America/Anguilla.daylight.short=ADT
-America/Anguilla.generic.short=AT
-America/Anguilla.standard.short=AST
-America/Antigua.daylight.short=ADT
-America/Antigua.generic.short=AT
-America/Antigua.standard.short=AST
-America/Araguaina.daylight.short=BRST
-America/Araguaina.generic.short=BRT
-America/Araguaina.standard.short=BRT
-America/Argentina/Buenos_Aires.daylight.short=ARST
-America/Argentina/Buenos_Aires.generic.short=ART
-America/Argentina/Buenos_Aires.standard.short=ART
-America/Argentina/Catamarca.daylight.short=ARST
-America/Argentina/Catamarca.generic.short=ART
-America/Argentina/Catamarca.standard.short=ART
-America/Argentina/ComodRivadavia.daylight.short=ARST
-America/Argentina/ComodRivadavia.generic.short=ART
-America/Argentina/ComodRivadavia.standard.short=ART
-America/Argentina/Cordoba.daylight.short=ARST
-America/Argentina/Cordoba.generic.short=ART
-America/Argentina/Cordoba.standard.short=ART
-America/Argentina/Jujuy.daylight.short=ARST
-America/Argentina/Jujuy.generic.short=ART
-America/Argentina/Jujuy.standard.short=ART
-America/Argentina/La_Rioja.daylight.short=ARST
-America/Argentina/La_Rioja.generic.short=ART
-America/Argentina/La_Rioja.standard.short=ART
-America/Argentina/Mendoza.daylight.short=ARST
-America/Argentina/Mendoza.generic.short=ART
-America/Argentina/Mendoza.standard.short=ART
-America/Argentina/Rio_Gallegos.daylight.short=ARST
-America/Argentina/Rio_Gallegos.generic.short=ART
-America/Argentina/Rio_Gallegos.standard.short=ART
-America/Argentina/Salta.daylight.short=ARST
-America/Argentina/Salta.generic.short=ART
-America/Argentina/Salta.standard.short=ART
-America/Argentina/San_Juan.daylight.short=ARST
-America/Argentina/San_Juan.generic.short=ART
-America/Argentina/San_Juan.standard.short=ART
-America/Argentina/San_Luis.daylight.short=ARST
-America/Argentina/San_Luis.generic.short=ART
-America/Argentina/San_Luis.standard.short=ART
-America/Argentina/Tucuman.daylight.short=ARST
-America/Argentina/Tucuman.generic.short=ART
-America/Argentina/Tucuman.standard.short=ART
-America/Argentina/Ushuaia.daylight.short=ARST
-America/Argentina/Ushuaia.generic.short=ART
-America/Argentina/Ushuaia.standard.short=ART
-America/Aruba.daylight.short=ADT
-America/Aruba.generic.short=AT
-America/Aruba.standard.short=AST
-America/Asuncion.daylight.short=PYST
-America/Asuncion.generic.short=PYT
-America/Asuncion.standard.short=PYT
-America/Atikokan.daylight.short=EDT
-America/Atikokan.generic.short=ET
-America/Atikokan.standard.short=EST
-America/Atka.daylight.short=HADT
-America/Atka.generic.short=HAT
-America/Atka.standard.short=HAST
-America/Bahia_Banderas.daylight.short=CDT
-America/Bahia_Banderas.generic.short=CT
-America/Bahia_Banderas.standard.short=CST
-America/Bahia.daylight.short=BRST
-America/Bahia.generic.short=BRT
-America/Bahia.standard.short=BRT
-America/Barbados.daylight.short=ADT
-America/Barbados.generic.short=AT
-America/Barbados.standard.short=AST
-America/Belem.daylight.short=BRST
-America/Belem.generic.short=BRT
-America/Belem.standard.short=BRT
-America/Belize.daylight.short=CDT
-America/Belize.generic.short=CT
-America/Belize.standard.short=CST
-America/Blanc-Sablon.daylight.short=ADT
-America/Blanc-Sablon.generic.short=AT
-America/Blanc-Sablon.standard.short=AST
-America/Boa_Vista.daylight.short=AMST
-America/Boa_Vista.generic.short=AMT
-America/Boa_Vista.standard.short=AMT
-America/Bogota.daylight.short=COST
-America/Bogota.generic.short=COT
-America/Bogota.standard.short=COT
-America/Boise.daylight.short=MDT
-America/Boise.generic.short=MT
-America/Boise.standard.short=MST
-America/Buenos_Aires.daylight.short=ARST
-America/Buenos_Aires.generic.short=ART
-America/Buenos_Aires.standard.short=ART
-America/Cambridge_Bay.daylight.short=MDT
-America/Cambridge_Bay.generic.short=MT
-America/Cambridge_Bay.standard.short=MST
-America/Campo_Grande.daylight.short=AMST
-America/Campo_Grande.generic.short=AMT
-America/Campo_Grande.standard.short=AMT
-America/Cancun.daylight.short=CDT
-America/Cancun.generic.short=CT
-America/Cancun.standard.short=CST
-America/Caracas.daylight.short=VEST
-America/Caracas.generic.short=VET
-America/Caracas.standard.short=VET
-America/Catamarca.daylight.short=ARST
-America/Catamarca.generic.short=ART
-America/Catamarca.standard.short=ART
-America/Cayenne.daylight.short=GFST
-America/Cayenne.generic.short=GFT
-America/Cayenne.standard.short=GFT
-America/Cayman.daylight.short=EDT
-America/Cayman.generic.short=ET
-America/Cayman.standard.short=EST
-America/Chicago.daylight.short=CDT
-America/Chicago.generic.short=CT
-America/Chicago.standard.short=CST
-America/Chihuahua.daylight.short=MDT
-America/Chihuahua.generic.short=MT
-America/Chihuahua.standard.short=MST
-America/Coral_Harbour.daylight.short=EDT
-America/Coral_Harbour.generic.short=ET
-America/Coral_Harbour.standard.short=EST
-America/Cordoba.daylight.short=ARST
-America/Cordoba.generic.short=ART
-America/Cordoba.standard.short=ART
-America/Costa_Rica.daylight.short=CDT
-America/Costa_Rica.generic.short=CT
-America/Costa_Rica.standard.short=CST
-America/Creston.daylight.short=MDT
-America/Creston.generic.short=MT
-America/Creston.standard.short=MST
-America/Cuiaba.daylight.short=AMST
-America/Cuiaba.generic.short=AMT
-America/Cuiaba.standard.short=AMT
-America/Curacao.daylight.short=ADT
-America/Curacao.generic.short=AT
-America/Curacao.standard.short=AST
-America/Danmarkshavn.daylight.short=GMT
-America/Danmarkshavn.generic.short=GMT
-America/Danmarkshavn.standard.short=GMT
-America/Dawson_Creek.daylight.short=MDT
-America/Dawson_Creek.generic.short=MT
-America/Dawson_Creek.standard.short=MST
-America/Dawson.daylight.short=PDT
-America/Dawson.generic.short=PT
-America/Dawson.standard.short=PST
-America/Denver.daylight.short=MDT
-America/Denver.generic.short=MT
-America/Denver.standard.short=MST
-America/Detroit.daylight.short=EDT
-America/Detroit.generic.short=ET
-America/Detroit.standard.short=EST
-America/Dominica.daylight.short=ADT
-America/Dominica.generic.short=AT
-America/Dominica.standard.short=AST
-America/Edmonton.daylight.short=MDT
-America/Edmonton.generic.short=MT
-America/Edmonton.standard.short=MST
-America/Eirunepe.daylight.short=ACST
-America/Eirunepe.generic.short=ACT
-America/Eirunepe.standard.short=ACT
-America/El_Salvador.daylight.short=CDT
-America/El_Salvador.generic.short=CT
-America/El_Salvador.standard.short=CST
-America/Ensenada.daylight.short=PDT
-America/Ensenada.generic.short=PT
-America/Ensenada.standard.short=PST
-America/Fortaleza.daylight.short=BRST
-America/Fortaleza.generic.short=BRT
-America/Fortaleza.standard.short=BRT
-America/Fort_Wayne.daylight.short=EDT
-America/Fort_Wayne.generic.short=ET
-America/Fort_Wayne.standard.short=EST
-America/Glace_Bay.daylight.short=ADT
-America/Glace_Bay.generic.short=AT
-America/Glace_Bay.standard.short=AST
-America/Godthab.daylight.short=WGST
-America/Godthab.generic.short=WGT
-America/Godthab.standard.short=WGT
-America/Goose_Bay.daylight.short=ADT
-America/Goose_Bay.generic.short=AT
-America/Goose_Bay.standard.short=AST
-America/Grand_Turk.daylight.short=EDT
-America/Grand_Turk.generic.short=ET
-America/Grand_Turk.standard.short=EST
-America/Grenada.daylight.short=ADT
-America/Grenada.generic.short=AT
-America/Grenada.standard.short=AST
-America/Guadeloupe.daylight.short=ADT
-America/Guadeloupe.generic.short=AT
-America/Guadeloupe.standard.short=AST
-America/Guatemala.daylight.short=CDT
-America/Guatemala.generic.short=CT
-America/Guatemala.standard.short=CST
-America/Guayaquil.daylight.short=ECST
-America/Guayaquil.generic.short=ECT
-America/Guayaquil.standard.short=ECT
-America/Guyana.daylight.short=GYST
-America/Guyana.generic.short=GYT
-America/Guyana.standard.short=GYT
-America/Halifax.daylight.short=ADT
-America/Halifax.generic.short=AT
-America/Halifax.standard.short=AST
-America/Havana.daylight.short=CDT
-America/Havana.generic.short=CT
-America/Havana.standard.short=CST
-America/Hermosillo.daylight.short=MDT
-America/Hermosillo.generic.short=MT
-America/Hermosillo.standard.short=MST
-America/Indiana/Indianapolis.daylight.short=EDT
-America/Indiana/Indianapolis.generic.short=ET
-America/Indiana/Indianapolis.standard.short=EST
-America/Indiana/Knox.daylight.short=CDT
-America/Indiana/Knox.generic.short=CT
-America/Indiana/Knox.standard.short=CST
-America/Indiana/Marengo.daylight.short=EDT
-America/Indiana/Marengo.generic.short=ET
-America/Indiana/Marengo.standard.short=EST
-America/Indiana/Petersburg.daylight.short=EDT
-America/Indiana/Petersburg.generic.short=ET
-America/Indiana/Petersburg.standard.short=EST
-America/Indianapolis.daylight.short=EDT
-America/Indianapolis.generic.short=ET
-America/Indianapolis.standard.short=EST
-America/Indiana/Tell_City.daylight.short=CDT
-America/Indiana/Tell_City.generic.short=CT
-America/Indiana/Tell_City.standard.short=CST
-America/Indiana/Vevay.daylight.short=EDT
-America/Indiana/Vevay.generic.short=ET
-America/Indiana/Vevay.standard.short=EST
-America/Indiana/Vincennes.daylight.short=EDT
-America/Indiana/Vincennes.generic.short=ET
-America/Indiana/Vincennes.standard.short=EST
-America/Indiana/Winamac.daylight.short=EDT
-America/Indiana/Winamac.generic.short=ET
-America/Indiana/Winamac.standard.short=EST
-America/Inuvik.daylight.short=MDT
-America/Inuvik.generic.short=MT
-America/Inuvik.standard.short=MST
-America/Iqaluit.daylight.short=EDT
-America/Iqaluit.generic.short=ET
-America/Iqaluit.standard.short=EST
-America/Jamaica.daylight.short=EDT
-America/Jamaica.generic.short=ET
-America/Jamaica.standard.short=EST
-America/Jujuy.daylight.short=ARST
-America/Jujuy.generic.short=ART
-America/Jujuy.standard.short=ART
-America/Juneau.daylight.short=AKDT
-America/Juneau.generic.short=AKT
-America/Juneau.standard.short=AKST
-America/Kentucky/Louisville.daylight.short=EDT
-America/Kentucky/Louisville.generic.short=ET
-America/Kentucky/Louisville.standard.short=EST
-America/Kentucky/Monticello.daylight.short=EDT
-America/Kentucky/Monticello.generic.short=ET
-America/Kentucky/Monticello.standard.short=EST
-America/Knox_IN.daylight.short=CDT
-America/Knox_IN.generic.short=CT
-America/Knox_IN.standard.short=CST
-America/Kralendijk.daylight.short=ADT
-America/Kralendijk.generic.short=AT
-America/Kralendijk.standard.short=AST
-America/La_Paz.daylight.short=BOST
-America/La_Paz.generic.short=BOT
-America/La_Paz.standard.short=BOT
-America/Lima.daylight.short=PEST
-America/Lima.generic.short=PET
-America/Lima.standard.short=PET
-America/Los_Angeles.daylight.short=PDT
-America/Los_Angeles.generic.short=PT
-America/Los_Angeles.standard.short=PST
-America/Louisville.daylight.short=EDT
-America/Louisville.generic.short=ET
-America/Louisville.standard.short=EST
-America/Lower_Princes.daylight.short=ADT
-America/Lower_Princes.generic.short=AT
-America/Lower_Princes.standard.short=AST
-America/Maceio.daylight.short=BRST
-America/Maceio.generic.short=BRT
-America/Maceio.standard.short=BRT
-America/Managua.daylight.short=CDT
-America/Managua.generic.short=CT
-America/Managua.standard.short=CST
-America/Manaus.daylight.short=AMST
-America/Manaus.generic.short=AMT
-America/Manaus.standard.short=AMT
-America/Marigot.daylight.short=ADT
-America/Marigot.generic.short=AT
-America/Marigot.standard.short=AST
-America/Martinique.daylight.short=ADT
-America/Martinique.generic.short=AT
-America/Martinique.standard.short=AST
-America/Matamoros.daylight.short=CDT
-America/Matamoros.generic.short=CT
-America/Matamoros.standard.short=CST
-America/Mazatlan.daylight.short=MDT
-America/Mazatlan.generic.short=MT
-America/Mazatlan.standard.short=MST
-America/Mendoza.daylight.short=ARST
-America/Mendoza.generic.short=ART
-America/Mendoza.standard.short=ART
-America/Menominee.daylight.short=CDT
-America/Menominee.generic.short=CT
-America/Menominee.standard.short=CST
-America/Merida.daylight.short=CDT
-America/Merida.generic.short=CT
-America/Merida.standard.short=CST
-America/Metlakatla.daylight.short=MeDT
-America/Metlakatla.generic.short=MeT
-America/Metlakatla.standard.short=MeST
-America/Mexico_City.daylight.short=CDT
-America/Mexico_City.generic.short=CT
-America/Mexico_City.standard.short=CST
-America/Miquelon.daylight.short=PMDT
-America/Miquelon.generic.short=PMT
-America/Miquelon.standard.short=PMST
-America/Moncton.daylight.short=ADT
-America/Moncton.generic.short=AT
-America/Moncton.standard.short=AST
-America/Monterrey.daylight.short=CDT
-America/Monterrey.generic.short=CT
-America/Monterrey.standard.short=CST
-America/Montevideo.daylight.short=UYST
-America/Montevideo.generic.short=UYT
-America/Montevideo.standard.short=UYT
-America/Montreal.daylight.short=EDT
-America/Montreal.generic.short=ET
-America/Montreal.standard.short=EST
-America/Montserrat.daylight.short=ADT
-America/Montserrat.generic.short=AT
-America/Montserrat.standard.short=AST
-America/Nassau.daylight.short=EDT
-America/Nassau.generic.short=ET
-America/Nassau.standard.short=EST
-America/New_York.daylight.short=EDT
-America/New_York.generic.short=ET
-America/New_York.standard.short=EST
-America/Nipigon.daylight.short=EDT
-America/Nipigon.generic.short=ET
-America/Nipigon.standard.short=EST
-America/Nome.daylight.short=AKDT
-America/Nome.generic.short=AKT
-America/Nome.standard.short=AKST
-America/Noronha.daylight.short=FNST
-America/Noronha.generic.short=FNT
-America/Noronha.standard.short=FNT
-America/North_Dakota/Beulah.daylight.short=CDT
-America/North_Dakota/Beulah.generic.short=CT
-America/North_Dakota/Beulah.standard.short=CST
-America/North_Dakota/Center.daylight.short=CDT
-America/North_Dakota/Center.generic.short=CT
-America/North_Dakota/Center.standard.short=CST
-America/North_Dakota/New_Salem.daylight.short=CDT
-America/North_Dakota/New_Salem.generic.short=CT
-America/North_Dakota/New_Salem.standard.short=CST
-America/Ojinaga.daylight.short=MDT
-America/Ojinaga.generic.short=MT
-America/Ojinaga.standard.short=MST
-America/Panama.daylight.short=EDT
-America/Panama.generic.short=ET
-America/Panama.standard.short=EST
-America/Pangnirtung.daylight.short=EDT
-America/Pangnirtung.generic.short=ET
-America/Pangnirtung.standard.short=EST
-America/Paramaribo.daylight.short=SRST
-America/Paramaribo.generic.short=SRT
-America/Paramaribo.standard.short=SRT
-America/Phoenix.daylight.short=MDT
-America/Phoenix.generic.short=MT
-America/Phoenix.standard.short=MST
-America/Port-au-Prince.daylight.short=EDT
-America/Port-au-Prince.generic.short=ET
-America/Port-au-Prince.standard.short=EST
-America/Porto_Acre.daylight.short=ACST
-America/Porto_Acre.generic.short=ACT
-America/Porto_Acre.standard.short=ACT
-America/Port_of_Spain.daylight.short=ADT
-America/Port_of_Spain.generic.short=AT
-America/Port_of_Spain.standard.short=AST
-America/Porto_Velho.daylight.short=AMST
-America/Porto_Velho.generic.short=AMT
-America/Porto_Velho.standard.short=AMT
-America/Puerto_Rico.daylight.short=ADT
-America/Puerto_Rico.generic.short=AT
-America/Puerto_Rico.standard.short=AST
-America/Rainy_River.daylight.short=CDT
-America/Rainy_River.generic.short=CT
-America/Rainy_River.standard.short=CST
-America/Rankin_Inlet.daylight.short=CDT
-America/Rankin_Inlet.generic.short=CT
-America/Rankin_Inlet.standard.short=CST
-America/Recife.daylight.short=BRST
-America/Recife.generic.short=BRT
-America/Recife.standard.short=BRT
-America/Regina.daylight.short=CDT
-America/Regina.generic.short=CT
-America/Regina.standard.short=CST
-America/Resolute.daylight.short=CDT
-America/Resolute.generic.short=CT
-America/Resolute.standard.short=CST
-America/Rio_Branco.daylight.short=ACST
-America/Rio_Branco.generic.short=ACT
-America/Rio_Branco.standard.short=ACT
-America/Rosario.daylight.short=ARST
-America/Rosario.generic.short=ART
-America/Rosario.standard.short=ART
-America/Santa_Isabel.daylight.short=PDT
-America/Santa_Isabel.generic.short=PT
-America/Santa_Isabel.standard.short=PST
-America/Santarem.daylight.short=BRST
-America/Santarem.generic.short=BRT
-America/Santarem.standard.short=BRT
-America/Santiago.daylight.short=CLST
-America/Santiago.generic.short=CLT
-America/Santiago.standard.short=CLT
-America/Santo_Domingo.daylight.short=ADT
-America/Santo_Domingo.generic.short=AT
-America/Santo_Domingo.standard.short=AST
-America/Sao_Paulo.daylight.short=BRST
-America/Sao_Paulo.generic.short=BRT
-America/Sao_Paulo.standard.short=BRT
-America/Scoresbysund.daylight.short=EGST
-America/Scoresbysund.generic.short=EGT
-America/Scoresbysund.standard.short=EGT
-America/Shiprock.daylight.short=MDT
-America/Shiprock.generic.short=MT
-America/Shiprock.standard.short=MST
-America/Sitka.daylight.short=AKDT
-America/Sitka.generic.short=AKT
-America/Sitka.standard.short=AKST
-America/St_Barthelemy.daylight.short=ADT
-America/St_Barthelemy.generic.short=AT
-America/St_Barthelemy.standard.short=AST
-America/St_Johns.daylight.short=NDT
-America/St_Johns.generic.short=NT
-America/St_Johns.standard.short=NST
-America/St_Kitts.daylight.short=ADT
-America/St_Kitts.generic.short=AT
-America/St_Kitts.standard.short=AST
-America/St_Lucia.daylight.short=ADT
-America/St_Lucia.generic.short=AT
-America/St_Lucia.standard.short=AST
-America/St_Thomas.daylight.short=ADT
-America/St_Thomas.generic.short=AT
-America/St_Thomas.standard.short=AST
-America/St_Vincent.daylight.short=ADT
-America/St_Vincent.generic.short=AT
-America/St_Vincent.standard.short=AST
-America/Swift_Current.daylight.short=CDT
-America/Swift_Current.generic.short=CT
-America/Swift_Current.standard.short=CST
-America/Tegucigalpa.daylight.short=CDT
-America/Tegucigalpa.generic.short=CT
-America/Tegucigalpa.standard.short=CST
-America/Thule.daylight.short=ADT
-America/Thule.generic.short=AT
-America/Thule.standard.short=AST
-America/Thunder_Bay.daylight.short=EDT
-America/Thunder_Bay.generic.short=ET
-America/Thunder_Bay.standard.short=EST
-America/Tijuana.daylight.short=PDT
-America/Tijuana.generic.short=PT
-America/Tijuana.standard.short=PST
-America/Toronto.daylight.short=EDT
-America/Toronto.generic.short=ET
-America/Toronto.standard.short=EST
-America/Tortola.daylight.short=ADT
-America/Tortola.generic.short=AT
-America/Tortola.standard.short=AST
-America/Vancouver.daylight.short=PDT
-America/Vancouver.generic.short=PT
-America/Vancouver.standard.short=PST
-America/Virgin.daylight.short=ADT
-America/Virgin.generic.short=AT
-America/Virgin.standard.short=AST
-America/Whitehorse.daylight.short=PDT
-America/Whitehorse.generic.short=PT
-America/Whitehorse.standard.short=PST
-America/Winnipeg.daylight.short=CDT
-America/Winnipeg.generic.short=CT
-America/Winnipeg.standard.short=CST
-America/Yakutat.daylight.short=AKDT
-America/Yakutat.generic.short=AKT
-America/Yakutat.standard.short=AKST
-America/Yellowknife.daylight.short=MDT
-America/Yellowknife.generic.short=MT
-America/Yellowknife.standard.short=MST
-Antarctica/Casey.daylight.short=WST
-Antarctica/Casey.generic.short=WT
-Antarctica/Casey.standard.short=WST
-Antarctica/Davis.daylight.short=DAVST
-Antarctica/Davis.generic.short=DAVT
-Antarctica/Davis.standard.short=DAVT
-Antarctica/DumontDUrville.daylight.short=DDUST
-Antarctica/DumontDUrville.generic.short=DDUT
-Antarctica/DumontDUrville.standard.short=DDUT
-Antarctica/Macquarie.daylight.short=MIST
-Antarctica/Macquarie.generic.short=MIST
-Antarctica/Macquarie.standard.short=MIST
-Antarctica/Mawson.daylight.short=MAWST
-Antarctica/Mawson.generic.short=MAWT
-Antarctica/Mawson.standard.short=MAWT
-Antarctica/McMurdo.daylight.short=NZDT
-Antarctica/McMurdo.generic.short=NZT
-Antarctica/McMurdo.standard.short=NZST
-Antarctica/Palmer.daylight.short=CLST
-Antarctica/Palmer.generic.short=CLT
-Antarctica/Palmer.standard.short=CLT
-Antarctica/Rothera.daylight.short=ROTST
-Antarctica/Rothera.generic.short=ROTT
-Antarctica/Rothera.standard.short=ROTT
-Antarctica/South_Pole.daylight.short=NZDT
-Antarctica/South_Pole.generic.short=NZT
-Antarctica/South_Pole.standard.short=NZST
-Antarctica/Syowa.daylight.short=SYOST
-Antarctica/Syowa.generic.short=SYOT
-Antarctica/Syowa.standard.short=SYOT
-Antarctica/Vostok.daylight.short=VOSST
-Antarctica/Vostok.generic.short=VOST
-Antarctica/Vostok.standard.short=VOST
-Arctic/Longyearbyen.daylight.short=CEST
-Arctic/Longyearbyen.generic.short=CET
-Arctic/Longyearbyen.standard.short=CET
-ART.daylight.short=EEST
-ART.generic.short=EET
-ART.standard.short=EET
-Asia/Aden.daylight.short=ADT
-Asia/Aden.generic.short=AT
-Asia/Aden.standard.short=AST
-Asia/Almaty.daylight.short=ALMST
-Asia/Almaty.generic.short=ALMT
-Asia/Almaty.standard.short=ALMT
-Asia/Amman.daylight.short=ADT
-Asia/Amman.generic.short=AT
-Asia/Amman.standard.short=AST
-Asia/Anadyr.daylight.short=ANAST
-Asia/Anadyr.generic.short=ANAT
-Asia/Anadyr.standard.short=ANAT
-Asia/Aqtau.daylight.short=AQTST
-Asia/Aqtau.generic.short=AQTT
-Asia/Aqtau.standard.short=AQTT
-Asia/Aqtobe.daylight.short=AQTST
-Asia/Aqtobe.generic.short=AQTT
-Asia/Aqtobe.standard.short=AQTT
-Asia/Ashgabat.daylight.short=TMST
-Asia/Ashgabat.generic.short=TMT
-Asia/Ashgabat.standard.short=TMT
-Asia/Ashkhabad.daylight.short=TMST
-Asia/Ashkhabad.generic.short=TMT
-Asia/Ashkhabad.standard.short=TMT
-Asia/Baghdad.daylight.short=ADT
-Asia/Baghdad.generic.short=AT
-Asia/Baghdad.standard.short=AST
-Asia/Bahrain.daylight.short=ADT
-Asia/Bahrain.generic.short=AT
-Asia/Bahrain.standard.short=AST
-Asia/Baku.daylight.short=AZST
-Asia/Baku.generic.short=AZT
-Asia/Baku.standard.short=AZT
-Asia/Bangkok.daylight.short=ICST
-Asia/Bangkok.generic.short=ICT
-Asia/Bangkok.standard.short=ICT
-Asia/Beirut.daylight.short=EEST
-Asia/Beirut.generic.short=EET
-Asia/Beirut.standard.short=EET
-Asia/Bishkek.daylight.short=KGST
-Asia/Bishkek.generic.short=KGT
-Asia/Bishkek.standard.short=KGT
-Asia/Brunei.daylight.short=BNST
-Asia/Brunei.generic.short=BNT
-Asia/Brunei.standard.short=BNT
-Asia/Calcutta.daylight.short=IDT
-Asia/Calcutta.generic.short=IT
-Asia/Calcutta.standard.short=IST
-Asia/Choibalsan.daylight.short=CHOST
-Asia/Choibalsan.generic.short=CHOT
-Asia/Choibalsan.standard.short=CHOT
-Asia/Chongqing.daylight.short=CDT
-Asia/Chongqing.generic.short=CT
-Asia/Chongqing.standard.short=CST
-Asia/Chungking.daylight.short=CDT
-Asia/Chungking.generic.short=CT
-Asia/Chungking.standard.short=CST
-Asia/Colombo.daylight.short=IDT
-Asia/Colombo.generic.short=IT
-Asia/Colombo.standard.short=IST
-Asia/Dacca.daylight.short=BDST
-Asia/Dacca.generic.short=BDT
-Asia/Dacca.standard.short=BDT
-Asia/Damascus.daylight.short=EEST
-Asia/Damascus.generic.short=EET
-Asia/Damascus.standard.short=EET
-Asia/Dhaka.daylight.short=BDST
-Asia/Dhaka.generic.short=BDT
-Asia/Dhaka.standard.short=BDT
-Asia/Dili.daylight.short=TLST
-Asia/Dili.generic.short=TLT
-Asia/Dili.standard.short=TLT
-Asia/Dubai.daylight.short=GDT
-Asia/Dubai.generic.short=GT
-Asia/Dubai.standard.short=GST
-Asia/Dushanbe.daylight.short=TJST
-Asia/Dushanbe.generic.short=TJT
-Asia/Dushanbe.standard.short=TJT
-Asia/Gaza.daylight.short=EEST
-Asia/Gaza.generic.short=EET
-Asia/Gaza.standard.short=EET
-Asia/Harbin.daylight.short=CDT
-Asia/Harbin.generic.short=CT
-Asia/Harbin.standard.short=CST
-Asia/Hebron.daylight.short=EEST
-Asia/Hebron.generic.short=EET
-Asia/Hebron.standard.short=EET
-Asia/Ho_Chi_Minh.daylight.short=ICST
-Asia/Ho_Chi_Minh.generic.short=ICT
-Asia/Ho_Chi_Minh.standard.short=ICT
-Asia/Hong_Kong.daylight.short=HKST
-Asia/Hong_Kong.generic.short=HKT
-Asia/Hong_Kong.standard.short=HKT
-Asia/Hovd.daylight.short=HOVST
-Asia/Hovd.generic.short=HOVT
-Asia/Hovd.standard.short=HOVT
-Asia/Irkutsk.daylight.short=IRKST
-Asia/Irkutsk.generic.short=IRKT
-Asia/Irkutsk.standard.short=IRKT
-Asia/Istanbul.daylight.short=EEST
-Asia/Istanbul.generic.short=EET
-Asia/Istanbul.standard.short=EET
-Asia/Jakarta.daylight.short=WIST
-Asia/Jakarta.generic.short=WIB
-Asia/Jakarta.standard.short=WIB
-Asia/Jayapura.daylight.short=EIST
-Asia/Jayapura.generic.short=WIT
-Asia/Jayapura.standard.short=WIT
-Asia/Jerusalem.daylight.short=IDT
-Asia/Jerusalem.generic.short=IT
-Asia/Jerusalem.standard.short=IST
-Asia/Kabul.daylight.short=AFST
-Asia/Kabul.generic.short=AFT
-Asia/Kabul.standard.short=AFT
-Asia/Kamchatka.daylight.short=PETST
-Asia/Kamchatka.generic.short=PETT
-Asia/Kamchatka.standard.short=PETT
-Asia/Karachi.daylight.short=PKST
-Asia/Karachi.generic.short=PKT
-Asia/Karachi.standard.short=PKT
-Asia/Kashgar.daylight.short=CDT
-Asia/Kashgar.generic.short=CT
-Asia/Kashgar.standard.short=CST
-Asia/Kathmandu.daylight.short=NPST
-Asia/Kathmandu.generic.short=NPT
-Asia/Kathmandu.standard.short=NPT
-Asia/Katmandu.daylight.short=NPST
-Asia/Katmandu.generic.short=NPT
-Asia/Katmandu.standard.short=NPT
-Asia/Khandyga.daylight.short=YAKST
-Asia/Khandyga.generic.short=YAKT
-Asia/Khandyga.standard.short=YAKT
-Asia/Kolkata.daylight.short=IDT
-Asia/Kolkata.generic.short=IT
-Asia/Kolkata.standard.short=IST
-Asia/Krasnoyarsk.daylight.short=KRAST
-Asia/Krasnoyarsk.generic.short=KRAT
-Asia/Krasnoyarsk.standard.short=KRAT
-Asia/Kuala_Lumpur.daylight.short=MYST
-Asia/Kuala_Lumpur.generic.short=MYT
-Asia/Kuala_Lumpur.standard.short=MYT
-Asia/Kuching.daylight.short=MYST
-Asia/Kuching.generic.short=MYT
-Asia/Kuching.standard.short=MYT
-Asia/Kuwait.daylight.short=ADT
-Asia/Kuwait.generic.short=AT
-Asia/Kuwait.standard.short=AST
-Asia/Macao.daylight.short=CDT
-Asia/Macao.generic.short=CT
-Asia/Macao.standard.short=CST
-Asia/Macau.daylight.short=CDT
-Asia/Macau.generic.short=CT
-Asia/Macau.standard.short=CST
-Asia/Magadan.daylight.short=MAGST
-Asia/Magadan.generic.short=MAGT
-Asia/Magadan.standard.short=MAGT
-Asia/Makassar.daylight.short=CIST
-Asia/Makassar.generic.short=WITA
-Asia/Makassar.standard.short=WITA
-Asia/Manila.daylight.short=PHST
-Asia/Manila.generic.short=PHT
-Asia/Manila.standard.short=PHT
-Asia/Muscat.daylight.short=GDT
-Asia/Muscat.generic.short=GT
-Asia/Muscat.standard.short=GST
-Asia/Nicosia.daylight.short=EEST
-Asia/Nicosia.generic.short=EET
-Asia/Nicosia.standard.short=EET
-Asia/Novokuznetsk.daylight.short=NOVST
-Asia/Novokuznetsk.generic.short=NOVT
-Asia/Novokuznetsk.standard.short=NOVT
-Asia/Novosibirsk.daylight.short=NOVST
-Asia/Novosibirsk.generic.short=NOVT
-Asia/Novosibirsk.standard.short=NOVT
-Asia/Omsk.daylight.short=OMSST
-Asia/Omsk.generic.short=OMST
-Asia/Omsk.standard.short=OMST
-Asia/Oral.daylight.short=ORAST
-Asia/Oral.generic.short=ORAT
-Asia/Oral.standard.short=ORAT
-Asia/Phnom_Penh.daylight.short=ICST
-Asia/Phnom_Penh.generic.short=ICT
-Asia/Phnom_Penh.standard.short=ICT
-Asia/Pontianak.daylight.short=WIST
-Asia/Pontianak.generic.short=WIB
-Asia/Pontianak.standard.short=WIB
-Asia/Pyongyang.daylight.short=KDT
-Asia/Pyongyang.generic.short=KT
-Asia/Pyongyang.standard.short=KST
-Asia/Qatar.daylight.short=ADT
-Asia/Qatar.generic.short=AT
-Asia/Qatar.standard.short=AST
-Asia/Qyzylorda.daylight.short=QYZST
-Asia/Qyzylorda.generic.short=QYZT
-Asia/Qyzylorda.standard.short=QYZT
-Asia/Rangoon.daylight.short=MMST
-Asia/Rangoon.generic.short=MMT
-Asia/Rangoon.standard.short=MMT
-Asia/Saigon.daylight.short=ICST
-Asia/Saigon.generic.short=ICT
-Asia/Saigon.standard.short=ICT
-Asia/Sakhalin.daylight.short=SAKST
-Asia/Sakhalin.generic.short=SAKT
-Asia/Sakhalin.standard.short=SAKT
-Asia/Samarkand.daylight.short=UZST
-Asia/Samarkand.generic.short=UZT
-Asia/Samarkand.standard.short=UZT
-Asia/Seoul.daylight.short=KDT
-Asia/Seoul.generic.short=KT
-Asia/Seoul.standard.short=KST
-Asia/Shanghai.daylight.short=CDT
-Asia/Shanghai.generic.short=CT
-Asia/Shanghai.standard.short=CST
-Asia/Singapore.daylight.short=SGST
-Asia/Singapore.generic.short=SGT
-Asia/Singapore.standard.short=SGT
-Asia/Taipei.daylight.short=CDT
-Asia/Taipei.generic.short=CT
-Asia/Taipei.standard.short=CST
-Asia/Tashkent.daylight.short=UZST
-Asia/Tashkent.generic.short=UZT
-Asia/Tashkent.standard.short=UZT
-Asia/Tbilisi.daylight.short=GEST
-Asia/Tbilisi.generic.short=GET
-Asia/Tbilisi.standard.short=GET
-Asia/Tehran.daylight.short=IRDT
-Asia/Tehran.generic.short=IRT
-Asia/Tehran.standard.short=IRST
-Asia/Tel_Aviv.daylight.short=IDT
-Asia/Tel_Aviv.generic.short=IT
-Asia/Tel_Aviv.standard.short=IST
-Asia/Thimbu.daylight.short=BTST
-Asia/Thimbu.generic.short=BTT
-Asia/Thimbu.standard.short=BTT
-Asia/Thimphu.daylight.short=BTST
-Asia/Thimphu.generic.short=BTT
-Asia/Thimphu.standard.short=BTT
-Asia/Tokyo.daylight.short=JDT
-Asia/Tokyo.generic.short=JT
-Asia/Tokyo.standard.short=JST
-Asia/Ujung_Pandang.daylight.short=CIST
-Asia/Ujung_Pandang.generic.short=WITA
-Asia/Ujung_Pandang.standard.short=WITA
-Asia/Ulaanbaatar.daylight.short=ULAST
-Asia/Ulaanbaatar.generic.short=ULAT
-Asia/Ulaanbaatar.standard.short=ULAT
-Asia/Ulan_Bator.daylight.short=ULAST
-Asia/Ulan_Bator.generic.short=ULAT
-Asia/Ulan_Bator.standard.short=ULAT
-Asia/Urumqi.daylight.short=CDT
-Asia/Urumqi.generic.short=CT
-Asia/Urumqi.standard.short=CST
-Asia/Ust-Nera.daylight.short=VLAST
-Asia/Ust-Nera.generic.short=VLAT
-Asia/Ust-Nera.standard.short=VLAT
-Asia/Vientiane.daylight.short=ICST
-Asia/Vientiane.generic.short=ICT
-Asia/Vientiane.standard.short=ICT
-Asia/Vladivostok.daylight.short=VLAST
-Asia/Vladivostok.generic.short=VLAT
-Asia/Vladivostok.standard.short=VLAT
-Asia/Yakutsk.daylight.short=YAKST
-Asia/Yakutsk.generic.short=YAKT
-Asia/Yakutsk.standard.short=YAKT
-Asia/Yekaterinburg.daylight.short=YEKST
-Asia/Yekaterinburg.generic.short=YEKT
-Asia/Yekaterinburg.standard.short=YEKT
-Asia/Yerevan.daylight.short=AMST
-Asia/Yerevan.generic.short=AMT
-Asia/Yerevan.standard.short=AMT
-AST.daylight.short=AKDT
-AST.generic.short=AKT
-AST.standard.short=AKST
-Atlantic/Azores.daylight.short=AZOST
-Atlantic/Azores.generic.short=AZOT
-Atlantic/Azores.standard.short=AZOT
-Atlantic/Bermuda.daylight.short=ADT
-Atlantic/Bermuda.generic.short=AT
-Atlantic/Bermuda.standard.short=AST
-Atlantic/Canary.daylight.short=WEST
-Atlantic/Canary.generic.short=WET
-Atlantic/Canary.standard.short=WET
-Atlantic/Cape_Verde.daylight.short=CVST
-Atlantic/Cape_Verde.generic.short=CVT
-Atlantic/Cape_Verde.standard.short=CVT
-Atlantic/Faeroe.daylight.short=WEST
-Atlantic/Faeroe.generic.short=WET
-Atlantic/Faeroe.standard.short=WET
-Atlantic/Faroe.daylight.short=WEST
-Atlantic/Faroe.generic.short=WET
-Atlantic/Faroe.standard.short=WET
-Atlantic/Jan_Mayen.daylight.short=CEST
-Atlantic/Jan_Mayen.generic.short=CET
-Atlantic/Jan_Mayen.standard.short=CET
-Atlantic/Madeira.daylight.short=WEST
-Atlantic/Madeira.generic.short=WET
-Atlantic/Madeira.standard.short=WET
-Atlantic/Reykjavik.daylight.short=GMT
-Atlantic/Reykjavik.generic.short=GMT
-Atlantic/Reykjavik.standard.short=GMT
-Atlantic/South_Georgia.daylight.short=GDT
-Atlantic/South_Georgia.generic.short=GT
-Atlantic/South_Georgia.standard.short=GST
-Atlantic/Stanley.daylight.short=FKST
-Atlantic/Stanley.generic.short=FKT
-Atlantic/Stanley.standard.short=FKT
-Atlantic/St_Helena.daylight.short=GMT
-Atlantic/St_Helena.generic.short=GMT
-Atlantic/St_Helena.standard.short=GMT
-Australia/ACT.daylight.short=EST
-Australia/ACT.generic.short=ET
-Australia/ACT.standard.short=EST
-Australia/Adelaide.daylight.short=CST
-Australia/Adelaide.generic.short=CT
-Australia/Adelaide.standard.short=CST
-Australia/Brisbane.daylight.short=EST
-Australia/Brisbane.generic.short=ET
-Australia/Brisbane.standard.short=EST
-Australia/Broken_Hill.daylight.short=CST
-Australia/Broken_Hill.generic.short=CT
-Australia/Broken_Hill.standard.short=CST
-Australia/Canberra.daylight.short=EST
-Australia/Canberra.generic.short=ET
-Australia/Canberra.standard.short=EST
-Australia/Currie.daylight.short=EST
-Australia/Currie.generic.short=ET
-Australia/Currie.standard.short=EST
-Australia/Darwin.daylight.short=CST
-Australia/Darwin.generic.short=CT
-Australia/Darwin.standard.short=CST
-Australia/Eucla.daylight.short=CWST
-Australia/Eucla.generic.short=CWT
-Australia/Eucla.standard.short=CWST
-Australia/Hobart.daylight.short=EST
-Australia/Hobart.generic.short=ET
-Australia/Hobart.standard.short=EST
-Australia/LHI.daylight.short=LHST
-Australia/LHI.generic.short=LHT
-Australia/LHI.standard.short=LHST
-Australia/Lindeman.daylight.short=EST
-Australia/Lindeman.generic.short=ET
-Australia/Lindeman.standard.short=EST
-Australia/Lord_Howe.daylight.short=LHST
-Australia/Lord_Howe.generic.short=LHT
-Australia/Lord_Howe.standard.short=LHST
-Australia/Melbourne.daylight.short=EST
-Australia/Melbourne.generic.short=ET
-Australia/Melbourne.standard.short=EST
-Australia/North.daylight.short=CST
-Australia/North.generic.short=CT
-Australia/North.standard.short=CST
-Australia/NSW.daylight.short=EST
-Australia/NSW.generic.short=ET
-Australia/NSW.standard.short=EST
-Australia/Perth.daylight.short=WST
-Australia/Perth.generic.short=WT
-Australia/Perth.standard.short=WST
-Australia/Queensland.daylight.short=EST
-Australia/Queensland.generic.short=ET
-Australia/Queensland.standard.short=EST
-Australia/South.daylight.short=CST
-Australia/South.generic.short=CT
-Australia/South.standard.short=CST
-Australia/Sydney.daylight.short=EST
-Australia/Sydney.generic.short=ET
-Australia/Sydney.standard.short=EST
-Australia/Tasmania.daylight.short=EST
-Australia/Tasmania.generic.short=ET
-Australia/Tasmania.standard.short=EST
-Australia/Victoria.daylight.short=EST
-Australia/Victoria.generic.short=ET
-Australia/Victoria.standard.short=EST
-Australia/West.daylight.short=WST
-Australia/West.generic.short=WT
-Australia/West.standard.short=WST
-Australia/Yancowinna.daylight.short=CST
-Australia/Yancowinna.generic.short=CT
-Australia/Yancowinna.standard.short=CST
-BET.daylight.short=BRST
-BET.generic.short=BRT
-BET.standard.short=BRT
-Brazil/Acre.daylight.short=ACST
-Brazil/Acre.generic.short=ACT
-Brazil/Acre.standard.short=ACT
-Brazil/DeNoronha.daylight.short=FNST
-Brazil/DeNoronha.generic.short=FNT
-Brazil/DeNoronha.standard.short=FNT
-Brazil/East.daylight.short=BRST
-Brazil/East.generic.short=BRT
-Brazil/East.standard.short=BRT
-Brazil/West.daylight.short=AMST
-Brazil/West.generic.short=AMT
-Brazil/West.standard.short=AMT
-BST.daylight.short=BDST
-BST.generic.short=BDT
-BST.standard.short=BDT
-Canada/Atlantic.daylight.short=ADT
-Canada/Atlantic.generic.short=AT
-Canada/Atlantic.standard.short=AST
-Canada/Central.daylight.short=CDT
-Canada/Central.generic.short=CT
-Canada/Central.standard.short=CST
-Canada/Eastern.daylight.short=EDT
-Canada/Eastern.generic.short=ET
-Canada/Eastern.standard.short=EST
-Canada/East-Saskatchewan.daylight.short=CDT
-Canada/East-Saskatchewan.generic.short=CT
-Canada/East-Saskatchewan.standard.short=CST
-Canada/Mountain.daylight.short=MDT
-Canada/Mountain.generic.short=MT
-Canada/Mountain.standard.short=MST
-Canada/Newfoundland.daylight.short=NDT
-Canada/Newfoundland.generic.short=NT
-Canada/Newfoundland.standard.short=NST
-Canada/Pacific.daylight.short=PDT
-Canada/Pacific.generic.short=PT
-Canada/Pacific.standard.short=PST
-Canada/Saskatchewan.daylight.short=CDT
-Canada/Saskatchewan.generic.short=CT
-Canada/Saskatchewan.standard.short=CST
-Canada/Yukon.daylight.short=PDT
-Canada/Yukon.generic.short=PT
-Canada/Yukon.standard.short=PST
-CAT.daylight.short=CAST
-CAT.generic.short=CAT
-CAT.standard.short=CAT
-CET.daylight.short=CEST
-CET.generic.short=CET
-CET.standard.short=CET
-Chile/Continental.daylight.short=CLST
-Chile/Continental.generic.short=CLT
-Chile/Continental.standard.short=CLT
-Chile/EasterIsland.daylight.short=EASST
-Chile/EasterIsland.generic.short=EAST
-Chile/EasterIsland.standard.short=EAST
-CNT.daylight.short=NDT
-CNT.generic.short=NT
-CNT.standard.short=NST
-CST6CDT.daylight.short=CDT
-CST6CDT.generic.short=CT
-CST6CDT.standard.short=CST
-CST.daylight.short=CDT
-CST.generic.short=CT
-CST.standard.short=CST
-CTT.daylight.short=CDT
-CTT.generic.short=CT
-CTT.standard.short=CST
-Cuba.daylight.short=CDT
-Cuba.generic.short=CT
-Cuba.standard.short=CST
-EAT.daylight.short=EAST
-EAT.generic.short=EAT
-EAT.standard.short=EAT
-ECT.daylight.short=CEST
-ECT.generic.short=CET
-ECT.standard.short=CET
-EET.daylight.short=EEST
-EET.generic.short=EET
-EET.standard.short=EET
-Egypt.daylight.short=EEST
-Egypt.generic.short=EET
-Egypt.standard.short=EET
-Eire.daylight.short=IST
-Eire.generic.short=IT
-Eire.standard.short=GMT
-EST5EDT.daylight.short=EDT
-EST5EDT.generic.short=ET
-EST5EDT.standard.short=EST
-EST.daylight.short=EDT
-EST.generic.short=ET
-EST.standard.short=EST
-Etc/Greenwich.daylight.short=GMT
-Etc/Greenwich.generic.short=GMT
-Etc/Greenwich.standard.short=GMT
-Etc/UCT.daylight.short=UTC
-Etc/UCT.generic.short=UTC
-Etc/UCT.standard.short=UTC
-Etc/Universal.daylight.short=UTC
-Etc/Universal.generic.short=UTC
-Etc/Universal.standard.short=UTC
-Etc/UTC.daylight.short=UTC
-Etc/UTC.generic.short=UTC
-Etc/UTC.standard.short=UTC
-Etc/Zulu.daylight.short=UTC
-Etc/Zulu.generic.short=UTC
-Etc/Zulu.standard.short=UTC
-Europe/Amsterdam.daylight.short=CEST
-Europe/Amsterdam.generic.short=CET
-Europe/Amsterdam.standard.short=CET
-Europe/Andorra.daylight.short=CEST
-Europe/Andorra.generic.short=CET
-Europe/Andorra.standard.short=CET
-Europe/Athens.daylight.short=EEST
-Europe/Athens.generic.short=EET
-Europe/Athens.standard.short=EET
-Europe/Belfast.daylight.short=BST
-Europe/Belfast.generic.short=BT
-Europe/Belfast.standard.short=GMT
-Europe/Belgrade.daylight.short=CEST
-Europe/Belgrade.generic.short=CET
-Europe/Belgrade.standard.short=CET
-Europe/Berlin.daylight.short=CEST
-Europe/Berlin.generic.short=CET
-Europe/Berlin.standard.short=CET
-Europe/Bratislava.daylight.short=CEST
-Europe/Bratislava.generic.short=CET
-Europe/Bratislava.standard.short=CET
-Europe/Brussels.daylight.short=CEST
-Europe/Brussels.generic.short=CET
-Europe/Brussels.standard.short=CET
-Europe/Bucharest.daylight.short=EEST
-Europe/Bucharest.generic.short=EET
-Europe/Bucharest.standard.short=EET
-Europe/Budapest.daylight.short=CEST
-Europe/Budapest.generic.short=CET
-Europe/Budapest.standard.short=CET
-Europe/Busingen.daylight.short=CEST
-Europe/Busingen.generic.short=CET
-Europe/Busingen.standard.short=CET
-Europe/Chisinau.daylight.short=EEST
-Europe/Chisinau.generic.short=EET
-Europe/Chisinau.standard.short=EET
-Europe/Copenhagen.daylight.short=CEST
-Europe/Copenhagen.generic.short=CET
-Europe/Copenhagen.standard.short=CET
-Europe/Dublin.daylight.short=IST
-Europe/Dublin.generic.short=IT
-Europe/Dublin.standard.short=GMT
-Europe/Gibraltar.daylight.short=CEST
-Europe/Gibraltar.generic.short=CET
-Europe/Gibraltar.standard.short=CET
-Europe/Guernsey.daylight.short=BST
-Europe/Guernsey.generic.short=BT
-Europe/Guernsey.standard.short=GMT
-Europe/Helsinki.daylight.short=EEST
-Europe/Helsinki.generic.short=EET
-Europe/Helsinki.standard.short=EET
-Europe/Isle_of_Man.daylight.short=BST
-Europe/Isle_of_Man.generic.short=BT
-Europe/Isle_of_Man.standard.short=GMT
-Europe/Istanbul.daylight.short=EEST
-Europe/Istanbul.generic.short=EET
-Europe/Istanbul.standard.short=EET
-Europe/Jersey.daylight.short=BST
-Europe/Jersey.generic.short=BT
-Europe/Jersey.standard.short=GMT
-Europe/Kaliningrad.daylight.short=FEST
-Europe/Kaliningrad.generic.short=FET
-Europe/Kaliningrad.standard.short=FET
-Europe/Kiev.daylight.short=EEST
-Europe/Kiev.generic.short=EET
-Europe/Kiev.standard.short=EET
-Europe/Lisbon.daylight.short=WEST
-Europe/Lisbon.generic.short=WET
-Europe/Lisbon.standard.short=WET
-Europe/Ljubljana.daylight.short=CEST
-Europe/Ljubljana.generic.short=CET
-Europe/Ljubljana.standard.short=CET
-Europe/London.daylight.short=BST
-Europe/London.generic.short=BT
-Europe/London.standard.short=GMT
-Europe/Luxembourg.daylight.short=CEST
-Europe/Luxembourg.generic.short=CET
-Europe/Luxembourg.standard.short=CET
-Europe/Madrid.daylight.short=CEST
-Europe/Madrid.generic.short=CET
-Europe/Madrid.standard.short=CET
-Europe/Malta.daylight.short=CEST
-Europe/Malta.generic.short=CET
-Europe/Malta.standard.short=CET
-Europe/Mariehamn.daylight.short=EEST
-Europe/Mariehamn.generic.short=EET
-Europe/Mariehamn.standard.short=EET
-Europe/Minsk.daylight.short=FEST
-Europe/Minsk.generic.short=FET
-Europe/Minsk.standard.short=FET
-Europe/Monaco.daylight.short=CEST
-Europe/Monaco.generic.short=CET
-Europe/Monaco.standard.short=CET
-Europe/Moscow.daylight.short=MSD
-Europe/Moscow.generic.short=MT
-Europe/Moscow.standard.short=MSK
-Europe/Nicosia.daylight.short=EEST
-Europe/Nicosia.generic.short=EET
-Europe/Nicosia.standard.short=EET
-Europe/Oslo.daylight.short=CEST
-Europe/Oslo.generic.short=CET
-Europe/Oslo.standard.short=CET
-Europe/Paris.daylight.short=CEST
-Europe/Paris.generic.short=CET
-Europe/Paris.standard.short=CET
-Europe/Podgorica.daylight.short=CEST
-Europe/Podgorica.generic.short=CET
-Europe/Podgorica.standard.short=CET
-Europe/Prague.daylight.short=CEST
-Europe/Prague.generic.short=CET
-Europe/Prague.standard.short=CET
-Europe/Riga.daylight.short=EEST
-Europe/Riga.generic.short=EET
-Europe/Riga.standard.short=EET
-Europe/Rome.daylight.short=CEST
-Europe/Rome.generic.short=CET
-Europe/Rome.standard.short=CET
-Europe/Samara.daylight.short=SAMST
-Europe/Samara.generic.short=SAMT
-Europe/Samara.standard.short=SAMT
-Europe/San_Marino.daylight.short=CEST
-Europe/San_Marino.generic.short=CET
-Europe/San_Marino.standard.short=CET
-Europe/Sarajevo.daylight.short=CEST
-Europe/Sarajevo.generic.short=CET
-Europe/Sarajevo.standard.short=CET
-Europe/Simferopol.daylight.short=EEST
-Europe/Simferopol.generic.short=EET
-Europe/Simferopol.standard.short=EET
-Europe/Skopje.daylight.short=CEST
-Europe/Skopje.generic.short=CET
-Europe/Skopje.standard.short=CET
-Europe/Sofia.daylight.short=EEST
-Europe/Sofia.generic.short=EET
-Europe/Sofia.standard.short=EET
-Europe/Stockholm.daylight.short=CEST
-Europe/Stockholm.generic.short=CET
-Europe/Stockholm.standard.short=CET
-Europe/Tallinn.daylight.short=EEST
-Europe/Tallinn.generic.short=EET
-Europe/Tallinn.standard.short=EET
-Europe/Tirane.daylight.short=CEST
-Europe/Tirane.generic.short=CET
-Europe/Tirane.standard.short=CET
-Europe/Tiraspol.daylight.short=EEST
-Europe/Tiraspol.generic.short=EET
-Europe/Tiraspol.standard.short=EET
-Europe/Uzhgorod.daylight.short=EEST
-Europe/Uzhgorod.generic.short=EET
-Europe/Uzhgorod.standard.short=EET
-Europe/Vaduz.daylight.short=CEST
-Europe/Vaduz.generic.short=CET
-Europe/Vaduz.standard.short=CET
-Europe/Vatican.daylight.short=CEST
-Europe/Vatican.generic.short=CET
-Europe/Vatican.standard.short=CET
-Europe/Vienna.daylight.short=CEST
-Europe/Vienna.generic.short=CET
-Europe/Vienna.standard.short=CET
-Europe/Vilnius.daylight.short=EEST
-Europe/Vilnius.generic.short=EET
-Europe/Vilnius.standard.short=EET
-Europe/Volgograd.daylight.short=VOLST
-Europe/Volgograd.generic.short=VOLT
-Europe/Volgograd.standard.short=VOLT
-Europe/Warsaw.daylight.short=CEST
-Europe/Warsaw.generic.short=CET
-Europe/Warsaw.standard.short=CET
-Europe/Zagreb.daylight.short=CEST
-Europe/Zagreb.generic.short=CET
-Europe/Zagreb.standard.short=CET
-Europe/Zaporozhye.daylight.short=EEST
-Europe/Zaporozhye.generic.short=EET
-Europe/Zaporozhye.standard.short=EET
-Europe/Zurich.daylight.short=CEST
-Europe/Zurich.generic.short=CET
-Europe/Zurich.standard.short=CET
-GB.daylight.short=BST
-GB-Eire.daylight.short=BST
-GB-Eire.generic.short=BT
-GB-Eire.standard.short=GMT
-GB.generic.short=BT
-GB.standard.short=GMT
-GMT.daylight.short=GMT
-GMT.generic.short=GMT
-GMT.standard.short=GMT
-Greenwich.daylight.short=GMT
-Greenwich.generic.short=GMT
-Greenwich.standard.short=GMT
-Hongkong.daylight.short=HKST
-Hongkong.generic.short=HKT
-Hongkong.standard.short=HKT
-HST.daylight.short=HDT
-HST.generic.short=HT
-HST.standard.short=HST
-Iceland.daylight.short=GMT
-Iceland.generic.short=GMT
-Iceland.standard.short=GMT
-IET.daylight.short=EDT
-IET.generic.short=ET
-IET.standard.short=EST
-Indian/Antananarivo.daylight.short=EAST
-Indian/Antananarivo.generic.short=EAT
-Indian/Antananarivo.standard.short=EAT
-Indian/Chagos.daylight.short=IOST
-Indian/Chagos.generic.short=IOT
-Indian/Chagos.standard.short=IOT
-Indian/Christmas.daylight.short=CXST
-Indian/Christmas.generic.short=CIT
-Indian/Christmas.standard.short=CXT
-Indian/Cocos.daylight.short=CCST
-Indian/Cocos.generic.short=CCT
-Indian/Cocos.standard.short=CCT
-Indian/Comoro.daylight.short=EAST
-Indian/Comoro.generic.short=EAT
-Indian/Comoro.standard.short=EAT
-Indian/Kerguelen.daylight.short=TFST
-Indian/Kerguelen.generic.short=TFT
-Indian/Kerguelen.standard.short=TFT
-Indian/Mahe.daylight.short=SCST
-Indian/Mahe.generic.short=SCT
-Indian/Mahe.standard.short=SCT
-Indian/Maldives.daylight.short=MVST
-Indian/Maldives.generic.short=MVT
-Indian/Maldives.standard.short=MVT
-Indian/Mauritius.daylight.short=MUST
-Indian/Mauritius.generic.short=MUT
-Indian/Mauritius.standard.short=MUT
-Indian/Mayotte.daylight.short=EAST
-Indian/Mayotte.generic.short=EAT
-Indian/Mayotte.standard.short=EAT
-Indian/Reunion.daylight.short=REST
-Indian/Reunion.generic.short=RET
-Indian/Reunion.standard.short=RET
-Iran.daylight.short=IRDT
-Iran.generic.short=IRT
-Iran.standard.short=IRST
-Israel.daylight.short=IDT
-Israel.generic.short=IT
-Israel.standard.short=IST
-IST.daylight.short=IDT
-IST.generic.short=IT
-IST.standard.short=IST
-Jamaica.daylight.short=EDT
-Jamaica.generic.short=ET
-Jamaica.standard.short=EST
-Japan.daylight.short=JDT
-Japan.generic.short=JT
-Japan.standard.short=JST
-JST.daylight.short=JDT
-JST.generic.short=JT
-JST.standard.short=JST
-Kwajalein.daylight.short=MHST
-Kwajalein.generic.short=MHT
-Kwajalein.standard.short=MHT
-Libya.daylight.short=EEST
-Libya.generic.short=EET
-Libya.standard.short=EET
-MET.daylight.short=MEST
-MET.generic.short=MET
-MET.standard.short=MET
-Mexico/BajaNorte.daylight.short=PDT
-Mexico/BajaNorte.generic.short=PT
-Mexico/BajaNorte.standard.short=PST
-Mexico/BajaSur.daylight.short=MDT
-Mexico/BajaSur.generic.short=MT
-Mexico/BajaSur.standard.short=MST
-Mexico/General.daylight.short=CDT
-Mexico/General.generic.short=CT
-Mexico/General.standard.short=CST
-MIT.daylight.short=WSDT
-MIT.generic.short=WST
-MIT.standard.short=WST
-MST7MDT.daylight.short=MDT
-MST7MDT.generic.short=MT
-MST7MDT.standard.short=MST
-MST.daylight.short=MDT
-MST.generic.short=MT
-MST.standard.short=MST
-Navajo.daylight.short=MDT
-Navajo.generic.short=MT
-Navajo.standard.short=MST
-NET.daylight.short=AMST
-NET.generic.short=AMT
-NET.standard.short=AMT
-NST.daylight.short=NZDT
-NST.generic.short=NZT
-NST.standard.short=NZST
-NZ-CHAT.daylight.short=CHADT
-NZ-CHAT.generic.short=CHAT
-NZ-CHAT.standard.short=CHAST
-NZ.daylight.short=NZDT
-NZ.generic.short=NZT
-NZ.standard.short=NZST
-Pacific/Apia.daylight.short=WSDT
-Pacific/Apia.generic.short=WST
-Pacific/Apia.standard.short=WST
-Pacific/Auckland.daylight.short=NZDT
-Pacific/Auckland.generic.short=NZT
-Pacific/Auckland.standard.short=NZST
-Pacific/Chatham.daylight.short=CHADT
-Pacific/Chatham.generic.short=CHAT
-Pacific/Chatham.standard.short=CHAST
-Pacific/Chuuk.daylight.short=CHUST
-Pacific/Chuuk.generic.short=CHUT
-Pacific/Chuuk.standard.short=CHUT
-Pacific/Easter.daylight.short=EASST
-Pacific/Easter.generic.short=EAST
-Pacific/Easter.standard.short=EAST
-Pacific/Efate.daylight.short=VUST
-Pacific/Efate.generic.short=VUT
-Pacific/Efate.standard.short=VUT
-Pacific/Enderbury.daylight.short=PHOST
-Pacific/Enderbury.generic.short=PHOT
-Pacific/Enderbury.standard.short=PHOT
-Pacific/Fakaofo.daylight.short=TKST
-Pacific/Fakaofo.generic.short=TKT
-Pacific/Fakaofo.standard.short=TKT
-Pacific/Fiji.daylight.short=FJST
-Pacific/Fiji.generic.short=FJT
-Pacific/Fiji.standard.short=FJT
-Pacific/Funafuti.daylight.short=TVST
-Pacific/Funafuti.generic.short=TVT
-Pacific/Funafuti.standard.short=TVT
-Pacific/Galapagos.daylight.short=GALST
-Pacific/Galapagos.generic.short=GALT
-Pacific/Galapagos.standard.short=GALT
-Pacific/Gambier.daylight.short=GAMST
-Pacific/Gambier.generic.short=GAMT
-Pacific/Gambier.standard.short=GAMT
-Pacific/Guadalcanal.daylight.short=SBST
-Pacific/Guadalcanal.generic.short=SBT
-Pacific/Guadalcanal.standard.short=SBT
-Pacific/Guam.daylight.short=ChDT
-Pacific/Guam.generic.short=ChT
-Pacific/Guam.standard.short=ChST
-Pacific/Honolulu.daylight.short=HDT
-Pacific/Honolulu.generic.short=HT
-Pacific/Honolulu.standard.short=HST
-Pacific/Johnston.daylight.short=HDT
-Pacific/Johnston.generic.short=HT
-Pacific/Johnston.standard.short=HST
-Pacific/Kiritimati.daylight.short=LINST
-Pacific/Kiritimati.generic.short=LINT
-Pacific/Kiritimati.standard.short=LINT
-Pacific/Kosrae.daylight.short=KOSST
-Pacific/Kosrae.generic.short=KOST
-Pacific/Kosrae.standard.short=KOST
-Pacific/Kwajalein.daylight.short=MHST
-Pacific/Kwajalein.generic.short=MHT
-Pacific/Kwajalein.standard.short=MHT
-Pacific/Majuro.daylight.short=MHST
-Pacific/Majuro.generic.short=MHT
-Pacific/Majuro.standard.short=MHT
-Pacific/Marquesas.daylight.short=MARST
-Pacific/Marquesas.generic.short=MART
-Pacific/Marquesas.standard.short=MART
-Pacific/Midway.daylight.short=SDT
-Pacific/Midway.generic.short=ST
-Pacific/Midway.standard.short=SST
-Pacific/Nauru.daylight.short=NRST
-Pacific/Nauru.generic.short=NRT
-Pacific/Nauru.standard.short=NRT
-Pacific/Niue.daylight.short=NUST
-Pacific/Niue.generic.short=NUT
-Pacific/Niue.standard.short=NUT
-Pacific/Norfolk.daylight.short=NFST
-Pacific/Norfolk.generic.short=NFT
-Pacific/Norfolk.standard.short=NFT
-Pacific/Noumea.daylight.short=NCST
-Pacific/Noumea.generic.short=NCT
-Pacific/Noumea.standard.short=NCT
-Pacific/Pago_Pago.daylight.short=SDT
-Pacific/Pago_Pago.generic.short=ST
-Pacific/Pago_Pago.standard.short=SST
-Pacific/Palau.daylight.short=PWST
-Pacific/Palau.generic.short=PWT
-Pacific/Palau.standard.short=PWT
-Pacific/Pitcairn.daylight.short=PDT
-Pacific/Pitcairn.generic.short=PT
-Pacific/Pitcairn.standard.short=PST
-Pacific/Pohnpei.daylight.short=PONST
-Pacific/Pohnpei.generic.short=PONT
-Pacific/Pohnpei.standard.short=PONT
-Pacific/Ponape.daylight.short=PONST
-Pacific/Ponape.generic.short=PONT
-Pacific/Ponape.standard.short=PONT
-Pacific/Port_Moresby.daylight.short=PGST
-Pacific/Port_Moresby.generic.short=PGT
-Pacific/Port_Moresby.standard.short=PGT
-Pacific/Rarotonga.daylight.short=CKHST
-Pacific/Rarotonga.generic.short=CKT
-Pacific/Rarotonga.standard.short=CKT
-Pacific/Saipan.daylight.short=ChDT
-Pacific/Saipan.generic.short=ChT
-Pacific/Saipan.standard.short=ChST
-Pacific/Samoa.daylight.short=SDT
-Pacific/Samoa.generic.short=ST
-Pacific/Samoa.standard.short=SST
-Pacific/Tahiti.daylight.short=TAHST
-Pacific/Tahiti.generic.short=TAHT
-Pacific/Tahiti.standard.short=TAHT
-Pacific/Tarawa.daylight.short=GILST
-Pacific/Tarawa.generic.short=GILT
-Pacific/Tarawa.standard.short=GILT
-Pacific/Tongatapu.daylight.short=TOST
-Pacific/Tongatapu.generic.short=TOT
-Pacific/Tongatapu.standard.short=TOT
-Pacific/Truk.daylight.short=CHUST
-Pacific/Truk.generic.short=CHUT
-Pacific/Truk.standard.short=CHUT
-Pacific/Wake.daylight.short=WAKST
-Pacific/Wake.generic.short=WAKT
-Pacific/Wake.standard.short=WAKT
-Pacific/Wallis.daylight.short=WFST
-Pacific/Wallis.generic.short=WFT
-Pacific/Wallis.standard.short=WFT
-Pacific/Yap.daylight.short=CHUST
-Pacific/Yap.generic.short=CHUT
-Pacific/Yap.standard.short=CHUT
-PLT.daylight.short=PKST
-PLT.generic.short=PKT
-PLT.standard.short=PKT
-PNT.daylight.short=MDT
-PNT.generic.short=MT
-PNT.standard.short=MST
-Poland.daylight.short=CEST
-Poland.generic.short=CET
-Poland.standard.short=CET
-Portugal.daylight.short=WEST
-Portugal.generic.short=WET
-Portugal.standard.short=WET
-PRC.daylight.short=CDT
-PRC.generic.short=CT
-PRC.standard.short=CST
-PRT.daylight.short=ADT
-PRT.generic.short=AT
-PRT.standard.short=AST
-PST8PDT.daylight.short=PDT
-PST8PDT.generic.short=PT
-PST8PDT.standard.short=PST
-PST.daylight.short=PDT
-PST.generic.short=PT
-PST.standard.short=PST
-ROK.daylight.short=KDT
-ROK.generic.short=KT
-ROK.standard.short=KST
-Singapore.daylight.short=SGST
-Singapore.generic.short=SGT
-Singapore.standard.short=SGT
-SST.daylight.short=SBST
-SST.generic.short=SBT
-SST.standard.short=SBT
-SystemV/AST4ADT.daylight.short=ADT
-SystemV/AST4ADT.generic.short=AT
-SystemV/AST4ADT.standard.short=AST
-SystemV/AST4.daylight.short=ADT
-SystemV/AST4.generic.short=AT
-SystemV/AST4.standard.short=AST
-SystemV/CST6CDT.daylight.short=CDT
-SystemV/CST6CDT.generic.short=CT
-SystemV/CST6CDT.standard.short=CST
-SystemV/CST6.daylight.short=CDT
-SystemV/CST6.generic.short=CT
-SystemV/CST6.standard.short=CST
-SystemV/EST5.daylight.short=EDT
-SystemV/EST5EDT.daylight.short=EDT
-SystemV/EST5EDT.generic.short=ET
-SystemV/EST5EDT.standard.short=EST
-SystemV/EST5.generic.short=ET
-SystemV/EST5.standard.short=EST
-SystemV/HST10.daylight.short=HDT
-SystemV/HST10.generic.short=HT
-SystemV/HST10.standard.short=HST
-SystemV/MST7.daylight.short=MDT
-SystemV/MST7.generic.short=MT
-SystemV/MST7MDT.daylight.short=MDT
-SystemV/MST7MDT.generic.short=MT
-SystemV/MST7MDT.standard.short=MST
-SystemV/MST7.standard.short=MST
-SystemV/PST8.daylight.short=PDT
-SystemV/PST8.generic.short=PT
-SystemV/PST8PDT.daylight.short=PDT
-SystemV/PST8PDT.generic.short=PT
-SystemV/PST8PDT.standard.short=PST
-SystemV/PST8.standard.short=PST
-SystemV/YST9.daylight.short=AKDT
-SystemV/YST9.generic.short=AKT
-SystemV/YST9.standard.short=AKST
-SystemV/YST9YDT.daylight.short=AKDT
-SystemV/YST9YDT.generic.short=AKT
-SystemV/YST9YDT.standard.short=AKST
-Turkey.daylight.short=EEST
-Turkey.generic.short=EET
-Turkey.standard.short=EET
-UCT.daylight.short=UTC
-UCT.generic.short=UTC
-UCT.standard.short=UTC
-Universal.daylight.short=UTC
-Universal.generic.short=UTC
-Universal.standard.short=UTC
-US/Alaska.daylight.short=AKDT
-US/Alaska.generic.short=AKT
-US/Alaska.standard.short=AKST
-US/Aleutian.daylight.short=HADT
-US/Aleutian.generic.short=HAT
-US/Aleutian.standard.short=HAST
-US/Arizona.daylight.short=MDT
-US/Arizona.generic.short=MT
-US/Arizona.standard.short=MST
-US/Central.daylight.short=CDT
-US/Central.generic.short=CT
-US/Central.standard.short=CST
-US/Eastern.daylight.short=EDT
-US/Eastern.generic.short=ET
-US/Eastern.standard.short=EST
-US/East-Indiana.daylight.short=EDT
-US/East-Indiana.generic.short=ET
-US/East-Indiana.standard.short=EST
-US/Hawaii.daylight.short=HDT
-US/Hawaii.generic.short=HT
-US/Hawaii.standard.short=HST
-US/Indiana-Starke.daylight.short=CDT
-US/Indiana-Starke.generic.short=CT
-US/Indiana-Starke.standard.short=CST
-US/Michigan.daylight.short=EDT
-US/Michigan.generic.short=ET
-US/Michigan.standard.short=EST
-US/Mountain.daylight.short=MDT
-US/Mountain.generic.short=MT
-US/Mountain.standard.short=MST
-US/Pacific.daylight.short=PDT
-US/Pacific.generic.short=PT
-US/Pacific-New.daylight.short=PDT
-US/Pacific-New.generic.short=PT
-US/Pacific-New.standard.short=PST
-US/Pacific.standard.short=PST
-US/Samoa.daylight.short=SDT
-US/Samoa.generic.short=ST
-US/Samoa.standard.short=SST
-UTC.daylight.short=UTC
-UTC.generic.short=UTC
-UTC.standard.short=UTC
-VST.daylight.short=ICST
-VST.generic.short=ICT
-VST.standard.short=ICT
-WET.daylight.short=WEST
-WET.generic.short=WET
-WET.standard.short=WET
-W-SU.daylight.short=MSD
-W-SU.generic.short=MT
-W-SU.standard.short=MSK
-Zulu.daylight.short=UTC
-Zulu.generic.short=UTC
-Zulu.standard.short=UTC
diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_ko.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_ko.properties
deleted file mode 100644
index 52c2bc8..0000000
--- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_ko.properties
+++ /dev/null
@@ -1,651 +0,0 @@
-ACT.daylight.long=\uC911\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uBD81\uBD80 \uC9C0\uC5ED)
-ACT.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC(\uBD81\uBD80 \uC9C0\uC5ED)
-ACT.standard.long=\uC911\uBD80 \uD45C\uC900\uC2DC(\uBD81\uBD80 \uC9C0\uC5ED)
-AET.daylight.long=\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)
-AET.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)
-AET.standard.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)
-AGT.generic.long=\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC
-ART.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC
-AST.generic.long=\uC54C\uB798\uC2A4\uCE74 \uD45C\uC900\uC2DC
-Africa/Abidjan.generic.long=\uADF8\uB9AC\uB2C8\uCE58 \uD45C\uC900\uC2DC
-Africa/Accra.generic.long=\uAC00\uB098 \uD45C\uC900\uC2DC
-Africa/Addis_Ababa.generic.long=\uB3D9\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC
-Africa/Algiers.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC
-Africa/Asmara.generic.long=\uB3D9\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC
-Africa/Asmera.generic.long=\uB3D9\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC
-Africa/Bamako.generic.long=\uADF8\uB9AC\uB2C8\uCE58 \uD45C\uC900\uC2DC
-Africa/Bangui.generic.long=\uC11C\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC
-Africa/Banjul.generic.long=\uADF8\uB9AC\uB2C8\uCE58 \uD45C\uC900\uC2DC
-Africa/Bissau.generic.long=\uADF8\uB9AC\uB2C8\uCE58 \uD45C\uC900\uC2DC
-Africa/Blantyre.generic.long=\uC911\uC559 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC
-Africa/Brazzaville.generic.long=\uC11C\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC
-Africa/Bujumbura.generic.long=\uC911\uC559 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC
-Africa/Cairo.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC
-Africa/Casablanca.generic.long=\uC11C\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC
-Africa/Ceuta.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC
-Africa/Conakry.generic.long=\uADF8\uB9AC\uB2C8\uCE58 \uD45C\uC900\uC2DC
-Africa/Dakar.generic.long=\uADF8\uB9AC\uB2C8\uCE58 \uD45C\uC900\uC2DC
-Africa/Dar_es_Salaam.generic.long=\uB3D9\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC
-Africa/Djibouti.generic.long=\uB3D9\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC
-Africa/Douala.generic.long=\uC11C\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC
-Africa/El_Aaiun.generic.long=\uC11C\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC
-Africa/Freetown.generic.long=\uC2DC\uC5D0\uB77C\uB9AC\uC628 \uD45C\uC900\uC2DC
-Africa/Gaborone.generic.long=\uC911\uC559 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC
-Africa/Harare.generic.long=\uC911\uC559 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC
-Africa/Johannesburg.generic.long=\uB0A8\uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC
-Africa/Juba.generic.long=\uB3D9\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC
-Africa/Kampala.generic.long=\uB3D9\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC
-Africa/Khartoum.generic.long=\uB3D9\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC
-Africa/Kigali.generic.long=\uC911\uC559 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC
-Africa/Kinshasa.generic.long=\uC11C\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC
-Africa/Lagos.generic.long=\uC11C\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC
-Africa/Libreville.generic.long=\uC11C\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC
-Africa/Lome.generic.long=\uADF8\uB9AC\uB2C8\uCE58 \uD45C\uC900\uC2DC
-Africa/Luanda.generic.long=\uC11C\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC
-Africa/Lubumbashi.generic.long=\uC911\uC559 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC
-Africa/Lusaka.generic.long=\uC911\uC559 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC
-Africa/Malabo.generic.long=\uC11C\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC
-Africa/Maputo.generic.long=\uC911\uC559 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC
-Africa/Maseru.generic.long=\uB0A8\uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC
-Africa/Mbabane.generic.long=\uB0A8\uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC
-Africa/Mogadishu.generic.long=\uB3D9\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC
-Africa/Monrovia.generic.long=\uADF8\uB9AC\uB2C8\uCE58 \uD45C\uC900\uC2DC
-Africa/Nairobi.generic.long=\uB3D9\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC
-Africa/Ndjamena.generic.long=\uC11C\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC
-Africa/Niamey.generic.long=\uC11C\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC
-Africa/Nouakchott.generic.long=\uADF8\uB9AC\uB2C8\uCE58 \uD45C\uC900\uC2DC
-Africa/Ouagadougou.generic.long=\uADF8\uB9AC\uB2C8\uCE58 \uD45C\uC900\uC2DC
-Africa/Porto-Novo.generic.long=\uC11C\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC
-Africa/Sao_Tome.generic.long=\uADF8\uB9AC\uB2C8\uCE58 \uD45C\uC900\uC2DC
-Africa/Timbuktu.generic.long=\uADF8\uB9AC\uB2C8\uCE58 \uD45C\uC900\uC2DC
-Africa/Tripoli.generic.long=\ub3d9\ubd80 \uc720\ub7fd \ud45c\uc900\uc2dc
-Africa/Tunis.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC
-Africa/Windhoek.generic.long=\uC11C\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC
-America/Adak.generic.long=\uD558\uC640\uC774-\uC54C\uB8E8\uC0E8 \uD45C\uC900\uC2DC
-America/Anchorage.generic.long=\uC54C\uB798\uC2A4\uCE74 \uD45C\uC900\uC2DC
-America/Anguilla.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC
-America/Antigua.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC
-America/Araguaina.generic.long=\uBE0C\uB77C\uC9C8\uB9AC\uC544 \uD45C\uC900\uC2DC
-America/Argentina/Buenos_Aires.generic.long=\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC
-America/Argentina/Catamarca.generic.long=\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC
-America/Argentina/ComodRivadavia.generic.long=\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC
-America/Argentina/Cordoba.generic.long=\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC
-America/Argentina/Jujuy.generic.long=\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC
-America/Argentina/La_Rioja.generic.long=\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC
-America/Argentina/Mendoza.generic.long=\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC
-America/Argentina/Rio_Gallegos.generic.long=\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC
-America/Argentina/Salta.generic.long=\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC
-America/Argentina/San_Juan.generic.long=\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC
-America/Argentina/San_Luis.generic.long=\uc544\ub974\ud5e8\ud2f0\ub098 \ud45c\uc900\uc2dc
-America/Argentina/Tucuman.generic.long=\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC
-America/Argentina/Ushuaia.generic.long=\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC
-America/Aruba.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC
-America/Asuncion.generic.long=\uD30C\uB77C\uACFC\uC774 \uD45C\uC900\uC2DC
-America/Atikokan.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC
-America/Atka.generic.long=\uD558\uC640\uC774-\uC54C\uB8E8\uC0E8 \uD45C\uC900\uC2DC
-America/Bahia.generic.long=\uBE0C\uB77C\uC9C8\uB9AC\uC544 \uD45C\uC900\uC2DC
-America/Bahia_Banderas.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC
-America/Barbados.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC
-America/Belem.generic.long=\uBE0C\uB77C\uC9C8\uB9AC\uC544 \uD45C\uC900\uC2DC
-America/Belize.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC
-America/Blanc-Sablon.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC
-America/Boa_Vista.generic.long=\uC544\uB9C8\uC874 \uD45C\uC900\uC2DC
-America/Bogota.generic.long=\uCF5C\uB86C\uBE44\uC544 \uD45C\uC900\uC2DC
-America/Boise.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC
-America/Buenos_Aires.generic.long=\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC
-America/Cambridge_Bay.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC
-America/Campo_Grande.generic.long=\uC544\uB9C8\uC874 \uD45C\uC900\uC2DC
-America/Cancun.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC
-America/Caracas.generic.long=\uBCA0\uB124\uC218\uC5D8\uB77C \uD45C\uC900\uC2DC
-America/Catamarca.generic.long=\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC
-America/Cayenne.generic.long=\uD504\uB791\uC2A4\uB839 \uAE30\uC544\uB098 \uD45C\uC900\uC2DC
-America/Cayman.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC
-America/Chicago.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC
-America/Chihuahua.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC
-America/Coral_Harbour.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC
-America/Cordoba.generic.long=\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC
-America/Costa_Rica.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC
-America/Creston.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC
-America/Cuiaba.generic.long=\uC544\uB9C8\uC874 \uD45C\uC900\uC2DC
-America/Curacao.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC
-America/Danmarkshavn.generic.long=\uADF8\uB9AC\uB2C8\uCE58 \uD45C\uC900\uC2DC
-America/Dawson.generic.long=\uD0DC\uD3C9\uC591 \uD45C\uC900\uC2DC
-America/Dawson_Creek.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC
-America/Denver.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC
-America/Detroit.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC
-America/Dominica.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC
-America/Edmonton.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC
-America/Eirunepe.generic.long=\uc5d0\uc774\ucee4 \uc2dc\uac04
-America/El_Salvador.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC
-America/Ensenada.generic.long=\uD0DC\uD3C9\uC591 \uD45C\uC900\uC2DC
-America/Fort_Wayne.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC
-America/Fortaleza.generic.long=\uBE0C\uB77C\uC9C8\uB9AC\uC544 \uD45C\uC900\uC2DC
-America/Glace_Bay.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC
-America/Godthab.generic.long=\uC11C\uBD80 \uADF8\uB9B0\uB780\uB4DC \uD45C\uC900\uC2DC
-America/Goose_Bay.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC
-America/Grand_Turk.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC
-America/Grenada.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC
-America/Guadeloupe.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC
-America/Guatemala.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC
-America/Guayaquil.generic.long=\uC5D0\uCF70\uB3C4\uB974 \uD45C\uC900\uC2DC
-America/Guyana.generic.long=\uAC00\uC774\uC544\uB098 \uD45C\uC900\uC2DC
-America/Halifax.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC
-America/Havana.generic.long=\uCFE0\uBC14 \uD45C\uC900\uC2DC
-America/Hermosillo.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC
-America/Indiana/Indianapolis.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC
-America/Indiana/Knox.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC
-America/Indiana/Marengo.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC
-America/Indiana/Petersburg.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC
-America/Indiana/Tell_City.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC
-America/Indiana/Vevay.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC
-America/Indiana/Vincennes.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC
-America/Indiana/Winamac.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC
-America/Indianapolis.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC
-America/Inuvik.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC
-America/Iqaluit.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC
-America/Jamaica.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC
-America/Jujuy.generic.long=\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC
-America/Juneau.generic.long=\uC54C\uB798\uC2A4\uCE74 \uD45C\uC900\uC2DC
-America/Kentucky/Louisville.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC
-America/Kentucky/Monticello.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC
-America/Knox_IN.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC
-America/Kralendijk.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC
-America/La_Paz.generic.long=\uBCFC\uB9AC\uBE44\uC544 \uD45C\uC900\uC2DC
-America/Lima.generic.long=\uD398\uB8E8 \uD45C\uC900\uC2DC
-America/Los_Angeles.generic.long=\uD0DC\uD3C9\uC591 \uD45C\uC900\uC2DC
-America/Louisville.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC
-America/Lower_Princes.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC
-America/Maceio.generic.long=\uBE0C\uB77C\uC9C8\uB9AC\uC544 \uD45C\uC900\uC2DC
-America/Managua.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC
-America/Manaus.generic.long=\uC544\uB9C8\uC874 \uD45C\uC900\uC2DC
-America/Marigot.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC
-America/Martinique.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC
-America/Matamoros.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC
-America/Mazatlan.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC
-America/Mendoza.generic.long=\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC
-America/Menominee.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC
-America/Merida.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC
-America/Metlakatla.daylight.long=\uBA54\uD2B8\uB77C\uCE74\uD2B8\uB77C \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04
-America/Metlakatla.generic.long=\uBA54\uD2B8\uB77C\uCE74\uD2B8\uB77C \uD45C\uC900\uC2DC
-America/Metlakatla.standard.long=\uBA54\uD2B8\uB77C\uCE74\uD2B8\uB77C \uD45C\uC900\uC2DC
-America/Mexico_City.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC
-America/Miquelon.generic.long=\uD53C\uC5D0\uB974 \uBBF8\uD074\uB871 \uD45C\uC900\uC2DC
-America/Moncton.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC
-America/Monterrey.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC
-America/Montevideo.generic.long=\uC6B0\uB8E8\uACFC\uC774 \uD45C\uC900\uC2DC
-America/Montreal.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC
-America/Montserrat.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC
-America/Nassau.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC
-America/New_York.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC
-America/Nipigon.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC
-America/Nome.generic.long=\uC54C\uB798\uC2A4\uCE74 \uD45C\uC900\uC2DC
-America/Noronha.generic.long=\uD398\uB974\uB09C\uB3C4 \uB4DC \uB178\uB85C\uD558 \uD45C\uC900\uC2DC
-America/North_Dakota/Beulah.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC
-America/North_Dakota/Center.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC
-America/North_Dakota/New_Salem.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC
-America/Ojinaga.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC
-America/Panama.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC
-America/Pangnirtung.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC
-America/Paramaribo.generic.long=\uC218\uB9AC\uB0A8 \uD45C\uC900\uC2DC
-America/Phoenix.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC
-America/Port-au-Prince.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC
-America/Port_of_Spain.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC
-America/Porto_Acre.generic.long=\uc5d0\uc774\ucee4 \uc2dc\uac04
-America/Porto_Velho.generic.long=\uC544\uB9C8\uC874 \uD45C\uC900\uC2DC
-America/Puerto_Rico.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC
-America/Rainy_River.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC
-America/Rankin_Inlet.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC
-America/Recife.generic.long=\uBE0C\uB77C\uC9C8\uB9AC\uC544 \uD45C\uC900\uC2DC
-America/Regina.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC
-America/Resolute.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC
-America/Rio_Branco.generic.long=\uc5d0\uc774\ucee4 \uc2dc\uac04
-America/Rosario.generic.long=\uC544\uB974\uD5E8\uD2F0\uB098 \uD45C\uC900\uC2DC
-America/Santa_Isabel.generic.long=\uD0DC\uD3C9\uC591 \uD45C\uC900\uC2DC
-America/Santarem.generic.long=\uBE0C\uB77C\uC9C8\uB9AC\uC544 \uD45C\uC900\uC2DC
-America/Santiago.generic.long=\uCE60\uB808 \uD45C\uC900\uC2DC
-America/Santo_Domingo.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC
-America/Sao_Paulo.generic.long=\uBE0C\uB77C\uC9C8\uB9AC\uC544 \uD45C\uC900\uC2DC
-America/Scoresbysund.generic.long=\uB3D9\uBD80 \uADF8\uB9B0\uB780\uB4DC \uD45C\uC900\uC2DC
-America/Shiprock.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC
-America/Sitka.generic.long=\uC54C\uB798\uC2A4\uCE74 \uD45C\uC900\uC2DC
-America/St_Barthelemy.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC
-America/St_Johns.generic.long=\uB274\uD380\uB4E4\uB79C\uB4DC \uD45C\uC900\uC2DC
-America/St_Kitts.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC
-America/St_Lucia.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC
-America/St_Thomas.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC
-America/St_Vincent.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC
-America/Swift_Current.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC
-America/Tegucigalpa.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC
-America/Thule.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC
-America/Thunder_Bay.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC
-America/Tijuana.generic.long=\uD0DC\uD3C9\uC591 \uD45C\uC900\uC2DC
-America/Toronto.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC
-America/Tortola.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC
-America/Vancouver.generic.long=\uD0DC\uD3C9\uC591 \uD45C\uC900\uC2DC
-America/Virgin.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC
-America/Whitehorse.generic.long=\uD0DC\uD3C9\uC591 \uD45C\uC900\uC2DC
-America/Winnipeg.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC
-America/Yakutat.generic.long=\uC54C\uB798\uC2A4\uCE74 \uD45C\uC900\uC2DC
-America/Yellowknife.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC
-Antarctica/Casey.daylight.long=\uC11C\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)
-Antarctica/Casey.generic.long=\uC11C\uBD80 \uD45C\uC900\uC2DC(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)
-Antarctica/Casey.standard.long=\uC11C\uBD80 \uD45C\uC900\uC2DC(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)
-Antarctica/Davis.generic.long=\uB370\uC774\uBE44\uC2A4 \uD45C\uC900\uC2DC
-Antarctica/DumontDUrville.generic.long=\uB450\uBAAC\uD2B8\uC6B0\uB974\uBE4C \uD45C\uC900\uC2DC
-Antarctica/Macquarie.daylight.long=\uB9E4\uCF70\uB9AC \uC12C \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04
-Antarctica/Macquarie.generic.long=\uB9E4\uCF70\uB9AC \uC12C \uD45C\uC900\uC2DC
-Antarctica/Macquarie.standard.long=\uB9E4\uCF70\uB9AC \uC12C \uD45C\uC900\uC2DC
-Antarctica/Mawson.generic.long=\uB9C8\uC2A8 \uD45C\uC900\uC2DC
-Antarctica/McMurdo.generic.long=\uB274\uC9C8\uB79C\uB4DC \uD45C\uC900\uC2DC
-Antarctica/Palmer.generic.long=\uCE60\uB808 \uD45C\uC900\uC2DC
-Antarctica/Rothera.generic.long=\uB85C\uB354\uB77C \uD45C\uC900\uC2DC
-Antarctica/South_Pole.generic.long=\uB274\uC9C8\uB79C\uB4DC \uD45C\uC900\uC2DC
-Antarctica/Syowa.generic.long=\uC1FC\uC640 \uD45C\uC900\uC2DC
-Antarctica/Vostok.generic.long=\uBCF4\uC2A4\uD1A1 \uD45C\uC900\uC2DC
-Arctic/Longyearbyen.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC
-Asia/Aden.generic.long=\uC544\uB77C\uBE44\uC544 \uD45C\uC900\uC2DC
-Asia/Almaty.generic.long=\uC54C\uB9C8\uC544\uD0C0 \uD45C\uC900\uC2DC
-Asia/Amman.generic.long=\uc544\ub77c\ube44\uc544 \ud45c\uc900\uc2dc
-Asia/Anadyr.generic.long=\uC544\uB098\uB514\uB9AC \uD45C\uC900\uC2DC
-Asia/Aqtau.generic.long=\uC544\uD06C\uD0C0\uC6B0 \uD45C\uC900\uC2DC
-Asia/Aqtobe.generic.long=\uC544\uD06C\uD1A0\uBCA0 \uD45C\uC900\uC2DC
-Asia/Ashgabat.generic.long=\uD22C\uB974\uD06C\uBA54\uB2C8\uC2A4\uD0C4 \uD45C\uC900\uC2DC
-Asia/Ashkhabad.generic.long=\uD22C\uB974\uD06C\uBA54\uB2C8\uC2A4\uD0C4 \uD45C\uC900\uC2DC
-Asia/Baghdad.generic.long=\uC544\uB77C\uBE44\uC544 \uD45C\uC900\uC2DC
-Asia/Bahrain.generic.long=\uC544\uB77C\uBE44\uC544 \uD45C\uC900\uC2DC
-Asia/Baku.generic.long=\uC544\uC81C\uB974\uBC14\uC774\uC794 \uD45C\uC900\uC2DC
-Asia/Bangkok.generic.long=\uC778\uB3C4\uCC28\uC774\uB098 \uBC18\uB3C4 \uD45C\uC900\uC2DC
-Asia/Beirut.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC
-Asia/Bishkek.generic.long=\uD0A4\uB974\uAE30\uC2A4\uC2A4\uD0C4 \uD45C\uC900\uC2DC
-Asia/Brunei.generic.long=\uBE0C\uB8E8\uB098\uC774 \uD45C\uC900\uC2DC
-Asia/Calcutta.generic.long=\uC778\uB3C4 \uD45C\uC900\uC2DC
-Asia/Choibalsan.generic.long=\uCD08\uC774\uBC1C\uC0B0 \uD45C\uC900\uC2DC
-Asia/Chongqing.generic.long=\uC911\uAD6D \uD45C\uC900\uC2DC
-Asia/Chungking.generic.long=\uC911\uAD6D \uD45C\uC900\uC2DC
-Asia/Colombo.generic.long=\uC778\uB3C4 \uD45C\uC900\uC2DC
-Asia/Dacca.generic.long=\uBC29\uAE00\uB77C\uB370\uC2DC \uD45C\uC900\uC2DC
-Asia/Damascus.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC
-Asia/Dhaka.generic.long=\uBC29\uAE00\uB77C\uB370\uC2DC \uD45C\uC900\uC2DC
-Asia/Dili.generic.long=\uB3D9\uD2F0\uBAA8\uB974 \uD45C\uC900\uC2DC
-Asia/Dubai.generic.long=\uAC78\uD504\uB9CC \uD45C\uC900\uC2DC
-Asia/Dushanbe.generic.long=\uD0C0\uC9C0\uD0A4\uC2A4\uD0C4 \uD45C\uC900\uC2DC
-Asia/Gaza.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC
-Asia/Harbin.generic.long=\uC911\uAD6D \uD45C\uC900\uC2DC
-Asia/Hebron.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC
-Asia/Ho_Chi_Minh.generic.long=\uC778\uB3C4\uCC28\uC774\uB098 \uBC18\uB3C4 \uD45C\uC900\uC2DC
-Asia/Hong_Kong.generic.long=\uD64D\uCF69 \uD45C\uC900\uC2DC
-Asia/Hovd.generic.long=\uD638\uBE0C\uB4DC \uD45C\uC900\uC2DC
-Asia/Irkutsk.generic.long=\uC774\uB974\uCFE0\uCE20\uD06C \uD45C\uC900\uC2DC
-Asia/Istanbul.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC
-Asia/Jakarta.generic.long=\uC11C\uBD80 \uC778\uB3C4\uB124\uC2DC\uC544 \uD45C\uC900\uC2DC
-Asia/Jayapura.generic.long=\uB3D9\uBD80 \uC778\uB3C4\uB124\uC2DC\uC544 \uD45C\uC900\uC2DC
-Asia/Jerusalem.generic.long=\uC544\uC2A4\uB77C\uC5D8 \uD45C\uC900\uC2DC
-Asia/Kabul.generic.long=\uC544\uD504\uAC00\uB2C8\uC2A4\uD0C4 \uD45C\uC900\uC2DC
-Asia/Kamchatka.generic.long=\uD398\uD2B8\uB85C\uD30C\uBE0C\uB85C\uD504\uC2A4\uD06C-\uCE84\uCC28\uCE20\uD0A4 \uD45C\uC900\uC2DC
-Asia/Karachi.generic.long=\uD30C\uD0A4\uC2A4\uD0C4 \uD45C\uC900\uC2DC
-Asia/Kashgar.generic.long=\uC911\uAD6D \uD45C\uC900\uC2DC
-Asia/Kathmandu.generic.long=\uB124\uD314 \uD45C\uC900\uC2DC
-Asia/Katmandu.generic.long=\uB124\uD314 \uD45C\uC900\uC2DC
-Asia/Khandyga.daylight.long=\uD55C\uB514\uAC00 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04
-Asia/Khandyga.generic.long=\uD55C\uB514\uAC00 \uD45C\uC900\uC2DC
-Asia/Khandyga.standard.long=\uD55C\uB514\uAC00 \uD45C\uC900\uC2DC
-Asia/Kolkata.generic.long=\uC778\uB3C4 \uD45C\uC900\uC2DC
-Asia/Krasnoyarsk.generic.long=\uD06C\uB77C\uC2A4\uB178\uC57C\uB974\uC2A4\uD06C \uD45C\uC900\uC2DC
-Asia/Kuala_Lumpur.generic.long=\uB9D0\uB808\uC774\uC2DC\uC544 \uD45C\uC900\uC2DC
-Asia/Kuching.generic.long=\uB9D0\uB808\uC774\uC2DC\uC544 \uD45C\uC900\uC2DC
-Asia/Kuwait.generic.long=\uC544\uB77C\uBE44\uC544 \uD45C\uC900\uC2DC
-Asia/Macao.generic.long=\uC911\uAD6D \uD45C\uC900\uC2DC
-Asia/Macau.generic.long=\uC911\uAD6D \uD45C\uC900\uC2DC
-Asia/Magadan.generic.long=\uB9C8\uAC00\uB2E8 \uD45C\uC900\uC2DC
-Asia/Makassar.generic.long=\uC911\uBD80 \uC778\uB3C4\uB124\uC2DC\uC544 \uD45C\uC900\uC2DC
-Asia/Manila.generic.long=\uD544\uB9AC\uD540 \uD45C\uC900\uC2DC
-Asia/Muscat.generic.long=\uAC78\uD504\uB9CC \uD45C\uC900\uC2DC
-Asia/Nicosia.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC
-Asia/Novokuznetsk.generic.long=\uB178\uBCF4\uC2DC\uBE44\uB974\uC2A4\uD06C \uD45C\uC900\uC2DC
-Asia/Novosibirsk.generic.long=\uB178\uBCF4\uC2DC\uBE44\uB974\uC2A4\uD06C \uD45C\uC900\uC2DC
-Asia/Omsk.generic.long=\uC634\uC2A4\uD06C \uD45C\uC900\uC2DC
-Asia/Oral.generic.long=\uC624\uB7F4 \uD45C\uC900\uC2DC
-Asia/Phnom_Penh.generic.long=\uC778\uB3C4\uCC28\uC774\uB098 \uBC18\uB3C4 \uD45C\uC900\uC2DC
-Asia/Pontianak.generic.long=\uC11C\uBD80 \uC778\uB3C4\uB124\uC2DC\uC544 \uD45C\uC900\uC2DC
-Asia/Pyongyang.generic.long=\uB300\uD55C\uBBFC\uAD6D \uD45C\uC900\uC2DC
-Asia/Qatar.generic.long=\uC544\uB77C\uBE44\uC544 \uD45C\uC900\uC2DC
-Asia/Qyzylorda.generic.long=\uD0A4\uC9C8\uB85C\uB974\uB2E4 \uD45C\uC900\uC2DC
-Asia/Rangoon.generic.long=\uBBF8\uC580\uB9C8 \uD45C\uC900\uC2DC
-Asia/Saigon.generic.long=\uC778\uB3C4\uCC28\uC774\uB098 \uBC18\uB3C4 \uD45C\uC900\uC2DC
-Asia/Sakhalin.generic.long=\uC0AC\uD560\uB9B0 \uD45C\uC900\uC2DC
-Asia/Samarkand.generic.long=\uC6B0\uC988\uBCA0\uD0A4\uC2A4\uD0C4 \uD45C\uC900\uC2DC
-Asia/Seoul.generic.long=\uB300\uD55C\uBBFC\uAD6D \uD45C\uC900\uC2DC
-Asia/Shanghai.generic.long=\uC911\uAD6D \uD45C\uC900\uC2DC
-Asia/Singapore.generic.long=\uC2F1\uAC00\uD3EC\uB974 \uD45C\uC900\uC2DC
-Asia/Taipei.generic.long=\uC911\uAD6D \uD45C\uC900\uC2DC
-Asia/Tashkent.generic.long=\uC6B0\uC988\uBCA0\uD0A4\uC2A4\uD0C4 \uD45C\uC900\uC2DC
-Asia/Tbilisi.generic.long=\uADF8\uB8E8\uC9C0\uC57C \uD45C\uC900\uC2DC
-Asia/Tehran.generic.long=\uC774\uB780 \uD45C\uC900\uC2DC
-Asia/Tel_Aviv.generic.long=\uC544\uC2A4\uB77C\uC5D8 \uD45C\uC900\uC2DC
-Asia/Thimbu.generic.long=\uBD80\uD0C4 \uD45C\uC900\uC2DC
-Asia/Thimphu.generic.long=\uBD80\uD0C4 \uD45C\uC900\uC2DC
-Asia/Tokyo.generic.long=\uC77C\uBCF8 \uD45C\uC900\uC2DC
-Asia/Ujung_Pandang.generic.long=\uC911\uBD80 \uC778\uB3C4\uB124\uC2DC\uC544 \uD45C\uC900\uC2DC
-Asia/Ulaanbaatar.generic.long=\uC6B8\uB780\uBC14\uD1A0\uB974 \uD45C\uC900\uC2DC
-Asia/Ulan_Bator.generic.long=\uC6B8\uB780\uBC14\uD1A0\uB974 \uD45C\uC900\uC2DC
-Asia/Urumqi.generic.long=\uC911\uAD6D \uD45C\uC900\uC2DC
-Asia/Ust-Nera.daylight.long=\uC6B0\uC2A4\uD2F0\uB124\uB77C \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04
-Asia/Ust-Nera.generic.long=\uC6B0\uC2A4\uD2F0\uB124\uB77C \uD45C\uC900\uC2DC
-Asia/Ust-Nera.standard.long=\uC6B0\uC2A4\uD2F0\uB124\uB77C \uD45C\uC900\uC2DC
-Asia/Vientiane.generic.long=\uC778\uB3C4\uCC28\uC774\uB098 \uBC18\uB3C4 \uD45C\uC900\uC2DC
-Asia/Vladivostok.generic.long=\uBE14\uB77C\uB514\uBCF4\uC2A4\uD1A1 \uD45C\uC900\uC2DC
-Asia/Yakutsk.generic.long=\uC57C\uCFE0\uCE20\uD06C \uD45C\uC900\uC2DC
-Asia/Yekaterinburg.generic.long=\uC608\uCE74\uD14C\uB9B0\uBD80\uB974\uD06C \uD45C\uC900\uC2DC
-Asia/Yerevan.generic.long=\uC544\uB974\uBA54\uB2C8\uC544 \uD45C\uC900\uC2DC
-Atlantic/Azores.generic.long=\uC544\uC870\uB808\uC2A4 \uD45C\uC900\uC2DC
-Atlantic/Bermuda.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC
-Atlantic/Canary.generic.long=\uC11C\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC
-Atlantic/Cape_Verde.generic.long=\uCF00\uC774\uD504\uBCA0\uB974\uB370 \uD45C\uC900\uC2DC
-Atlantic/Faeroe.generic.long=\uC11C\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC
-Atlantic/Faroe.generic.long=\uC11C\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC
-Atlantic/Jan_Mayen.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC
-Atlantic/Madeira.generic.long=\uC11C\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC
-Atlantic/Reykjavik.generic.long=\uADF8\uB9AC\uB2C8\uCE58 \uD45C\uC900\uC2DC
-Atlantic/South_Georgia.generic.long=\uC0AC\uC6B0\uC2A4\uC870\uC9C0\uC544 \uD45C\uC900\uC2DC
-Atlantic/St_Helena.generic.long=\uADF8\uB9AC\uB2C8\uCE58 \uD45C\uC900\uC2DC
-Atlantic/Stanley.generic.long=\uD3EC\uD074\uB79C\uB4DC \uC81C\uB3C4 \uD45C\uC900\uC2DC
-Australia/ACT.daylight.long=\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)
-Australia/ACT.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)
-Australia/ACT.standard.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)
-Australia/Adelaide.daylight.long=\uC911\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)
-Australia/Adelaide.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)
-Australia/Adelaide.standard.long=\uC911\uBD80 \uD45C\uC900\uC2DC(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)
-Australia/Brisbane.daylight.long=\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uD038\uC990\uB79C\uB4DC)
-Australia/Brisbane.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uD038\uC990\uB79C\uB4DC)
-Australia/Brisbane.standard.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uD038\uC990\uB79C\uB4DC)
-Australia/Broken_Hill.daylight.long=\uC911\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544/\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)
-Australia/Broken_Hill.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544/\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)
-Australia/Broken_Hill.standard.long=\uC911\uBD80 \uD45C\uC900\uC2DC(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544/\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)
-Australia/Canberra.daylight.long=\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)
-Australia/Canberra.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)
-Australia/Canberra.standard.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)
-Australia/Currie.daylight.long=\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)
-Australia/Currie.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)
-Australia/Currie.standard.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)
-Australia/Darwin.daylight.long=\uC911\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uBD81\uBD80 \uC9C0\uC5ED)
-Australia/Darwin.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC(\uBD81\uBD80 \uC9C0\uC5ED)
-Australia/Darwin.standard.long=\uC911\uBD80 \uD45C\uC900\uC2DC(\uBD81\uBD80 \uC9C0\uC5ED)
-Australia/Eucla.daylight.long=\uC911\uC559 \uC11C\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)
-Australia/Eucla.generic.long=\uC911\uC559 \uC11C\uBD80 \uD45C\uC900\uC2DC(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)
-Australia/Eucla.standard.long=\uC911\uC559 \uC11C\uBD80 \uD45C\uC900\uC2DC(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)
-Australia/Hobart.daylight.long=\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uD0DC\uC988\uBA54\uC774\uB2C8\uC544)
-Australia/Hobart.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uD0DC\uC988\uBA54\uC774\uB2C8\uC544)
-Australia/Hobart.standard.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uD0DC\uC988\uBA54\uC774\uB2C8\uC544)
-Australia/LHI.generic.long=\uB85C\uB4DC\uD558\uC6B0 \uD45C\uC900\uC2DC
-Australia/Lindeman.daylight.long=\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uD038\uC990\uB79C\uB4DC)
-Australia/Lindeman.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uD038\uC990\uB79C\uB4DC)
-Australia/Lindeman.standard.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uD038\uC990\uB79C\uB4DC)
-Australia/Lord_Howe.generic.long=\uB85C\uB4DC\uD558\uC6B0 \uD45C\uC900\uC2DC
-Australia/Melbourne.daylight.long=\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uBE45\uD1A0\uB9AC\uC544)
-Australia/Melbourne.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uBE45\uD1A0\uB9AC\uC544)
-Australia/Melbourne.standard.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uBE45\uD1A0\uB9AC\uC544)
-Australia/NSW.daylight.long=\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)
-Australia/NSW.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)
-Australia/NSW.standard.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)
-Australia/North.daylight.long=\uC911\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uBD81\uBD80 \uC9C0\uC5ED)
-Australia/North.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC(\uBD81\uBD80 \uC9C0\uC5ED)
-Australia/North.standard.long=\uC911\uBD80 \uD45C\uC900\uC2DC(\uBD81\uBD80 \uC9C0\uC5ED)
-Australia/Perth.daylight.long=\uC11C\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)
-Australia/Perth.generic.long=\uC11C\uBD80 \uD45C\uC900\uC2DC(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)
-Australia/Perth.standard.long=\uC11C\uBD80 \uD45C\uC900\uC2DC(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)
-Australia/Queensland.daylight.long=\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uD038\uC990\uB79C\uB4DC)
-Australia/Queensland.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uD038\uC990\uB79C\uB4DC)
-Australia/Queensland.standard.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uD038\uC990\uB79C\uB4DC)
-Australia/South.daylight.long=\uC911\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)
-Australia/South.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)
-Australia/South.standard.long=\uC911\uBD80 \uD45C\uC900\uC2DC(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)
-Australia/Sydney.daylight.long=\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)
-Australia/Sydney.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)
-Australia/Sydney.standard.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)
-Australia/Tasmania.daylight.long=\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uD0DC\uC988\uBA54\uC774\uB2C8\uC544)
-Australia/Tasmania.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uD0DC\uC988\uBA54\uC774\uB2C8\uC544)
-Australia/Tasmania.standard.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uD0DC\uC988\uBA54\uC774\uB2C8\uC544)
-Australia/Victoria.daylight.long=\uB3D9\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uBE45\uD1A0\uB9AC\uC544)
-Australia/Victoria.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uBE45\uD1A0\uB9AC\uC544)
-Australia/Victoria.standard.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC(\uBE45\uD1A0\uB9AC\uC544)
-Australia/West.daylight.long=\uC11C\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)
-Australia/West.generic.long=\uC11C\uBD80 \uD45C\uC900\uC2DC(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)
-Australia/West.standard.long=\uC11C\uBD80 \uD45C\uC900\uC2DC(\uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544)
-Australia/Yancowinna.daylight.long=\uC911\uBD80 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544/\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)
-Australia/Yancowinna.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544/\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)
-Australia/Yancowinna.standard.long=\uC911\uBD80 \uD45C\uC900\uC2DC(\uB0A8\uBD80 \uC624\uC2A4\uD2B8\uB808\uC77C\uB9AC\uC544/\uB274\uC0AC\uC6B0\uC2A4\uC6E8\uC77C\uC988)
-BET.generic.long=\uBE0C\uB77C\uC9C8\uB9AC\uC544 \uD45C\uC900\uC2DC
-BST.generic.long=\uBC29\uAE00\uB77C\uB370\uC2DC \uD45C\uC900\uC2DC
-Brazil/Acre.generic.long=\uc5d0\uc774\ucee4 \uc2dc\uac04
-Brazil/DeNoronha.generic.long=\uD398\uB974\uB09C\uB3C4 \uB4DC \uB178\uB85C\uD558 \uD45C\uC900\uC2DC
-Brazil/East.generic.long=\uBE0C\uB77C\uC9C8\uB9AC\uC544 \uD45C\uC900\uC2DC
-Brazil/West.generic.long=\uC544\uB9C8\uC874 \uD45C\uC900\uC2DC
-CAT.generic.long=\uC911\uC559 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC
-CET.generic.long=\uc911\uc559 \uc720\ub7fd \ud45c\uc900\uc2dc
-CNT.generic.long=\uB274\uD380\uB4E4\uB79C\uB4DC \uD45C\uC900\uC2DC
-CST.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC
-CST6CDT.generic.long=\uc911\ubd80 \ud45c\uc900\uc2dc
-CTT.generic.long=\uC911\uAD6D \uD45C\uC900\uC2DC
-Canada/Atlantic.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC
-Canada/Central.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC
-Canada/East-Saskatchewan.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC
-Canada/Eastern.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC
-Canada/Mountain.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC
-Canada/Newfoundland.generic.long=\uB274\uD380\uB4E4\uB79C\uB4DC \uD45C\uC900\uC2DC
-Canada/Pacific.generic.long=\uD0DC\uD3C9\uC591 \uD45C\uC900\uC2DC
-Canada/Saskatchewan.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC
-Canada/Yukon.generic.long=\uD0DC\uD3C9\uC591 \uD45C\uC900\uC2DC
-Chile/Continental.generic.long=\uCE60\uB808 \uD45C\uC900\uC2DC
-Chile/EasterIsland.generic.long=\uC774\uC2A4\uD130 \uC12C \uD45C\uC900\uC2DC
-Cuba.generic.long=\uCFE0\uBC14 \uD45C\uC900\uC2DC
-EAT.generic.long=\uB3D9\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC
-ECT.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC
-EET.generic.long=\ub3d9\ubd80 \uc720\ub7fd \ud45c\uc900\uc2dc
-EST.generic.long=\ub3d9\ubd80 \ud45c\uc900\uc2dc
-EST5EDT.generic.long=\ub3d9\ubd80 \ud45c\uc900\uc2dc
-Egypt.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC
-Eire.generic.long=\uC544\uC77C\uB79C\uB4DC \uD45C\uC900\uC2DC
-Etc/Greenwich.generic.long=\uADF8\uB9AC\uB2C8\uCE58 \uD45C\uC900\uC2DC
-Etc/UCT.generic.long=\uC9C0\uC5ED \uD45C\uC900\uC2DC
-Etc/UTC.generic.long=\uC9C0\uC5ED \uD45C\uC900\uC2DC
-Etc/Universal.generic.long=\uC9C0\uC5ED \uD45C\uC900\uC2DC
-Etc/Zulu.generic.long=\uC9C0\uC5ED \uD45C\uC900\uC2DC
-Europe/Amsterdam.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC
-Europe/Andorra.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC
-Europe/Athens.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC
-Europe/Belfast.generic.long=\uC601\uAD6D \uD45C\uC900\uC2DC
-Europe/Belgrade.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC
-Europe/Berlin.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC
-Europe/Bratislava.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC
-Europe/Brussels.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC
-Europe/Bucharest.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC
-Europe/Budapest.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC
-Europe/Busingen.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC
-Europe/Chisinau.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC
-Europe/Copenhagen.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC
-Europe/Dublin.generic.long=\uC544\uC77C\uB79C\uB4DC \uD45C\uC900\uC2DC
-Europe/Gibraltar.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC
-Europe/Guernsey.generic.long=\uC601\uAD6D \uD45C\uC900\uC2DC
-Europe/Helsinki.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC
-Europe/Isle_of_Man.generic.long=\uC601\uAD6D \uD45C\uC900\uC2DC
-Europe/Istanbul.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC
-Europe/Jersey.generic.long=\uC601\uAD6D \uD45C\uC900\uC2DC
-Europe/Kaliningrad.daylight.long=\uADF9\uB3D9 \uC720\uB7FD \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04
-Europe/Kaliningrad.generic.long=\uADF9\uB3D9 \uC720\uB7FD \uD45C\uC900\uC2DC
-Europe/Kaliningrad.standard.long=\uADF9\uB3D9 \uC720\uB7FD \uD45C\uC900\uC2DC
-Europe/Kiev.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC
-Europe/Lisbon.generic.long=\uC11C\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC
-Europe/Ljubljana.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC
-Europe/London.generic.long=\uC601\uAD6D \uD45C\uC900\uC2DC
-Europe/Luxembourg.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC
-Europe/Madrid.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC
-Europe/Malta.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC
-Europe/Mariehamn.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC
-Europe/Minsk.daylight.long=\uADF9\uB3D9 \uC720\uB7FD \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04
-Europe/Minsk.generic.long=\uADF9\uB3D9 \uC720\uB7FD \uD45C\uC900\uC2DC
-Europe/Minsk.standard.long=\uADF9\uB3D9 \uC720\uB7FD \uD45C\uC900\uC2DC
-Europe/Monaco.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC
-Europe/Moscow.generic.long=\uBAA8\uC2A4\uD06C\uBC14 \uD45C\uC900\uC2DC
-Europe/Nicosia.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC
-Europe/Oslo.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC
-Europe/Paris.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC
-Europe/Podgorica.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC
-Europe/Prague.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC
-Europe/Riga.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC
-Europe/Rome.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC
-Europe/Samara.generic.long=\uC0AC\uB9C8\uB77C \uD45C\uC900\uC2DC
-Europe/San_Marino.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC
-Europe/Sarajevo.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC
-Europe/Simferopol.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC
-Europe/Skopje.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC
-Europe/Sofia.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC
-Europe/Stockholm.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC
-Europe/Tallinn.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC
-Europe/Tirane.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC
-Europe/Tiraspol.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC
-Europe/Uzhgorod.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC
-Europe/Vaduz.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC
-Europe/Vatican.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC
-Europe/Vienna.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC
-Europe/Vilnius.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC
-Europe/Volgograd.generic.long=\uBCFC\uACE0\uADF8\uB77C\uB4DC \uD45C\uC900\uC2DC
-Europe/Warsaw.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC
-Europe/Zagreb.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC
-Europe/Zaporozhye.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC
-Europe/Zurich.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC
-GB-Eire.generic.long=\uC601\uAD6D \uD45C\uC900\uC2DC
-GB.generic.long=\uC601\uAD6D \uD45C\uC900\uC2DC
-GMT.generic.long=\uADF8\uB9AC\uB2C8\uCE58 \uD45C\uC900\uC2DC
-Greenwich.generic.long=\uADF8\uB9AC\uB2C8\uCE58 \uD45C\uC900\uC2DC
-HST.generic.long=\ud558\uc640\uc774 \ud45c\uc900\uc2dc
-Hongkong.generic.long=\uD64D\uCF69 \uD45C\uC900\uC2DC
-IET.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC
-IST.generic.long=\uC778\uB3C4 \uD45C\uC900\uC2DC
-Iceland.generic.long=\uADF8\uB9AC\uB2C8\uCE58 \uD45C\uC900\uC2DC
-Indian/Antananarivo.generic.long=\uB3D9\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC
-Indian/Chagos.generic.long=\uC778\uB3C4\uC591 \uC2DD\uBBFC\uC9C0 \uD45C\uC900\uC2DC
-Indian/Christmas.generic.long=\uD06C\uB9AC\uC2A4\uB9C8\uC2A4 \uC12C \uD45C\uC900\uC2DC
-Indian/Cocos.generic.long=\uCF54\uCF54\uC2A4 \uC81C\uB3C4 \uD45C\uC900\uC2DC
-Indian/Comoro.generic.long=\uB3D9\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC
-Indian/Kerguelen.generic.long=\uD504\uB791\uC2A4\uB839 \uB0A8\uBD80 \uBC0F \uB0A8\uADF9 \uB300\uB959 \uD45C\uC900\uC2DC
-Indian/Mahe.generic.long=\uC138\uC774\uC178 \uD45C\uC900\uC2DC
-Indian/Maldives.generic.long=\uBAB0\uB514\uBE0C \uD45C\uC900\uC2DC
-Indian/Mauritius.generic.long=\uBAA8\uB9AC\uC154\uC2A4 \uD45C\uC900\uC2DC
-Indian/Mayotte.generic.long=\uB3D9\uBD80 \uC544\uD504\uB9AC\uCE74 \uD45C\uC900\uC2DC
-Indian/Reunion.generic.long=\uB808\uC704\uB2C8\uC639 \uD45C\uC900\uC2DC
-Iran.generic.long=\uC774\uB780 \uD45C\uC900\uC2DC
-Israel.generic.long=\uC544\uC2A4\uB77C\uC5D8 \uD45C\uC900\uC2DC
-JST.generic.long=\uC77C\uBCF8 \uD45C\uC900\uC2DC
-Jamaica.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC
-Japan.generic.long=\uC77C\uBCF8 \uD45C\uC900\uC2DC
-Kwajalein.generic.long=\uB9C8\uC15C \uC81C\uB3C4 \uD45C\uC900\uC2DC
-Libya.generic.long=\ub3d9\ubd80 \uc720\ub7fd \ud45c\uc900\uc2dc
-MET.generic.long=MET
-MIT.generic.long=\uC11C\uC0AC\uBAA8\uC544 \uD45C\uC900\uC2DC
-MST.generic.long=\uc0b0\uc9c0 \ud45c\uc900\uc2dc
-MST7MDT.generic.long=\uc0b0\uc9c0 \ud45c\uc900\uc2dc
-Mexico/BajaNorte.generic.long=\uD0DC\uD3C9\uC591 \uD45C\uC900\uC2DC
-Mexico/BajaSur.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC
-Mexico/General.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC
-NET.generic.long=\uC544\uB974\uBA54\uB2C8\uC544 \uD45C\uC900\uC2DC
-NST.generic.long=\uB274\uC9C8\uB79C\uB4DC \uD45C\uC900\uC2DC
-NZ-CHAT.generic.long=\uCC44\uD140 \uD45C\uC900\uC2DC
-NZ.generic.long=\uB274\uC9C8\uB79C\uB4DC \uD45C\uC900\uC2DC
-Navajo.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC
-PLT.generic.long=\uD30C\uD0A4\uC2A4\uD0C4 \uD45C\uC900\uC2DC
-PNT.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC
-PRC.generic.long=\uC911\uAD6D \uD45C\uC900\uC2DC
-PRT.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC
-PST.generic.long=\uD0DC\uD3C9\uC591 \uD45C\uC900\uC2DC
-PST8PDT.generic.long=\ud0dc\ud3c9\uc591 \ud45c\uc900\uc2dc
-Pacific/Apia.generic.long=\uC11C\uC0AC\uBAA8\uC544 \uD45C\uC900\uC2DC
-Pacific/Auckland.generic.long=\uB274\uC9C8\uB79C\uB4DC \uD45C\uC900\uC2DC
-Pacific/Chatham.generic.long=\uCC44\uD140 \uD45C\uC900\uC2DC
-Pacific/Chuuk.daylight.long=\uCD94\uD06C \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04
-Pacific/Chuuk.generic.long=\uCD94\uD06C \uD45C\uC900\uC2DC
-Pacific/Chuuk.standard.long=\uCD94\uD06C \uD45C\uC900\uC2DC
-Pacific/Easter.generic.long=\uC774\uC2A4\uD130 \uC12C \uD45C\uC900\uC2DC
-Pacific/Efate.generic.long=\uBC14\uB204\uC544\uD22C \uD45C\uC900\uC2DC
-Pacific/Enderbury.generic.long=\uD53C\uB2C9\uC2A4 \uC81C\uB3C4 \uD45C\uC900\uC2DC
-Pacific/Fakaofo.generic.long=\uD1A0\uCF08\uB77C\uC6B0 \uD45C\uC900\uC2DC
-Pacific/Fiji.generic.long=\uD53C\uC9C0 \uD45C\uC900\uC2DC
-Pacific/Funafuti.generic.long=\uD22C\uBC1C\uB8E8 \uD45C\uC900\uC2DC
-Pacific/Galapagos.generic.long=\uAC08\uB77C\uD30C\uACE0\uC2A4 \uD45C\uC900\uC2DC
-Pacific/Gambier.generic.long=\uC7A0\uBE44\uC544 \uD45C\uC900\uC2DC
-Pacific/Guadalcanal.generic.long=\uC194\uB85C\uBAAC \uC81C\uB3C4 \uD45C\uC900\uC2DC
-Pacific/Guam.generic.long=\uCC28\uBAA8\uB974 \uD45C\uC900\uC2DC
-Pacific/Honolulu.generic.long=\uD558\uC640\uC774 \uD45C\uC900\uC2DC
-Pacific/Johnston.generic.long=\uD558\uC640\uC774 \uD45C\uC900\uC2DC
-Pacific/Kiritimati.generic.long=\uB77C\uC778 \uC81C\uB3C4 \uD45C\uC900\uC2DC
-Pacific/Kosrae.generic.long=\uCF54\uC2A4\uB808 \uD45C\uC900\uC2DC
-Pacific/Kwajalein.generic.long=\uB9C8\uC15C \uC81C\uB3C4 \uD45C\uC900\uC2DC
-Pacific/Majuro.generic.long=\uB9C8\uC15C \uC81C\uB3C4 \uD45C\uC900\uC2DC
-Pacific/Marquesas.generic.long=\uB9C8\uD0A4\uC800\uC2A4 \uD45C\uC900\uC2DC
-Pacific/Midway.generic.long=\uC0AC\uBAA8\uC544 \uD45C\uC900\uC2DC
-Pacific/Nauru.generic.long=\uB098\uC6B0\uB8E8 \uD45C\uC900\uC2DC
-Pacific/Niue.generic.long=\uB2C8\uC6B0\uC5D0 \uD45C\uC900\uC2DC
-Pacific/Norfolk.generic.long=\uB178\uD37D \uD45C\uC900\uC2DC
-Pacific/Noumea.generic.long=\uB274 \uCE7C\uB808\uB3C4\uB2C8\uC544 \uD45C\uC900\uC2DC
-Pacific/Pago_Pago.generic.long=\uC0AC\uBAA8\uC544 \uD45C\uC900\uC2DC
-Pacific/Palau.generic.long=\uD314\uB77C\uC6B0 \uD45C\uC900\uC2DC
-Pacific/Pitcairn.generic.long=\uD54F\uCF00\uC5B8 \uD45C\uC900\uC2DC
-Pacific/Pohnpei.daylight.long=\uD3F0\uD398\uC774 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04
-Pacific/Pohnpei.generic.long=\uD3EC\uB098\uD398 \uD45C\uC900\uC2DC
-Pacific/Pohnpei.standard.long=\uD3F0\uD398\uC774 \uD45C\uC900\uC2DC
-Pacific/Ponape.daylight.long=\uD3F0\uD398\uC774 \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04
-Pacific/Ponape.generic.long=\uD3EC\uB098\uD398 \uD45C\uC900\uC2DC
-Pacific/Ponape.standard.long=\uD3F0\uD398\uC774 \uD45C\uC900\uC2DC
-Pacific/Port_Moresby.generic.long=\uD30C\uD478\uC544 \uB274\uAE30\uB2C8\uC544 \uD45C\uC900\uC2DC
-Pacific/Rarotonga.generic.long=\uCFE1 \uC81C\uB3C4 \uD45C\uC900\uC2DC
-Pacific/Saipan.generic.long=\uCC28\uBAA8\uB974 \uD45C\uC900\uC2DC
-Pacific/Samoa.generic.long=\uC0AC\uBAA8\uC544 \uD45C\uC900\uC2DC
-Pacific/Tahiti.generic.long=\uD0C0\uD788\uD2F0 \uD45C\uC900\uC2DC
-Pacific/Tarawa.generic.long=\uAE38\uBC84\uD2B8 \uC81C\uB3C4 \uD45C\uC900\uC2DC
-Pacific/Tongatapu.generic.long=\uD1B5\uAC00 \uD45C\uC900\uC2DC
-Pacific/Truk.daylight.long=\uCD94\uD06C \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04
-Pacific/Truk.generic.long=\uCD94\uD06C \uD45C\uC900\uC2DC
-Pacific/Truk.standard.long=\uCD94\uD06C \uD45C\uC900\uC2DC
-Pacific/Wake.generic.long=\uC6E8\uC774\uD06C \uD45C\uC900\uC2DC
-Pacific/Wallis.generic.long=\uC6D4\uB9AC\uC2A4 \uD478\uD22C\uB098 \uD45C\uC900\uC2DC
-Pacific/Yap.daylight.long=\uCD94\uD06C \uC77C\uAD11 \uC808\uC57D \uC2DC\uAC04
-Pacific/Yap.generic.long=\uCD94\uD06C \uD45C\uC900\uC2DC
-Pacific/Yap.standard.long=\uCD94\uD06C \uD45C\uC900\uC2DC
-Poland.generic.long=\uC911\uC559 \uC720\uB7FD \uD45C\uC900\uC2DC
-Portugal.generic.long=\uC11C\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC
-ROK.generic.long=\uB300\uD55C\uBBFC\uAD6D \uD45C\uC900\uC2DC
-SST.generic.long=\uC194\uB85C\uBAAC \uC81C\uB3C4 \uD45C\uC900\uC2DC
-Singapore.generic.long=\uC2F1\uAC00\uD3EC\uB974 \uD45C\uC900\uC2DC
-SystemV/AST4.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC
-SystemV/AST4ADT.generic.long=\uB300\uC11C\uC591 \uD45C\uC900\uC2DC
-SystemV/CST6.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC
-SystemV/CST6CDT.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC
-SystemV/EST5.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC
-SystemV/EST5EDT.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC
-SystemV/HST10.generic.long=\uD558\uC640\uC774 \uD45C\uC900\uC2DC
-SystemV/MST7.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC
-SystemV/MST7MDT.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC
-SystemV/PST8.generic.long=\uD0DC\uD3C9\uC591 \uD45C\uC900\uC2DC
-SystemV/PST8PDT.generic.long=\uD0DC\uD3C9\uC591 \uD45C\uC900\uC2DC
-SystemV/YST9.generic.long=\uC54C\uB798\uC2A4\uCE74 \uD45C\uC900\uC2DC
-SystemV/YST9YDT.generic.long=\uC54C\uB798\uC2A4\uCE74 \uD45C\uC900\uC2DC
-Turkey.generic.long=\uB3D9\uBD80 \uC720\uB7FD \uD45C\uC900\uC2DC
-UCT.generic.long=\uC9C0\uC5ED \uD45C\uC900\uC2DC
-US/Alaska.generic.long=\uC54C\uB798\uC2A4\uCE74 \uD45C\uC900\uC2DC
-US/Aleutian.generic.long=\uD558\uC640\uC774-\uC54C\uB8E8\uC0E8 \uD45C\uC900\uC2DC
-US/Arizona.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC
-US/Central.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC
-US/East-Indiana.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC
-US/Eastern.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC
-US/Hawaii.generic.long=\uD558\uC640\uC774 \uD45C\uC900\uC2DC
-US/Indiana-Starke.generic.long=\uC911\uBD80 \uD45C\uC900\uC2DC
-US/Michigan.generic.long=\uB3D9\uBD80 \uD45C\uC900\uC2DC
-US/Mountain.generic.long=\uC0B0\uC9C0 \uD45C\uC900\uC2DC
-US/Pacific-New.generic.long=\uD0DC\uD3C9\uC591 \uD45C\uC900\uC2DC
-US/Pacific.generic.long=\uD0DC\uD3C9\uC591 \uD45C\uC900\uC2DC
-US/Samoa.generic.long=\uC0AC\uBAA8\uC544 \uD45C\uC900\uC2DC
-UTC.generic.long=\uC9C0\uC5ED \uD45C\uC900\uC2DC
-Universal.generic.long=\uC9C0\uC5ED \uD45C\uC900\uC2DC
-VST.generic.long=\uC778\uB3C4\uCC28\uC774\uB098 \uBC18\uB3C4 \uD45C\uC900\uC2DC
-W-SU.generic.long=\uBAA8\uC2A4\uD06C\uBC14 \uD45C\uC900\uC2DC
-WET.generic.long=\uc11c\ubd80 \uc720\ub7fd \ud45c\uc900\uc2dc
-Zulu.generic.long=\uC9C0\uC5ED \uD45C\uC900\uC2DC
diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_ko_short.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_ko_short.properties
deleted file mode 100644
index 095522a..0000000
--- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_ko_short.properties
+++ /dev/null
@@ -1,1743 +0,0 @@
-ACT.daylight.short=CST
-ACT.generic.short=CT
-ACT.standard.short=CST
-AET.daylight.short=EST
-AET.generic.short=ET
-AET.standard.short=EST
-Africa/Abidjan.daylight.short=GMT
-Africa/Abidjan.generic.short=GMT
-Africa/Abidjan.standard.short=GMT
-Africa/Accra.daylight.short=GHST
-Africa/Accra.generic.short=GMT
-Africa/Accra.standard.short=GMT
-Africa/Addis_Ababa.daylight.short=EAST
-Africa/Addis_Ababa.generic.short=EAT
-Africa/Addis_Ababa.standard.short=EAT
-Africa/Algiers.daylight.short=CEST
-Africa/Algiers.generic.short=CET
-Africa/Algiers.standard.short=CET
-Africa/Asmara.daylight.short=EAST
-Africa/Asmara.generic.short=EAT
-Africa/Asmara.standard.short=EAT
-Africa/Asmera.daylight.short=EAST
-Africa/Asmera.generic.short=EAT
-Africa/Asmera.standard.short=EAT
-Africa/Bamako.daylight.short=GMT
-Africa/Bamako.generic.short=GMT
-Africa/Bamako.standard.short=GMT
-Africa/Bangui.daylight.short=WAST
-Africa/Bangui.generic.short=WAT
-Africa/Bangui.standard.short=WAT
-Africa/Banjul.daylight.short=GMT
-Africa/Banjul.generic.short=GMT
-Africa/Banjul.standard.short=GMT
-Africa/Bissau.daylight.short=GMT
-Africa/Bissau.generic.short=GMT
-Africa/Bissau.standard.short=GMT
-Africa/Blantyre.daylight.short=CAST
-Africa/Blantyre.generic.short=CAT
-Africa/Blantyre.standard.short=CAT
-Africa/Brazzaville.daylight.short=WAST
-Africa/Brazzaville.generic.short=WAT
-Africa/Brazzaville.standard.short=WAT
-Africa/Bujumbura.daylight.short=CAST
-Africa/Bujumbura.generic.short=CAT
-Africa/Bujumbura.standard.short=CAT
-Africa/Cairo.daylight.short=EEST
-Africa/Cairo.generic.short=EET
-Africa/Cairo.standard.short=EET
-Africa/Casablanca.daylight.short=WEST
-Africa/Casablanca.generic.short=WET
-Africa/Casablanca.standard.short=WET
-Africa/Ceuta.daylight.short=CEST
-Africa/Ceuta.generic.short=CET
-Africa/Ceuta.standard.short=CET
-Africa/Conakry.daylight.short=GMT
-Africa/Conakry.generic.short=GMT
-Africa/Conakry.standard.short=GMT
-Africa/Dakar.daylight.short=GMT
-Africa/Dakar.generic.short=GMT
-Africa/Dakar.standard.short=GMT
-Africa/Dar_es_Salaam.daylight.short=EAST
-Africa/Dar_es_Salaam.generic.short=EAT
-Africa/Dar_es_Salaam.standard.short=EAT
-Africa/Djibouti.daylight.short=EAST
-Africa/Djibouti.generic.short=EAT
-Africa/Djibouti.standard.short=EAT
-Africa/Douala.daylight.short=WAST
-Africa/Douala.generic.short=WAT
-Africa/Douala.standard.short=WAT
-Africa/El_Aaiun.daylight.short=WEST
-Africa/El_Aaiun.generic.short=WET
-Africa/El_Aaiun.standard.short=WET
-Africa/Freetown.daylight.short=SLST
-Africa/Freetown.generic.short=SLT
-Africa/Freetown.standard.short=GMT
-Africa/Gaborone.daylight.short=CAST
-Africa/Gaborone.generic.short=CAT
-Africa/Gaborone.standard.short=CAT
-Africa/Harare.daylight.short=CAST
-Africa/Harare.generic.short=CAT
-Africa/Harare.standard.short=CAT
-Africa/Johannesburg.daylight.short=SAST
-Africa/Johannesburg.generic.short=SAT
-Africa/Johannesburg.standard.short=SAST
-Africa/Juba.daylight.short=EAST
-Africa/Juba.generic.short=EAT
-Africa/Juba.standard.short=EAT
-Africa/Kampala.daylight.short=EAST
-Africa/Kampala.generic.short=EAT
-Africa/Kampala.standard.short=EAT
-Africa/Khartoum.daylight.short=EAST
-Africa/Khartoum.generic.short=EAT
-Africa/Khartoum.standard.short=EAT
-Africa/Kigali.daylight.short=CAST
-Africa/Kigali.generic.short=CAT
-Africa/Kigali.standard.short=CAT
-Africa/Kinshasa.daylight.short=WAST
-Africa/Kinshasa.generic.short=WAT
-Africa/Kinshasa.standard.short=WAT
-Africa/Lagos.daylight.short=WAST
-Africa/Lagos.generic.short=WAT
-Africa/Lagos.standard.short=WAT
-Africa/Libreville.daylight.short=WAST
-Africa/Libreville.generic.short=WAT
-Africa/Libreville.standard.short=WAT
-Africa/Lome.daylight.short=GMT
-Africa/Lome.generic.short=GMT
-Africa/Lome.standard.short=GMT
-Africa/Luanda.daylight.short=WAST
-Africa/Luanda.generic.short=WAT
-Africa/Luanda.standard.short=WAT
-Africa/Lubumbashi.daylight.short=CAST
-Africa/Lubumbashi.generic.short=CAT
-Africa/Lubumbashi.standard.short=CAT
-Africa/Lusaka.daylight.short=CAST
-Africa/Lusaka.generic.short=CAT
-Africa/Lusaka.standard.short=CAT
-Africa/Malabo.daylight.short=WAST
-Africa/Malabo.generic.short=WAT
-Africa/Malabo.standard.short=WAT
-Africa/Maputo.daylight.short=CAST
-Africa/Maputo.generic.short=CAT
-Africa/Maputo.standard.short=CAT
-Africa/Maseru.daylight.short=SAST
-Africa/Maseru.generic.short=SAT
-Africa/Maseru.standard.short=SAST
-Africa/Mbabane.daylight.short=SAST
-Africa/Mbabane.generic.short=SAT
-Africa/Mbabane.standard.short=SAST
-Africa/Mogadishu.daylight.short=EAST
-Africa/Mogadishu.generic.short=EAT
-Africa/Mogadishu.standard.short=EAT
-Africa/Monrovia.daylight.short=GMT
-Africa/Monrovia.generic.short=GMT
-Africa/Monrovia.standard.short=GMT
-Africa/Nairobi.daylight.short=EAST
-Africa/Nairobi.generic.short=EAT
-Africa/Nairobi.standard.short=EAT
-Africa/Ndjamena.daylight.short=WAST
-Africa/Ndjamena.generic.short=WAT
-Africa/Ndjamena.standard.short=WAT
-Africa/Niamey.daylight.short=WAST
-Africa/Niamey.generic.short=WAT
-Africa/Niamey.standard.short=WAT
-Africa/Nouakchott.daylight.short=GMT
-Africa/Nouakchott.generic.short=GMT
-Africa/Nouakchott.standard.short=GMT
-Africa/Ouagadougou.daylight.short=GMT
-Africa/Ouagadougou.generic.short=GMT
-Africa/Ouagadougou.standard.short=GMT
-Africa/Porto-Novo.daylight.short=WAST
-Africa/Porto-Novo.generic.short=WAT
-Africa/Porto-Novo.standard.short=WAT
-Africa/Sao_Tome.daylight.short=GMT
-Africa/Sao_Tome.generic.short=GMT
-Africa/Sao_Tome.standard.short=GMT
-Africa/Timbuktu.daylight.short=GMT
-Africa/Timbuktu.generic.short=GMT
-Africa/Timbuktu.standard.short=GMT
-Africa/Tripoli.daylight.short=EEST
-Africa/Tripoli.generic.short=EET
-Africa/Tripoli.standard.short=EET
-Africa/Tunis.daylight.short=CEST
-Africa/Tunis.generic.short=CET
-Africa/Tunis.standard.short=CET
-Africa/Windhoek.daylight.short=WAST
-Africa/Windhoek.generic.short=WAT
-Africa/Windhoek.standard.short=WAT
-AGT.daylight.short=ARST
-AGT.generic.short=ART
-AGT.standard.short=ART
-America/Adak.daylight.short=HADT
-America/Adak.generic.short=HAT
-America/Adak.standard.short=HAST
-America/Anchorage.daylight.short=AKDT
-America/Anchorage.generic.short=AKT
-America/Anchorage.standard.short=AKST
-America/Anguilla.daylight.short=ADT
-America/Anguilla.generic.short=AT
-America/Anguilla.standard.short=AST
-America/Antigua.daylight.short=ADT
-America/Antigua.generic.short=AT
-America/Antigua.standard.short=AST
-America/Araguaina.daylight.short=BRST
-America/Araguaina.generic.short=BRT
-America/Araguaina.standard.short=BRT
-America/Argentina/Buenos_Aires.daylight.short=ARST
-America/Argentina/Buenos_Aires.generic.short=ART
-America/Argentina/Buenos_Aires.standard.short=ART
-America/Argentina/Catamarca.daylight.short=ARST
-America/Argentina/Catamarca.generic.short=ART
-America/Argentina/Catamarca.standard.short=ART
-America/Argentina/ComodRivadavia.daylight.short=ARST
-America/Argentina/ComodRivadavia.generic.short=ART
-America/Argentina/ComodRivadavia.standard.short=ART
-America/Argentina/Cordoba.daylight.short=ARST
-America/Argentina/Cordoba.generic.short=ART
-America/Argentina/Cordoba.standard.short=ART
-America/Argentina/Jujuy.daylight.short=ARST
-America/Argentina/Jujuy.generic.short=ART
-America/Argentina/Jujuy.standard.short=ART
-America/Argentina/La_Rioja.daylight.short=ARST
-America/Argentina/La_Rioja.generic.short=ART
-America/Argentina/La_Rioja.standard.short=ART
-America/Argentina/Mendoza.daylight.short=ARST
-America/Argentina/Mendoza.generic.short=ART
-America/Argentina/Mendoza.standard.short=ART
-America/Argentina/Rio_Gallegos.daylight.short=ARST
-America/Argentina/Rio_Gallegos.generic.short=ART
-America/Argentina/Rio_Gallegos.standard.short=ART
-America/Argentina/Salta.daylight.short=ARST
-America/Argentina/Salta.generic.short=ART
-America/Argentina/Salta.standard.short=ART
-America/Argentina/San_Juan.daylight.short=ARST
-America/Argentina/San_Juan.generic.short=ART
-America/Argentina/San_Juan.standard.short=ART
-America/Argentina/San_Luis.daylight.short=ARST
-America/Argentina/San_Luis.generic.short=ART
-America/Argentina/San_Luis.standard.short=ART
-America/Argentina/Tucuman.daylight.short=ARST
-America/Argentina/Tucuman.generic.short=ART
-America/Argentina/Tucuman.standard.short=ART
-America/Argentina/Ushuaia.daylight.short=ARST
-America/Argentina/Ushuaia.generic.short=ART
-America/Argentina/Ushuaia.standard.short=ART
-America/Aruba.daylight.short=ADT
-America/Aruba.generic.short=AT
-America/Aruba.standard.short=AST
-America/Asuncion.daylight.short=PYST
-America/Asuncion.generic.short=PYT
-America/Asuncion.standard.short=PYT
-America/Atikokan.daylight.short=EDT
-America/Atikokan.generic.short=ET
-America/Atikokan.standard.short=EST
-America/Atka.daylight.short=HADT
-America/Atka.generic.short=HAT
-America/Atka.standard.short=HAST
-America/Bahia_Banderas.daylight.short=CDT
-America/Bahia_Banderas.generic.short=CT
-America/Bahia_Banderas.standard.short=CST
-America/Bahia.daylight.short=BRST
-America/Bahia.generic.short=BRT
-America/Bahia.standard.short=BRT
-America/Barbados.daylight.short=ADT
-America/Barbados.generic.short=AT
-America/Barbados.standard.short=AST
-America/Belem.daylight.short=BRST
-America/Belem.generic.short=BRT
-America/Belem.standard.short=BRT
-America/Belize.daylight.short=CDT
-America/Belize.generic.short=CT
-America/Belize.standard.short=CST
-America/Blanc-Sablon.daylight.short=ADT
-America/Blanc-Sablon.generic.short=AT
-America/Blanc-Sablon.standard.short=AST
-America/Boa_Vista.daylight.short=AMST
-America/Boa_Vista.generic.short=AMT
-America/Boa_Vista.standard.short=AMT
-America/Bogota.daylight.short=COST
-America/Bogota.generic.short=COT
-America/Bogota.standard.short=COT
-America/Boise.daylight.short=MDT
-America/Boise.generic.short=MT
-America/Boise.standard.short=MST
-America/Buenos_Aires.daylight.short=ARST
-America/Buenos_Aires.generic.short=ART
-America/Buenos_Aires.standard.short=ART
-America/Cambridge_Bay.daylight.short=MDT
-America/Cambridge_Bay.generic.short=MT
-America/Cambridge_Bay.standard.short=MST
-America/Campo_Grande.daylight.short=AMST
-America/Campo_Grande.generic.short=AMT
-America/Campo_Grande.standard.short=AMT
-America/Cancun.daylight.short=CDT
-America/Cancun.generic.short=CT
-America/Cancun.standard.short=CST
-America/Caracas.daylight.short=VEST
-America/Caracas.generic.short=VET
-America/Caracas.standard.short=VET
-America/Catamarca.daylight.short=ARST
-America/Catamarca.generic.short=ART
-America/Catamarca.standard.short=ART
-America/Cayenne.daylight.short=GFST
-America/Cayenne.generic.short=GFT
-America/Cayenne.standard.short=GFT
-America/Cayman.daylight.short=EDT
-America/Cayman.generic.short=ET
-America/Cayman.standard.short=EST
-America/Chicago.daylight.short=CDT
-America/Chicago.generic.short=CT
-America/Chicago.standard.short=CST
-America/Chihuahua.daylight.short=MDT
-America/Chihuahua.generic.short=MT
-America/Chihuahua.standard.short=MST
-America/Coral_Harbour.daylight.short=EDT
-America/Coral_Harbour.generic.short=ET
-America/Coral_Harbour.standard.short=EST
-America/Cordoba.daylight.short=ARST
-America/Cordoba.generic.short=ART
-America/Cordoba.standard.short=ART
-America/Costa_Rica.daylight.short=CDT
-America/Costa_Rica.generic.short=CT
-America/Costa_Rica.standard.short=CST
-America/Creston.daylight.short=MDT
-America/Creston.generic.short=MT
-America/Creston.standard.short=MST
-America/Cuiaba.daylight.short=AMST
-America/Cuiaba.generic.short=AMT
-America/Cuiaba.standard.short=AMT
-America/Curacao.daylight.short=ADT
-America/Curacao.generic.short=AT
-America/Curacao.standard.short=AST
-America/Danmarkshavn.daylight.short=GMT
-America/Danmarkshavn.generic.short=GMT
-America/Danmarkshavn.standard.short=GMT
-America/Dawson_Creek.daylight.short=MDT
-America/Dawson_Creek.generic.short=MT
-America/Dawson_Creek.standard.short=MST
-America/Dawson.daylight.short=PDT
-America/Dawson.generic.short=PT
-America/Dawson.standard.short=PST
-America/Denver.daylight.short=MDT
-America/Denver.generic.short=MT
-America/Denver.standard.short=MST
-America/Detroit.daylight.short=EDT
-America/Detroit.generic.short=ET
-America/Detroit.standard.short=EST
-America/Dominica.daylight.short=ADT
-America/Dominica.generic.short=AT
-America/Dominica.standard.short=AST
-America/Edmonton.daylight.short=MDT
-America/Edmonton.generic.short=MT
-America/Edmonton.standard.short=MST
-America/Eirunepe.daylight.short=ACST
-America/Eirunepe.generic.short=ACT
-America/Eirunepe.standard.short=ACT
-America/El_Salvador.daylight.short=CDT
-America/El_Salvador.generic.short=CT
-America/El_Salvador.standard.short=CST
-America/Ensenada.daylight.short=PDT
-America/Ensenada.generic.short=PT
-America/Ensenada.standard.short=PST
-America/Fortaleza.daylight.short=BRST
-America/Fortaleza.generic.short=BRT
-America/Fortaleza.standard.short=BRT
-America/Fort_Wayne.daylight.short=EDT
-America/Fort_Wayne.generic.short=ET
-America/Fort_Wayne.standard.short=EST
-America/Glace_Bay.daylight.short=ADT
-America/Glace_Bay.generic.short=AT
-America/Glace_Bay.standard.short=AST
-America/Godthab.daylight.short=WGST
-America/Godthab.generic.short=WGT
-America/Godthab.standard.short=WGT
-America/Goose_Bay.daylight.short=ADT
-America/Goose_Bay.generic.short=AT
-America/Goose_Bay.standard.short=AST
-America/Grand_Turk.daylight.short=EDT
-America/Grand_Turk.generic.short=ET
-America/Grand_Turk.standard.short=EST
-America/Grenada.daylight.short=ADT
-America/Grenada.generic.short=AT
-America/Grenada.standard.short=AST
-America/Guadeloupe.daylight.short=ADT
-America/Guadeloupe.generic.short=AT
-America/Guadeloupe.standard.short=AST
-America/Guatemala.daylight.short=CDT
-America/Guatemala.generic.short=CT
-America/Guatemala.standard.short=CST
-America/Guayaquil.daylight.short=ECST
-America/Guayaquil.generic.short=ECT
-America/Guayaquil.standard.short=ECT
-America/Guyana.daylight.short=GYST
-America/Guyana.generic.short=GYT
-America/Guyana.standard.short=GYT
-America/Halifax.daylight.short=ADT
-America/Halifax.generic.short=AT
-America/Halifax.standard.short=AST
-America/Havana.daylight.short=CDT
-America/Havana.generic.short=CT
-America/Havana.standard.short=CST
-America/Hermosillo.daylight.short=MDT
-America/Hermosillo.generic.short=MT
-America/Hermosillo.standard.short=MST
-America/Indiana/Indianapolis.daylight.short=EDT
-America/Indiana/Indianapolis.generic.short=ET
-America/Indiana/Indianapolis.standard.short=EST
-America/Indiana/Knox.daylight.short=CDT
-America/Indiana/Knox.generic.short=CT
-America/Indiana/Knox.standard.short=CST
-America/Indiana/Marengo.daylight.short=EDT
-America/Indiana/Marengo.generic.short=ET
-America/Indiana/Marengo.standard.short=EST
-America/Indiana/Petersburg.daylight.short=EDT
-America/Indiana/Petersburg.generic.short=ET
-America/Indiana/Petersburg.standard.short=EST
-America/Indianapolis.daylight.short=EDT
-America/Indianapolis.generic.short=ET
-America/Indianapolis.standard.short=EST
-America/Indiana/Tell_City.daylight.short=CDT
-America/Indiana/Tell_City.generic.short=CT
-America/Indiana/Tell_City.standard.short=CST
-America/Indiana/Vevay.daylight.short=EDT
-America/Indiana/Vevay.generic.short=ET
-America/Indiana/Vevay.standard.short=EST
-America/Indiana/Vincennes.daylight.short=EDT
-America/Indiana/Vincennes.generic.short=ET
-America/Indiana/Vincennes.standard.short=EST
-America/Indiana/Winamac.daylight.short=EDT
-America/Indiana/Winamac.generic.short=ET
-America/Indiana/Winamac.standard.short=EST
-America/Inuvik.daylight.short=MDT
-America/Inuvik.generic.short=MT
-America/Inuvik.standard.short=MST
-America/Iqaluit.daylight.short=EDT
-America/Iqaluit.generic.short=ET
-America/Iqaluit.standard.short=EST
-America/Jamaica.daylight.short=EDT
-America/Jamaica.generic.short=ET
-America/Jamaica.standard.short=EST
-America/Jujuy.daylight.short=ARST
-America/Jujuy.generic.short=ART
-America/Jujuy.standard.short=ART
-America/Juneau.daylight.short=AKDT
-America/Juneau.generic.short=AKT
-America/Juneau.standard.short=AKST
-America/Kentucky/Louisville.daylight.short=EDT
-America/Kentucky/Louisville.generic.short=ET
-America/Kentucky/Louisville.standard.short=EST
-America/Kentucky/Monticello.daylight.short=EDT
-America/Kentucky/Monticello.generic.short=ET
-America/Kentucky/Monticello.standard.short=EST
-America/Knox_IN.daylight.short=CDT
-America/Knox_IN.generic.short=CT
-America/Knox_IN.standard.short=CST
-America/Kralendijk.daylight.short=ADT
-America/Kralendijk.generic.short=AT
-America/Kralendijk.standard.short=AST
-America/La_Paz.daylight.short=BOST
-America/La_Paz.generic.short=BOT
-America/La_Paz.standard.short=BOT
-America/Lima.daylight.short=PEST
-America/Lima.generic.short=PET
-America/Lima.standard.short=PET
-America/Los_Angeles.daylight.short=PDT
-America/Los_Angeles.generic.short=PT
-America/Los_Angeles.standard.short=PST
-America/Louisville.daylight.short=EDT
-America/Louisville.generic.short=ET
-America/Louisville.standard.short=EST
-America/Lower_Princes.daylight.short=ADT
-America/Lower_Princes.generic.short=AT
-America/Lower_Princes.standard.short=AST
-America/Maceio.daylight.short=BRST
-America/Maceio.generic.short=BRT
-America/Maceio.standard.short=BRT
-America/Managua.daylight.short=CDT
-America/Managua.generic.short=CT
-America/Managua.standard.short=CST
-America/Manaus.daylight.short=AMST
-America/Manaus.generic.short=AMT
-America/Manaus.standard.short=AMT
-America/Marigot.daylight.short=ADT
-America/Marigot.generic.short=AT
-America/Marigot.standard.short=AST
-America/Martinique.daylight.short=ADT
-America/Martinique.generic.short=AT
-America/Martinique.standard.short=AST
-America/Matamoros.daylight.short=CDT
-America/Matamoros.generic.short=CT
-America/Matamoros.standard.short=CST
-America/Mazatlan.daylight.short=MDT
-America/Mazatlan.generic.short=MT
-America/Mazatlan.standard.short=MST
-America/Mendoza.daylight.short=ARST
-America/Mendoza.generic.short=ART
-America/Mendoza.standard.short=ART
-America/Menominee.daylight.short=CDT
-America/Menominee.generic.short=CT
-America/Menominee.standard.short=CST
-America/Merida.daylight.short=CDT
-America/Merida.generic.short=CT
-America/Merida.standard.short=CST
-America/Metlakatla.daylight.short=MeDT
-America/Metlakatla.generic.short=MeT
-America/Metlakatla.standard.short=MeST
-America/Mexico_City.daylight.short=CDT
-America/Mexico_City.generic.short=CT
-America/Mexico_City.standard.short=CST
-America/Miquelon.daylight.short=PMDT
-America/Miquelon.generic.short=PMT
-America/Miquelon.standard.short=PMST
-America/Moncton.daylight.short=ADT
-America/Moncton.generic.short=AT
-America/Moncton.standard.short=AST
-America/Monterrey.daylight.short=CDT
-America/Monterrey.generic.short=CT
-America/Monterrey.standard.short=CST
-America/Montevideo.daylight.short=UYST
-America/Montevideo.generic.short=UYT
-America/Montevideo.standard.short=UYT
-America/Montreal.daylight.short=EDT
-America/Montreal.generic.short=ET
-America/Montreal.standard.short=EST
-America/Montserrat.daylight.short=ADT
-America/Montserrat.generic.short=AT
-America/Montserrat.standard.short=AST
-America/Nassau.daylight.short=EDT
-America/Nassau.generic.short=ET
-America/Nassau.standard.short=EST
-America/New_York.daylight.short=EDT
-America/New_York.generic.short=ET
-America/New_York.standard.short=EST
-America/Nipigon.daylight.short=EDT
-America/Nipigon.generic.short=ET
-America/Nipigon.standard.short=EST
-America/Nome.daylight.short=AKDT
-America/Nome.generic.short=AKT
-America/Nome.standard.short=AKST
-America/Noronha.daylight.short=FNST
-America/Noronha.generic.short=FNT
-America/Noronha.standard.short=FNT
-America/North_Dakota/Beulah.daylight.short=CDT
-America/North_Dakota/Beulah.generic.short=CT
-America/North_Dakota/Beulah.standard.short=CST
-America/North_Dakota/Center.daylight.short=CDT
-America/North_Dakota/Center.generic.short=CT
-America/North_Dakota/Center.standard.short=CST
-America/North_Dakota/New_Salem.daylight.short=CDT
-America/North_Dakota/New_Salem.generic.short=CT
-America/North_Dakota/New_Salem.standard.short=CST
-America/Ojinaga.daylight.short=MDT
-America/Ojinaga.generic.short=MT
-America/Ojinaga.standard.short=MST
-America/Panama.daylight.short=EDT
-America/Panama.generic.short=ET
-America/Panama.standard.short=EST
-America/Pangnirtung.daylight.short=EDT
-America/Pangnirtung.generic.short=ET
-America/Pangnirtung.standard.short=EST
-America/Paramaribo.daylight.short=SRST
-America/Paramaribo.generic.short=SRT
-America/Paramaribo.standard.short=SRT
-America/Phoenix.daylight.short=MDT
-America/Phoenix.generic.short=MT
-America/Phoenix.standard.short=MST
-America/Port-au-Prince.daylight.short=EDT
-America/Port-au-Prince.generic.short=ET
-America/Port-au-Prince.standard.short=EST
-America/Porto_Acre.daylight.short=ACST
-America/Porto_Acre.generic.short=ACT
-America/Porto_Acre.standard.short=ACT
-America/Port_of_Spain.daylight.short=ADT
-America/Port_of_Spain.generic.short=AT
-America/Port_of_Spain.standard.short=AST
-America/Porto_Velho.daylight.short=AMST
-America/Porto_Velho.generic.short=AMT
-America/Porto_Velho.standard.short=AMT
-America/Puerto_Rico.daylight.short=ADT
-America/Puerto_Rico.generic.short=AT
-America/Puerto_Rico.standard.short=AST
-America/Rainy_River.daylight.short=CDT
-America/Rainy_River.generic.short=CT
-America/Rainy_River.standard.short=CST
-America/Rankin_Inlet.daylight.short=CDT
-America/Rankin_Inlet.generic.short=CT
-America/Rankin_Inlet.standard.short=CST
-America/Recife.daylight.short=BRST
-America/Recife.generic.short=BRT
-America/Recife.standard.short=BRT
-America/Regina.daylight.short=CDT
-America/Regina.generic.short=CT
-America/Regina.standard.short=CST
-America/Resolute.daylight.short=CDT
-America/Resolute.generic.short=CT
-America/Resolute.standard.short=CST
-America/Rio_Branco.daylight.short=ACST
-America/Rio_Branco.generic.short=ACT
-America/Rio_Branco.standard.short=ACT
-America/Rosario.daylight.short=ARST
-America/Rosario.generic.short=ART
-America/Rosario.standard.short=ART
-America/Santa_Isabel.daylight.short=PDT
-America/Santa_Isabel.generic.short=PT
-America/Santa_Isabel.standard.short=PST
-America/Santarem.daylight.short=BRST
-America/Santarem.generic.short=BRT
-America/Santarem.standard.short=BRT
-America/Santiago.daylight.short=CLST
-America/Santiago.generic.short=CLT
-America/Santiago.standard.short=CLT
-America/Santo_Domingo.daylight.short=ADT
-America/Santo_Domingo.generic.short=AT
-America/Santo_Domingo.standard.short=AST
-America/Sao_Paulo.daylight.short=BRST
-America/Sao_Paulo.generic.short=BRT
-America/Sao_Paulo.standard.short=BRT
-America/Scoresbysund.daylight.short=EGST
-America/Scoresbysund.generic.short=EGT
-America/Scoresbysund.standard.short=EGT
-America/Shiprock.daylight.short=MDT
-America/Shiprock.generic.short=MT
-America/Shiprock.standard.short=MST
-America/Sitka.daylight.short=AKDT
-America/Sitka.generic.short=AKT
-America/Sitka.standard.short=AKST
-America/St_Barthelemy.daylight.short=ADT
-America/St_Barthelemy.generic.short=AT
-America/St_Barthelemy.standard.short=AST
-America/St_Johns.daylight.short=NDT
-America/St_Johns.generic.short=NT
-America/St_Johns.standard.short=NST
-America/St_Kitts.daylight.short=ADT
-America/St_Kitts.generic.short=AT
-America/St_Kitts.standard.short=AST
-America/St_Lucia.daylight.short=ADT
-America/St_Lucia.generic.short=AT
-America/St_Lucia.standard.short=AST
-America/St_Thomas.daylight.short=ADT
-America/St_Thomas.generic.short=AT
-America/St_Thomas.standard.short=AST
-America/St_Vincent.daylight.short=ADT
-America/St_Vincent.generic.short=AT
-America/St_Vincent.standard.short=AST
-America/Swift_Current.daylight.short=CDT
-America/Swift_Current.generic.short=CT
-America/Swift_Current.standard.short=CST
-America/Tegucigalpa.daylight.short=CDT
-America/Tegucigalpa.generic.short=CT
-America/Tegucigalpa.standard.short=CST
-America/Thule.daylight.short=ADT
-America/Thule.generic.short=AT
-America/Thule.standard.short=AST
-America/Thunder_Bay.daylight.short=EDT
-America/Thunder_Bay.generic.short=ET
-America/Thunder_Bay.standard.short=EST
-America/Tijuana.daylight.short=PDT
-America/Tijuana.generic.short=PT
-America/Tijuana.standard.short=PST
-America/Toronto.daylight.short=EDT
-America/Toronto.generic.short=ET
-America/Toronto.standard.short=EST
-America/Tortola.daylight.short=ADT
-America/Tortola.generic.short=AT
-America/Tortola.standard.short=AST
-America/Vancouver.daylight.short=PDT
-America/Vancouver.generic.short=PT
-America/Vancouver.standard.short=PST
-America/Virgin.daylight.short=ADT
-America/Virgin.generic.short=AT
-America/Virgin.standard.short=AST
-America/Whitehorse.daylight.short=PDT
-America/Whitehorse.generic.short=PT
-America/Whitehorse.standard.short=PST
-America/Winnipeg.daylight.short=CDT
-America/Winnipeg.generic.short=CT
-America/Winnipeg.standard.short=CST
-America/Yakutat.daylight.short=AKDT
-America/Yakutat.generic.short=AKT
-America/Yakutat.standard.short=AKST
-America/Yellowknife.daylight.short=MDT
-America/Yellowknife.generic.short=MT
-America/Yellowknife.standard.short=MST
-Antarctica/Casey.daylight.short=WST
-Antarctica/Casey.generic.short=WT
-Antarctica/Casey.standard.short=WST
-Antarctica/Davis.daylight.short=DAVST
-Antarctica/Davis.generic.short=DAVT
-Antarctica/Davis.standard.short=DAVT
-Antarctica/DumontDUrville.daylight.short=DDUST
-Antarctica/DumontDUrville.generic.short=DDUT
-Antarctica/DumontDUrville.standard.short=DDUT
-Antarctica/Macquarie.daylight.short=MIST
-Antarctica/Macquarie.generic.short=MIST
-Antarctica/Macquarie.standard.short=MIST
-Antarctica/Mawson.daylight.short=MAWST
-Antarctica/Mawson.generic.short=MAWT
-Antarctica/Mawson.standard.short=MAWT
-Antarctica/McMurdo.daylight.short=NZDT
-Antarctica/McMurdo.generic.short=NZT
-Antarctica/McMurdo.standard.short=NZST
-Antarctica/Palmer.daylight.short=CLST
-Antarctica/Palmer.generic.short=CLT
-Antarctica/Palmer.standard.short=CLT
-Antarctica/Rothera.daylight.short=ROTST
-Antarctica/Rothera.generic.short=ROTT
-Antarctica/Rothera.standard.short=ROTT
-Antarctica/South_Pole.daylight.short=NZDT
-Antarctica/South_Pole.generic.short=NZT
-Antarctica/South_Pole.standard.short=NZST
-Antarctica/Syowa.daylight.short=SYOST
-Antarctica/Syowa.generic.short=SYOT
-Antarctica/Syowa.standard.short=SYOT
-Antarctica/Vostok.daylight.short=VOSST
-Antarctica/Vostok.generic.short=VOST
-Antarctica/Vostok.standard.short=VOST
-Arctic/Longyearbyen.daylight.short=CEST
-Arctic/Longyearbyen.generic.short=CET
-Arctic/Longyearbyen.standard.short=CET
-ART.daylight.short=EEST
-ART.generic.short=EET
-ART.standard.short=EET
-Asia/Aden.daylight.short=ADT
-Asia/Aden.generic.short=AT
-Asia/Aden.standard.short=AST
-Asia/Almaty.daylight.short=ALMST
-Asia/Almaty.generic.short=ALMT
-Asia/Almaty.standard.short=ALMT
-Asia/Amman.daylight.short=ADT
-Asia/Amman.generic.short=AT
-Asia/Amman.standard.short=AST
-Asia/Anadyr.daylight.short=ANAST
-Asia/Anadyr.generic.short=ANAT
-Asia/Anadyr.standard.short=ANAT
-Asia/Aqtau.daylight.short=AQTST
-Asia/Aqtau.generic.short=AQTT
-Asia/Aqtau.standard.short=AQTT
-Asia/Aqtobe.daylight.short=AQTST
-Asia/Aqtobe.generic.short=AQTT
-Asia/Aqtobe.standard.short=AQTT
-Asia/Ashgabat.daylight.short=TMST
-Asia/Ashgabat.generic.short=TMT
-Asia/Ashgabat.standard.short=TMT
-Asia/Ashkhabad.daylight.short=TMST
-Asia/Ashkhabad.generic.short=TMT
-Asia/Ashkhabad.standard.short=TMT
-Asia/Baghdad.daylight.short=ADT
-Asia/Baghdad.generic.short=AT
-Asia/Baghdad.standard.short=AST
-Asia/Bahrain.daylight.short=ADT
-Asia/Bahrain.generic.short=AT
-Asia/Bahrain.standard.short=AST
-Asia/Baku.daylight.short=AZST
-Asia/Baku.generic.short=AZT
-Asia/Baku.standard.short=AZT
-Asia/Bangkok.daylight.short=ICST
-Asia/Bangkok.generic.short=ICT
-Asia/Bangkok.standard.short=ICT
-Asia/Beirut.daylight.short=EEST
-Asia/Beirut.generic.short=EET
-Asia/Beirut.standard.short=EET
-Asia/Bishkek.daylight.short=KGST
-Asia/Bishkek.generic.short=KGT
-Asia/Bishkek.standard.short=KGT
-Asia/Brunei.daylight.short=BNST
-Asia/Brunei.generic.short=BNT
-Asia/Brunei.standard.short=BNT
-Asia/Calcutta.daylight.short=IDT
-Asia/Calcutta.generic.short=IT
-Asia/Calcutta.standard.short=IST
-Asia/Choibalsan.daylight.short=CHOST
-Asia/Choibalsan.generic.short=CHOT
-Asia/Choibalsan.standard.short=CHOT
-Asia/Chongqing.daylight.short=CDT
-Asia/Chongqing.generic.short=CT
-Asia/Chongqing.standard.short=CST
-Asia/Chungking.daylight.short=CDT
-Asia/Chungking.generic.short=CT
-Asia/Chungking.standard.short=CST
-Asia/Colombo.daylight.short=IDT
-Asia/Colombo.generic.short=IT
-Asia/Colombo.standard.short=IST
-Asia/Dacca.daylight.short=BDST
-Asia/Dacca.generic.short=BDT
-Asia/Dacca.standard.short=BDT
-Asia/Damascus.daylight.short=EEST
-Asia/Damascus.generic.short=EET
-Asia/Damascus.standard.short=EET
-Asia/Dhaka.daylight.short=BDST
-Asia/Dhaka.generic.short=BDT
-Asia/Dhaka.standard.short=BDT
-Asia/Dili.daylight.short=TLST
-Asia/Dili.generic.short=TLT
-Asia/Dili.standard.short=TLT
-Asia/Dubai.daylight.short=GDT
-Asia/Dubai.generic.short=GT
-Asia/Dubai.standard.short=GST
-Asia/Dushanbe.daylight.short=TJST
-Asia/Dushanbe.generic.short=TJT
-Asia/Dushanbe.standard.short=TJT
-Asia/Gaza.daylight.short=EEST
-Asia/Gaza.generic.short=EET
-Asia/Gaza.standard.short=EET
-Asia/Harbin.daylight.short=CDT
-Asia/Harbin.generic.short=CT
-Asia/Harbin.standard.short=CST
-Asia/Hebron.daylight.short=EEST
-Asia/Hebron.generic.short=EET
-Asia/Hebron.standard.short=EET
-Asia/Ho_Chi_Minh.daylight.short=ICST
-Asia/Ho_Chi_Minh.generic.short=ICT
-Asia/Ho_Chi_Minh.standard.short=ICT
-Asia/Hong_Kong.daylight.short=HKST
-Asia/Hong_Kong.generic.short=HKT
-Asia/Hong_Kong.standard.short=HKT
-Asia/Hovd.daylight.short=HOVST
-Asia/Hovd.generic.short=HOVT
-Asia/Hovd.standard.short=HOVT
-Asia/Irkutsk.daylight.short=IRKST
-Asia/Irkutsk.generic.short=IRKT
-Asia/Irkutsk.standard.short=IRKT
-Asia/Istanbul.daylight.short=EEST
-Asia/Istanbul.generic.short=EET
-Asia/Istanbul.standard.short=EET
-Asia/Jakarta.daylight.short=WIST
-Asia/Jakarta.generic.short=WIB
-Asia/Jakarta.standard.short=WIB
-Asia/Jayapura.daylight.short=EIST
-Asia/Jayapura.generic.short=WIT
-Asia/Jayapura.standard.short=WIT
-Asia/Jerusalem.daylight.short=IDT
-Asia/Jerusalem.generic.short=IT
-Asia/Jerusalem.standard.short=IST
-Asia/Kabul.daylight.short=AFST
-Asia/Kabul.generic.short=AFT
-Asia/Kabul.standard.short=AFT
-Asia/Kamchatka.daylight.short=PETST
-Asia/Kamchatka.generic.short=PETT
-Asia/Kamchatka.standard.short=PETT
-Asia/Karachi.daylight.short=PKST
-Asia/Karachi.generic.short=PKT
-Asia/Karachi.standard.short=PKT
-Asia/Kashgar.daylight.short=CDT
-Asia/Kashgar.generic.short=CT
-Asia/Kashgar.standard.short=CST
-Asia/Kathmandu.daylight.short=NPST
-Asia/Kathmandu.generic.short=NPT
-Asia/Kathmandu.standard.short=NPT
-Asia/Katmandu.daylight.short=NPST
-Asia/Katmandu.generic.short=NPT
-Asia/Katmandu.standard.short=NPT
-Asia/Khandyga.daylight.short=YAKST
-Asia/Khandyga.generic.short=YAKT
-Asia/Khandyga.standard.short=YAKT
-Asia/Kolkata.daylight.short=IDT
-Asia/Kolkata.generic.short=IT
-Asia/Kolkata.standard.short=IST
-Asia/Krasnoyarsk.daylight.short=KRAST
-Asia/Krasnoyarsk.generic.short=KRAT
-Asia/Krasnoyarsk.standard.short=KRAT
-Asia/Kuala_Lumpur.daylight.short=MYST
-Asia/Kuala_Lumpur.generic.short=MYT
-Asia/Kuala_Lumpur.standard.short=MYT
-Asia/Kuching.daylight.short=MYST
-Asia/Kuching.generic.short=MYT
-Asia/Kuching.standard.short=MYT
-Asia/Kuwait.daylight.short=ADT
-Asia/Kuwait.generic.short=AT
-Asia/Kuwait.standard.short=AST
-Asia/Macao.daylight.short=CDT
-Asia/Macao.generic.short=CT
-Asia/Macao.standard.short=CST
-Asia/Macau.daylight.short=CDT
-Asia/Macau.generic.short=CT
-Asia/Macau.standard.short=CST
-Asia/Magadan.daylight.short=MAGST
-Asia/Magadan.generic.short=MAGT
-Asia/Magadan.standard.short=MAGT
-Asia/Makassar.daylight.short=CIST
-Asia/Makassar.generic.short=WITA
-Asia/Makassar.standard.short=WITA
-Asia/Manila.daylight.short=PHST
-Asia/Manila.generic.short=PHT
-Asia/Manila.standard.short=PHT
-Asia/Muscat.daylight.short=GDT
-Asia/Muscat.generic.short=GT
-Asia/Muscat.standard.short=GST
-Asia/Nicosia.daylight.short=EEST
-Asia/Nicosia.generic.short=EET
-Asia/Nicosia.standard.short=EET
-Asia/Novokuznetsk.daylight.short=NOVST
-Asia/Novokuznetsk.generic.short=NOVT
-Asia/Novokuznetsk.standard.short=NOVT
-Asia/Novosibirsk.daylight.short=NOVST
-Asia/Novosibirsk.generic.short=NOVT
-Asia/Novosibirsk.standard.short=NOVT
-Asia/Omsk.daylight.short=OMSST
-Asia/Omsk.generic.short=OMST
-Asia/Omsk.standard.short=OMST
-Asia/Oral.daylight.short=ORAST
-Asia/Oral.generic.short=ORAT
-Asia/Oral.standard.short=ORAT
-Asia/Phnom_Penh.daylight.short=ICST
-Asia/Phnom_Penh.generic.short=ICT
-Asia/Phnom_Penh.standard.short=ICT
-Asia/Pontianak.daylight.short=WIST
-Asia/Pontianak.generic.short=WIB
-Asia/Pontianak.standard.short=WIB
-Asia/Pyongyang.daylight.short=KDT
-Asia/Pyongyang.generic.short=KT
-Asia/Pyongyang.standard.short=KST
-Asia/Qatar.daylight.short=ADT
-Asia/Qatar.generic.short=AT
-Asia/Qatar.standard.short=AST
-Asia/Qyzylorda.daylight.short=QYZST
-Asia/Qyzylorda.generic.short=QYZT
-Asia/Qyzylorda.standard.short=QYZT
-Asia/Rangoon.daylight.short=MMST
-Asia/Rangoon.generic.short=MMT
-Asia/Rangoon.standard.short=MMT
-Asia/Saigon.daylight.short=ICST
-Asia/Saigon.generic.short=ICT
-Asia/Saigon.standard.short=ICT
-Asia/Sakhalin.daylight.short=SAKST
-Asia/Sakhalin.generic.short=SAKT
-Asia/Sakhalin.standard.short=SAKT
-Asia/Samarkand.daylight.short=UZST
-Asia/Samarkand.generic.short=UZT
-Asia/Samarkand.standard.short=UZT
-Asia/Seoul.daylight.short=KDT
-Asia/Seoul.generic.short=KT
-Asia/Seoul.standard.short=KST
-Asia/Shanghai.daylight.short=CDT
-Asia/Shanghai.generic.short=CT
-Asia/Shanghai.standard.short=CST
-Asia/Singapore.daylight.short=SGST
-Asia/Singapore.generic.short=SGT
-Asia/Singapore.standard.short=SGT
-Asia/Taipei.daylight.short=CDT
-Asia/Taipei.generic.short=CT
-Asia/Taipei.standard.short=CST
-Asia/Tashkent.daylight.short=UZST
-Asia/Tashkent.generic.short=UZT
-Asia/Tashkent.standard.short=UZT
-Asia/Tbilisi.daylight.short=GEST
-Asia/Tbilisi.generic.short=GET
-Asia/Tbilisi.standard.short=GET
-Asia/Tehran.daylight.short=IRDT
-Asia/Tehran.generic.short=IRT
-Asia/Tehran.standard.short=IRST
-Asia/Tel_Aviv.daylight.short=IDT
-Asia/Tel_Aviv.generic.short=IT
-Asia/Tel_Aviv.standard.short=IST
-Asia/Thimbu.daylight.short=BTST
-Asia/Thimbu.generic.short=BTT
-Asia/Thimbu.standard.short=BTT
-Asia/Thimphu.daylight.short=BTST
-Asia/Thimphu.generic.short=BTT
-Asia/Thimphu.standard.short=BTT
-Asia/Tokyo.daylight.short=JDT
-Asia/Tokyo.generic.short=JT
-Asia/Tokyo.standard.short=JST
-Asia/Ujung_Pandang.daylight.short=CIST
-Asia/Ujung_Pandang.generic.short=WITA
-Asia/Ujung_Pandang.standard.short=WITA
-Asia/Ulaanbaatar.daylight.short=ULAST
-Asia/Ulaanbaatar.generic.short=ULAT
-Asia/Ulaanbaatar.standard.short=ULAT
-Asia/Ulan_Bator.daylight.short=ULAST
-Asia/Ulan_Bator.generic.short=ULAT
-Asia/Ulan_Bator.standard.short=ULAT
-Asia/Urumqi.daylight.short=CDT
-Asia/Urumqi.generic.short=CT
-Asia/Urumqi.standard.short=CST
-Asia/Ust-Nera.daylight.short=VLAST
-Asia/Ust-Nera.generic.short=VLAT
-Asia/Ust-Nera.standard.short=VLAT
-Asia/Vientiane.daylight.short=ICST
-Asia/Vientiane.generic.short=ICT
-Asia/Vientiane.standard.short=ICT
-Asia/Vladivostok.daylight.short=VLAST
-Asia/Vladivostok.generic.short=VLAT
-Asia/Vladivostok.standard.short=VLAT
-Asia/Yakutsk.daylight.short=YAKST
-Asia/Yakutsk.generic.short=YAKT
-Asia/Yakutsk.standard.short=YAKT
-Asia/Yekaterinburg.daylight.short=YEKST
-Asia/Yekaterinburg.generic.short=YEKT
-Asia/Yekaterinburg.standard.short=YEKT
-Asia/Yerevan.daylight.short=AMST
-Asia/Yerevan.generic.short=AMT
-Asia/Yerevan.standard.short=AMT
-AST.daylight.short=AKDT
-AST.generic.short=AKT
-AST.standard.short=AKST
-Atlantic/Azores.daylight.short=AZOST
-Atlantic/Azores.generic.short=AZOT
-Atlantic/Azores.standard.short=AZOT
-Atlantic/Bermuda.daylight.short=ADT
-Atlantic/Bermuda.generic.short=AT
-Atlantic/Bermuda.standard.short=AST
-Atlantic/Canary.daylight.short=WEST
-Atlantic/Canary.generic.short=WET
-Atlantic/Canary.standard.short=WET
-Atlantic/Cape_Verde.daylight.short=CVST
-Atlantic/Cape_Verde.generic.short=CVT
-Atlantic/Cape_Verde.standard.short=CVT
-Atlantic/Faeroe.daylight.short=WEST
-Atlantic/Faeroe.generic.short=WET
-Atlantic/Faeroe.standard.short=WET
-Atlantic/Faroe.daylight.short=WEST
-Atlantic/Faroe.generic.short=WET
-Atlantic/Faroe.standard.short=WET
-Atlantic/Jan_Mayen.daylight.short=CEST
-Atlantic/Jan_Mayen.generic.short=CET
-Atlantic/Jan_Mayen.standard.short=CET
-Atlantic/Madeira.daylight.short=WEST
-Atlantic/Madeira.generic.short=WET
-Atlantic/Madeira.standard.short=WET
-Atlantic/Reykjavik.daylight.short=GMT
-Atlantic/Reykjavik.generic.short=GMT
-Atlantic/Reykjavik.standard.short=GMT
-Atlantic/South_Georgia.daylight.short=GDT
-Atlantic/South_Georgia.generic.short=GT
-Atlantic/South_Georgia.standard.short=GST
-Atlantic/Stanley.daylight.short=FKST
-Atlantic/Stanley.generic.short=FKT
-Atlantic/Stanley.standard.short=FKT
-Atlantic/St_Helena.daylight.short=GMT
-Atlantic/St_Helena.generic.short=GMT
-Atlantic/St_Helena.standard.short=GMT
-Australia/ACT.daylight.short=EST
-Australia/ACT.generic.short=ET
-Australia/ACT.standard.short=EST
-Australia/Adelaide.daylight.short=CST
-Australia/Adelaide.generic.short=CT
-Australia/Adelaide.standard.short=CST
-Australia/Brisbane.daylight.short=EST
-Australia/Brisbane.generic.short=ET
-Australia/Brisbane.standard.short=EST
-Australia/Broken_Hill.daylight.short=CST
-Australia/Broken_Hill.generic.short=CT
-Australia/Broken_Hill.standard.short=CST
-Australia/Canberra.daylight.short=EST
-Australia/Canberra.generic.short=ET
-Australia/Canberra.standard.short=EST
-Australia/Currie.daylight.short=EST
-Australia/Currie.generic.short=ET
-Australia/Currie.standard.short=EST
-Australia/Darwin.daylight.short=CST
-Australia/Darwin.generic.short=CT
-Australia/Darwin.standard.short=CST
-Australia/Eucla.daylight.short=CWST
-Australia/Eucla.generic.short=CWT
-Australia/Eucla.standard.short=CWST
-Australia/Hobart.daylight.short=EST
-Australia/Hobart.generic.short=ET
-Australia/Hobart.standard.short=EST
-Australia/LHI.daylight.short=LHST
-Australia/LHI.generic.short=LHT
-Australia/LHI.standard.short=LHST
-Australia/Lindeman.daylight.short=EST
-Australia/Lindeman.generic.short=ET
-Australia/Lindeman.standard.short=EST
-Australia/Lord_Howe.daylight.short=LHST
-Australia/Lord_Howe.generic.short=LHT
-Australia/Lord_Howe.standard.short=LHST
-Australia/Melbourne.daylight.short=EST
-Australia/Melbourne.generic.short=ET
-Australia/Melbourne.standard.short=EST
-Australia/North.daylight.short=CST
-Australia/North.generic.short=CT
-Australia/North.standard.short=CST
-Australia/NSW.daylight.short=EST
-Australia/NSW.generic.short=ET
-Australia/NSW.standard.short=EST
-Australia/Perth.daylight.short=WST
-Australia/Perth.generic.short=WT
-Australia/Perth.standard.short=WST
-Australia/Queensland.daylight.short=EST
-Australia/Queensland.generic.short=ET
-Australia/Queensland.standard.short=EST
-Australia/South.daylight.short=CST
-Australia/South.generic.short=CT
-Australia/South.standard.short=CST
-Australia/Sydney.daylight.short=EST
-Australia/Sydney.generic.short=ET
-Australia/Sydney.standard.short=EST
-Australia/Tasmania.daylight.short=EST
-Australia/Tasmania.generic.short=ET
-Australia/Tasmania.standard.short=EST
-Australia/Victoria.daylight.short=EST
-Australia/Victoria.generic.short=ET
-Australia/Victoria.standard.short=EST
-Australia/West.daylight.short=WST
-Australia/West.generic.short=WT
-Australia/West.standard.short=WST
-Australia/Yancowinna.daylight.short=CST
-Australia/Yancowinna.generic.short=CT
-Australia/Yancowinna.standard.short=CST
-BET.daylight.short=BRST
-BET.generic.short=BRT
-BET.standard.short=BRT
-Brazil/Acre.daylight.short=ACST
-Brazil/Acre.generic.short=ACT
-Brazil/Acre.standard.short=ACT
-Brazil/DeNoronha.daylight.short=FNST
-Brazil/DeNoronha.generic.short=FNT
-Brazil/DeNoronha.standard.short=FNT
-Brazil/East.daylight.short=BRST
-Brazil/East.generic.short=BRT
-Brazil/East.standard.short=BRT
-Brazil/West.daylight.short=AMST
-Brazil/West.generic.short=AMT
-Brazil/West.standard.short=AMT
-BST.daylight.short=BDST
-BST.generic.short=BDT
-BST.standard.short=BDT
-Canada/Atlantic.daylight.short=ADT
-Canada/Atlantic.generic.short=AT
-Canada/Atlantic.standard.short=AST
-Canada/Central.daylight.short=CDT
-Canada/Central.generic.short=CT
-Canada/Central.standard.short=CST
-Canada/Eastern.daylight.short=EDT
-Canada/Eastern.generic.short=ET
-Canada/Eastern.standard.short=EST
-Canada/East-Saskatchewan.daylight.short=CDT
-Canada/East-Saskatchewan.generic.short=CT
-Canada/East-Saskatchewan.standard.short=CST
-Canada/Mountain.daylight.short=MDT
-Canada/Mountain.generic.short=MT
-Canada/Mountain.standard.short=MST
-Canada/Newfoundland.daylight.short=NDT
-Canada/Newfoundland.generic.short=NT
-Canada/Newfoundland.standard.short=NST
-Canada/Pacific.daylight.short=PDT
-Canada/Pacific.generic.short=PT
-Canada/Pacific.standard.short=PST
-Canada/Saskatchewan.daylight.short=CDT
-Canada/Saskatchewan.generic.short=CT
-Canada/Saskatchewan.standard.short=CST
-Canada/Yukon.daylight.short=PDT
-Canada/Yukon.generic.short=PT
-Canada/Yukon.standard.short=PST
-CAT.daylight.short=CAST
-CAT.generic.short=CAT
-CAT.standard.short=CAT
-CET.daylight.short=CEST
-CET.generic.short=CET
-CET.standard.short=CET
-Chile/Continental.daylight.short=CLST
-Chile/Continental.generic.short=CLT
-Chile/Continental.standard.short=CLT
-Chile/EasterIsland.daylight.short=EASST
-Chile/EasterIsland.generic.short=EAST
-Chile/EasterIsland.standard.short=EAST
-CNT.daylight.short=NDT
-CNT.generic.short=NT
-CNT.standard.short=NST
-CST6CDT.daylight.short=CDT
-CST6CDT.generic.short=CT
-CST6CDT.standard.short=CST
-CST.daylight.short=CDT
-CST.generic.short=CT
-CST.standard.short=CST
-CTT.daylight.short=CDT
-CTT.generic.short=CT
-CTT.standard.short=CST
-Cuba.daylight.short=CDT
-Cuba.generic.short=CT
-Cuba.standard.short=CST
-EAT.daylight.short=EAST
-EAT.generic.short=EAT
-EAT.standard.short=EAT
-ECT.daylight.short=CEST
-ECT.generic.short=CET
-ECT.standard.short=CET
-EET.daylight.short=EEST
-EET.generic.short=EET
-EET.standard.short=EET
-Egypt.daylight.short=EEST
-Egypt.generic.short=EET
-Egypt.standard.short=EET
-Eire.daylight.short=IST
-Eire.generic.short=IT
-Eire.standard.short=GMT
-EST5EDT.daylight.short=EDT
-EST5EDT.generic.short=ET
-EST5EDT.standard.short=EST
-EST.daylight.short=EDT
-EST.generic.short=ET
-EST.standard.short=EST
-Etc/Greenwich.daylight.short=GMT
-Etc/Greenwich.generic.short=GMT
-Etc/Greenwich.standard.short=GMT
-Etc/UCT.daylight.short=UTC
-Etc/UCT.generic.short=UTC
-Etc/UCT.standard.short=UTC
-Etc/Universal.daylight.short=UTC
-Etc/Universal.generic.short=UTC
-Etc/Universal.standard.short=UTC
-Etc/UTC.daylight.short=UTC
-Etc/UTC.generic.short=UTC
-Etc/UTC.standard.short=UTC
-Etc/Zulu.daylight.short=UTC
-Etc/Zulu.generic.short=UTC
-Etc/Zulu.standard.short=UTC
-Europe/Amsterdam.daylight.short=CEST
-Europe/Amsterdam.generic.short=CET
-Europe/Amsterdam.standard.short=CET
-Europe/Andorra.daylight.short=CEST
-Europe/Andorra.generic.short=CET
-Europe/Andorra.standard.short=CET
-Europe/Athens.daylight.short=EEST
-Europe/Athens.generic.short=EET
-Europe/Athens.standard.short=EET
-Europe/Belfast.daylight.short=BST
-Europe/Belfast.generic.short=BT
-Europe/Belfast.standard.short=GMT
-Europe/Belgrade.daylight.short=CEST
-Europe/Belgrade.generic.short=CET
-Europe/Belgrade.standard.short=CET
-Europe/Berlin.daylight.short=CEST
-Europe/Berlin.generic.short=CET
-Europe/Berlin.standard.short=CET
-Europe/Bratislava.daylight.short=CEST
-Europe/Bratislava.generic.short=CET
-Europe/Bratislava.standard.short=CET
-Europe/Brussels.daylight.short=CEST
-Europe/Brussels.generic.short=CET
-Europe/Brussels.standard.short=CET
-Europe/Bucharest.daylight.short=EEST
-Europe/Bucharest.generic.short=EET
-Europe/Bucharest.standard.short=EET
-Europe/Budapest.daylight.short=CEST
-Europe/Budapest.generic.short=CET
-Europe/Budapest.standard.short=CET
-Europe/Busingen.daylight.short=CEST
-Europe/Busingen.generic.short=CET
-Europe/Busingen.standard.short=CET
-Europe/Chisinau.daylight.short=EEST
-Europe/Chisinau.generic.short=EET
-Europe/Chisinau.standard.short=EET
-Europe/Copenhagen.daylight.short=CEST
-Europe/Copenhagen.generic.short=CET
-Europe/Copenhagen.standard.short=CET
-Europe/Dublin.daylight.short=IST
-Europe/Dublin.generic.short=IT
-Europe/Dublin.standard.short=GMT
-Europe/Gibraltar.daylight.short=CEST
-Europe/Gibraltar.generic.short=CET
-Europe/Gibraltar.standard.short=CET
-Europe/Guernsey.daylight.short=BST
-Europe/Guernsey.generic.short=BT
-Europe/Guernsey.standard.short=GMT
-Europe/Helsinki.daylight.short=EEST
-Europe/Helsinki.generic.short=EET
-Europe/Helsinki.standard.short=EET
-Europe/Isle_of_Man.daylight.short=BST
-Europe/Isle_of_Man.generic.short=BT
-Europe/Isle_of_Man.standard.short=GMT
-Europe/Istanbul.daylight.short=EEST
-Europe/Istanbul.generic.short=EET
-Europe/Istanbul.standard.short=EET
-Europe/Jersey.daylight.short=BST
-Europe/Jersey.generic.short=BT
-Europe/Jersey.standard.short=GMT
-Europe/Kaliningrad.daylight.short=FEST
-Europe/Kaliningrad.generic.short=FET
-Europe/Kaliningrad.standard.short=FET
-Europe/Kiev.daylight.short=EEST
-Europe/Kiev.generic.short=EET
-Europe/Kiev.standard.short=EET
-Europe/Lisbon.daylight.short=WEST
-Europe/Lisbon.generic.short=WET
-Europe/Lisbon.standard.short=WET
-Europe/Ljubljana.daylight.short=CEST
-Europe/Ljubljana.generic.short=CET
-Europe/Ljubljana.standard.short=CET
-Europe/London.daylight.short=BST
-Europe/London.generic.short=BT
-Europe/London.standard.short=GMT
-Europe/Luxembourg.daylight.short=CEST
-Europe/Luxembourg.generic.short=CET
-Europe/Luxembourg.standard.short=CET
-Europe/Madrid.daylight.short=CEST
-Europe/Madrid.generic.short=CET
-Europe/Madrid.standard.short=CET
-Europe/Malta.daylight.short=CEST
-Europe/Malta.generic.short=CET
-Europe/Malta.standard.short=CET
-Europe/Mariehamn.daylight.short=EEST
-Europe/Mariehamn.generic.short=EET
-Europe/Mariehamn.standard.short=EET
-Europe/Minsk.daylight.short=FEST
-Europe/Minsk.generic.short=FET
-Europe/Minsk.standard.short=FET
-Europe/Monaco.daylight.short=CEST
-Europe/Monaco.generic.short=CET
-Europe/Monaco.standard.short=CET
-Europe/Moscow.daylight.short=MSD
-Europe/Moscow.generic.short=MT
-Europe/Moscow.standard.short=MSK
-Europe/Nicosia.daylight.short=EEST
-Europe/Nicosia.generic.short=EET
-Europe/Nicosia.standard.short=EET
-Europe/Oslo.daylight.short=CEST
-Europe/Oslo.generic.short=CET
-Europe/Oslo.standard.short=CET
-Europe/Paris.daylight.short=CEST
-Europe/Paris.generic.short=CET
-Europe/Paris.standard.short=CET
-Europe/Podgorica.daylight.short=CEST
-Europe/Podgorica.generic.short=CET
-Europe/Podgorica.standard.short=CET
-Europe/Prague.daylight.short=CEST
-Europe/Prague.generic.short=CET
-Europe/Prague.standard.short=CET
-Europe/Riga.daylight.short=EEST
-Europe/Riga.generic.short=EET
-Europe/Riga.standard.short=EET
-Europe/Rome.daylight.short=CEST
-Europe/Rome.generic.short=CET
-Europe/Rome.standard.short=CET
-Europe/Samara.daylight.short=SAMST
-Europe/Samara.generic.short=SAMT
-Europe/Samara.standard.short=SAMT
-Europe/San_Marino.daylight.short=CEST
-Europe/San_Marino.generic.short=CET
-Europe/San_Marino.standard.short=CET
-Europe/Sarajevo.daylight.short=CEST
-Europe/Sarajevo.generic.short=CET
-Europe/Sarajevo.standard.short=CET
-Europe/Simferopol.daylight.short=EEST
-Europe/Simferopol.generic.short=EET
-Europe/Simferopol.standard.short=EET
-Europe/Skopje.daylight.short=CEST
-Europe/Skopje.generic.short=CET
-Europe/Skopje.standard.short=CET
-Europe/Sofia.daylight.short=EEST
-Europe/Sofia.generic.short=EET
-Europe/Sofia.standard.short=EET
-Europe/Stockholm.daylight.short=CEST
-Europe/Stockholm.generic.short=CET
-Europe/Stockholm.standard.short=CET
-Europe/Tallinn.daylight.short=EEST
-Europe/Tallinn.generic.short=EET
-Europe/Tallinn.standard.short=EET
-Europe/Tirane.daylight.short=CEST
-Europe/Tirane.generic.short=CET
-Europe/Tirane.standard.short=CET
-Europe/Tiraspol.daylight.short=EEST
-Europe/Tiraspol.generic.short=EET
-Europe/Tiraspol.standard.short=EET
-Europe/Uzhgorod.daylight.short=EEST
-Europe/Uzhgorod.generic.short=EET
-Europe/Uzhgorod.standard.short=EET
-Europe/Vaduz.daylight.short=CEST
-Europe/Vaduz.generic.short=CET
-Europe/Vaduz.standard.short=CET
-Europe/Vatican.daylight.short=CEST
-Europe/Vatican.generic.short=CET
-Europe/Vatican.standard.short=CET
-Europe/Vienna.daylight.short=CEST
-Europe/Vienna.generic.short=CET
-Europe/Vienna.standard.short=CET
-Europe/Vilnius.daylight.short=EEST
-Europe/Vilnius.generic.short=EET
-Europe/Vilnius.standard.short=EET
-Europe/Volgograd.daylight.short=VOLST
-Europe/Volgograd.generic.short=VOLT
-Europe/Volgograd.standard.short=VOLT
-Europe/Warsaw.daylight.short=CEST
-Europe/Warsaw.generic.short=CET
-Europe/Warsaw.standard.short=CET
-Europe/Zagreb.daylight.short=CEST
-Europe/Zagreb.generic.short=CET
-Europe/Zagreb.standard.short=CET
-Europe/Zaporozhye.daylight.short=EEST
-Europe/Zaporozhye.generic.short=EET
-Europe/Zaporozhye.standard.short=EET
-Europe/Zurich.daylight.short=CEST
-Europe/Zurich.generic.short=CET
-Europe/Zurich.standard.short=CET
-GB.daylight.short=BST
-GB-Eire.daylight.short=BST
-GB-Eire.generic.short=BT
-GB-Eire.standard.short=GMT
-GB.generic.short=BT
-GB.standard.short=GMT
-GMT.daylight.short=GMT
-GMT.generic.short=GMT
-GMT.standard.short=GMT
-Greenwich.daylight.short=GMT
-Greenwich.generic.short=GMT
-Greenwich.standard.short=GMT
-Hongkong.daylight.short=HKST
-Hongkong.generic.short=HKT
-Hongkong.standard.short=HKT
-HST.daylight.short=HDT
-HST.generic.short=HT
-HST.standard.short=HST
-Iceland.daylight.short=GMT
-Iceland.generic.short=GMT
-Iceland.standard.short=GMT
-IET.daylight.short=EDT
-IET.generic.short=ET
-IET.standard.short=EST
-Indian/Antananarivo.daylight.short=EAST
-Indian/Antananarivo.generic.short=EAT
-Indian/Antananarivo.standard.short=EAT
-Indian/Chagos.daylight.short=IOST
-Indian/Chagos.generic.short=IOT
-Indian/Chagos.standard.short=IOT
-Indian/Christmas.daylight.short=CXST
-Indian/Christmas.generic.short=CIT
-Indian/Christmas.standard.short=CXT
-Indian/Cocos.daylight.short=CCST
-Indian/Cocos.generic.short=CCT
-Indian/Cocos.standard.short=CCT
-Indian/Comoro.daylight.short=EAST
-Indian/Comoro.generic.short=EAT
-Indian/Comoro.standard.short=EAT
-Indian/Kerguelen.daylight.short=TFST
-Indian/Kerguelen.generic.short=TFT
-Indian/Kerguelen.standard.short=TFT
-Indian/Mahe.daylight.short=SCST
-Indian/Mahe.generic.short=SCT
-Indian/Mahe.standard.short=SCT
-Indian/Maldives.daylight.short=MVST
-Indian/Maldives.generic.short=MVT
-Indian/Maldives.standard.short=MVT
-Indian/Mauritius.daylight.short=MUST
-Indian/Mauritius.generic.short=MUT
-Indian/Mauritius.standard.short=MUT
-Indian/Mayotte.daylight.short=EAST
-Indian/Mayotte.generic.short=EAT
-Indian/Mayotte.standard.short=EAT
-Indian/Reunion.daylight.short=REST
-Indian/Reunion.generic.short=RET
-Indian/Reunion.standard.short=RET
-Iran.daylight.short=IRDT
-Iran.generic.short=IRT
-Iran.standard.short=IRST
-Israel.daylight.short=IDT
-Israel.generic.short=IT
-Israel.standard.short=IST
-IST.daylight.short=IDT
-IST.generic.short=IT
-IST.standard.short=IST
-Jamaica.daylight.short=EDT
-Jamaica.generic.short=ET
-Jamaica.standard.short=EST
-Japan.daylight.short=JDT
-Japan.generic.short=JT
-Japan.standard.short=JST
-JST.daylight.short=JDT
-JST.generic.short=JT
-JST.standard.short=JST
-Kwajalein.daylight.short=MHST
-Kwajalein.generic.short=MHT
-Kwajalein.standard.short=MHT
-Libya.daylight.short=EEST
-Libya.generic.short=EET
-Libya.standard.short=EET
-MET.daylight.short=MEST
-MET.generic.short=MET
-MET.standard.short=MET
-Mexico/BajaNorte.daylight.short=PDT
-Mexico/BajaNorte.generic.short=PT
-Mexico/BajaNorte.standard.short=PST
-Mexico/BajaSur.daylight.short=MDT
-Mexico/BajaSur.generic.short=MT
-Mexico/BajaSur.standard.short=MST
-Mexico/General.daylight.short=CDT
-Mexico/General.generic.short=CT
-Mexico/General.standard.short=CST
-MIT.daylight.short=WSDT
-MIT.generic.short=WST
-MIT.standard.short=WST
-MST7MDT.daylight.short=MDT
-MST7MDT.generic.short=MT
-MST7MDT.standard.short=MST
-MST.daylight.short=MDT
-MST.generic.short=MT
-MST.standard.short=MST
-Navajo.daylight.short=MDT
-Navajo.generic.short=MT
-Navajo.standard.short=MST
-NET.daylight.short=AMST
-NET.generic.short=AMT
-NET.standard.short=AMT
-NST.daylight.short=NZDT
-NST.generic.short=NZT
-NST.standard.short=NZST
-NZ-CHAT.daylight.short=CHADT
-NZ-CHAT.generic.short=CHAT
-NZ-CHAT.standard.short=CHAST
-NZ.daylight.short=NZDT
-NZ.generic.short=NZT
-NZ.standard.short=NZST
-Pacific/Apia.daylight.short=WSDT
-Pacific/Apia.generic.short=WST
-Pacific/Apia.standard.short=WST
-Pacific/Auckland.daylight.short=NZDT
-Pacific/Auckland.generic.short=NZT
-Pacific/Auckland.standard.short=NZST
-Pacific/Chatham.daylight.short=CHADT
-Pacific/Chatham.generic.short=CHAT
-Pacific/Chatham.standard.short=CHAST
-Pacific/Chuuk.daylight.short=CHUST
-Pacific/Chuuk.generic.short=CHUT
-Pacific/Chuuk.standard.short=CHUT
-Pacific/Easter.daylight.short=EASST
-Pacific/Easter.generic.short=EAST
-Pacific/Easter.standard.short=EAST
-Pacific/Efate.daylight.short=VUST
-Pacific/Efate.generic.short=VUT
-Pacific/Efate.standard.short=VUT
-Pacific/Enderbury.daylight.short=PHOST
-Pacific/Enderbury.generic.short=PHOT
-Pacific/Enderbury.standard.short=PHOT
-Pacific/Fakaofo.daylight.short=TKST
-Pacific/Fakaofo.generic.short=TKT
-Pacific/Fakaofo.standard.short=TKT
-Pacific/Fiji.daylight.short=FJST
-Pacific/Fiji.generic.short=FJT
-Pacific/Fiji.standard.short=FJT
-Pacific/Funafuti.daylight.short=TVST
-Pacific/Funafuti.generic.short=TVT
-Pacific/Funafuti.standard.short=TVT
-Pacific/Galapagos.daylight.short=GALST
-Pacific/Galapagos.generic.short=GALT
-Pacific/Galapagos.standard.short=GALT
-Pacific/Gambier.daylight.short=GAMST
-Pacific/Gambier.generic.short=GAMT
-Pacific/Gambier.standard.short=GAMT
-Pacific/Guadalcanal.daylight.short=SBST
-Pacific/Guadalcanal.generic.short=SBT
-Pacific/Guadalcanal.standard.short=SBT
-Pacific/Guam.daylight.short=ChDT
-Pacific/Guam.generic.short=ChT
-Pacific/Guam.standard.short=ChST
-Pacific/Honolulu.daylight.short=HDT
-Pacific/Honolulu.generic.short=HT
-Pacific/Honolulu.standard.short=HST
-Pacific/Johnston.daylight.short=HDT
-Pacific/Johnston.generic.short=HT
-Pacific/Johnston.standard.short=HST
-Pacific/Kiritimati.daylight.short=LINST
-Pacific/Kiritimati.generic.short=LINT
-Pacific/Kiritimati.standard.short=LINT
-Pacific/Kosrae.daylight.short=KOSST
-Pacific/Kosrae.generic.short=KOST
-Pacific/Kosrae.standard.short=KOST
-Pacific/Kwajalein.daylight.short=MHST
-Pacific/Kwajalein.generic.short=MHT
-Pacific/Kwajalein.standard.short=MHT
-Pacific/Majuro.daylight.short=MHST
-Pacific/Majuro.generic.short=MHT
-Pacific/Majuro.standard.short=MHT
-Pacific/Marquesas.daylight.short=MARST
-Pacific/Marquesas.generic.short=MART
-Pacific/Marquesas.standard.short=MART
-Pacific/Midway.daylight.short=SDT
-Pacific/Midway.generic.short=ST
-Pacific/Midway.standard.short=SST
-Pacific/Nauru.daylight.short=NRST
-Pacific/Nauru.generic.short=NRT
-Pacific/Nauru.standard.short=NRT
-Pacific/Niue.daylight.short=NUST
-Pacific/Niue.generic.short=NUT
-Pacific/Niue.standard.short=NUT
-Pacific/Norfolk.daylight.short=NFST
-Pacific/Norfolk.generic.short=NFT
-Pacific/Norfolk.standard.short=NFT
-Pacific/Noumea.daylight.short=NCST
-Pacific/Noumea.generic.short=NCT
-Pacific/Noumea.standard.short=NCT
-Pacific/Pago_Pago.daylight.short=SDT
-Pacific/Pago_Pago.generic.short=ST
-Pacific/Pago_Pago.standard.short=SST
-Pacific/Palau.daylight.short=PWST
-Pacific/Palau.generic.short=PWT
-Pacific/Palau.standard.short=PWT
-Pacific/Pitcairn.daylight.short=PDT
-Pacific/Pitcairn.generic.short=PT
-Pacific/Pitcairn.standard.short=PST
-Pacific/Pohnpei.daylight.short=PONST
-Pacific/Pohnpei.generic.short=PONT
-Pacific/Pohnpei.standard.short=PONT
-Pacific/Ponape.daylight.short=PONST
-Pacific/Ponape.generic.short=PONT
-Pacific/Ponape.standard.short=PONT
-Pacific/Port_Moresby.daylight.short=PGST
-Pacific/Port_Moresby.generic.short=PGT
-Pacific/Port_Moresby.standard.short=PGT
-Pacific/Rarotonga.daylight.short=CKHST
-Pacific/Rarotonga.generic.short=CKT
-Pacific/Rarotonga.standard.short=CKT
-Pacific/Saipan.daylight.short=ChDT
-Pacific/Saipan.generic.short=ChT
-Pacific/Saipan.standard.short=ChST
-Pacific/Samoa.daylight.short=SDT
-Pacific/Samoa.generic.short=ST
-Pacific/Samoa.standard.short=SST
-Pacific/Tahiti.daylight.short=TAHST
-Pacific/Tahiti.generic.short=TAHT
-Pacific/Tahiti.standard.short=TAHT
-Pacific/Tarawa.daylight.short=GILST
-Pacific/Tarawa.generic.short=GILT
-Pacific/Tarawa.standard.short=GILT
-Pacific/Tongatapu.daylight.short=TOST
-Pacific/Tongatapu.generic.short=TOT
-Pacific/Tongatapu.standard.short=TOT
-Pacific/Truk.daylight.short=CHUST
-Pacific/Truk.generic.short=CHUT
-Pacific/Truk.standard.short=CHUT
-Pacific/Wake.daylight.short=WAKST
-Pacific/Wake.generic.short=WAKT
-Pacific/Wake.standard.short=WAKT
-Pacific/Wallis.daylight.short=WFST
-Pacific/Wallis.generic.short=WFT
-Pacific/Wallis.standard.short=WFT
-Pacific/Yap.daylight.short=CHUST
-Pacific/Yap.generic.short=CHUT
-Pacific/Yap.standard.short=CHUT
-PLT.daylight.short=PKST
-PLT.generic.short=PKT
-PLT.standard.short=PKT
-PNT.daylight.short=MDT
-PNT.generic.short=MT
-PNT.standard.short=MST
-Poland.daylight.short=CEST
-Poland.generic.short=CET
-Poland.standard.short=CET
-Portugal.daylight.short=WEST
-Portugal.generic.short=WET
-Portugal.standard.short=WET
-PRC.daylight.short=CDT
-PRC.generic.short=CT
-PRC.standard.short=CST
-PRT.daylight.short=ADT
-PRT.generic.short=AT
-PRT.standard.short=AST
-PST8PDT.daylight.short=PDT
-PST8PDT.generic.short=PT
-PST8PDT.standard.short=PST
-PST.daylight.short=PDT
-PST.generic.short=PT
-PST.standard.short=PST
-ROK.daylight.short=KDT
-ROK.generic.short=KT
-ROK.standard.short=KST
-Singapore.daylight.short=SGST
-Singapore.generic.short=SGT
-Singapore.standard.short=SGT
-SST.daylight.short=SBST
-SST.generic.short=SBT
-SST.standard.short=SBT
-SystemV/AST4ADT.daylight.short=ADT
-SystemV/AST4ADT.generic.short=AT
-SystemV/AST4ADT.standard.short=AST
-SystemV/AST4.daylight.short=ADT
-SystemV/AST4.generic.short=AT
-SystemV/AST4.standard.short=AST
-SystemV/CST6CDT.daylight.short=CDT
-SystemV/CST6CDT.generic.short=CT
-SystemV/CST6CDT.standard.short=CST
-SystemV/CST6.daylight.short=CDT
-SystemV/CST6.generic.short=CT
-SystemV/CST6.standard.short=CST
-SystemV/EST5.daylight.short=EDT
-SystemV/EST5EDT.daylight.short=EDT
-SystemV/EST5EDT.generic.short=ET
-SystemV/EST5EDT.standard.short=EST
-SystemV/EST5.generic.short=ET
-SystemV/EST5.standard.short=EST
-SystemV/HST10.daylight.short=HDT
-SystemV/HST10.generic.short=HT
-SystemV/HST10.standard.short=HST
-SystemV/MST7.daylight.short=MDT
-SystemV/MST7.generic.short=MT
-SystemV/MST7MDT.daylight.short=MDT
-SystemV/MST7MDT.generic.short=MT
-SystemV/MST7MDT.standard.short=MST
-SystemV/MST7.standard.short=MST
-SystemV/PST8.daylight.short=PDT
-SystemV/PST8.generic.short=PT
-SystemV/PST8PDT.daylight.short=PDT
-SystemV/PST8PDT.generic.short=PT
-SystemV/PST8PDT.standard.short=PST
-SystemV/PST8.standard.short=PST
-SystemV/YST9.daylight.short=AKDT
-SystemV/YST9.generic.short=AKT
-SystemV/YST9.standard.short=AKST
-SystemV/YST9YDT.daylight.short=AKDT
-SystemV/YST9YDT.generic.short=AKT
-SystemV/YST9YDT.standard.short=AKST
-Turkey.daylight.short=EEST
-Turkey.generic.short=EET
-Turkey.standard.short=EET
-UCT.daylight.short=UTC
-UCT.generic.short=UTC
-UCT.standard.short=UTC
-Universal.daylight.short=UTC
-Universal.generic.short=UTC
-Universal.standard.short=UTC
-US/Alaska.daylight.short=AKDT
-US/Alaska.generic.short=AKT
-US/Alaska.standard.short=AKST
-US/Aleutian.daylight.short=HADT
-US/Aleutian.generic.short=HAT
-US/Aleutian.standard.short=HAST
-US/Arizona.daylight.short=MDT
-US/Arizona.generic.short=MT
-US/Arizona.standard.short=MST
-US/Central.daylight.short=CDT
-US/Central.generic.short=CT
-US/Central.standard.short=CST
-US/Eastern.daylight.short=EDT
-US/Eastern.generic.short=ET
-US/Eastern.standard.short=EST
-US/East-Indiana.daylight.short=EDT
-US/East-Indiana.generic.short=ET
-US/East-Indiana.standard.short=EST
-US/Hawaii.daylight.short=HDT
-US/Hawaii.generic.short=HT
-US/Hawaii.standard.short=HST
-US/Indiana-Starke.daylight.short=CDT
-US/Indiana-Starke.generic.short=CT
-US/Indiana-Starke.standard.short=CST
-US/Michigan.daylight.short=EDT
-US/Michigan.generic.short=ET
-US/Michigan.standard.short=EST
-US/Mountain.daylight.short=MDT
-US/Mountain.generic.short=MT
-US/Mountain.standard.short=MST
-US/Pacific.daylight.short=PDT
-US/Pacific.generic.short=PT
-US/Pacific-New.daylight.short=PDT
-US/Pacific-New.generic.short=PT
-US/Pacific-New.standard.short=PST
-US/Pacific.standard.short=PST
-US/Samoa.daylight.short=SDT
-US/Samoa.generic.short=ST
-US/Samoa.standard.short=SST
-UTC.daylight.short=UTC
-UTC.generic.short=UTC
-UTC.standard.short=UTC
-VST.daylight.short=ICST
-VST.generic.short=ICT
-VST.standard.short=ICT
-WET.daylight.short=WEST
-WET.generic.short=WET
-WET.standard.short=WET
-W-SU.daylight.short=MSD
-W-SU.generic.short=MT
-W-SU.standard.short=MSK
-Zulu.daylight.short=UTC
-Zulu.generic.short=UTC
-Zulu.standard.short=UTC
diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_pt_BR.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_pt_BR.properties
deleted file mode 100644
index 763311b..0000000
--- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_pt_BR.properties
+++ /dev/null
@@ -1,651 +0,0 @@
-ACT.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Central (Territ\u00F3rio do Norte)
-ACT.generic.long=Hor\u00E1rio Central (Territ\u00F3rio do Norte)
-ACT.standard.long=Hor\u00E1rio-Padr\u00E3o Central (Territ\u00F3rio do Norte)
-AET.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Nova Gales do Sul)
-AET.generic.long=Hor\u00E1rio Oriental (Nova Gales do Sul)
-AET.standard.long=Hor\u00E1rio-Padr\u00E3o Oriental (Nova Gales do Sul)
-AGT.generic.long=Hor\u00E1rio da Argentina
-ART.generic.long=Hor\u00E1rio da Europa Oriental
-AST.generic.long=Hor\u00E1rio do Alasca
-Africa/Abidjan.generic.long=Hor\u00E1rio M\u00E9dio de Greenwich
-Africa/Accra.generic.long=Fuso Hor\u00E1rio do Meridiano de Gana
-Africa/Addis_Ababa.generic.long=Hor\u00E1rio do Leste da \u00C1frica
-Africa/Algiers.generic.long=Hor\u00E1rio da Europa Central
-Africa/Asmara.generic.long=Hor\u00E1rio do Leste da \u00C1frica
-Africa/Asmera.generic.long=Hor\u00E1rio do Leste da \u00C1frica
-Africa/Bamako.generic.long=Hor\u00E1rio M\u00E9dio de Greenwich
-Africa/Bangui.generic.long=Hor\u00E1rio da \u00C1frica Ocidental
-Africa/Banjul.generic.long=Hor\u00E1rio M\u00E9dio de Greenwich
-Africa/Bissau.generic.long=Hor\u00E1rio M\u00E9dio de Greenwich
-Africa/Blantyre.generic.long=Hor\u00E1rio da \u00C1frica Central
-Africa/Brazzaville.generic.long=Hor\u00E1rio da \u00C1frica Ocidental
-Africa/Bujumbura.generic.long=Hor\u00E1rio da \u00C1frica Central
-Africa/Cairo.generic.long=Hor\u00E1rio da Europa Oriental
-Africa/Casablanca.generic.long=Hor\u00E1rio da Europa Ocidental
-Africa/Ceuta.generic.long=Hor\u00E1rio da Europa Central
-Africa/Conakry.generic.long=Hor\u00E1rio M\u00E9dio de Greenwich
-Africa/Dakar.generic.long=Hor\u00E1rio M\u00E9dio de Greenwich
-Africa/Dar_es_Salaam.generic.long=Hor\u00E1rio do Leste da \u00C1frica
-Africa/Djibouti.generic.long=Hor\u00E1rio do Leste da \u00C1frica
-Africa/Douala.generic.long=Hor\u00E1rio da \u00C1frica Ocidental
-Africa/El_Aaiun.generic.long=Hor\u00E1rio da Europa Ocidental
-Africa/Freetown.generic.long=Hor\u00E1rio de Serra Leoa
-Africa/Gaborone.generic.long=Hor\u00E1rio da \u00C1frica Central
-Africa/Harare.generic.long=Hor\u00E1rio da \u00C1frica Central
-Africa/Johannesburg.generic.long=Hor\u00E1rio da \u00C1frica do Sul
-Africa/Juba.generic.long=Hor\u00E1rio do Leste da \u00C1frica
-Africa/Kampala.generic.long=Hor\u00E1rio do Leste da \u00C1frica
-Africa/Khartoum.generic.long=Hor\u00E1rio do Leste da \u00C1frica
-Africa/Kigali.generic.long=Hor\u00E1rio da \u00C1frica Central
-Africa/Kinshasa.generic.long=Hor\u00E1rio da \u00C1frica Ocidental
-Africa/Lagos.generic.long=Hor\u00E1rio da \u00C1frica Ocidental
-Africa/Libreville.generic.long=Hor\u00E1rio da \u00C1frica Ocidental
-Africa/Lome.generic.long=Hor\u00E1rio M\u00E9dio de Greenwich
-Africa/Luanda.generic.long=Hor\u00E1rio da \u00C1frica Ocidental
-Africa/Lubumbashi.generic.long=Hor\u00E1rio da \u00C1frica Central
-Africa/Lusaka.generic.long=Hor\u00E1rio da \u00C1frica Central
-Africa/Malabo.generic.long=Hor\u00E1rio da \u00C1frica Ocidental
-Africa/Maputo.generic.long=Hor\u00E1rio da \u00C1frica Central
-Africa/Maseru.generic.long=Hor\u00E1rio da \u00C1frica do Sul
-Africa/Mbabane.generic.long=Hor\u00E1rio da \u00C1frica do Sul
-Africa/Mogadishu.generic.long=Hor\u00E1rio do Leste da \u00C1frica
-Africa/Monrovia.generic.long=Hor\u00E1rio M\u00E9dio de Greenwich
-Africa/Nairobi.generic.long=Hor\u00E1rio do Leste da \u00C1frica
-Africa/Ndjamena.generic.long=Hor\u00E1rio da \u00C1frica Ocidental
-Africa/Niamey.generic.long=Hor\u00E1rio da \u00C1frica Ocidental
-Africa/Nouakchott.generic.long=Hor\u00E1rio M\u00E9dio de Greenwich
-Africa/Ouagadougou.generic.long=Hor\u00E1rio M\u00E9dio de Greenwich
-Africa/Porto-Novo.generic.long=Hor\u00E1rio da \u00C1frica Ocidental
-Africa/Sao_Tome.generic.long=Hor\u00E1rio M\u00E9dio de Greenwich
-Africa/Timbuktu.generic.long=Hor\u00E1rio M\u00E9dio de Greenwich
-Africa/Tripoli.generic.long=Hor\u00e1rio da Europa Oriental
-Africa/Tunis.generic.long=Hor\u00E1rio da Europa Central
-Africa/Windhoek.generic.long=Hor\u00E1rio da \u00C1frica Ocidental
-America/Adak.generic.long=Hor\u00E1rio do Hava\u00ED-Aleutas
-America/Anchorage.generic.long=Hor\u00E1rio do Alasca
-America/Anguilla.generic.long=Hor\u00E1rio do Atl\u00E2ntico
-America/Antigua.generic.long=Hor\u00E1rio do Atl\u00E2ntico
-America/Araguaina.generic.long=Hor\u00E1rio de Bras\u00EDlia
-America/Argentina/Buenos_Aires.generic.long=Hor\u00E1rio da Argentina
-America/Argentina/Catamarca.generic.long=Hor\u00E1rio da Argentina
-America/Argentina/ComodRivadavia.generic.long=Hor\u00E1rio da Argentina
-America/Argentina/Cordoba.generic.long=Hor\u00E1rio da Argentina
-America/Argentina/Jujuy.generic.long=Hor\u00E1rio da Argentina
-America/Argentina/La_Rioja.generic.long=Hor\u00E1rio da Argentina
-America/Argentina/Mendoza.generic.long=Hor\u00E1rio da Argentina
-America/Argentina/Rio_Gallegos.generic.long=Hor\u00E1rio da Argentina
-America/Argentina/Salta.generic.long=Hor\u00E1rio da Argentina
-America/Argentina/San_Juan.generic.long=Hor\u00E1rio da Argentina
-America/Argentina/San_Luis.generic.long=Hor\u00e1rio da Argentina
-America/Argentina/Tucuman.generic.long=Hor\u00E1rio da Argentina
-America/Argentina/Ushuaia.generic.long=Hor\u00E1rio da Argentina
-America/Aruba.generic.long=Hor\u00E1rio do Atl\u00E2ntico
-America/Asuncion.generic.long=Hor\u00E1rio do Paraguai
-America/Atikokan.generic.long=Hor\u00E1rio do Leste
-America/Atka.generic.long=Hor\u00E1rio do Hava\u00ED-Aleutas
-America/Bahia.generic.long=Hor\u00E1rio de Bras\u00EDlia
-America/Bahia_Banderas.generic.long=Hor\u00E1rio Central
-America/Barbados.generic.long=Hor\u00E1rio do Atl\u00E2ntico
-America/Belem.generic.long=Hor\u00E1rio de Bras\u00EDlia
-America/Belize.generic.long=Hor\u00E1rio Central
-America/Blanc-Sablon.generic.long=Hor\u00E1rio do Atl\u00E2ntico
-America/Boa_Vista.generic.long=Hor\u00E1rio do Amazonas
-America/Bogota.generic.long=Hor\u00E1rio da Col\u00F4mbia
-America/Boise.generic.long=Hor\u00E1rio das Montanhas Rochosas
-America/Buenos_Aires.generic.long=Hor\u00E1rio da Argentina
-America/Cambridge_Bay.generic.long=Hor\u00E1rio das Montanhas Rochosas
-America/Campo_Grande.generic.long=Hor\u00E1rio do Amazonas
-America/Cancun.generic.long=Hor\u00E1rio Central
-America/Caracas.generic.long=Hor\u00E1rio da Venezuela
-America/Catamarca.generic.long=Hor\u00E1rio da Argentina
-America/Cayenne.generic.long=Hor\u00E1rio da Guiana Francesa
-America/Cayman.generic.long=Hor\u00E1rio do Leste
-America/Chicago.generic.long=Hor\u00E1rio Central
-America/Chihuahua.generic.long=Hor\u00E1rio das Montanhas Rochosas
-America/Coral_Harbour.generic.long=Hor\u00E1rio do Leste
-America/Cordoba.generic.long=Hor\u00E1rio da Argentina
-America/Costa_Rica.generic.long=Hor\u00E1rio Central
-America/Creston.generic.long=Hor\u00E1rio das Montanhas Rochosas
-America/Cuiaba.generic.long=Hor\u00E1rio do Amazonas
-America/Curacao.generic.long=Hor\u00E1rio do Atl\u00E2ntico
-America/Danmarkshavn.generic.long=Hor\u00E1rio M\u00E9dio de Greenwich
-America/Dawson.generic.long=Hor\u00E1rio do Pac\u00EDfico
-America/Dawson_Creek.generic.long=Hor\u00E1rio das Montanhas Rochosas
-America/Denver.generic.long=Hor\u00E1rio das Montanhas Rochosas
-America/Detroit.generic.long=Hor\u00E1rio do Leste
-America/Dominica.generic.long=Hor\u00E1rio do Atl\u00E2ntico
-America/Edmonton.generic.long=Hor\u00E1rio das Montanhas Rochosas
-America/Eirunepe.generic.long=Fuso hor\u00e1rio do Acre
-America/El_Salvador.generic.long=Hor\u00E1rio Central
-America/Ensenada.generic.long=Hor\u00E1rio do Pac\u00EDfico
-America/Fort_Wayne.generic.long=Hor\u00E1rio do Leste
-America/Fortaleza.generic.long=Hor\u00E1rio de Bras\u00EDlia
-America/Glace_Bay.generic.long=Hor\u00E1rio do Atl\u00E2ntico
-America/Godthab.generic.long=Hor\u00E1rio da Groenl\u00E2ndia Ocidental
-America/Goose_Bay.generic.long=Hor\u00E1rio do Atl\u00E2ntico
-America/Grand_Turk.generic.long=Hor\u00E1rio do Leste
-America/Grenada.generic.long=Hor\u00E1rio do Atl\u00E2ntico
-America/Guadeloupe.generic.long=Hor\u00E1rio do Atl\u00E2ntico
-America/Guatemala.generic.long=Hor\u00E1rio Central
-America/Guayaquil.generic.long=Hor\u00E1rio do Equador
-America/Guyana.generic.long=Hor\u00E1rios da Guiana
-America/Halifax.generic.long=Hor\u00E1rio do Atl\u00E2ntico
-America/Havana.generic.long=Hor\u00E1rio de Cuba
-America/Hermosillo.generic.long=Hor\u00E1rio das Montanhas Rochosas
-America/Indiana/Indianapolis.generic.long=Hor\u00E1rio do Leste
-America/Indiana/Knox.generic.long=Hor\u00E1rio Central
-America/Indiana/Marengo.generic.long=Hor\u00E1rio do Leste
-America/Indiana/Petersburg.generic.long=Hor\u00E1rio do Leste
-America/Indiana/Tell_City.generic.long=Hor\u00E1rio Central
-America/Indiana/Vevay.generic.long=Hor\u00E1rio do Leste
-America/Indiana/Vincennes.generic.long=Hor\u00E1rio do Leste
-America/Indiana/Winamac.generic.long=Hor\u00E1rio do Leste
-America/Indianapolis.generic.long=Hor\u00E1rio do Leste
-America/Inuvik.generic.long=Hor\u00E1rio das Montanhas Rochosas
-America/Iqaluit.generic.long=Hor\u00E1rio do Leste
-America/Jamaica.generic.long=Hor\u00E1rio do Leste
-America/Jujuy.generic.long=Hor\u00E1rio da Argentina
-America/Juneau.generic.long=Hor\u00E1rio do Alasca
-America/Kentucky/Louisville.generic.long=Hor\u00E1rio do Leste
-America/Kentucky/Monticello.generic.long=Hor\u00E1rio do Leste
-America/Knox_IN.generic.long=Hor\u00E1rio Central
-America/Kralendijk.generic.long=Hor\u00E1rio do Atl\u00E2ntico
-America/La_Paz.generic.long=Hor\u00E1rio da Bol\u00EDvia
-America/Lima.generic.long=Hor\u00E1rio do Peru
-America/Los_Angeles.generic.long=Hor\u00E1rio do Pac\u00EDfico
-America/Louisville.generic.long=Hor\u00E1rio do Leste
-America/Lower_Princes.generic.long=Hor\u00E1rio do Atl\u00E2ntico
-America/Maceio.generic.long=Hor\u00E1rio de Bras\u00EDlia
-America/Managua.generic.long=Hor\u00E1rio Central
-America/Manaus.generic.long=Hor\u00E1rio do Amazonas
-America/Marigot.generic.long=Hor\u00E1rio do Atl\u00E2ntico
-America/Martinique.generic.long=Hor\u00E1rio do Atl\u00E2ntico
-America/Matamoros.generic.long=Hor\u00E1rio Central
-America/Mazatlan.generic.long=Hor\u00E1rio das Montanhas Rochosas
-America/Mendoza.generic.long=Hor\u00E1rio da Argentina
-America/Menominee.generic.long=Hor\u00E1rio Central
-America/Merida.generic.long=Hor\u00E1rio Central
-America/Metlakatla.daylight.long=Hor\u00E1rio de Luz Natural de Metlakatla
-America/Metlakatla.generic.long=Hor\u00E1rio de Metlakatla
-America/Metlakatla.standard.long=Hor\u00E1rio Padr\u00E3o de Metlakatla
-America/Mexico_City.generic.long=Hor\u00E1rio Central
-America/Miquelon.generic.long=Hor\u00E1rio de Saint Pierre e Miquelon
-America/Moncton.generic.long=Hor\u00E1rio do Atl\u00E2ntico
-America/Monterrey.generic.long=Hor\u00E1rio Central
-America/Montevideo.generic.long=Hor\u00E1rio do Uruguai
-America/Montreal.generic.long=Hor\u00E1rio do Leste
-America/Montserrat.generic.long=Hor\u00E1rio do Atl\u00E2ntico
-America/Nassau.generic.long=Hor\u00E1rio do Leste
-America/New_York.generic.long=Hor\u00E1rio do Leste
-America/Nipigon.generic.long=Hor\u00E1rio do Leste
-America/Nome.generic.long=Hor\u00E1rio do Alasca
-America/Noronha.generic.long=Hor\u00E1rio de Fernando de Noronha
-America/North_Dakota/Beulah.generic.long=Hor\u00E1rio Central
-America/North_Dakota/Center.generic.long=Hor\u00E1rio Central
-America/North_Dakota/New_Salem.generic.long=Hor\u00E1rio Central
-America/Ojinaga.generic.long=Hor\u00E1rio das Montanhas Rochosas
-America/Panama.generic.long=Hor\u00E1rio do Leste
-America/Pangnirtung.generic.long=Hor\u00E1rio do Leste
-America/Paramaribo.generic.long=Hor\u00E1rio do Suriname
-America/Phoenix.generic.long=Hor\u00E1rio das Montanhas Rochosas
-America/Port-au-Prince.generic.long=Hor\u00E1rio do Leste
-America/Port_of_Spain.generic.long=Hor\u00E1rio do Atl\u00E2ntico
-America/Porto_Acre.generic.long=Fuso hor\u00e1rio do Acre
-America/Porto_Velho.generic.long=Hor\u00E1rio do Amazonas
-America/Puerto_Rico.generic.long=Hor\u00E1rio do Atl\u00E2ntico
-America/Rainy_River.generic.long=Hor\u00E1rio Central
-America/Rankin_Inlet.generic.long=Hor\u00E1rio Central
-America/Recife.generic.long=Hor\u00E1rio de Bras\u00EDlia
-America/Regina.generic.long=Hor\u00E1rio Central
-America/Resolute.generic.long=Hor\u00E1rio Central
-America/Rio_Branco.generic.long=Fuso hor\u00e1rio do Acre
-America/Rosario.generic.long=Hor\u00E1rio da Argentina
-America/Santa_Isabel.generic.long=Hor\u00E1rio do Pac\u00EDfico
-America/Santarem.generic.long=Hor\u00E1rio de Bras\u00EDlia
-America/Santiago.generic.long=Hor\u00E1rio do Chile
-America/Santo_Domingo.generic.long=Hor\u00E1rio do Atl\u00E2ntico
-America/Sao_Paulo.generic.long=Hor\u00E1rio de Bras\u00EDlia
-America/Scoresbysund.generic.long=Hor\u00E1rio da Groenl\u00E2ndia Oriental
-America/Shiprock.generic.long=Hor\u00E1rio das Montanhas Rochosas
-America/Sitka.generic.long=Hor\u00E1rio do Alasca
-America/St_Barthelemy.generic.long=Hor\u00E1rio do Atl\u00E2ntico
-America/St_Johns.generic.long=Hor\u00E1rio de Terra Nova
-America/St_Kitts.generic.long=Hor\u00E1rio do Atl\u00E2ntico
-America/St_Lucia.generic.long=Hor\u00E1rio do Atl\u00E2ntico
-America/St_Thomas.generic.long=Hor\u00E1rio do Atl\u00E2ntico
-America/St_Vincent.generic.long=Hor\u00E1rio do Atl\u00E2ntico
-America/Swift_Current.generic.long=Hor\u00E1rio Central
-America/Tegucigalpa.generic.long=Hor\u00E1rio Central
-America/Thule.generic.long=Hor\u00E1rio do Atl\u00E2ntico
-America/Thunder_Bay.generic.long=Hor\u00E1rio do Leste
-America/Tijuana.generic.long=Hor\u00E1rio do Pac\u00EDfico
-America/Toronto.generic.long=Hor\u00E1rio do Leste
-America/Tortola.generic.long=Hor\u00E1rio do Atl\u00E2ntico
-America/Vancouver.generic.long=Hor\u00E1rio do Pac\u00EDfico
-America/Virgin.generic.long=Hor\u00E1rio do Atl\u00E2ntico
-America/Whitehorse.generic.long=Hor\u00E1rio do Pac\u00EDfico
-America/Winnipeg.generic.long=Hor\u00E1rio Central
-America/Yakutat.generic.long=Hor\u00E1rio do Alasca
-America/Yellowknife.generic.long=Hor\u00E1rio das Montanhas Rochosas
-Antarctica/Casey.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Ocidental (Austr\u00E1lia)
-Antarctica/Casey.generic.long=Hor\u00E1rio Ocidental (Austr\u00E1lia)
-Antarctica/Casey.standard.long=Hor\u00E1rio-Padr\u00E3o Ocidental (Austr\u00E1lia)
-Antarctica/Davis.generic.long=Hor\u00E1rio de Davis
-Antarctica/DumontDUrville.generic.long=Fuso Hor\u00E1rio de Dumont-d'Urville
-Antarctica/Macquarie.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o da Ilha de Macquarie
-Antarctica/Macquarie.generic.long=Fuso Hor\u00E1rio da Ilha de Macquarie
-Antarctica/Macquarie.standard.long=Fuso Hor\u00E1rio da Ilha de Macquarie
-Antarctica/Mawson.generic.long=Hor\u00E1rio de Mawson
-Antarctica/McMurdo.generic.long=Hor\u00E1rio da Nova Zel\u00E2ndia
-Antarctica/Palmer.generic.long=Hor\u00E1rio do Chile
-Antarctica/Rothera.generic.long=Hor\u00E1rio de Rothera
-Antarctica/South_Pole.generic.long=Hor\u00E1rio da Nova Zel\u00E2ndia
-Antarctica/Syowa.generic.long=Hor\u00E1rio de Syowa
-Antarctica/Vostok.generic.long=Hor\u00E1rio de Vostok
-Arctic/Longyearbyen.generic.long=Hor\u00E1rio da Europa Central
-Asia/Aden.generic.long=Hor\u00E1rio da Ar\u00E1bia
-Asia/Almaty.generic.long=Hor\u00E1rio de Alma-Ata
-Asia/Amman.generic.long=Hor\u00e1rio da Ar\u00e1bia
-Asia/Anadyr.generic.long=Hor\u00E1rio de Anadyr
-Asia/Aqtau.generic.long=Hor\u00E1rio de Aqtau
-Asia/Aqtobe.generic.long=Hor\u00E1rio de Aqtobe
-Asia/Ashgabat.generic.long=Hor\u00E1rio do Turcomenist\u00E3o
-Asia/Ashkhabad.generic.long=Hor\u00E1rio do Turcomenist\u00E3o
-Asia/Baghdad.generic.long=Hor\u00E1rio da Ar\u00E1bia
-Asia/Bahrain.generic.long=Hor\u00E1rio da Ar\u00E1bia
-Asia/Baku.generic.long=Hor\u00E1rio do Azerbaij\u00E3o
-Asia/Bangkok.generic.long=Hor\u00E1rio da Indochina
-Asia/Beirut.generic.long=Hor\u00E1rio da Europa Oriental
-Asia/Bishkek.generic.long=Hor\u00E1rio do Quirguist\u00E3o
-Asia/Brunei.generic.long=Hor\u00E1rio de Brunei
-Asia/Calcutta.generic.long=Hor\u00E1rio da \u00CDndia
-Asia/Choibalsan.generic.long=Hor\u00E1rio de Choibalsan
-Asia/Chongqing.generic.long=Hor\u00E1rio da China
-Asia/Chungking.generic.long=Hor\u00E1rio da China
-Asia/Colombo.generic.long=Hor\u00E1rio da \u00CDndia
-Asia/Dacca.generic.long=Hor\u00E1rio de Bangladesh
-Asia/Damascus.generic.long=Hor\u00E1rio da Europa Oriental
-Asia/Dhaka.generic.long=Hor\u00E1rio de Bangladesh
-Asia/Dili.generic.long=Hor\u00E1rio do Timor-Leste
-Asia/Dubai.generic.long=Hor\u00E1rio do Golfo
-Asia/Dushanbe.generic.long=Hor\u00E1rio do Tadjiquist\u00E3o
-Asia/Gaza.generic.long=Hor\u00E1rio da Europa Oriental
-Asia/Harbin.generic.long=Hor\u00E1rio da China
-Asia/Hebron.generic.long=Hor\u00E1rio da Europa Oriental
-Asia/Ho_Chi_Minh.generic.long=Hor\u00E1rio da Indochina
-Asia/Hong_Kong.generic.long=Hor\u00E1rio de Hong Kong
-Asia/Hovd.generic.long=Hor\u00E1rio de Hovd
-Asia/Irkutsk.generic.long=Hor\u00E1rio de Irkutsk
-Asia/Istanbul.generic.long=Hor\u00E1rio da Europa Oriental
-Asia/Jakarta.generic.long=Hor\u00E1rio da Indon\u00E9sia Ocidental
-Asia/Jayapura.generic.long=Hor\u00E1rio da Indon\u00E9sia Oriental
-Asia/Jerusalem.generic.long=Hor\u00E1rio de Israel
-Asia/Kabul.generic.long=Hor\u00E1rio do Afeganist\u00E3o
-Asia/Kamchatka.generic.long=Hor\u00E1rio de Petropavlovsk-Kamchatski
-Asia/Karachi.generic.long=Hor\u00E1rio do Paquist\u00E3o
-Asia/Kashgar.generic.long=Hor\u00E1rio da China
-Asia/Kathmandu.generic.long=Hor\u00E1rio do Nepal
-Asia/Katmandu.generic.long=Hor\u00E1rio do Nepal
-Asia/Khandyga.daylight.long=Hor\u00E1rio de Ver\u00E3o de Khandyga
-Asia/Khandyga.generic.long=Hor\u00E1rio de Khandyga
-Asia/Khandyga.standard.long=Hor\u00E1rio de Khandyga
-Asia/Kolkata.generic.long=Hor\u00E1rio da \u00CDndia
-Asia/Krasnoyarsk.generic.long=Hor\u00E1rio de Krasnoyarsk
-Asia/Kuala_Lumpur.generic.long=Hor\u00E1rio da Mal\u00E1sia
-Asia/Kuching.generic.long=Hor\u00E1rio da Mal\u00E1sia
-Asia/Kuwait.generic.long=Hor\u00E1rio da Ar\u00E1bia
-Asia/Macao.generic.long=Hor\u00E1rio da China
-Asia/Macau.generic.long=Hor\u00E1rio da China
-Asia/Magadan.generic.long=Hor\u00E1rio de Magadan
-Asia/Makassar.generic.long=Hor\u00E1rio da Indon\u00E9sia Central
-Asia/Manila.generic.long=Hor\u00E1rio das Filipinas
-Asia/Muscat.generic.long=Hor\u00E1rio do Golfo
-Asia/Nicosia.generic.long=Hor\u00E1rio da Europa Oriental
-Asia/Novokuznetsk.generic.long=Hor\u00E1rio de Novosibirsk
-Asia/Novosibirsk.generic.long=Hor\u00E1rio de Novosibirsk
-Asia/Omsk.generic.long=Hor\u00E1rio de Omsk
-Asia/Oral.generic.long=Hor\u00E1rio de Uralsk
-Asia/Phnom_Penh.generic.long=Hor\u00E1rio da Indochina
-Asia/Pontianak.generic.long=Hor\u00E1rio da Indon\u00E9sia Ocidental
-Asia/Pyongyang.generic.long=Hor\u00E1rio da Coreia
-Asia/Qatar.generic.long=Hor\u00E1rio da Ar\u00E1bia
-Asia/Qyzylorda.generic.long=Hor\u00E1rio de Qyzylorda
-Asia/Rangoon.generic.long=Hor\u00E1rio de Mianmar
-Asia/Saigon.generic.long=Hor\u00E1rio da Indochina
-Asia/Sakhalin.generic.long=Hor\u00E1rio de Sakhalin
-Asia/Samarkand.generic.long=Hor\u00E1rio do Uzbequist\u00E3o
-Asia/Seoul.generic.long=Hor\u00E1rio da Coreia
-Asia/Shanghai.generic.long=Hor\u00E1rio da China
-Asia/Singapore.generic.long=Hor\u00E1rio de Cingapura
-Asia/Taipei.generic.long=Hor\u00E1rio da China
-Asia/Tashkent.generic.long=Hor\u00E1rio do Uzbequist\u00E3o
-Asia/Tbilisi.generic.long=Hor\u00E1rio da Ge\u00F3rgia
-Asia/Tehran.generic.long=Hor\u00E1rio do Ir\u00E3
-Asia/Tel_Aviv.generic.long=Hor\u00E1rio de Israel
-Asia/Thimbu.generic.long=Hor\u00E1rio do But\u00E3o
-Asia/Thimphu.generic.long=Hor\u00E1rio do But\u00E3o
-Asia/Tokyo.generic.long=Hor\u00E1rio do Jap\u00E3o
-Asia/Ujung_Pandang.generic.long=Hor\u00E1rio da Indon\u00E9sia Central
-Asia/Ulaanbaatar.generic.long=Hor\u00E1rio de Ulaanbaatar
-Asia/Ulan_Bator.generic.long=Hor\u00E1rio de Ulaanbaatar
-Asia/Urumqi.generic.long=Hor\u00E1rio da China
-Asia/Ust-Nera.daylight.long=Hor\u00E1rio de Ver\u00E3o de Ust-Nera
-Asia/Ust-Nera.generic.long=Hor\u00E1rio de Ust-Nera
-Asia/Ust-Nera.standard.long=Hor\u00E1rio de Ust-Nera
-Asia/Vientiane.generic.long=Hor\u00E1rio da Indochina
-Asia/Vladivostok.generic.long=Hor\u00E1rio de Vladivostok
-Asia/Yakutsk.generic.long=Hor\u00E1rio de Yakutsk
-Asia/Yekaterinburg.generic.long=Hor\u00E1rio de Yekaterinburg
-Asia/Yerevan.generic.long=Hor\u00E1rio da Arm\u00EAnia
-Atlantic/Azores.generic.long=Hor\u00E1rio de A\u00E7ores
-Atlantic/Bermuda.generic.long=Hor\u00E1rio do Atl\u00E2ntico
-Atlantic/Canary.generic.long=Hor\u00E1rio da Europa Ocidental
-Atlantic/Cape_Verde.generic.long=Hor\u00E1rio de Cabo Verde
-Atlantic/Faeroe.generic.long=Hor\u00E1rio da Europa Ocidental
-Atlantic/Faroe.generic.long=Hor\u00E1rio da Europa Ocidental
-Atlantic/Jan_Mayen.generic.long=Hor\u00E1rio da Europa Central
-Atlantic/Madeira.generic.long=Hor\u00E1rio da Europa Ocidental
-Atlantic/Reykjavik.generic.long=Hor\u00E1rio M\u00E9dio de Greenwich
-Atlantic/South_Georgia.generic.long=Hor\u00E1rio da Ge\u00F3rgia do Sul
-Atlantic/St_Helena.generic.long=Hor\u00E1rio M\u00E9dio de Greenwich
-Atlantic/Stanley.generic.long=Hor\u00E1rio das Ilhas Malvinas
-Australia/ACT.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Nova Gales do Sul)
-Australia/ACT.generic.long=Hor\u00E1rio Oriental (Nova Gales do Sul)
-Australia/ACT.standard.long=Hor\u00E1rio-Padr\u00E3o Oriental (Nova Gales do Sul)
-Australia/Adelaide.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Central (Austr\u00E1lia do Sul)
-Australia/Adelaide.generic.long=Hor\u00E1rio Central (Austr\u00E1lia do Sul)
-Australia/Adelaide.standard.long=Hor\u00E1rio-Padr\u00E3o Central (Austr\u00E1lia do Sul)
-Australia/Brisbane.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Queensland)
-Australia/Brisbane.generic.long=Hor\u00E1rio do Leste (Queensland)
-Australia/Brisbane.standard.long=Hor\u00E1rio-Padr\u00E3o do Leste (Queensland)
-Australia/Broken_Hill.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Central (Austr\u00E1lia do Sul/Nova Gales do Sul)
-Australia/Broken_Hill.generic.long=Hor\u00E1rio Central (Austr\u00E1lia do Sul/Nova Gales do Sul)
-Australia/Broken_Hill.standard.long=Hor\u00E1rio-Padr\u00E3o Central (Austr\u00E1lia do Sul/Nova Gales do Sul)
-Australia/Canberra.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Nova Gales do Sul)
-Australia/Canberra.generic.long=Hor\u00E1rio Oriental (Nova Gales do Sul)
-Australia/Canberra.standard.long=Hor\u00E1rio-Padr\u00E3o Oriental (Nova Gales do Sul)
-Australia/Currie.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Nova Gales do Sul)
-Australia/Currie.generic.long=Hor\u00E1rio Oriental (Nova Gales do Sul)
-Australia/Currie.standard.long=Hor\u00E1rio-Padr\u00E3o Oriental (Nova Gales do Sul)
-Australia/Darwin.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Central (Territ\u00F3rio do Norte)
-Australia/Darwin.generic.long=Hor\u00E1rio Central (Territ\u00F3rio do Norte)
-Australia/Darwin.standard.long=Hor\u00E1rio-Padr\u00E3o Central (Territ\u00F3rio do Norte)
-Australia/Eucla.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Ocidental Central (Austr\u00E1lia)
-Australia/Eucla.generic.long=Hor\u00E1rio Ocidental Central (Austr\u00E1lia)
-Australia/Eucla.standard.long=Fuso Hor\u00E1rio Ocidental Central (Austr\u00E1lia)
-Australia/Hobart.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Tasm\u00E2nia)
-Australia/Hobart.generic.long=Hor\u00E1rio do Leste (Tasm\u00E2nia)
-Australia/Hobart.standard.long=Hor\u00E1rio-Padr\u00E3o do Leste (Tasm\u00E2nia)
-Australia/LHI.generic.long=Hor\u00E1rio de Lord Howe
-Australia/Lindeman.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Queensland)
-Australia/Lindeman.generic.long=Hor\u00E1rio do Leste (Queensland)
-Australia/Lindeman.standard.long=Hor\u00E1rio-Padr\u00E3o do Leste (Queensland)
-Australia/Lord_Howe.generic.long=Hor\u00E1rio de Lord Howe
-Australia/Melbourne.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Victoria)
-Australia/Melbourne.generic.long=Hor\u00E1rio do Leste (Victoria)
-Australia/Melbourne.standard.long=Hor\u00E1rio-Padr\u00E3o do Leste (Victoria)
-Australia/NSW.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Nova Gales do Sul)
-Australia/NSW.generic.long=Hor\u00E1rio Oriental (Nova Gales do Sul)
-Australia/NSW.standard.long=Hor\u00E1rio-Padr\u00E3o Oriental (Nova Gales do Sul)
-Australia/North.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Central (Territ\u00F3rio do Norte)
-Australia/North.generic.long=Hor\u00E1rio Central (Territ\u00F3rio do Norte)
-Australia/North.standard.long=Hor\u00E1rio-Padr\u00E3o Central (Territ\u00F3rio do Norte)
-Australia/Perth.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Ocidental (Austr\u00E1lia)
-Australia/Perth.generic.long=Hor\u00E1rio Ocidental (Austr\u00E1lia)
-Australia/Perth.standard.long=Hor\u00E1rio-Padr\u00E3o Ocidental (Austr\u00E1lia)
-Australia/Queensland.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Queensland)
-Australia/Queensland.generic.long=Hor\u00E1rio do Leste (Queensland)
-Australia/Queensland.standard.long=Hor\u00E1rio-Padr\u00E3o do Leste (Queensland)
-Australia/South.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Central (Austr\u00E1lia do Sul)
-Australia/South.generic.long=Hor\u00E1rio Central (Austr\u00E1lia do Sul)
-Australia/South.standard.long=Hor\u00E1rio-Padr\u00E3o Central (Austr\u00E1lia do Sul)
-Australia/Sydney.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Nova Gales do Sul)
-Australia/Sydney.generic.long=Hor\u00E1rio Oriental (Nova Gales do Sul)
-Australia/Sydney.standard.long=Hor\u00E1rio-Padr\u00E3o Oriental (Nova Gales do Sul)
-Australia/Tasmania.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Tasm\u00E2nia)
-Australia/Tasmania.generic.long=Hor\u00E1rio do Leste (Tasm\u00E2nia)
-Australia/Tasmania.standard.long=Hor\u00E1rio-Padr\u00E3o do Leste (Tasm\u00E2nia)
-Australia/Victoria.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Oriental (Victoria)
-Australia/Victoria.generic.long=Hor\u00E1rio do Leste (Victoria)
-Australia/Victoria.standard.long=Hor\u00E1rio-Padr\u00E3o do Leste (Victoria)
-Australia/West.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Ocidental (Austr\u00E1lia)
-Australia/West.generic.long=Hor\u00E1rio Ocidental (Austr\u00E1lia)
-Australia/West.standard.long=Hor\u00E1rio-Padr\u00E3o Ocidental (Austr\u00E1lia)
-Australia/Yancowinna.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o Central (Austr\u00E1lia do Sul/Nova Gales do Sul)
-Australia/Yancowinna.generic.long=Hor\u00E1rio Central (Austr\u00E1lia do Sul/Nova Gales do Sul)
-Australia/Yancowinna.standard.long=Hor\u00E1rio-Padr\u00E3o Central (Austr\u00E1lia do Sul/Nova Gales do Sul)
-BET.generic.long=Hor\u00E1rio de Bras\u00EDlia
-BST.generic.long=Hor\u00E1rio de Bangladesh
-Brazil/Acre.generic.long=Fuso hor\u00e1rio do Acre
-Brazil/DeNoronha.generic.long=Hor\u00E1rio de Fernando de Noronha
-Brazil/East.generic.long=Hor\u00E1rio de Bras\u00EDlia
-Brazil/West.generic.long=Hor\u00E1rio do Amazonas
-CAT.generic.long=Hor\u00E1rio da \u00C1frica Central
-CET.generic.long=Hor\u00e1rio da Europa Central
-CNT.generic.long=Hor\u00E1rio de Terra Nova
-CST.generic.long=Hor\u00E1rio Central
-CST6CDT.generic.long=Hor\u00e1rio Central
-CTT.generic.long=Hor\u00E1rio da China
-Canada/Atlantic.generic.long=Hor\u00E1rio do Atl\u00E2ntico
-Canada/Central.generic.long=Hor\u00E1rio Central
-Canada/East-Saskatchewan.generic.long=Hor\u00E1rio Central
-Canada/Eastern.generic.long=Hor\u00E1rio do Leste
-Canada/Mountain.generic.long=Hor\u00E1rio das Montanhas Rochosas
-Canada/Newfoundland.generic.long=Hor\u00E1rio de Terra Nova
-Canada/Pacific.generic.long=Hor\u00E1rio do Pac\u00EDfico
-Canada/Saskatchewan.generic.long=Hor\u00E1rio Central
-Canada/Yukon.generic.long=Hor\u00E1rio do Pac\u00EDfico
-Chile/Continental.generic.long=Hor\u00E1rio do Chile
-Chile/EasterIsland.generic.long=Hor\u00E1rio da Ilha de P\u00E1scoa
-Cuba.generic.long=Hor\u00E1rio de Cuba
-EAT.generic.long=Hor\u00E1rio do Leste da \u00C1frica
-ECT.generic.long=Hor\u00E1rio da Europa Central
-EET.generic.long=Hor\u00e1rio da Europa Oriental
-EST.generic.long=Hor\u00e1rio do Leste
-EST5EDT.generic.long=Hor\u00e1rio do Leste
-Egypt.generic.long=Hor\u00E1rio da Europa Oriental
-Eire.generic.long=Hor\u00E1rio da Rep\u00FAblica da Irlanda
-Etc/Greenwich.generic.long=Hor\u00E1rio M\u00E9dio de Greenwich
-Etc/UCT.generic.long=Hor\u00E1rio Universal Coordenado
-Etc/UTC.generic.long=Hor\u00E1rio Universal Coordenado
-Etc/Universal.generic.long=Hor\u00E1rio Universal Coordenado
-Etc/Zulu.generic.long=Hor\u00E1rio Universal Coordenado
-Europe/Amsterdam.generic.long=Hor\u00E1rio da Europa Central
-Europe/Andorra.generic.long=Hor\u00E1rio da Europa Central
-Europe/Athens.generic.long=Hor\u00E1rio da Europa Oriental
-Europe/Belfast.generic.long=Hor\u00E1rio do Reino Unido
-Europe/Belgrade.generic.long=Hor\u00E1rio da Europa Central
-Europe/Berlin.generic.long=Hor\u00E1rio da Europa Central
-Europe/Bratislava.generic.long=Hor\u00E1rio da Europa Central
-Europe/Brussels.generic.long=Hor\u00E1rio da Europa Central
-Europe/Bucharest.generic.long=Hor\u00E1rio da Europa Oriental
-Europe/Budapest.generic.long=Hor\u00E1rio da Europa Central
-Europe/Busingen.generic.long=Hor\u00E1rio da Europa Central
-Europe/Chisinau.generic.long=Hor\u00E1rio da Europa Oriental
-Europe/Copenhagen.generic.long=Hor\u00E1rio da Europa Central
-Europe/Dublin.generic.long=Hor\u00E1rio da Rep\u00FAblica da Irlanda
-Europe/Gibraltar.generic.long=Hor\u00E1rio da Europa Central
-Europe/Guernsey.generic.long=Hor\u00E1rio do Reino Unido
-Europe/Helsinki.generic.long=Hor\u00E1rio da Europa Oriental
-Europe/Isle_of_Man.generic.long=Hor\u00E1rio do Reino Unido
-Europe/Istanbul.generic.long=Hor\u00E1rio da Europa Oriental
-Europe/Jersey.generic.long=Hor\u00E1rio do Reino Unido
-Europe/Kaliningrad.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o do Extremo Leste Europeu
-Europe/Kaliningrad.generic.long=Hor\u00E1rio do Extremo Leste Europeu (FET)
-Europe/Kaliningrad.standard.long=Hor\u00E1rio do Extremo Leste Europeu (FET)
-Europe/Kiev.generic.long=Hor\u00E1rio da Europa Oriental
-Europe/Lisbon.generic.long=Hor\u00E1rio da Europa Ocidental
-Europe/Ljubljana.generic.long=Hor\u00E1rio da Europa Central
-Europe/London.generic.long=Hor\u00E1rio do Reino Unido
-Europe/Luxembourg.generic.long=Hor\u00E1rio da Europa Central
-Europe/Madrid.generic.long=Hor\u00E1rio da Europa Central
-Europe/Malta.generic.long=Hor\u00E1rio da Europa Central
-Europe/Mariehamn.generic.long=Hor\u00E1rio da Europa Oriental
-Europe/Minsk.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o do Extremo Leste Europeu
-Europe/Minsk.generic.long=Hor\u00E1rio do Extremo Leste Europeu (FET)
-Europe/Minsk.standard.long=Hor\u00E1rio do Extremo Leste Europeu (FET)
-Europe/Monaco.generic.long=Hor\u00E1rio da Europa Central
-Europe/Moscow.generic.long=Hor\u00E1rio de Moscou
-Europe/Nicosia.generic.long=Hor\u00E1rio da Europa Oriental
-Europe/Oslo.generic.long=Hor\u00E1rio da Europa Central
-Europe/Paris.generic.long=Hor\u00E1rio da Europa Central
-Europe/Podgorica.generic.long=Hor\u00E1rio da Europa Central
-Europe/Prague.generic.long=Hor\u00E1rio da Europa Central
-Europe/Riga.generic.long=Hor\u00E1rio da Europa Oriental
-Europe/Rome.generic.long=Hor\u00E1rio da Europa Central
-Europe/Samara.generic.long=Hor\u00E1rio de Samara
-Europe/San_Marino.generic.long=Hor\u00E1rio da Europa Central
-Europe/Sarajevo.generic.long=Hor\u00E1rio da Europa Central
-Europe/Simferopol.generic.long=Hor\u00E1rio da Europa Oriental
-Europe/Skopje.generic.long=Hor\u00E1rio da Europa Central
-Europe/Sofia.generic.long=Hor\u00E1rio da Europa Oriental
-Europe/Stockholm.generic.long=Hor\u00E1rio da Europa Central
-Europe/Tallinn.generic.long=Hor\u00E1rio da Europa Oriental
-Europe/Tirane.generic.long=Hor\u00E1rio da Europa Central
-Europe/Tiraspol.generic.long=Hor\u00E1rio da Europa Oriental
-Europe/Uzhgorod.generic.long=Hor\u00E1rio da Europa Oriental
-Europe/Vaduz.generic.long=Hor\u00E1rio da Europa Central
-Europe/Vatican.generic.long=Hor\u00E1rio da Europa Central
-Europe/Vienna.generic.long=Hor\u00E1rio da Europa Central
-Europe/Vilnius.generic.long=Hor\u00E1rio da Europa Oriental
-Europe/Volgograd.generic.long=Hor\u00E1rio de Volgogrado
-Europe/Warsaw.generic.long=Hor\u00E1rio da Europa Central
-Europe/Zagreb.generic.long=Hor\u00E1rio da Europa Central
-Europe/Zaporozhye.generic.long=Hor\u00E1rio da Europa Oriental
-Europe/Zurich.generic.long=Hor\u00E1rio da Europa Central
-GB-Eire.generic.long=Hor\u00E1rio do Reino Unido
-GB.generic.long=Hor\u00E1rio do Reino Unido
-GMT.generic.long=Hor\u00E1rio M\u00E9dio de Greenwich
-Greenwich.generic.long=Hor\u00E1rio M\u00E9dio de Greenwich
-HST.generic.long=Hor\u00e1rio do Hava\u00ed
-Hongkong.generic.long=Hor\u00E1rio de Hong Kong
-IET.generic.long=Hor\u00E1rio do Leste
-IST.generic.long=Hor\u00E1rio da \u00CDndia
-Iceland.generic.long=Hor\u00E1rio M\u00E9dio de Greenwich
-Indian/Antananarivo.generic.long=Hor\u00E1rio do Leste da \u00C1frica
-Indian/Chagos.generic.long=Hor\u00E1rio do Territ\u00F3rio do Oceano \u00CDndico
-Indian/Christmas.generic.long=Hor\u00E1rio da Ilha Christmas
-Indian/Cocos.generic.long=Hor\u00E1rio das Ilhas Cocos
-Indian/Comoro.generic.long=Hor\u00E1rio do Leste da \u00C1frica
-Indian/Kerguelen.generic.long=Hor\u00E1rio do Territ\u00F3rio Franc\u00EAs no Sul da Ant\u00E1rtica
-Indian/Mahe.generic.long=Hor\u00E1rio de Seychelles
-Indian/Maldives.generic.long=Hor\u00E1rio das Maldivas
-Indian/Mauritius.generic.long=Hor\u00E1rio de Maur\u00EDcio
-Indian/Mayotte.generic.long=Hor\u00E1rio do Leste da \u00C1frica
-Indian/Reunion.generic.long=Hor\u00E1rio das Ilhas Reuni\u00E3o
-Iran.generic.long=Hor\u00E1rio do Ir\u00E3
-Israel.generic.long=Hor\u00E1rio de Israel
-JST.generic.long=Hor\u00E1rio do Jap\u00E3o
-Jamaica.generic.long=Hor\u00E1rio do Leste
-Japan.generic.long=Hor\u00E1rio do Jap\u00E3o
-Kwajalein.generic.long=Hor\u00E1rio das Ilhas Marshall
-Libya.generic.long=Hor\u00e1rio da Europa Oriental
-MET.generic.long=MET
-MIT.generic.long=Fuso Hor\u00E1rio de Samoa Ocidental
-MST.generic.long=Hor\u00e1rio das Montanhas Rochosas
-MST7MDT.generic.long=Hor\u00e1rio das Montanhas Rochosas
-Mexico/BajaNorte.generic.long=Hor\u00E1rio do Pac\u00EDfico
-Mexico/BajaSur.generic.long=Hor\u00E1rio das Montanhas Rochosas
-Mexico/General.generic.long=Hor\u00E1rio Central
-NET.generic.long=Hor\u00E1rio da Arm\u00EAnia
-NST.generic.long=Hor\u00E1rio da Nova Zel\u00E2ndia
-NZ-CHAT.generic.long=Hor\u00E1rio de Chatham
-NZ.generic.long=Hor\u00E1rio da Nova Zel\u00E2ndia
-Navajo.generic.long=Hor\u00E1rio das Montanhas Rochosas
-PLT.generic.long=Hor\u00E1rio do Paquist\u00E3o
-PNT.generic.long=Hor\u00E1rio das Montanhas Rochosas
-PRC.generic.long=Hor\u00E1rio da China
-PRT.generic.long=Hor\u00E1rio do Atl\u00E2ntico
-PST.generic.long=Hor\u00E1rio do Pac\u00EDfico
-PST8PDT.generic.long=Hor\u00e1rio do Pac\u00edfico
-Pacific/Apia.generic.long=Fuso Hor\u00E1rio de Samoa Ocidental
-Pacific/Auckland.generic.long=Hor\u00E1rio da Nova Zel\u00E2ndia
-Pacific/Chatham.generic.long=Hor\u00E1rio de Chatham
-Pacific/Chuuk.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o de Chuuk
-Pacific/Chuuk.generic.long=Fuso Hor\u00E1rio de Chuuk
-Pacific/Chuuk.standard.long=Fuso Hor\u00E1rio de Chuuk
-Pacific/Easter.generic.long=Hor\u00E1rio da Ilha de P\u00E1scoa
-Pacific/Efate.generic.long=Hor\u00E1rio de Vanuatu
-Pacific/Enderbury.generic.long=Hor\u00E1rio da Ilha Phoenix
-Pacific/Fakaofo.generic.long=Hor\u00E1rio de Toquelau
-Pacific/Fiji.generic.long=Hor\u00E1rio de Fiji
-Pacific/Funafuti.generic.long=Hor\u00E1rio de Tuvalu
-Pacific/Galapagos.generic.long=Hor\u00E1rio de Gal\u00E1pagos
-Pacific/Gambier.generic.long=Hor\u00E1rio de Gambier
-Pacific/Guadalcanal.generic.long=Hor\u00E1rio das Ilhas Salom\u00E3o
-Pacific/Guam.generic.long=Hor\u00E1rio de Chamorro
-Pacific/Honolulu.generic.long=Hor\u00E1rio do Hava\u00ED
-Pacific/Johnston.generic.long=Hor\u00E1rio do Hava\u00ED
-Pacific/Kiritimati.generic.long=Hor\u00E1rio das Ilhas Line
-Pacific/Kosrae.generic.long=Hor\u00E1rio de Kosrae
-Pacific/Kwajalein.generic.long=Hor\u00E1rio das Ilhas Marshall
-Pacific/Majuro.generic.long=Hor\u00E1rio das Ilhas Marshall
-Pacific/Marquesas.generic.long=Hor\u00E1rio das Ilhas Marquesas
-Pacific/Midway.generic.long=Hor\u00E1rio da Samoa
-Pacific/Nauru.generic.long=Hor\u00E1rio de Nauru
-Pacific/Niue.generic.long=Hor\u00E1rio de Niue
-Pacific/Norfolk.generic.long=Hor\u00E1rio de Norfolk
-Pacific/Noumea.generic.long=Hor\u00E1rio da Nova Caled\u00F4nia
-Pacific/Pago_Pago.generic.long=Hor\u00E1rio da Samoa
-Pacific/Palau.generic.long=Hor\u00E1rio de Palau
-Pacific/Pitcairn.generic.long=Hor\u00E1rio de Pitcairn
-Pacific/Pohnpei.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o de Pohnpei
-Pacific/Pohnpei.generic.long=Hor\u00E1rio de Ponape
-Pacific/Pohnpei.standard.long=Fuso Hor\u00E1rio de Pohnpei
-Pacific/Ponape.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o de Pohnpei
-Pacific/Ponape.generic.long=Hor\u00E1rio de Ponape
-Pacific/Ponape.standard.long=Fuso Hor\u00E1rio de Pohnpei
-Pacific/Port_Moresby.generic.long=Hor\u00E1rio de Papua-Nova Guin\u00E9
-Pacific/Rarotonga.generic.long=Hor\u00E1rio das Ilhas Cook
-Pacific/Saipan.generic.long=Hor\u00E1rio de Chamorro
-Pacific/Samoa.generic.long=Hor\u00E1rio da Samoa
-Pacific/Tahiti.generic.long=Hor\u00E1rio do Tahiti
-Pacific/Tarawa.generic.long=Hor\u00E1rio das Ilhas Gilbert
-Pacific/Tongatapu.generic.long=Hor\u00E1rio de Tonga
-Pacific/Truk.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o de Chuuk
-Pacific/Truk.generic.long=Fuso Hor\u00E1rio de Chuuk
-Pacific/Truk.standard.long=Fuso Hor\u00E1rio de Chuuk
-Pacific/Wake.generic.long=Hor\u00E1rio de Wake
-Pacific/Wallis.generic.long=Hor\u00E1rio das Ilhas Wallis e Futuna
-Pacific/Yap.daylight.long=Fuso Hor\u00E1rio de Ver\u00E3o de Chuuk
-Pacific/Yap.generic.long=Fuso Hor\u00E1rio de Chuuk
-Pacific/Yap.standard.long=Fuso Hor\u00E1rio de Chuuk
-Poland.generic.long=Hor\u00E1rio da Europa Central
-Portugal.generic.long=Hor\u00E1rio da Europa Ocidental
-ROK.generic.long=Hor\u00E1rio da Coreia
-SST.generic.long=Hor\u00E1rio das Ilhas Salom\u00E3o
-Singapore.generic.long=Hor\u00E1rio de Cingapura
-SystemV/AST4.generic.long=Hor\u00E1rio do Atl\u00E2ntico
-SystemV/AST4ADT.generic.long=Hor\u00E1rio do Atl\u00E2ntico
-SystemV/CST6.generic.long=Hor\u00E1rio Central
-SystemV/CST6CDT.generic.long=Hor\u00E1rio Central
-SystemV/EST5.generic.long=Hor\u00E1rio do Leste
-SystemV/EST5EDT.generic.long=Hor\u00E1rio do Leste
-SystemV/HST10.generic.long=Hor\u00E1rio do Hava\u00ED
-SystemV/MST7.generic.long=Hor\u00E1rio das Montanhas Rochosas
-SystemV/MST7MDT.generic.long=Hor\u00E1rio das Montanhas Rochosas
-SystemV/PST8.generic.long=Hor\u00E1rio do Pac\u00EDfico
-SystemV/PST8PDT.generic.long=Hor\u00E1rio do Pac\u00EDfico
-SystemV/YST9.generic.long=Hor\u00E1rio do Alasca
-SystemV/YST9YDT.generic.long=Hor\u00E1rio do Alasca
-Turkey.generic.long=Hor\u00E1rio da Europa Oriental
-UCT.generic.long=Hor\u00E1rio Universal Coordenado
-US/Alaska.generic.long=Hor\u00E1rio do Alasca
-US/Aleutian.generic.long=Hor\u00E1rio do Hava\u00ED-Aleutas
-US/Arizona.generic.long=Hor\u00E1rio das Montanhas Rochosas
-US/Central.generic.long=Hor\u00E1rio Central
-US/East-Indiana.generic.long=Hor\u00E1rio do Leste
-US/Eastern.generic.long=Hor\u00E1rio do Leste
-US/Hawaii.generic.long=Hor\u00E1rio do Hava\u00ED
-US/Indiana-Starke.generic.long=Hor\u00E1rio Central
-US/Michigan.generic.long=Hor\u00E1rio do Leste
-US/Mountain.generic.long=Hor\u00E1rio das Montanhas Rochosas
-US/Pacific-New.generic.long=Hor\u00E1rio do Pac\u00EDfico
-US/Pacific.generic.long=Hor\u00E1rio do Pac\u00EDfico
-US/Samoa.generic.long=Hor\u00E1rio da Samoa
-UTC.generic.long=Hor\u00E1rio Universal Coordenado
-Universal.generic.long=Hor\u00E1rio Universal Coordenado
-VST.generic.long=Hor\u00E1rio da Indochina
-W-SU.generic.long=Hor\u00E1rio de Moscou
-WET.generic.long=Hor\u00e1rio da Europa Ocidental
-Zulu.generic.long=Hor\u00E1rio Universal Coordenado
diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_pt_BR_short.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_pt_BR_short.properties
deleted file mode 100644
index 095522a..0000000
--- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_pt_BR_short.properties
+++ /dev/null
@@ -1,1743 +0,0 @@
-ACT.daylight.short=CST
-ACT.generic.short=CT
-ACT.standard.short=CST
-AET.daylight.short=EST
-AET.generic.short=ET
-AET.standard.short=EST
-Africa/Abidjan.daylight.short=GMT
-Africa/Abidjan.generic.short=GMT
-Africa/Abidjan.standard.short=GMT
-Africa/Accra.daylight.short=GHST
-Africa/Accra.generic.short=GMT
-Africa/Accra.standard.short=GMT
-Africa/Addis_Ababa.daylight.short=EAST
-Africa/Addis_Ababa.generic.short=EAT
-Africa/Addis_Ababa.standard.short=EAT
-Africa/Algiers.daylight.short=CEST
-Africa/Algiers.generic.short=CET
-Africa/Algiers.standard.short=CET
-Africa/Asmara.daylight.short=EAST
-Africa/Asmara.generic.short=EAT
-Africa/Asmara.standard.short=EAT
-Africa/Asmera.daylight.short=EAST
-Africa/Asmera.generic.short=EAT
-Africa/Asmera.standard.short=EAT
-Africa/Bamako.daylight.short=GMT
-Africa/Bamako.generic.short=GMT
-Africa/Bamako.standard.short=GMT
-Africa/Bangui.daylight.short=WAST
-Africa/Bangui.generic.short=WAT
-Africa/Bangui.standard.short=WAT
-Africa/Banjul.daylight.short=GMT
-Africa/Banjul.generic.short=GMT
-Africa/Banjul.standard.short=GMT
-Africa/Bissau.daylight.short=GMT
-Africa/Bissau.generic.short=GMT
-Africa/Bissau.standard.short=GMT
-Africa/Blantyre.daylight.short=CAST
-Africa/Blantyre.generic.short=CAT
-Africa/Blantyre.standard.short=CAT
-Africa/Brazzaville.daylight.short=WAST
-Africa/Brazzaville.generic.short=WAT
-Africa/Brazzaville.standard.short=WAT
-Africa/Bujumbura.daylight.short=CAST
-Africa/Bujumbura.generic.short=CAT
-Africa/Bujumbura.standard.short=CAT
-Africa/Cairo.daylight.short=EEST
-Africa/Cairo.generic.short=EET
-Africa/Cairo.standard.short=EET
-Africa/Casablanca.daylight.short=WEST
-Africa/Casablanca.generic.short=WET
-Africa/Casablanca.standard.short=WET
-Africa/Ceuta.daylight.short=CEST
-Africa/Ceuta.generic.short=CET
-Africa/Ceuta.standard.short=CET
-Africa/Conakry.daylight.short=GMT
-Africa/Conakry.generic.short=GMT
-Africa/Conakry.standard.short=GMT
-Africa/Dakar.daylight.short=GMT
-Africa/Dakar.generic.short=GMT
-Africa/Dakar.standard.short=GMT
-Africa/Dar_es_Salaam.daylight.short=EAST
-Africa/Dar_es_Salaam.generic.short=EAT
-Africa/Dar_es_Salaam.standard.short=EAT
-Africa/Djibouti.daylight.short=EAST
-Africa/Djibouti.generic.short=EAT
-Africa/Djibouti.standard.short=EAT
-Africa/Douala.daylight.short=WAST
-Africa/Douala.generic.short=WAT
-Africa/Douala.standard.short=WAT
-Africa/El_Aaiun.daylight.short=WEST
-Africa/El_Aaiun.generic.short=WET
-Africa/El_Aaiun.standard.short=WET
-Africa/Freetown.daylight.short=SLST
-Africa/Freetown.generic.short=SLT
-Africa/Freetown.standard.short=GMT
-Africa/Gaborone.daylight.short=CAST
-Africa/Gaborone.generic.short=CAT
-Africa/Gaborone.standard.short=CAT
-Africa/Harare.daylight.short=CAST
-Africa/Harare.generic.short=CAT
-Africa/Harare.standard.short=CAT
-Africa/Johannesburg.daylight.short=SAST
-Africa/Johannesburg.generic.short=SAT
-Africa/Johannesburg.standard.short=SAST
-Africa/Juba.daylight.short=EAST
-Africa/Juba.generic.short=EAT
-Africa/Juba.standard.short=EAT
-Africa/Kampala.daylight.short=EAST
-Africa/Kampala.generic.short=EAT
-Africa/Kampala.standard.short=EAT
-Africa/Khartoum.daylight.short=EAST
-Africa/Khartoum.generic.short=EAT
-Africa/Khartoum.standard.short=EAT
-Africa/Kigali.daylight.short=CAST
-Africa/Kigali.generic.short=CAT
-Africa/Kigali.standard.short=CAT
-Africa/Kinshasa.daylight.short=WAST
-Africa/Kinshasa.generic.short=WAT
-Africa/Kinshasa.standard.short=WAT
-Africa/Lagos.daylight.short=WAST
-Africa/Lagos.generic.short=WAT
-Africa/Lagos.standard.short=WAT
-Africa/Libreville.daylight.short=WAST
-Africa/Libreville.generic.short=WAT
-Africa/Libreville.standard.short=WAT
-Africa/Lome.daylight.short=GMT
-Africa/Lome.generic.short=GMT
-Africa/Lome.standard.short=GMT
-Africa/Luanda.daylight.short=WAST
-Africa/Luanda.generic.short=WAT
-Africa/Luanda.standard.short=WAT
-Africa/Lubumbashi.daylight.short=CAST
-Africa/Lubumbashi.generic.short=CAT
-Africa/Lubumbashi.standard.short=CAT
-Africa/Lusaka.daylight.short=CAST
-Africa/Lusaka.generic.short=CAT
-Africa/Lusaka.standard.short=CAT
-Africa/Malabo.daylight.short=WAST
-Africa/Malabo.generic.short=WAT
-Africa/Malabo.standard.short=WAT
-Africa/Maputo.daylight.short=CAST
-Africa/Maputo.generic.short=CAT
-Africa/Maputo.standard.short=CAT
-Africa/Maseru.daylight.short=SAST
-Africa/Maseru.generic.short=SAT
-Africa/Maseru.standard.short=SAST
-Africa/Mbabane.daylight.short=SAST
-Africa/Mbabane.generic.short=SAT
-Africa/Mbabane.standard.short=SAST
-Africa/Mogadishu.daylight.short=EAST
-Africa/Mogadishu.generic.short=EAT
-Africa/Mogadishu.standard.short=EAT
-Africa/Monrovia.daylight.short=GMT
-Africa/Monrovia.generic.short=GMT
-Africa/Monrovia.standard.short=GMT
-Africa/Nairobi.daylight.short=EAST
-Africa/Nairobi.generic.short=EAT
-Africa/Nairobi.standard.short=EAT
-Africa/Ndjamena.daylight.short=WAST
-Africa/Ndjamena.generic.short=WAT
-Africa/Ndjamena.standard.short=WAT
-Africa/Niamey.daylight.short=WAST
-Africa/Niamey.generic.short=WAT
-Africa/Niamey.standard.short=WAT
-Africa/Nouakchott.daylight.short=GMT
-Africa/Nouakchott.generic.short=GMT
-Africa/Nouakchott.standard.short=GMT
-Africa/Ouagadougou.daylight.short=GMT
-Africa/Ouagadougou.generic.short=GMT
-Africa/Ouagadougou.standard.short=GMT
-Africa/Porto-Novo.daylight.short=WAST
-Africa/Porto-Novo.generic.short=WAT
-Africa/Porto-Novo.standard.short=WAT
-Africa/Sao_Tome.daylight.short=GMT
-Africa/Sao_Tome.generic.short=GMT
-Africa/Sao_Tome.standard.short=GMT
-Africa/Timbuktu.daylight.short=GMT
-Africa/Timbuktu.generic.short=GMT
-Africa/Timbuktu.standard.short=GMT
-Africa/Tripoli.daylight.short=EEST
-Africa/Tripoli.generic.short=EET
-Africa/Tripoli.standard.short=EET
-Africa/Tunis.daylight.short=CEST
-Africa/Tunis.generic.short=CET
-Africa/Tunis.standard.short=CET
-Africa/Windhoek.daylight.short=WAST
-Africa/Windhoek.generic.short=WAT
-Africa/Windhoek.standard.short=WAT
-AGT.daylight.short=ARST
-AGT.generic.short=ART
-AGT.standard.short=ART
-America/Adak.daylight.short=HADT
-America/Adak.generic.short=HAT
-America/Adak.standard.short=HAST
-America/Anchorage.daylight.short=AKDT
-America/Anchorage.generic.short=AKT
-America/Anchorage.standard.short=AKST
-America/Anguilla.daylight.short=ADT
-America/Anguilla.generic.short=AT
-America/Anguilla.standard.short=AST
-America/Antigua.daylight.short=ADT
-America/Antigua.generic.short=AT
-America/Antigua.standard.short=AST
-America/Araguaina.daylight.short=BRST
-America/Araguaina.generic.short=BRT
-America/Araguaina.standard.short=BRT
-America/Argentina/Buenos_Aires.daylight.short=ARST
-America/Argentina/Buenos_Aires.generic.short=ART
-America/Argentina/Buenos_Aires.standard.short=ART
-America/Argentina/Catamarca.daylight.short=ARST
-America/Argentina/Catamarca.generic.short=ART
-America/Argentina/Catamarca.standard.short=ART
-America/Argentina/ComodRivadavia.daylight.short=ARST
-America/Argentina/ComodRivadavia.generic.short=ART
-America/Argentina/ComodRivadavia.standard.short=ART
-America/Argentina/Cordoba.daylight.short=ARST
-America/Argentina/Cordoba.generic.short=ART
-America/Argentina/Cordoba.standard.short=ART
-America/Argentina/Jujuy.daylight.short=ARST
-America/Argentina/Jujuy.generic.short=ART
-America/Argentina/Jujuy.standard.short=ART
-America/Argentina/La_Rioja.daylight.short=ARST
-America/Argentina/La_Rioja.generic.short=ART
-America/Argentina/La_Rioja.standard.short=ART
-America/Argentina/Mendoza.daylight.short=ARST
-America/Argentina/Mendoza.generic.short=ART
-America/Argentina/Mendoza.standard.short=ART
-America/Argentina/Rio_Gallegos.daylight.short=ARST
-America/Argentina/Rio_Gallegos.generic.short=ART
-America/Argentina/Rio_Gallegos.standard.short=ART
-America/Argentina/Salta.daylight.short=ARST
-America/Argentina/Salta.generic.short=ART
-America/Argentina/Salta.standard.short=ART
-America/Argentina/San_Juan.daylight.short=ARST
-America/Argentina/San_Juan.generic.short=ART
-America/Argentina/San_Juan.standard.short=ART
-America/Argentina/San_Luis.daylight.short=ARST
-America/Argentina/San_Luis.generic.short=ART
-America/Argentina/San_Luis.standard.short=ART
-America/Argentina/Tucuman.daylight.short=ARST
-America/Argentina/Tucuman.generic.short=ART
-America/Argentina/Tucuman.standard.short=ART
-America/Argentina/Ushuaia.daylight.short=ARST
-America/Argentina/Ushuaia.generic.short=ART
-America/Argentina/Ushuaia.standard.short=ART
-America/Aruba.daylight.short=ADT
-America/Aruba.generic.short=AT
-America/Aruba.standard.short=AST
-America/Asuncion.daylight.short=PYST
-America/Asuncion.generic.short=PYT
-America/Asuncion.standard.short=PYT
-America/Atikokan.daylight.short=EDT
-America/Atikokan.generic.short=ET
-America/Atikokan.standard.short=EST
-America/Atka.daylight.short=HADT
-America/Atka.generic.short=HAT
-America/Atka.standard.short=HAST
-America/Bahia_Banderas.daylight.short=CDT
-America/Bahia_Banderas.generic.short=CT
-America/Bahia_Banderas.standard.short=CST
-America/Bahia.daylight.short=BRST
-America/Bahia.generic.short=BRT
-America/Bahia.standard.short=BRT
-America/Barbados.daylight.short=ADT
-America/Barbados.generic.short=AT
-America/Barbados.standard.short=AST
-America/Belem.daylight.short=BRST
-America/Belem.generic.short=BRT
-America/Belem.standard.short=BRT
-America/Belize.daylight.short=CDT
-America/Belize.generic.short=CT
-America/Belize.standard.short=CST
-America/Blanc-Sablon.daylight.short=ADT
-America/Blanc-Sablon.generic.short=AT
-America/Blanc-Sablon.standard.short=AST
-America/Boa_Vista.daylight.short=AMST
-America/Boa_Vista.generic.short=AMT
-America/Boa_Vista.standard.short=AMT
-America/Bogota.daylight.short=COST
-America/Bogota.generic.short=COT
-America/Bogota.standard.short=COT
-America/Boise.daylight.short=MDT
-America/Boise.generic.short=MT
-America/Boise.standard.short=MST
-America/Buenos_Aires.daylight.short=ARST
-America/Buenos_Aires.generic.short=ART
-America/Buenos_Aires.standard.short=ART
-America/Cambridge_Bay.daylight.short=MDT
-America/Cambridge_Bay.generic.short=MT
-America/Cambridge_Bay.standard.short=MST
-America/Campo_Grande.daylight.short=AMST
-America/Campo_Grande.generic.short=AMT
-America/Campo_Grande.standard.short=AMT
-America/Cancun.daylight.short=CDT
-America/Cancun.generic.short=CT
-America/Cancun.standard.short=CST
-America/Caracas.daylight.short=VEST
-America/Caracas.generic.short=VET
-America/Caracas.standard.short=VET
-America/Catamarca.daylight.short=ARST
-America/Catamarca.generic.short=ART
-America/Catamarca.standard.short=ART
-America/Cayenne.daylight.short=GFST
-America/Cayenne.generic.short=GFT
-America/Cayenne.standard.short=GFT
-America/Cayman.daylight.short=EDT
-America/Cayman.generic.short=ET
-America/Cayman.standard.short=EST
-America/Chicago.daylight.short=CDT
-America/Chicago.generic.short=CT
-America/Chicago.standard.short=CST
-America/Chihuahua.daylight.short=MDT
-America/Chihuahua.generic.short=MT
-America/Chihuahua.standard.short=MST
-America/Coral_Harbour.daylight.short=EDT
-America/Coral_Harbour.generic.short=ET
-America/Coral_Harbour.standard.short=EST
-America/Cordoba.daylight.short=ARST
-America/Cordoba.generic.short=ART
-America/Cordoba.standard.short=ART
-America/Costa_Rica.daylight.short=CDT
-America/Costa_Rica.generic.short=CT
-America/Costa_Rica.standard.short=CST
-America/Creston.daylight.short=MDT
-America/Creston.generic.short=MT
-America/Creston.standard.short=MST
-America/Cuiaba.daylight.short=AMST
-America/Cuiaba.generic.short=AMT
-America/Cuiaba.standard.short=AMT
-America/Curacao.daylight.short=ADT
-America/Curacao.generic.short=AT
-America/Curacao.standard.short=AST
-America/Danmarkshavn.daylight.short=GMT
-America/Danmarkshavn.generic.short=GMT
-America/Danmarkshavn.standard.short=GMT
-America/Dawson_Creek.daylight.short=MDT
-America/Dawson_Creek.generic.short=MT
-America/Dawson_Creek.standard.short=MST
-America/Dawson.daylight.short=PDT
-America/Dawson.generic.short=PT
-America/Dawson.standard.short=PST
-America/Denver.daylight.short=MDT
-America/Denver.generic.short=MT
-America/Denver.standard.short=MST
-America/Detroit.daylight.short=EDT
-America/Detroit.generic.short=ET
-America/Detroit.standard.short=EST
-America/Dominica.daylight.short=ADT
-America/Dominica.generic.short=AT
-America/Dominica.standard.short=AST
-America/Edmonton.daylight.short=MDT
-America/Edmonton.generic.short=MT
-America/Edmonton.standard.short=MST
-America/Eirunepe.daylight.short=ACST
-America/Eirunepe.generic.short=ACT
-America/Eirunepe.standard.short=ACT
-America/El_Salvador.daylight.short=CDT
-America/El_Salvador.generic.short=CT
-America/El_Salvador.standard.short=CST
-America/Ensenada.daylight.short=PDT
-America/Ensenada.generic.short=PT
-America/Ensenada.standard.short=PST
-America/Fortaleza.daylight.short=BRST
-America/Fortaleza.generic.short=BRT
-America/Fortaleza.standard.short=BRT
-America/Fort_Wayne.daylight.short=EDT
-America/Fort_Wayne.generic.short=ET
-America/Fort_Wayne.standard.short=EST
-America/Glace_Bay.daylight.short=ADT
-America/Glace_Bay.generic.short=AT
-America/Glace_Bay.standard.short=AST
-America/Godthab.daylight.short=WGST
-America/Godthab.generic.short=WGT
-America/Godthab.standard.short=WGT
-America/Goose_Bay.daylight.short=ADT
-America/Goose_Bay.generic.short=AT
-America/Goose_Bay.standard.short=AST
-America/Grand_Turk.daylight.short=EDT
-America/Grand_Turk.generic.short=ET
-America/Grand_Turk.standard.short=EST
-America/Grenada.daylight.short=ADT
-America/Grenada.generic.short=AT
-America/Grenada.standard.short=AST
-America/Guadeloupe.daylight.short=ADT
-America/Guadeloupe.generic.short=AT
-America/Guadeloupe.standard.short=AST
-America/Guatemala.daylight.short=CDT
-America/Guatemala.generic.short=CT
-America/Guatemala.standard.short=CST
-America/Guayaquil.daylight.short=ECST
-America/Guayaquil.generic.short=ECT
-America/Guayaquil.standard.short=ECT
-America/Guyana.daylight.short=GYST
-America/Guyana.generic.short=GYT
-America/Guyana.standard.short=GYT
-America/Halifax.daylight.short=ADT
-America/Halifax.generic.short=AT
-America/Halifax.standard.short=AST
-America/Havana.daylight.short=CDT
-America/Havana.generic.short=CT
-America/Havana.standard.short=CST
-America/Hermosillo.daylight.short=MDT
-America/Hermosillo.generic.short=MT
-America/Hermosillo.standard.short=MST
-America/Indiana/Indianapolis.daylight.short=EDT
-America/Indiana/Indianapolis.generic.short=ET
-America/Indiana/Indianapolis.standard.short=EST
-America/Indiana/Knox.daylight.short=CDT
-America/Indiana/Knox.generic.short=CT
-America/Indiana/Knox.standard.short=CST
-America/Indiana/Marengo.daylight.short=EDT
-America/Indiana/Marengo.generic.short=ET
-America/Indiana/Marengo.standard.short=EST
-America/Indiana/Petersburg.daylight.short=EDT
-America/Indiana/Petersburg.generic.short=ET
-America/Indiana/Petersburg.standard.short=EST
-America/Indianapolis.daylight.short=EDT
-America/Indianapolis.generic.short=ET
-America/Indianapolis.standard.short=EST
-America/Indiana/Tell_City.daylight.short=CDT
-America/Indiana/Tell_City.generic.short=CT
-America/Indiana/Tell_City.standard.short=CST
-America/Indiana/Vevay.daylight.short=EDT
-America/Indiana/Vevay.generic.short=ET
-America/Indiana/Vevay.standard.short=EST
-America/Indiana/Vincennes.daylight.short=EDT
-America/Indiana/Vincennes.generic.short=ET
-America/Indiana/Vincennes.standard.short=EST
-America/Indiana/Winamac.daylight.short=EDT
-America/Indiana/Winamac.generic.short=ET
-America/Indiana/Winamac.standard.short=EST
-America/Inuvik.daylight.short=MDT
-America/Inuvik.generic.short=MT
-America/Inuvik.standard.short=MST
-America/Iqaluit.daylight.short=EDT
-America/Iqaluit.generic.short=ET
-America/Iqaluit.standard.short=EST
-America/Jamaica.daylight.short=EDT
-America/Jamaica.generic.short=ET
-America/Jamaica.standard.short=EST
-America/Jujuy.daylight.short=ARST
-America/Jujuy.generic.short=ART
-America/Jujuy.standard.short=ART
-America/Juneau.daylight.short=AKDT
-America/Juneau.generic.short=AKT
-America/Juneau.standard.short=AKST
-America/Kentucky/Louisville.daylight.short=EDT
-America/Kentucky/Louisville.generic.short=ET
-America/Kentucky/Louisville.standard.short=EST
-America/Kentucky/Monticello.daylight.short=EDT
-America/Kentucky/Monticello.generic.short=ET
-America/Kentucky/Monticello.standard.short=EST
-America/Knox_IN.daylight.short=CDT
-America/Knox_IN.generic.short=CT
-America/Knox_IN.standard.short=CST
-America/Kralendijk.daylight.short=ADT
-America/Kralendijk.generic.short=AT
-America/Kralendijk.standard.short=AST
-America/La_Paz.daylight.short=BOST
-America/La_Paz.generic.short=BOT
-America/La_Paz.standard.short=BOT
-America/Lima.daylight.short=PEST
-America/Lima.generic.short=PET
-America/Lima.standard.short=PET
-America/Los_Angeles.daylight.short=PDT
-America/Los_Angeles.generic.short=PT
-America/Los_Angeles.standard.short=PST
-America/Louisville.daylight.short=EDT
-America/Louisville.generic.short=ET
-America/Louisville.standard.short=EST
-America/Lower_Princes.daylight.short=ADT
-America/Lower_Princes.generic.short=AT
-America/Lower_Princes.standard.short=AST
-America/Maceio.daylight.short=BRST
-America/Maceio.generic.short=BRT
-America/Maceio.standard.short=BRT
-America/Managua.daylight.short=CDT
-America/Managua.generic.short=CT
-America/Managua.standard.short=CST
-America/Manaus.daylight.short=AMST
-America/Manaus.generic.short=AMT
-America/Manaus.standard.short=AMT
-America/Marigot.daylight.short=ADT
-America/Marigot.generic.short=AT
-America/Marigot.standard.short=AST
-America/Martinique.daylight.short=ADT
-America/Martinique.generic.short=AT
-America/Martinique.standard.short=AST
-America/Matamoros.daylight.short=CDT
-America/Matamoros.generic.short=CT
-America/Matamoros.standard.short=CST
-America/Mazatlan.daylight.short=MDT
-America/Mazatlan.generic.short=MT
-America/Mazatlan.standard.short=MST
-America/Mendoza.daylight.short=ARST
-America/Mendoza.generic.short=ART
-America/Mendoza.standard.short=ART
-America/Menominee.daylight.short=CDT
-America/Menominee.generic.short=CT
-America/Menominee.standard.short=CST
-America/Merida.daylight.short=CDT
-America/Merida.generic.short=CT
-America/Merida.standard.short=CST
-America/Metlakatla.daylight.short=MeDT
-America/Metlakatla.generic.short=MeT
-America/Metlakatla.standard.short=MeST
-America/Mexico_City.daylight.short=CDT
-America/Mexico_City.generic.short=CT
-America/Mexico_City.standard.short=CST
-America/Miquelon.daylight.short=PMDT
-America/Miquelon.generic.short=PMT
-America/Miquelon.standard.short=PMST
-America/Moncton.daylight.short=ADT
-America/Moncton.generic.short=AT
-America/Moncton.standard.short=AST
-America/Monterrey.daylight.short=CDT
-America/Monterrey.generic.short=CT
-America/Monterrey.standard.short=CST
-America/Montevideo.daylight.short=UYST
-America/Montevideo.generic.short=UYT
-America/Montevideo.standard.short=UYT
-America/Montreal.daylight.short=EDT
-America/Montreal.generic.short=ET
-America/Montreal.standard.short=EST
-America/Montserrat.daylight.short=ADT
-America/Montserrat.generic.short=AT
-America/Montserrat.standard.short=AST
-America/Nassau.daylight.short=EDT
-America/Nassau.generic.short=ET
-America/Nassau.standard.short=EST
-America/New_York.daylight.short=EDT
-America/New_York.generic.short=ET
-America/New_York.standard.short=EST
-America/Nipigon.daylight.short=EDT
-America/Nipigon.generic.short=ET
-America/Nipigon.standard.short=EST
-America/Nome.daylight.short=AKDT
-America/Nome.generic.short=AKT
-America/Nome.standard.short=AKST
-America/Noronha.daylight.short=FNST
-America/Noronha.generic.short=FNT
-America/Noronha.standard.short=FNT
-America/North_Dakota/Beulah.daylight.short=CDT
-America/North_Dakota/Beulah.generic.short=CT
-America/North_Dakota/Beulah.standard.short=CST
-America/North_Dakota/Center.daylight.short=CDT
-America/North_Dakota/Center.generic.short=CT
-America/North_Dakota/Center.standard.short=CST
-America/North_Dakota/New_Salem.daylight.short=CDT
-America/North_Dakota/New_Salem.generic.short=CT
-America/North_Dakota/New_Salem.standard.short=CST
-America/Ojinaga.daylight.short=MDT
-America/Ojinaga.generic.short=MT
-America/Ojinaga.standard.short=MST
-America/Panama.daylight.short=EDT
-America/Panama.generic.short=ET
-America/Panama.standard.short=EST
-America/Pangnirtung.daylight.short=EDT
-America/Pangnirtung.generic.short=ET
-America/Pangnirtung.standard.short=EST
-America/Paramaribo.daylight.short=SRST
-America/Paramaribo.generic.short=SRT
-America/Paramaribo.standard.short=SRT
-America/Phoenix.daylight.short=MDT
-America/Phoenix.generic.short=MT
-America/Phoenix.standard.short=MST
-America/Port-au-Prince.daylight.short=EDT
-America/Port-au-Prince.generic.short=ET
-America/Port-au-Prince.standard.short=EST
-America/Porto_Acre.daylight.short=ACST
-America/Porto_Acre.generic.short=ACT
-America/Porto_Acre.standard.short=ACT
-America/Port_of_Spain.daylight.short=ADT
-America/Port_of_Spain.generic.short=AT
-America/Port_of_Spain.standard.short=AST
-America/Porto_Velho.daylight.short=AMST
-America/Porto_Velho.generic.short=AMT
-America/Porto_Velho.standard.short=AMT
-America/Puerto_Rico.daylight.short=ADT
-America/Puerto_Rico.generic.short=AT
-America/Puerto_Rico.standard.short=AST
-America/Rainy_River.daylight.short=CDT
-America/Rainy_River.generic.short=CT
-America/Rainy_River.standard.short=CST
-America/Rankin_Inlet.daylight.short=CDT
-America/Rankin_Inlet.generic.short=CT
-America/Rankin_Inlet.standard.short=CST
-America/Recife.daylight.short=BRST
-America/Recife.generic.short=BRT
-America/Recife.standard.short=BRT
-America/Regina.daylight.short=CDT
-America/Regina.generic.short=CT
-America/Regina.standard.short=CST
-America/Resolute.daylight.short=CDT
-America/Resolute.generic.short=CT
-America/Resolute.standard.short=CST
-America/Rio_Branco.daylight.short=ACST
-America/Rio_Branco.generic.short=ACT
-America/Rio_Branco.standard.short=ACT
-America/Rosario.daylight.short=ARST
-America/Rosario.generic.short=ART
-America/Rosario.standard.short=ART
-America/Santa_Isabel.daylight.short=PDT
-America/Santa_Isabel.generic.short=PT
-America/Santa_Isabel.standard.short=PST
-America/Santarem.daylight.short=BRST
-America/Santarem.generic.short=BRT
-America/Santarem.standard.short=BRT
-America/Santiago.daylight.short=CLST
-America/Santiago.generic.short=CLT
-America/Santiago.standard.short=CLT
-America/Santo_Domingo.daylight.short=ADT
-America/Santo_Domingo.generic.short=AT
-America/Santo_Domingo.standard.short=AST
-America/Sao_Paulo.daylight.short=BRST
-America/Sao_Paulo.generic.short=BRT
-America/Sao_Paulo.standard.short=BRT
-America/Scoresbysund.daylight.short=EGST
-America/Scoresbysund.generic.short=EGT
-America/Scoresbysund.standard.short=EGT
-America/Shiprock.daylight.short=MDT
-America/Shiprock.generic.short=MT
-America/Shiprock.standard.short=MST
-America/Sitka.daylight.short=AKDT
-America/Sitka.generic.short=AKT
-America/Sitka.standard.short=AKST
-America/St_Barthelemy.daylight.short=ADT
-America/St_Barthelemy.generic.short=AT
-America/St_Barthelemy.standard.short=AST
-America/St_Johns.daylight.short=NDT
-America/St_Johns.generic.short=NT
-America/St_Johns.standard.short=NST
-America/St_Kitts.daylight.short=ADT
-America/St_Kitts.generic.short=AT
-America/St_Kitts.standard.short=AST
-America/St_Lucia.daylight.short=ADT
-America/St_Lucia.generic.short=AT
-America/St_Lucia.standard.short=AST
-America/St_Thomas.daylight.short=ADT
-America/St_Thomas.generic.short=AT
-America/St_Thomas.standard.short=AST
-America/St_Vincent.daylight.short=ADT
-America/St_Vincent.generic.short=AT
-America/St_Vincent.standard.short=AST
-America/Swift_Current.daylight.short=CDT
-America/Swift_Current.generic.short=CT
-America/Swift_Current.standard.short=CST
-America/Tegucigalpa.daylight.short=CDT
-America/Tegucigalpa.generic.short=CT
-America/Tegucigalpa.standard.short=CST
-America/Thule.daylight.short=ADT
-America/Thule.generic.short=AT
-America/Thule.standard.short=AST
-America/Thunder_Bay.daylight.short=EDT
-America/Thunder_Bay.generic.short=ET
-America/Thunder_Bay.standard.short=EST
-America/Tijuana.daylight.short=PDT
-America/Tijuana.generic.short=PT
-America/Tijuana.standard.short=PST
-America/Toronto.daylight.short=EDT
-America/Toronto.generic.short=ET
-America/Toronto.standard.short=EST
-America/Tortola.daylight.short=ADT
-America/Tortola.generic.short=AT
-America/Tortola.standard.short=AST
-America/Vancouver.daylight.short=PDT
-America/Vancouver.generic.short=PT
-America/Vancouver.standard.short=PST
-America/Virgin.daylight.short=ADT
-America/Virgin.generic.short=AT
-America/Virgin.standard.short=AST
-America/Whitehorse.daylight.short=PDT
-America/Whitehorse.generic.short=PT
-America/Whitehorse.standard.short=PST
-America/Winnipeg.daylight.short=CDT
-America/Winnipeg.generic.short=CT
-America/Winnipeg.standard.short=CST
-America/Yakutat.daylight.short=AKDT
-America/Yakutat.generic.short=AKT
-America/Yakutat.standard.short=AKST
-America/Yellowknife.daylight.short=MDT
-America/Yellowknife.generic.short=MT
-America/Yellowknife.standard.short=MST
-Antarctica/Casey.daylight.short=WST
-Antarctica/Casey.generic.short=WT
-Antarctica/Casey.standard.short=WST
-Antarctica/Davis.daylight.short=DAVST
-Antarctica/Davis.generic.short=DAVT
-Antarctica/Davis.standard.short=DAVT
-Antarctica/DumontDUrville.daylight.short=DDUST
-Antarctica/DumontDUrville.generic.short=DDUT
-Antarctica/DumontDUrville.standard.short=DDUT
-Antarctica/Macquarie.daylight.short=MIST
-Antarctica/Macquarie.generic.short=MIST
-Antarctica/Macquarie.standard.short=MIST
-Antarctica/Mawson.daylight.short=MAWST
-Antarctica/Mawson.generic.short=MAWT
-Antarctica/Mawson.standard.short=MAWT
-Antarctica/McMurdo.daylight.short=NZDT
-Antarctica/McMurdo.generic.short=NZT
-Antarctica/McMurdo.standard.short=NZST
-Antarctica/Palmer.daylight.short=CLST
-Antarctica/Palmer.generic.short=CLT
-Antarctica/Palmer.standard.short=CLT
-Antarctica/Rothera.daylight.short=ROTST
-Antarctica/Rothera.generic.short=ROTT
-Antarctica/Rothera.standard.short=ROTT
-Antarctica/South_Pole.daylight.short=NZDT
-Antarctica/South_Pole.generic.short=NZT
-Antarctica/South_Pole.standard.short=NZST
-Antarctica/Syowa.daylight.short=SYOST
-Antarctica/Syowa.generic.short=SYOT
-Antarctica/Syowa.standard.short=SYOT
-Antarctica/Vostok.daylight.short=VOSST
-Antarctica/Vostok.generic.short=VOST
-Antarctica/Vostok.standard.short=VOST
-Arctic/Longyearbyen.daylight.short=CEST
-Arctic/Longyearbyen.generic.short=CET
-Arctic/Longyearbyen.standard.short=CET
-ART.daylight.short=EEST
-ART.generic.short=EET
-ART.standard.short=EET
-Asia/Aden.daylight.short=ADT
-Asia/Aden.generic.short=AT
-Asia/Aden.standard.short=AST
-Asia/Almaty.daylight.short=ALMST
-Asia/Almaty.generic.short=ALMT
-Asia/Almaty.standard.short=ALMT
-Asia/Amman.daylight.short=ADT
-Asia/Amman.generic.short=AT
-Asia/Amman.standard.short=AST
-Asia/Anadyr.daylight.short=ANAST
-Asia/Anadyr.generic.short=ANAT
-Asia/Anadyr.standard.short=ANAT
-Asia/Aqtau.daylight.short=AQTST
-Asia/Aqtau.generic.short=AQTT
-Asia/Aqtau.standard.short=AQTT
-Asia/Aqtobe.daylight.short=AQTST
-Asia/Aqtobe.generic.short=AQTT
-Asia/Aqtobe.standard.short=AQTT
-Asia/Ashgabat.daylight.short=TMST
-Asia/Ashgabat.generic.short=TMT
-Asia/Ashgabat.standard.short=TMT
-Asia/Ashkhabad.daylight.short=TMST
-Asia/Ashkhabad.generic.short=TMT
-Asia/Ashkhabad.standard.short=TMT
-Asia/Baghdad.daylight.short=ADT
-Asia/Baghdad.generic.short=AT
-Asia/Baghdad.standard.short=AST
-Asia/Bahrain.daylight.short=ADT
-Asia/Bahrain.generic.short=AT
-Asia/Bahrain.standard.short=AST
-Asia/Baku.daylight.short=AZST
-Asia/Baku.generic.short=AZT
-Asia/Baku.standard.short=AZT
-Asia/Bangkok.daylight.short=ICST
-Asia/Bangkok.generic.short=ICT
-Asia/Bangkok.standard.short=ICT
-Asia/Beirut.daylight.short=EEST
-Asia/Beirut.generic.short=EET
-Asia/Beirut.standard.short=EET
-Asia/Bishkek.daylight.short=KGST
-Asia/Bishkek.generic.short=KGT
-Asia/Bishkek.standard.short=KGT
-Asia/Brunei.daylight.short=BNST
-Asia/Brunei.generic.short=BNT
-Asia/Brunei.standard.short=BNT
-Asia/Calcutta.daylight.short=IDT
-Asia/Calcutta.generic.short=IT
-Asia/Calcutta.standard.short=IST
-Asia/Choibalsan.daylight.short=CHOST
-Asia/Choibalsan.generic.short=CHOT
-Asia/Choibalsan.standard.short=CHOT
-Asia/Chongqing.daylight.short=CDT
-Asia/Chongqing.generic.short=CT
-Asia/Chongqing.standard.short=CST
-Asia/Chungking.daylight.short=CDT
-Asia/Chungking.generic.short=CT
-Asia/Chungking.standard.short=CST
-Asia/Colombo.daylight.short=IDT
-Asia/Colombo.generic.short=IT
-Asia/Colombo.standard.short=IST
-Asia/Dacca.daylight.short=BDST
-Asia/Dacca.generic.short=BDT
-Asia/Dacca.standard.short=BDT
-Asia/Damascus.daylight.short=EEST
-Asia/Damascus.generic.short=EET
-Asia/Damascus.standard.short=EET
-Asia/Dhaka.daylight.short=BDST
-Asia/Dhaka.generic.short=BDT
-Asia/Dhaka.standard.short=BDT
-Asia/Dili.daylight.short=TLST
-Asia/Dili.generic.short=TLT
-Asia/Dili.standard.short=TLT
-Asia/Dubai.daylight.short=GDT
-Asia/Dubai.generic.short=GT
-Asia/Dubai.standard.short=GST
-Asia/Dushanbe.daylight.short=TJST
-Asia/Dushanbe.generic.short=TJT
-Asia/Dushanbe.standard.short=TJT
-Asia/Gaza.daylight.short=EEST
-Asia/Gaza.generic.short=EET
-Asia/Gaza.standard.short=EET
-Asia/Harbin.daylight.short=CDT
-Asia/Harbin.generic.short=CT
-Asia/Harbin.standard.short=CST
-Asia/Hebron.daylight.short=EEST
-Asia/Hebron.generic.short=EET
-Asia/Hebron.standard.short=EET
-Asia/Ho_Chi_Minh.daylight.short=ICST
-Asia/Ho_Chi_Minh.generic.short=ICT
-Asia/Ho_Chi_Minh.standard.short=ICT
-Asia/Hong_Kong.daylight.short=HKST
-Asia/Hong_Kong.generic.short=HKT
-Asia/Hong_Kong.standard.short=HKT
-Asia/Hovd.daylight.short=HOVST
-Asia/Hovd.generic.short=HOVT
-Asia/Hovd.standard.short=HOVT
-Asia/Irkutsk.daylight.short=IRKST
-Asia/Irkutsk.generic.short=IRKT
-Asia/Irkutsk.standard.short=IRKT
-Asia/Istanbul.daylight.short=EEST
-Asia/Istanbul.generic.short=EET
-Asia/Istanbul.standard.short=EET
-Asia/Jakarta.daylight.short=WIST
-Asia/Jakarta.generic.short=WIB
-Asia/Jakarta.standard.short=WIB
-Asia/Jayapura.daylight.short=EIST
-Asia/Jayapura.generic.short=WIT
-Asia/Jayapura.standard.short=WIT
-Asia/Jerusalem.daylight.short=IDT
-Asia/Jerusalem.generic.short=IT
-Asia/Jerusalem.standard.short=IST
-Asia/Kabul.daylight.short=AFST
-Asia/Kabul.generic.short=AFT
-Asia/Kabul.standard.short=AFT
-Asia/Kamchatka.daylight.short=PETST
-Asia/Kamchatka.generic.short=PETT
-Asia/Kamchatka.standard.short=PETT
-Asia/Karachi.daylight.short=PKST
-Asia/Karachi.generic.short=PKT
-Asia/Karachi.standard.short=PKT
-Asia/Kashgar.daylight.short=CDT
-Asia/Kashgar.generic.short=CT
-Asia/Kashgar.standard.short=CST
-Asia/Kathmandu.daylight.short=NPST
-Asia/Kathmandu.generic.short=NPT
-Asia/Kathmandu.standard.short=NPT
-Asia/Katmandu.daylight.short=NPST
-Asia/Katmandu.generic.short=NPT
-Asia/Katmandu.standard.short=NPT
-Asia/Khandyga.daylight.short=YAKST
-Asia/Khandyga.generic.short=YAKT
-Asia/Khandyga.standard.short=YAKT
-Asia/Kolkata.daylight.short=IDT
-Asia/Kolkata.generic.short=IT
-Asia/Kolkata.standard.short=IST
-Asia/Krasnoyarsk.daylight.short=KRAST
-Asia/Krasnoyarsk.generic.short=KRAT
-Asia/Krasnoyarsk.standard.short=KRAT
-Asia/Kuala_Lumpur.daylight.short=MYST
-Asia/Kuala_Lumpur.generic.short=MYT
-Asia/Kuala_Lumpur.standard.short=MYT
-Asia/Kuching.daylight.short=MYST
-Asia/Kuching.generic.short=MYT
-Asia/Kuching.standard.short=MYT
-Asia/Kuwait.daylight.short=ADT
-Asia/Kuwait.generic.short=AT
-Asia/Kuwait.standard.short=AST
-Asia/Macao.daylight.short=CDT
-Asia/Macao.generic.short=CT
-Asia/Macao.standard.short=CST
-Asia/Macau.daylight.short=CDT
-Asia/Macau.generic.short=CT
-Asia/Macau.standard.short=CST
-Asia/Magadan.daylight.short=MAGST
-Asia/Magadan.generic.short=MAGT
-Asia/Magadan.standard.short=MAGT
-Asia/Makassar.daylight.short=CIST
-Asia/Makassar.generic.short=WITA
-Asia/Makassar.standard.short=WITA
-Asia/Manila.daylight.short=PHST
-Asia/Manila.generic.short=PHT
-Asia/Manila.standard.short=PHT
-Asia/Muscat.daylight.short=GDT
-Asia/Muscat.generic.short=GT
-Asia/Muscat.standard.short=GST
-Asia/Nicosia.daylight.short=EEST
-Asia/Nicosia.generic.short=EET
-Asia/Nicosia.standard.short=EET
-Asia/Novokuznetsk.daylight.short=NOVST
-Asia/Novokuznetsk.generic.short=NOVT
-Asia/Novokuznetsk.standard.short=NOVT
-Asia/Novosibirsk.daylight.short=NOVST
-Asia/Novosibirsk.generic.short=NOVT
-Asia/Novosibirsk.standard.short=NOVT
-Asia/Omsk.daylight.short=OMSST
-Asia/Omsk.generic.short=OMST
-Asia/Omsk.standard.short=OMST
-Asia/Oral.daylight.short=ORAST
-Asia/Oral.generic.short=ORAT
-Asia/Oral.standard.short=ORAT
-Asia/Phnom_Penh.daylight.short=ICST
-Asia/Phnom_Penh.generic.short=ICT
-Asia/Phnom_Penh.standard.short=ICT
-Asia/Pontianak.daylight.short=WIST
-Asia/Pontianak.generic.short=WIB
-Asia/Pontianak.standard.short=WIB
-Asia/Pyongyang.daylight.short=KDT
-Asia/Pyongyang.generic.short=KT
-Asia/Pyongyang.standard.short=KST
-Asia/Qatar.daylight.short=ADT
-Asia/Qatar.generic.short=AT
-Asia/Qatar.standard.short=AST
-Asia/Qyzylorda.daylight.short=QYZST
-Asia/Qyzylorda.generic.short=QYZT
-Asia/Qyzylorda.standard.short=QYZT
-Asia/Rangoon.daylight.short=MMST
-Asia/Rangoon.generic.short=MMT
-Asia/Rangoon.standard.short=MMT
-Asia/Saigon.daylight.short=ICST
-Asia/Saigon.generic.short=ICT
-Asia/Saigon.standard.short=ICT
-Asia/Sakhalin.daylight.short=SAKST
-Asia/Sakhalin.generic.short=SAKT
-Asia/Sakhalin.standard.short=SAKT
-Asia/Samarkand.daylight.short=UZST
-Asia/Samarkand.generic.short=UZT
-Asia/Samarkand.standard.short=UZT
-Asia/Seoul.daylight.short=KDT
-Asia/Seoul.generic.short=KT
-Asia/Seoul.standard.short=KST
-Asia/Shanghai.daylight.short=CDT
-Asia/Shanghai.generic.short=CT
-Asia/Shanghai.standard.short=CST
-Asia/Singapore.daylight.short=SGST
-Asia/Singapore.generic.short=SGT
-Asia/Singapore.standard.short=SGT
-Asia/Taipei.daylight.short=CDT
-Asia/Taipei.generic.short=CT
-Asia/Taipei.standard.short=CST
-Asia/Tashkent.daylight.short=UZST
-Asia/Tashkent.generic.short=UZT
-Asia/Tashkent.standard.short=UZT
-Asia/Tbilisi.daylight.short=GEST
-Asia/Tbilisi.generic.short=GET
-Asia/Tbilisi.standard.short=GET
-Asia/Tehran.daylight.short=IRDT
-Asia/Tehran.generic.short=IRT
-Asia/Tehran.standard.short=IRST
-Asia/Tel_Aviv.daylight.short=IDT
-Asia/Tel_Aviv.generic.short=IT
-Asia/Tel_Aviv.standard.short=IST
-Asia/Thimbu.daylight.short=BTST
-Asia/Thimbu.generic.short=BTT
-Asia/Thimbu.standard.short=BTT
-Asia/Thimphu.daylight.short=BTST
-Asia/Thimphu.generic.short=BTT
-Asia/Thimphu.standard.short=BTT
-Asia/Tokyo.daylight.short=JDT
-Asia/Tokyo.generic.short=JT
-Asia/Tokyo.standard.short=JST
-Asia/Ujung_Pandang.daylight.short=CIST
-Asia/Ujung_Pandang.generic.short=WITA
-Asia/Ujung_Pandang.standard.short=WITA
-Asia/Ulaanbaatar.daylight.short=ULAST
-Asia/Ulaanbaatar.generic.short=ULAT
-Asia/Ulaanbaatar.standard.short=ULAT
-Asia/Ulan_Bator.daylight.short=ULAST
-Asia/Ulan_Bator.generic.short=ULAT
-Asia/Ulan_Bator.standard.short=ULAT
-Asia/Urumqi.daylight.short=CDT
-Asia/Urumqi.generic.short=CT
-Asia/Urumqi.standard.short=CST
-Asia/Ust-Nera.daylight.short=VLAST
-Asia/Ust-Nera.generic.short=VLAT
-Asia/Ust-Nera.standard.short=VLAT
-Asia/Vientiane.daylight.short=ICST
-Asia/Vientiane.generic.short=ICT
-Asia/Vientiane.standard.short=ICT
-Asia/Vladivostok.daylight.short=VLAST
-Asia/Vladivostok.generic.short=VLAT
-Asia/Vladivostok.standard.short=VLAT
-Asia/Yakutsk.daylight.short=YAKST
-Asia/Yakutsk.generic.short=YAKT
-Asia/Yakutsk.standard.short=YAKT
-Asia/Yekaterinburg.daylight.short=YEKST
-Asia/Yekaterinburg.generic.short=YEKT
-Asia/Yekaterinburg.standard.short=YEKT
-Asia/Yerevan.daylight.short=AMST
-Asia/Yerevan.generic.short=AMT
-Asia/Yerevan.standard.short=AMT
-AST.daylight.short=AKDT
-AST.generic.short=AKT
-AST.standard.short=AKST
-Atlantic/Azores.daylight.short=AZOST
-Atlantic/Azores.generic.short=AZOT
-Atlantic/Azores.standard.short=AZOT
-Atlantic/Bermuda.daylight.short=ADT
-Atlantic/Bermuda.generic.short=AT
-Atlantic/Bermuda.standard.short=AST
-Atlantic/Canary.daylight.short=WEST
-Atlantic/Canary.generic.short=WET
-Atlantic/Canary.standard.short=WET
-Atlantic/Cape_Verde.daylight.short=CVST
-Atlantic/Cape_Verde.generic.short=CVT
-Atlantic/Cape_Verde.standard.short=CVT
-Atlantic/Faeroe.daylight.short=WEST
-Atlantic/Faeroe.generic.short=WET
-Atlantic/Faeroe.standard.short=WET
-Atlantic/Faroe.daylight.short=WEST
-Atlantic/Faroe.generic.short=WET
-Atlantic/Faroe.standard.short=WET
-Atlantic/Jan_Mayen.daylight.short=CEST
-Atlantic/Jan_Mayen.generic.short=CET
-Atlantic/Jan_Mayen.standard.short=CET
-Atlantic/Madeira.daylight.short=WEST
-Atlantic/Madeira.generic.short=WET
-Atlantic/Madeira.standard.short=WET
-Atlantic/Reykjavik.daylight.short=GMT
-Atlantic/Reykjavik.generic.short=GMT
-Atlantic/Reykjavik.standard.short=GMT
-Atlantic/South_Georgia.daylight.short=GDT
-Atlantic/South_Georgia.generic.short=GT
-Atlantic/South_Georgia.standard.short=GST
-Atlantic/Stanley.daylight.short=FKST
-Atlantic/Stanley.generic.short=FKT
-Atlantic/Stanley.standard.short=FKT
-Atlantic/St_Helena.daylight.short=GMT
-Atlantic/St_Helena.generic.short=GMT
-Atlantic/St_Helena.standard.short=GMT
-Australia/ACT.daylight.short=EST
-Australia/ACT.generic.short=ET
-Australia/ACT.standard.short=EST
-Australia/Adelaide.daylight.short=CST
-Australia/Adelaide.generic.short=CT
-Australia/Adelaide.standard.short=CST
-Australia/Brisbane.daylight.short=EST
-Australia/Brisbane.generic.short=ET
-Australia/Brisbane.standard.short=EST
-Australia/Broken_Hill.daylight.short=CST
-Australia/Broken_Hill.generic.short=CT
-Australia/Broken_Hill.standard.short=CST
-Australia/Canberra.daylight.short=EST
-Australia/Canberra.generic.short=ET
-Australia/Canberra.standard.short=EST
-Australia/Currie.daylight.short=EST
-Australia/Currie.generic.short=ET
-Australia/Currie.standard.short=EST
-Australia/Darwin.daylight.short=CST
-Australia/Darwin.generic.short=CT
-Australia/Darwin.standard.short=CST
-Australia/Eucla.daylight.short=CWST
-Australia/Eucla.generic.short=CWT
-Australia/Eucla.standard.short=CWST
-Australia/Hobart.daylight.short=EST
-Australia/Hobart.generic.short=ET
-Australia/Hobart.standard.short=EST
-Australia/LHI.daylight.short=LHST
-Australia/LHI.generic.short=LHT
-Australia/LHI.standard.short=LHST
-Australia/Lindeman.daylight.short=EST
-Australia/Lindeman.generic.short=ET
-Australia/Lindeman.standard.short=EST
-Australia/Lord_Howe.daylight.short=LHST
-Australia/Lord_Howe.generic.short=LHT
-Australia/Lord_Howe.standard.short=LHST
-Australia/Melbourne.daylight.short=EST
-Australia/Melbourne.generic.short=ET
-Australia/Melbourne.standard.short=EST
-Australia/North.daylight.short=CST
-Australia/North.generic.short=CT
-Australia/North.standard.short=CST
-Australia/NSW.daylight.short=EST
-Australia/NSW.generic.short=ET
-Australia/NSW.standard.short=EST
-Australia/Perth.daylight.short=WST
-Australia/Perth.generic.short=WT
-Australia/Perth.standard.short=WST
-Australia/Queensland.daylight.short=EST
-Australia/Queensland.generic.short=ET
-Australia/Queensland.standard.short=EST
-Australia/South.daylight.short=CST
-Australia/South.generic.short=CT
-Australia/South.standard.short=CST
-Australia/Sydney.daylight.short=EST
-Australia/Sydney.generic.short=ET
-Australia/Sydney.standard.short=EST
-Australia/Tasmania.daylight.short=EST
-Australia/Tasmania.generic.short=ET
-Australia/Tasmania.standard.short=EST
-Australia/Victoria.daylight.short=EST
-Australia/Victoria.generic.short=ET
-Australia/Victoria.standard.short=EST
-Australia/West.daylight.short=WST
-Australia/West.generic.short=WT
-Australia/West.standard.short=WST
-Australia/Yancowinna.daylight.short=CST
-Australia/Yancowinna.generic.short=CT
-Australia/Yancowinna.standard.short=CST
-BET.daylight.short=BRST
-BET.generic.short=BRT
-BET.standard.short=BRT
-Brazil/Acre.daylight.short=ACST
-Brazil/Acre.generic.short=ACT
-Brazil/Acre.standard.short=ACT
-Brazil/DeNoronha.daylight.short=FNST
-Brazil/DeNoronha.generic.short=FNT
-Brazil/DeNoronha.standard.short=FNT
-Brazil/East.daylight.short=BRST
-Brazil/East.generic.short=BRT
-Brazil/East.standard.short=BRT
-Brazil/West.daylight.short=AMST
-Brazil/West.generic.short=AMT
-Brazil/West.standard.short=AMT
-BST.daylight.short=BDST
-BST.generic.short=BDT
-BST.standard.short=BDT
-Canada/Atlantic.daylight.short=ADT
-Canada/Atlantic.generic.short=AT
-Canada/Atlantic.standard.short=AST
-Canada/Central.daylight.short=CDT
-Canada/Central.generic.short=CT
-Canada/Central.standard.short=CST
-Canada/Eastern.daylight.short=EDT
-Canada/Eastern.generic.short=ET
-Canada/Eastern.standard.short=EST
-Canada/East-Saskatchewan.daylight.short=CDT
-Canada/East-Saskatchewan.generic.short=CT
-Canada/East-Saskatchewan.standard.short=CST
-Canada/Mountain.daylight.short=MDT
-Canada/Mountain.generic.short=MT
-Canada/Mountain.standard.short=MST
-Canada/Newfoundland.daylight.short=NDT
-Canada/Newfoundland.generic.short=NT
-Canada/Newfoundland.standard.short=NST
-Canada/Pacific.daylight.short=PDT
-Canada/Pacific.generic.short=PT
-Canada/Pacific.standard.short=PST
-Canada/Saskatchewan.daylight.short=CDT
-Canada/Saskatchewan.generic.short=CT
-Canada/Saskatchewan.standard.short=CST
-Canada/Yukon.daylight.short=PDT
-Canada/Yukon.generic.short=PT
-Canada/Yukon.standard.short=PST
-CAT.daylight.short=CAST
-CAT.generic.short=CAT
-CAT.standard.short=CAT
-CET.daylight.short=CEST
-CET.generic.short=CET
-CET.standard.short=CET
-Chile/Continental.daylight.short=CLST
-Chile/Continental.generic.short=CLT
-Chile/Continental.standard.short=CLT
-Chile/EasterIsland.daylight.short=EASST
-Chile/EasterIsland.generic.short=EAST
-Chile/EasterIsland.standard.short=EAST
-CNT.daylight.short=NDT
-CNT.generic.short=NT
-CNT.standard.short=NST
-CST6CDT.daylight.short=CDT
-CST6CDT.generic.short=CT
-CST6CDT.standard.short=CST
-CST.daylight.short=CDT
-CST.generic.short=CT
-CST.standard.short=CST
-CTT.daylight.short=CDT
-CTT.generic.short=CT
-CTT.standard.short=CST
-Cuba.daylight.short=CDT
-Cuba.generic.short=CT
-Cuba.standard.short=CST
-EAT.daylight.short=EAST
-EAT.generic.short=EAT
-EAT.standard.short=EAT
-ECT.daylight.short=CEST
-ECT.generic.short=CET
-ECT.standard.short=CET
-EET.daylight.short=EEST
-EET.generic.short=EET
-EET.standard.short=EET
-Egypt.daylight.short=EEST
-Egypt.generic.short=EET
-Egypt.standard.short=EET
-Eire.daylight.short=IST
-Eire.generic.short=IT
-Eire.standard.short=GMT
-EST5EDT.daylight.short=EDT
-EST5EDT.generic.short=ET
-EST5EDT.standard.short=EST
-EST.daylight.short=EDT
-EST.generic.short=ET
-EST.standard.short=EST
-Etc/Greenwich.daylight.short=GMT
-Etc/Greenwich.generic.short=GMT
-Etc/Greenwich.standard.short=GMT
-Etc/UCT.daylight.short=UTC
-Etc/UCT.generic.short=UTC
-Etc/UCT.standard.short=UTC
-Etc/Universal.daylight.short=UTC
-Etc/Universal.generic.short=UTC
-Etc/Universal.standard.short=UTC
-Etc/UTC.daylight.short=UTC
-Etc/UTC.generic.short=UTC
-Etc/UTC.standard.short=UTC
-Etc/Zulu.daylight.short=UTC
-Etc/Zulu.generic.short=UTC
-Etc/Zulu.standard.short=UTC
-Europe/Amsterdam.daylight.short=CEST
-Europe/Amsterdam.generic.short=CET
-Europe/Amsterdam.standard.short=CET
-Europe/Andorra.daylight.short=CEST
-Europe/Andorra.generic.short=CET
-Europe/Andorra.standard.short=CET
-Europe/Athens.daylight.short=EEST
-Europe/Athens.generic.short=EET
-Europe/Athens.standard.short=EET
-Europe/Belfast.daylight.short=BST
-Europe/Belfast.generic.short=BT
-Europe/Belfast.standard.short=GMT
-Europe/Belgrade.daylight.short=CEST
-Europe/Belgrade.generic.short=CET
-Europe/Belgrade.standard.short=CET
-Europe/Berlin.daylight.short=CEST
-Europe/Berlin.generic.short=CET
-Europe/Berlin.standard.short=CET
-Europe/Bratislava.daylight.short=CEST
-Europe/Bratislava.generic.short=CET
-Europe/Bratislava.standard.short=CET
-Europe/Brussels.daylight.short=CEST
-Europe/Brussels.generic.short=CET
-Europe/Brussels.standard.short=CET
-Europe/Bucharest.daylight.short=EEST
-Europe/Bucharest.generic.short=EET
-Europe/Bucharest.standard.short=EET
-Europe/Budapest.daylight.short=CEST
-Europe/Budapest.generic.short=CET
-Europe/Budapest.standard.short=CET
-Europe/Busingen.daylight.short=CEST
-Europe/Busingen.generic.short=CET
-Europe/Busingen.standard.short=CET
-Europe/Chisinau.daylight.short=EEST
-Europe/Chisinau.generic.short=EET
-Europe/Chisinau.standard.short=EET
-Europe/Copenhagen.daylight.short=CEST
-Europe/Copenhagen.generic.short=CET
-Europe/Copenhagen.standard.short=CET
-Europe/Dublin.daylight.short=IST
-Europe/Dublin.generic.short=IT
-Europe/Dublin.standard.short=GMT
-Europe/Gibraltar.daylight.short=CEST
-Europe/Gibraltar.generic.short=CET
-Europe/Gibraltar.standard.short=CET
-Europe/Guernsey.daylight.short=BST
-Europe/Guernsey.generic.short=BT
-Europe/Guernsey.standard.short=GMT
-Europe/Helsinki.daylight.short=EEST
-Europe/Helsinki.generic.short=EET
-Europe/Helsinki.standard.short=EET
-Europe/Isle_of_Man.daylight.short=BST
-Europe/Isle_of_Man.generic.short=BT
-Europe/Isle_of_Man.standard.short=GMT
-Europe/Istanbul.daylight.short=EEST
-Europe/Istanbul.generic.short=EET
-Europe/Istanbul.standard.short=EET
-Europe/Jersey.daylight.short=BST
-Europe/Jersey.generic.short=BT
-Europe/Jersey.standard.short=GMT
-Europe/Kaliningrad.daylight.short=FEST
-Europe/Kaliningrad.generic.short=FET
-Europe/Kaliningrad.standard.short=FET
-Europe/Kiev.daylight.short=EEST
-Europe/Kiev.generic.short=EET
-Europe/Kiev.standard.short=EET
-Europe/Lisbon.daylight.short=WEST
-Europe/Lisbon.generic.short=WET
-Europe/Lisbon.standard.short=WET
-Europe/Ljubljana.daylight.short=CEST
-Europe/Ljubljana.generic.short=CET
-Europe/Ljubljana.standard.short=CET
-Europe/London.daylight.short=BST
-Europe/London.generic.short=BT
-Europe/London.standard.short=GMT
-Europe/Luxembourg.daylight.short=CEST
-Europe/Luxembourg.generic.short=CET
-Europe/Luxembourg.standard.short=CET
-Europe/Madrid.daylight.short=CEST
-Europe/Madrid.generic.short=CET
-Europe/Madrid.standard.short=CET
-Europe/Malta.daylight.short=CEST
-Europe/Malta.generic.short=CET
-Europe/Malta.standard.short=CET
-Europe/Mariehamn.daylight.short=EEST
-Europe/Mariehamn.generic.short=EET
-Europe/Mariehamn.standard.short=EET
-Europe/Minsk.daylight.short=FEST
-Europe/Minsk.generic.short=FET
-Europe/Minsk.standard.short=FET
-Europe/Monaco.daylight.short=CEST
-Europe/Monaco.generic.short=CET
-Europe/Monaco.standard.short=CET
-Europe/Moscow.daylight.short=MSD
-Europe/Moscow.generic.short=MT
-Europe/Moscow.standard.short=MSK
-Europe/Nicosia.daylight.short=EEST
-Europe/Nicosia.generic.short=EET
-Europe/Nicosia.standard.short=EET
-Europe/Oslo.daylight.short=CEST
-Europe/Oslo.generic.short=CET
-Europe/Oslo.standard.short=CET
-Europe/Paris.daylight.short=CEST
-Europe/Paris.generic.short=CET
-Europe/Paris.standard.short=CET
-Europe/Podgorica.daylight.short=CEST
-Europe/Podgorica.generic.short=CET
-Europe/Podgorica.standard.short=CET
-Europe/Prague.daylight.short=CEST
-Europe/Prague.generic.short=CET
-Europe/Prague.standard.short=CET
-Europe/Riga.daylight.short=EEST
-Europe/Riga.generic.short=EET
-Europe/Riga.standard.short=EET
-Europe/Rome.daylight.short=CEST
-Europe/Rome.generic.short=CET
-Europe/Rome.standard.short=CET
-Europe/Samara.daylight.short=SAMST
-Europe/Samara.generic.short=SAMT
-Europe/Samara.standard.short=SAMT
-Europe/San_Marino.daylight.short=CEST
-Europe/San_Marino.generic.short=CET
-Europe/San_Marino.standard.short=CET
-Europe/Sarajevo.daylight.short=CEST
-Europe/Sarajevo.generic.short=CET
-Europe/Sarajevo.standard.short=CET
-Europe/Simferopol.daylight.short=EEST
-Europe/Simferopol.generic.short=EET
-Europe/Simferopol.standard.short=EET
-Europe/Skopje.daylight.short=CEST
-Europe/Skopje.generic.short=CET
-Europe/Skopje.standard.short=CET
-Europe/Sofia.daylight.short=EEST
-Europe/Sofia.generic.short=EET
-Europe/Sofia.standard.short=EET
-Europe/Stockholm.daylight.short=CEST
-Europe/Stockholm.generic.short=CET
-Europe/Stockholm.standard.short=CET
-Europe/Tallinn.daylight.short=EEST
-Europe/Tallinn.generic.short=EET
-Europe/Tallinn.standard.short=EET
-Europe/Tirane.daylight.short=CEST
-Europe/Tirane.generic.short=CET
-Europe/Tirane.standard.short=CET
-Europe/Tiraspol.daylight.short=EEST
-Europe/Tiraspol.generic.short=EET
-Europe/Tiraspol.standard.short=EET
-Europe/Uzhgorod.daylight.short=EEST
-Europe/Uzhgorod.generic.short=EET
-Europe/Uzhgorod.standard.short=EET
-Europe/Vaduz.daylight.short=CEST
-Europe/Vaduz.generic.short=CET
-Europe/Vaduz.standard.short=CET
-Europe/Vatican.daylight.short=CEST
-Europe/Vatican.generic.short=CET
-Europe/Vatican.standard.short=CET
-Europe/Vienna.daylight.short=CEST
-Europe/Vienna.generic.short=CET
-Europe/Vienna.standard.short=CET
-Europe/Vilnius.daylight.short=EEST
-Europe/Vilnius.generic.short=EET
-Europe/Vilnius.standard.short=EET
-Europe/Volgograd.daylight.short=VOLST
-Europe/Volgograd.generic.short=VOLT
-Europe/Volgograd.standard.short=VOLT
-Europe/Warsaw.daylight.short=CEST
-Europe/Warsaw.generic.short=CET
-Europe/Warsaw.standard.short=CET
-Europe/Zagreb.daylight.short=CEST
-Europe/Zagreb.generic.short=CET
-Europe/Zagreb.standard.short=CET
-Europe/Zaporozhye.daylight.short=EEST
-Europe/Zaporozhye.generic.short=EET
-Europe/Zaporozhye.standard.short=EET
-Europe/Zurich.daylight.short=CEST
-Europe/Zurich.generic.short=CET
-Europe/Zurich.standard.short=CET
-GB.daylight.short=BST
-GB-Eire.daylight.short=BST
-GB-Eire.generic.short=BT
-GB-Eire.standard.short=GMT
-GB.generic.short=BT
-GB.standard.short=GMT
-GMT.daylight.short=GMT
-GMT.generic.short=GMT
-GMT.standard.short=GMT
-Greenwich.daylight.short=GMT
-Greenwich.generic.short=GMT
-Greenwich.standard.short=GMT
-Hongkong.daylight.short=HKST
-Hongkong.generic.short=HKT
-Hongkong.standard.short=HKT
-HST.daylight.short=HDT
-HST.generic.short=HT
-HST.standard.short=HST
-Iceland.daylight.short=GMT
-Iceland.generic.short=GMT
-Iceland.standard.short=GMT
-IET.daylight.short=EDT
-IET.generic.short=ET
-IET.standard.short=EST
-Indian/Antananarivo.daylight.short=EAST
-Indian/Antananarivo.generic.short=EAT
-Indian/Antananarivo.standard.short=EAT
-Indian/Chagos.daylight.short=IOST
-Indian/Chagos.generic.short=IOT
-Indian/Chagos.standard.short=IOT
-Indian/Christmas.daylight.short=CXST
-Indian/Christmas.generic.short=CIT
-Indian/Christmas.standard.short=CXT
-Indian/Cocos.daylight.short=CCST
-Indian/Cocos.generic.short=CCT
-Indian/Cocos.standard.short=CCT
-Indian/Comoro.daylight.short=EAST
-Indian/Comoro.generic.short=EAT
-Indian/Comoro.standard.short=EAT
-Indian/Kerguelen.daylight.short=TFST
-Indian/Kerguelen.generic.short=TFT
-Indian/Kerguelen.standard.short=TFT
-Indian/Mahe.daylight.short=SCST
-Indian/Mahe.generic.short=SCT
-Indian/Mahe.standard.short=SCT
-Indian/Maldives.daylight.short=MVST
-Indian/Maldives.generic.short=MVT
-Indian/Maldives.standard.short=MVT
-Indian/Mauritius.daylight.short=MUST
-Indian/Mauritius.generic.short=MUT
-Indian/Mauritius.standard.short=MUT
-Indian/Mayotte.daylight.short=EAST
-Indian/Mayotte.generic.short=EAT
-Indian/Mayotte.standard.short=EAT
-Indian/Reunion.daylight.short=REST
-Indian/Reunion.generic.short=RET
-Indian/Reunion.standard.short=RET
-Iran.daylight.short=IRDT
-Iran.generic.short=IRT
-Iran.standard.short=IRST
-Israel.daylight.short=IDT
-Israel.generic.short=IT
-Israel.standard.short=IST
-IST.daylight.short=IDT
-IST.generic.short=IT
-IST.standard.short=IST
-Jamaica.daylight.short=EDT
-Jamaica.generic.short=ET
-Jamaica.standard.short=EST
-Japan.daylight.short=JDT
-Japan.generic.short=JT
-Japan.standard.short=JST
-JST.daylight.short=JDT
-JST.generic.short=JT
-JST.standard.short=JST
-Kwajalein.daylight.short=MHST
-Kwajalein.generic.short=MHT
-Kwajalein.standard.short=MHT
-Libya.daylight.short=EEST
-Libya.generic.short=EET
-Libya.standard.short=EET
-MET.daylight.short=MEST
-MET.generic.short=MET
-MET.standard.short=MET
-Mexico/BajaNorte.daylight.short=PDT
-Mexico/BajaNorte.generic.short=PT
-Mexico/BajaNorte.standard.short=PST
-Mexico/BajaSur.daylight.short=MDT
-Mexico/BajaSur.generic.short=MT
-Mexico/BajaSur.standard.short=MST
-Mexico/General.daylight.short=CDT
-Mexico/General.generic.short=CT
-Mexico/General.standard.short=CST
-MIT.daylight.short=WSDT
-MIT.generic.short=WST
-MIT.standard.short=WST
-MST7MDT.daylight.short=MDT
-MST7MDT.generic.short=MT
-MST7MDT.standard.short=MST
-MST.daylight.short=MDT
-MST.generic.short=MT
-MST.standard.short=MST
-Navajo.daylight.short=MDT
-Navajo.generic.short=MT
-Navajo.standard.short=MST
-NET.daylight.short=AMST
-NET.generic.short=AMT
-NET.standard.short=AMT
-NST.daylight.short=NZDT
-NST.generic.short=NZT
-NST.standard.short=NZST
-NZ-CHAT.daylight.short=CHADT
-NZ-CHAT.generic.short=CHAT
-NZ-CHAT.standard.short=CHAST
-NZ.daylight.short=NZDT
-NZ.generic.short=NZT
-NZ.standard.short=NZST
-Pacific/Apia.daylight.short=WSDT
-Pacific/Apia.generic.short=WST
-Pacific/Apia.standard.short=WST
-Pacific/Auckland.daylight.short=NZDT
-Pacific/Auckland.generic.short=NZT
-Pacific/Auckland.standard.short=NZST
-Pacific/Chatham.daylight.short=CHADT
-Pacific/Chatham.generic.short=CHAT
-Pacific/Chatham.standard.short=CHAST
-Pacific/Chuuk.daylight.short=CHUST
-Pacific/Chuuk.generic.short=CHUT
-Pacific/Chuuk.standard.short=CHUT
-Pacific/Easter.daylight.short=EASST
-Pacific/Easter.generic.short=EAST
-Pacific/Easter.standard.short=EAST
-Pacific/Efate.daylight.short=VUST
-Pacific/Efate.generic.short=VUT
-Pacific/Efate.standard.short=VUT
-Pacific/Enderbury.daylight.short=PHOST
-Pacific/Enderbury.generic.short=PHOT
-Pacific/Enderbury.standard.short=PHOT
-Pacific/Fakaofo.daylight.short=TKST
-Pacific/Fakaofo.generic.short=TKT
-Pacific/Fakaofo.standard.short=TKT
-Pacific/Fiji.daylight.short=FJST
-Pacific/Fiji.generic.short=FJT
-Pacific/Fiji.standard.short=FJT
-Pacific/Funafuti.daylight.short=TVST
-Pacific/Funafuti.generic.short=TVT
-Pacific/Funafuti.standard.short=TVT
-Pacific/Galapagos.daylight.short=GALST
-Pacific/Galapagos.generic.short=GALT
-Pacific/Galapagos.standard.short=GALT
-Pacific/Gambier.daylight.short=GAMST
-Pacific/Gambier.generic.short=GAMT
-Pacific/Gambier.standard.short=GAMT
-Pacific/Guadalcanal.daylight.short=SBST
-Pacific/Guadalcanal.generic.short=SBT
-Pacific/Guadalcanal.standard.short=SBT
-Pacific/Guam.daylight.short=ChDT
-Pacific/Guam.generic.short=ChT
-Pacific/Guam.standard.short=ChST
-Pacific/Honolulu.daylight.short=HDT
-Pacific/Honolulu.generic.short=HT
-Pacific/Honolulu.standard.short=HST
-Pacific/Johnston.daylight.short=HDT
-Pacific/Johnston.generic.short=HT
-Pacific/Johnston.standard.short=HST
-Pacific/Kiritimati.daylight.short=LINST
-Pacific/Kiritimati.generic.short=LINT
-Pacific/Kiritimati.standard.short=LINT
-Pacific/Kosrae.daylight.short=KOSST
-Pacific/Kosrae.generic.short=KOST
-Pacific/Kosrae.standard.short=KOST
-Pacific/Kwajalein.daylight.short=MHST
-Pacific/Kwajalein.generic.short=MHT
-Pacific/Kwajalein.standard.short=MHT
-Pacific/Majuro.daylight.short=MHST
-Pacific/Majuro.generic.short=MHT
-Pacific/Majuro.standard.short=MHT
-Pacific/Marquesas.daylight.short=MARST
-Pacific/Marquesas.generic.short=MART
-Pacific/Marquesas.standard.short=MART
-Pacific/Midway.daylight.short=SDT
-Pacific/Midway.generic.short=ST
-Pacific/Midway.standard.short=SST
-Pacific/Nauru.daylight.short=NRST
-Pacific/Nauru.generic.short=NRT
-Pacific/Nauru.standard.short=NRT
-Pacific/Niue.daylight.short=NUST
-Pacific/Niue.generic.short=NUT
-Pacific/Niue.standard.short=NUT
-Pacific/Norfolk.daylight.short=NFST
-Pacific/Norfolk.generic.short=NFT
-Pacific/Norfolk.standard.short=NFT
-Pacific/Noumea.daylight.short=NCST
-Pacific/Noumea.generic.short=NCT
-Pacific/Noumea.standard.short=NCT
-Pacific/Pago_Pago.daylight.short=SDT
-Pacific/Pago_Pago.generic.short=ST
-Pacific/Pago_Pago.standard.short=SST
-Pacific/Palau.daylight.short=PWST
-Pacific/Palau.generic.short=PWT
-Pacific/Palau.standard.short=PWT
-Pacific/Pitcairn.daylight.short=PDT
-Pacific/Pitcairn.generic.short=PT
-Pacific/Pitcairn.standard.short=PST
-Pacific/Pohnpei.daylight.short=PONST
-Pacific/Pohnpei.generic.short=PONT
-Pacific/Pohnpei.standard.short=PONT
-Pacific/Ponape.daylight.short=PONST
-Pacific/Ponape.generic.short=PONT
-Pacific/Ponape.standard.short=PONT
-Pacific/Port_Moresby.daylight.short=PGST
-Pacific/Port_Moresby.generic.short=PGT
-Pacific/Port_Moresby.standard.short=PGT
-Pacific/Rarotonga.daylight.short=CKHST
-Pacific/Rarotonga.generic.short=CKT
-Pacific/Rarotonga.standard.short=CKT
-Pacific/Saipan.daylight.short=ChDT
-Pacific/Saipan.generic.short=ChT
-Pacific/Saipan.standard.short=ChST
-Pacific/Samoa.daylight.short=SDT
-Pacific/Samoa.generic.short=ST
-Pacific/Samoa.standard.short=SST
-Pacific/Tahiti.daylight.short=TAHST
-Pacific/Tahiti.generic.short=TAHT
-Pacific/Tahiti.standard.short=TAHT
-Pacific/Tarawa.daylight.short=GILST
-Pacific/Tarawa.generic.short=GILT
-Pacific/Tarawa.standard.short=GILT
-Pacific/Tongatapu.daylight.short=TOST
-Pacific/Tongatapu.generic.short=TOT
-Pacific/Tongatapu.standard.short=TOT
-Pacific/Truk.daylight.short=CHUST
-Pacific/Truk.generic.short=CHUT
-Pacific/Truk.standard.short=CHUT
-Pacific/Wake.daylight.short=WAKST
-Pacific/Wake.generic.short=WAKT
-Pacific/Wake.standard.short=WAKT
-Pacific/Wallis.daylight.short=WFST
-Pacific/Wallis.generic.short=WFT
-Pacific/Wallis.standard.short=WFT
-Pacific/Yap.daylight.short=CHUST
-Pacific/Yap.generic.short=CHUT
-Pacific/Yap.standard.short=CHUT
-PLT.daylight.short=PKST
-PLT.generic.short=PKT
-PLT.standard.short=PKT
-PNT.daylight.short=MDT
-PNT.generic.short=MT
-PNT.standard.short=MST
-Poland.daylight.short=CEST
-Poland.generic.short=CET
-Poland.standard.short=CET
-Portugal.daylight.short=WEST
-Portugal.generic.short=WET
-Portugal.standard.short=WET
-PRC.daylight.short=CDT
-PRC.generic.short=CT
-PRC.standard.short=CST
-PRT.daylight.short=ADT
-PRT.generic.short=AT
-PRT.standard.short=AST
-PST8PDT.daylight.short=PDT
-PST8PDT.generic.short=PT
-PST8PDT.standard.short=PST
-PST.daylight.short=PDT
-PST.generic.short=PT
-PST.standard.short=PST
-ROK.daylight.short=KDT
-ROK.generic.short=KT
-ROK.standard.short=KST
-Singapore.daylight.short=SGST
-Singapore.generic.short=SGT
-Singapore.standard.short=SGT
-SST.daylight.short=SBST
-SST.generic.short=SBT
-SST.standard.short=SBT
-SystemV/AST4ADT.daylight.short=ADT
-SystemV/AST4ADT.generic.short=AT
-SystemV/AST4ADT.standard.short=AST
-SystemV/AST4.daylight.short=ADT
-SystemV/AST4.generic.short=AT
-SystemV/AST4.standard.short=AST
-SystemV/CST6CDT.daylight.short=CDT
-SystemV/CST6CDT.generic.short=CT
-SystemV/CST6CDT.standard.short=CST
-SystemV/CST6.daylight.short=CDT
-SystemV/CST6.generic.short=CT
-SystemV/CST6.standard.short=CST
-SystemV/EST5.daylight.short=EDT
-SystemV/EST5EDT.daylight.short=EDT
-SystemV/EST5EDT.generic.short=ET
-SystemV/EST5EDT.standard.short=EST
-SystemV/EST5.generic.short=ET
-SystemV/EST5.standard.short=EST
-SystemV/HST10.daylight.short=HDT
-SystemV/HST10.generic.short=HT
-SystemV/HST10.standard.short=HST
-SystemV/MST7.daylight.short=MDT
-SystemV/MST7.generic.short=MT
-SystemV/MST7MDT.daylight.short=MDT
-SystemV/MST7MDT.generic.short=MT
-SystemV/MST7MDT.standard.short=MST
-SystemV/MST7.standard.short=MST
-SystemV/PST8.daylight.short=PDT
-SystemV/PST8.generic.short=PT
-SystemV/PST8PDT.daylight.short=PDT
-SystemV/PST8PDT.generic.short=PT
-SystemV/PST8PDT.standard.short=PST
-SystemV/PST8.standard.short=PST
-SystemV/YST9.daylight.short=AKDT
-SystemV/YST9.generic.short=AKT
-SystemV/YST9.standard.short=AKST
-SystemV/YST9YDT.daylight.short=AKDT
-SystemV/YST9YDT.generic.short=AKT
-SystemV/YST9YDT.standard.short=AKST
-Turkey.daylight.short=EEST
-Turkey.generic.short=EET
-Turkey.standard.short=EET
-UCT.daylight.short=UTC
-UCT.generic.short=UTC
-UCT.standard.short=UTC
-Universal.daylight.short=UTC
-Universal.generic.short=UTC
-Universal.standard.short=UTC
-US/Alaska.daylight.short=AKDT
-US/Alaska.generic.short=AKT
-US/Alaska.standard.short=AKST
-US/Aleutian.daylight.short=HADT
-US/Aleutian.generic.short=HAT
-US/Aleutian.standard.short=HAST
-US/Arizona.daylight.short=MDT
-US/Arizona.generic.short=MT
-US/Arizona.standard.short=MST
-US/Central.daylight.short=CDT
-US/Central.generic.short=CT
-US/Central.standard.short=CST
-US/Eastern.daylight.short=EDT
-US/Eastern.generic.short=ET
-US/Eastern.standard.short=EST
-US/East-Indiana.daylight.short=EDT
-US/East-Indiana.generic.short=ET
-US/East-Indiana.standard.short=EST
-US/Hawaii.daylight.short=HDT
-US/Hawaii.generic.short=HT
-US/Hawaii.standard.short=HST
-US/Indiana-Starke.daylight.short=CDT
-US/Indiana-Starke.generic.short=CT
-US/Indiana-Starke.standard.short=CST
-US/Michigan.daylight.short=EDT
-US/Michigan.generic.short=ET
-US/Michigan.standard.short=EST
-US/Mountain.daylight.short=MDT
-US/Mountain.generic.short=MT
-US/Mountain.standard.short=MST
-US/Pacific.daylight.short=PDT
-US/Pacific.generic.short=PT
-US/Pacific-New.daylight.short=PDT
-US/Pacific-New.generic.short=PT
-US/Pacific-New.standard.short=PST
-US/Pacific.standard.short=PST
-US/Samoa.daylight.short=SDT
-US/Samoa.generic.short=ST
-US/Samoa.standard.short=SST
-UTC.daylight.short=UTC
-UTC.generic.short=UTC
-UTC.standard.short=UTC
-VST.daylight.short=ICST
-VST.generic.short=ICT
-VST.standard.short=ICT
-WET.daylight.short=WEST
-WET.generic.short=WET
-WET.standard.short=WET
-W-SU.daylight.short=MSD
-W-SU.generic.short=MT
-W-SU.standard.short=MSK
-Zulu.daylight.short=UTC
-Zulu.generic.short=UTC
-Zulu.standard.short=UTC
diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_short.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_short.properties
deleted file mode 100644
index 095522a..0000000
--- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_short.properties
+++ /dev/null
@@ -1,1743 +0,0 @@
-ACT.daylight.short=CST
-ACT.generic.short=CT
-ACT.standard.short=CST
-AET.daylight.short=EST
-AET.generic.short=ET
-AET.standard.short=EST
-Africa/Abidjan.daylight.short=GMT
-Africa/Abidjan.generic.short=GMT
-Africa/Abidjan.standard.short=GMT
-Africa/Accra.daylight.short=GHST
-Africa/Accra.generic.short=GMT
-Africa/Accra.standard.short=GMT
-Africa/Addis_Ababa.daylight.short=EAST
-Africa/Addis_Ababa.generic.short=EAT
-Africa/Addis_Ababa.standard.short=EAT
-Africa/Algiers.daylight.short=CEST
-Africa/Algiers.generic.short=CET
-Africa/Algiers.standard.short=CET
-Africa/Asmara.daylight.short=EAST
-Africa/Asmara.generic.short=EAT
-Africa/Asmara.standard.short=EAT
-Africa/Asmera.daylight.short=EAST
-Africa/Asmera.generic.short=EAT
-Africa/Asmera.standard.short=EAT
-Africa/Bamako.daylight.short=GMT
-Africa/Bamako.generic.short=GMT
-Africa/Bamako.standard.short=GMT
-Africa/Bangui.daylight.short=WAST
-Africa/Bangui.generic.short=WAT
-Africa/Bangui.standard.short=WAT
-Africa/Banjul.daylight.short=GMT
-Africa/Banjul.generic.short=GMT
-Africa/Banjul.standard.short=GMT
-Africa/Bissau.daylight.short=GMT
-Africa/Bissau.generic.short=GMT
-Africa/Bissau.standard.short=GMT
-Africa/Blantyre.daylight.short=CAST
-Africa/Blantyre.generic.short=CAT
-Africa/Blantyre.standard.short=CAT
-Africa/Brazzaville.daylight.short=WAST
-Africa/Brazzaville.generic.short=WAT
-Africa/Brazzaville.standard.short=WAT
-Africa/Bujumbura.daylight.short=CAST
-Africa/Bujumbura.generic.short=CAT
-Africa/Bujumbura.standard.short=CAT
-Africa/Cairo.daylight.short=EEST
-Africa/Cairo.generic.short=EET
-Africa/Cairo.standard.short=EET
-Africa/Casablanca.daylight.short=WEST
-Africa/Casablanca.generic.short=WET
-Africa/Casablanca.standard.short=WET
-Africa/Ceuta.daylight.short=CEST
-Africa/Ceuta.generic.short=CET
-Africa/Ceuta.standard.short=CET
-Africa/Conakry.daylight.short=GMT
-Africa/Conakry.generic.short=GMT
-Africa/Conakry.standard.short=GMT
-Africa/Dakar.daylight.short=GMT
-Africa/Dakar.generic.short=GMT
-Africa/Dakar.standard.short=GMT
-Africa/Dar_es_Salaam.daylight.short=EAST
-Africa/Dar_es_Salaam.generic.short=EAT
-Africa/Dar_es_Salaam.standard.short=EAT
-Africa/Djibouti.daylight.short=EAST
-Africa/Djibouti.generic.short=EAT
-Africa/Djibouti.standard.short=EAT
-Africa/Douala.daylight.short=WAST
-Africa/Douala.generic.short=WAT
-Africa/Douala.standard.short=WAT
-Africa/El_Aaiun.daylight.short=WEST
-Africa/El_Aaiun.generic.short=WET
-Africa/El_Aaiun.standard.short=WET
-Africa/Freetown.daylight.short=SLST
-Africa/Freetown.generic.short=SLT
-Africa/Freetown.standard.short=GMT
-Africa/Gaborone.daylight.short=CAST
-Africa/Gaborone.generic.short=CAT
-Africa/Gaborone.standard.short=CAT
-Africa/Harare.daylight.short=CAST
-Africa/Harare.generic.short=CAT
-Africa/Harare.standard.short=CAT
-Africa/Johannesburg.daylight.short=SAST
-Africa/Johannesburg.generic.short=SAT
-Africa/Johannesburg.standard.short=SAST
-Africa/Juba.daylight.short=EAST
-Africa/Juba.generic.short=EAT
-Africa/Juba.standard.short=EAT
-Africa/Kampala.daylight.short=EAST
-Africa/Kampala.generic.short=EAT
-Africa/Kampala.standard.short=EAT
-Africa/Khartoum.daylight.short=EAST
-Africa/Khartoum.generic.short=EAT
-Africa/Khartoum.standard.short=EAT
-Africa/Kigali.daylight.short=CAST
-Africa/Kigali.generic.short=CAT
-Africa/Kigali.standard.short=CAT
-Africa/Kinshasa.daylight.short=WAST
-Africa/Kinshasa.generic.short=WAT
-Africa/Kinshasa.standard.short=WAT
-Africa/Lagos.daylight.short=WAST
-Africa/Lagos.generic.short=WAT
-Africa/Lagos.standard.short=WAT
-Africa/Libreville.daylight.short=WAST
-Africa/Libreville.generic.short=WAT
-Africa/Libreville.standard.short=WAT
-Africa/Lome.daylight.short=GMT
-Africa/Lome.generic.short=GMT
-Africa/Lome.standard.short=GMT
-Africa/Luanda.daylight.short=WAST
-Africa/Luanda.generic.short=WAT
-Africa/Luanda.standard.short=WAT
-Africa/Lubumbashi.daylight.short=CAST
-Africa/Lubumbashi.generic.short=CAT
-Africa/Lubumbashi.standard.short=CAT
-Africa/Lusaka.daylight.short=CAST
-Africa/Lusaka.generic.short=CAT
-Africa/Lusaka.standard.short=CAT
-Africa/Malabo.daylight.short=WAST
-Africa/Malabo.generic.short=WAT
-Africa/Malabo.standard.short=WAT
-Africa/Maputo.daylight.short=CAST
-Africa/Maputo.generic.short=CAT
-Africa/Maputo.standard.short=CAT
-Africa/Maseru.daylight.short=SAST
-Africa/Maseru.generic.short=SAT
-Africa/Maseru.standard.short=SAST
-Africa/Mbabane.daylight.short=SAST
-Africa/Mbabane.generic.short=SAT
-Africa/Mbabane.standard.short=SAST
-Africa/Mogadishu.daylight.short=EAST
-Africa/Mogadishu.generic.short=EAT
-Africa/Mogadishu.standard.short=EAT
-Africa/Monrovia.daylight.short=GMT
-Africa/Monrovia.generic.short=GMT
-Africa/Monrovia.standard.short=GMT
-Africa/Nairobi.daylight.short=EAST
-Africa/Nairobi.generic.short=EAT
-Africa/Nairobi.standard.short=EAT
-Africa/Ndjamena.daylight.short=WAST
-Africa/Ndjamena.generic.short=WAT
-Africa/Ndjamena.standard.short=WAT
-Africa/Niamey.daylight.short=WAST
-Africa/Niamey.generic.short=WAT
-Africa/Niamey.standard.short=WAT
-Africa/Nouakchott.daylight.short=GMT
-Africa/Nouakchott.generic.short=GMT
-Africa/Nouakchott.standard.short=GMT
-Africa/Ouagadougou.daylight.short=GMT
-Africa/Ouagadougou.generic.short=GMT
-Africa/Ouagadougou.standard.short=GMT
-Africa/Porto-Novo.daylight.short=WAST
-Africa/Porto-Novo.generic.short=WAT
-Africa/Porto-Novo.standard.short=WAT
-Africa/Sao_Tome.daylight.short=GMT
-Africa/Sao_Tome.generic.short=GMT
-Africa/Sao_Tome.standard.short=GMT
-Africa/Timbuktu.daylight.short=GMT
-Africa/Timbuktu.generic.short=GMT
-Africa/Timbuktu.standard.short=GMT
-Africa/Tripoli.daylight.short=EEST
-Africa/Tripoli.generic.short=EET
-Africa/Tripoli.standard.short=EET
-Africa/Tunis.daylight.short=CEST
-Africa/Tunis.generic.short=CET
-Africa/Tunis.standard.short=CET
-Africa/Windhoek.daylight.short=WAST
-Africa/Windhoek.generic.short=WAT
-Africa/Windhoek.standard.short=WAT
-AGT.daylight.short=ARST
-AGT.generic.short=ART
-AGT.standard.short=ART
-America/Adak.daylight.short=HADT
-America/Adak.generic.short=HAT
-America/Adak.standard.short=HAST
-America/Anchorage.daylight.short=AKDT
-America/Anchorage.generic.short=AKT
-America/Anchorage.standard.short=AKST
-America/Anguilla.daylight.short=ADT
-America/Anguilla.generic.short=AT
-America/Anguilla.standard.short=AST
-America/Antigua.daylight.short=ADT
-America/Antigua.generic.short=AT
-America/Antigua.standard.short=AST
-America/Araguaina.daylight.short=BRST
-America/Araguaina.generic.short=BRT
-America/Araguaina.standard.short=BRT
-America/Argentina/Buenos_Aires.daylight.short=ARST
-America/Argentina/Buenos_Aires.generic.short=ART
-America/Argentina/Buenos_Aires.standard.short=ART
-America/Argentina/Catamarca.daylight.short=ARST
-America/Argentina/Catamarca.generic.short=ART
-America/Argentina/Catamarca.standard.short=ART
-America/Argentina/ComodRivadavia.daylight.short=ARST
-America/Argentina/ComodRivadavia.generic.short=ART
-America/Argentina/ComodRivadavia.standard.short=ART
-America/Argentina/Cordoba.daylight.short=ARST
-America/Argentina/Cordoba.generic.short=ART
-America/Argentina/Cordoba.standard.short=ART
-America/Argentina/Jujuy.daylight.short=ARST
-America/Argentina/Jujuy.generic.short=ART
-America/Argentina/Jujuy.standard.short=ART
-America/Argentina/La_Rioja.daylight.short=ARST
-America/Argentina/La_Rioja.generic.short=ART
-America/Argentina/La_Rioja.standard.short=ART
-America/Argentina/Mendoza.daylight.short=ARST
-America/Argentina/Mendoza.generic.short=ART
-America/Argentina/Mendoza.standard.short=ART
-America/Argentina/Rio_Gallegos.daylight.short=ARST
-America/Argentina/Rio_Gallegos.generic.short=ART
-America/Argentina/Rio_Gallegos.standard.short=ART
-America/Argentina/Salta.daylight.short=ARST
-America/Argentina/Salta.generic.short=ART
-America/Argentina/Salta.standard.short=ART
-America/Argentina/San_Juan.daylight.short=ARST
-America/Argentina/San_Juan.generic.short=ART
-America/Argentina/San_Juan.standard.short=ART
-America/Argentina/San_Luis.daylight.short=ARST
-America/Argentina/San_Luis.generic.short=ART
-America/Argentina/San_Luis.standard.short=ART
-America/Argentina/Tucuman.daylight.short=ARST
-America/Argentina/Tucuman.generic.short=ART
-America/Argentina/Tucuman.standard.short=ART
-America/Argentina/Ushuaia.daylight.short=ARST
-America/Argentina/Ushuaia.generic.short=ART
-America/Argentina/Ushuaia.standard.short=ART
-America/Aruba.daylight.short=ADT
-America/Aruba.generic.short=AT
-America/Aruba.standard.short=AST
-America/Asuncion.daylight.short=PYST
-America/Asuncion.generic.short=PYT
-America/Asuncion.standard.short=PYT
-America/Atikokan.daylight.short=EDT
-America/Atikokan.generic.short=ET
-America/Atikokan.standard.short=EST
-America/Atka.daylight.short=HADT
-America/Atka.generic.short=HAT
-America/Atka.standard.short=HAST
-America/Bahia_Banderas.daylight.short=CDT
-America/Bahia_Banderas.generic.short=CT
-America/Bahia_Banderas.standard.short=CST
-America/Bahia.daylight.short=BRST
-America/Bahia.generic.short=BRT
-America/Bahia.standard.short=BRT
-America/Barbados.daylight.short=ADT
-America/Barbados.generic.short=AT
-America/Barbados.standard.short=AST
-America/Belem.daylight.short=BRST
-America/Belem.generic.short=BRT
-America/Belem.standard.short=BRT
-America/Belize.daylight.short=CDT
-America/Belize.generic.short=CT
-America/Belize.standard.short=CST
-America/Blanc-Sablon.daylight.short=ADT
-America/Blanc-Sablon.generic.short=AT
-America/Blanc-Sablon.standard.short=AST
-America/Boa_Vista.daylight.short=AMST
-America/Boa_Vista.generic.short=AMT
-America/Boa_Vista.standard.short=AMT
-America/Bogota.daylight.short=COST
-America/Bogota.generic.short=COT
-America/Bogota.standard.short=COT
-America/Boise.daylight.short=MDT
-America/Boise.generic.short=MT
-America/Boise.standard.short=MST
-America/Buenos_Aires.daylight.short=ARST
-America/Buenos_Aires.generic.short=ART
-America/Buenos_Aires.standard.short=ART
-America/Cambridge_Bay.daylight.short=MDT
-America/Cambridge_Bay.generic.short=MT
-America/Cambridge_Bay.standard.short=MST
-America/Campo_Grande.daylight.short=AMST
-America/Campo_Grande.generic.short=AMT
-America/Campo_Grande.standard.short=AMT
-America/Cancun.daylight.short=CDT
-America/Cancun.generic.short=CT
-America/Cancun.standard.short=CST
-America/Caracas.daylight.short=VEST
-America/Caracas.generic.short=VET
-America/Caracas.standard.short=VET
-America/Catamarca.daylight.short=ARST
-America/Catamarca.generic.short=ART
-America/Catamarca.standard.short=ART
-America/Cayenne.daylight.short=GFST
-America/Cayenne.generic.short=GFT
-America/Cayenne.standard.short=GFT
-America/Cayman.daylight.short=EDT
-America/Cayman.generic.short=ET
-America/Cayman.standard.short=EST
-America/Chicago.daylight.short=CDT
-America/Chicago.generic.short=CT
-America/Chicago.standard.short=CST
-America/Chihuahua.daylight.short=MDT
-America/Chihuahua.generic.short=MT
-America/Chihuahua.standard.short=MST
-America/Coral_Harbour.daylight.short=EDT
-America/Coral_Harbour.generic.short=ET
-America/Coral_Harbour.standard.short=EST
-America/Cordoba.daylight.short=ARST
-America/Cordoba.generic.short=ART
-America/Cordoba.standard.short=ART
-America/Costa_Rica.daylight.short=CDT
-America/Costa_Rica.generic.short=CT
-America/Costa_Rica.standard.short=CST
-America/Creston.daylight.short=MDT
-America/Creston.generic.short=MT
-America/Creston.standard.short=MST
-America/Cuiaba.daylight.short=AMST
-America/Cuiaba.generic.short=AMT
-America/Cuiaba.standard.short=AMT
-America/Curacao.daylight.short=ADT
-America/Curacao.generic.short=AT
-America/Curacao.standard.short=AST
-America/Danmarkshavn.daylight.short=GMT
-America/Danmarkshavn.generic.short=GMT
-America/Danmarkshavn.standard.short=GMT
-America/Dawson_Creek.daylight.short=MDT
-America/Dawson_Creek.generic.short=MT
-America/Dawson_Creek.standard.short=MST
-America/Dawson.daylight.short=PDT
-America/Dawson.generic.short=PT
-America/Dawson.standard.short=PST
-America/Denver.daylight.short=MDT
-America/Denver.generic.short=MT
-America/Denver.standard.short=MST
-America/Detroit.daylight.short=EDT
-America/Detroit.generic.short=ET
-America/Detroit.standard.short=EST
-America/Dominica.daylight.short=ADT
-America/Dominica.generic.short=AT
-America/Dominica.standard.short=AST
-America/Edmonton.daylight.short=MDT
-America/Edmonton.generic.short=MT
-America/Edmonton.standard.short=MST
-America/Eirunepe.daylight.short=ACST
-America/Eirunepe.generic.short=ACT
-America/Eirunepe.standard.short=ACT
-America/El_Salvador.daylight.short=CDT
-America/El_Salvador.generic.short=CT
-America/El_Salvador.standard.short=CST
-America/Ensenada.daylight.short=PDT
-America/Ensenada.generic.short=PT
-America/Ensenada.standard.short=PST
-America/Fortaleza.daylight.short=BRST
-America/Fortaleza.generic.short=BRT
-America/Fortaleza.standard.short=BRT
-America/Fort_Wayne.daylight.short=EDT
-America/Fort_Wayne.generic.short=ET
-America/Fort_Wayne.standard.short=EST
-America/Glace_Bay.daylight.short=ADT
-America/Glace_Bay.generic.short=AT
-America/Glace_Bay.standard.short=AST
-America/Godthab.daylight.short=WGST
-America/Godthab.generic.short=WGT
-America/Godthab.standard.short=WGT
-America/Goose_Bay.daylight.short=ADT
-America/Goose_Bay.generic.short=AT
-America/Goose_Bay.standard.short=AST
-America/Grand_Turk.daylight.short=EDT
-America/Grand_Turk.generic.short=ET
-America/Grand_Turk.standard.short=EST
-America/Grenada.daylight.short=ADT
-America/Grenada.generic.short=AT
-America/Grenada.standard.short=AST
-America/Guadeloupe.daylight.short=ADT
-America/Guadeloupe.generic.short=AT
-America/Guadeloupe.standard.short=AST
-America/Guatemala.daylight.short=CDT
-America/Guatemala.generic.short=CT
-America/Guatemala.standard.short=CST
-America/Guayaquil.daylight.short=ECST
-America/Guayaquil.generic.short=ECT
-America/Guayaquil.standard.short=ECT
-America/Guyana.daylight.short=GYST
-America/Guyana.generic.short=GYT
-America/Guyana.standard.short=GYT
-America/Halifax.daylight.short=ADT
-America/Halifax.generic.short=AT
-America/Halifax.standard.short=AST
-America/Havana.daylight.short=CDT
-America/Havana.generic.short=CT
-America/Havana.standard.short=CST
-America/Hermosillo.daylight.short=MDT
-America/Hermosillo.generic.short=MT
-America/Hermosillo.standard.short=MST
-America/Indiana/Indianapolis.daylight.short=EDT
-America/Indiana/Indianapolis.generic.short=ET
-America/Indiana/Indianapolis.standard.short=EST
-America/Indiana/Knox.daylight.short=CDT
-America/Indiana/Knox.generic.short=CT
-America/Indiana/Knox.standard.short=CST
-America/Indiana/Marengo.daylight.short=EDT
-America/Indiana/Marengo.generic.short=ET
-America/Indiana/Marengo.standard.short=EST
-America/Indiana/Petersburg.daylight.short=EDT
-America/Indiana/Petersburg.generic.short=ET
-America/Indiana/Petersburg.standard.short=EST
-America/Indianapolis.daylight.short=EDT
-America/Indianapolis.generic.short=ET
-America/Indianapolis.standard.short=EST
-America/Indiana/Tell_City.daylight.short=CDT
-America/Indiana/Tell_City.generic.short=CT
-America/Indiana/Tell_City.standard.short=CST
-America/Indiana/Vevay.daylight.short=EDT
-America/Indiana/Vevay.generic.short=ET
-America/Indiana/Vevay.standard.short=EST
-America/Indiana/Vincennes.daylight.short=EDT
-America/Indiana/Vincennes.generic.short=ET
-America/Indiana/Vincennes.standard.short=EST
-America/Indiana/Winamac.daylight.short=EDT
-America/Indiana/Winamac.generic.short=ET
-America/Indiana/Winamac.standard.short=EST
-America/Inuvik.daylight.short=MDT
-America/Inuvik.generic.short=MT
-America/Inuvik.standard.short=MST
-America/Iqaluit.daylight.short=EDT
-America/Iqaluit.generic.short=ET
-America/Iqaluit.standard.short=EST
-America/Jamaica.daylight.short=EDT
-America/Jamaica.generic.short=ET
-America/Jamaica.standard.short=EST
-America/Jujuy.daylight.short=ARST
-America/Jujuy.generic.short=ART
-America/Jujuy.standard.short=ART
-America/Juneau.daylight.short=AKDT
-America/Juneau.generic.short=AKT
-America/Juneau.standard.short=AKST
-America/Kentucky/Louisville.daylight.short=EDT
-America/Kentucky/Louisville.generic.short=ET
-America/Kentucky/Louisville.standard.short=EST
-America/Kentucky/Monticello.daylight.short=EDT
-America/Kentucky/Monticello.generic.short=ET
-America/Kentucky/Monticello.standard.short=EST
-America/Knox_IN.daylight.short=CDT
-America/Knox_IN.generic.short=CT
-America/Knox_IN.standard.short=CST
-America/Kralendijk.daylight.short=ADT
-America/Kralendijk.generic.short=AT
-America/Kralendijk.standard.short=AST
-America/La_Paz.daylight.short=BOST
-America/La_Paz.generic.short=BOT
-America/La_Paz.standard.short=BOT
-America/Lima.daylight.short=PEST
-America/Lima.generic.short=PET
-America/Lima.standard.short=PET
-America/Los_Angeles.daylight.short=PDT
-America/Los_Angeles.generic.short=PT
-America/Los_Angeles.standard.short=PST
-America/Louisville.daylight.short=EDT
-America/Louisville.generic.short=ET
-America/Louisville.standard.short=EST
-America/Lower_Princes.daylight.short=ADT
-America/Lower_Princes.generic.short=AT
-America/Lower_Princes.standard.short=AST
-America/Maceio.daylight.short=BRST
-America/Maceio.generic.short=BRT
-America/Maceio.standard.short=BRT
-America/Managua.daylight.short=CDT
-America/Managua.generic.short=CT
-America/Managua.standard.short=CST
-America/Manaus.daylight.short=AMST
-America/Manaus.generic.short=AMT
-America/Manaus.standard.short=AMT
-America/Marigot.daylight.short=ADT
-America/Marigot.generic.short=AT
-America/Marigot.standard.short=AST
-America/Martinique.daylight.short=ADT
-America/Martinique.generic.short=AT
-America/Martinique.standard.short=AST
-America/Matamoros.daylight.short=CDT
-America/Matamoros.generic.short=CT
-America/Matamoros.standard.short=CST
-America/Mazatlan.daylight.short=MDT
-America/Mazatlan.generic.short=MT
-America/Mazatlan.standard.short=MST
-America/Mendoza.daylight.short=ARST
-America/Mendoza.generic.short=ART
-America/Mendoza.standard.short=ART
-America/Menominee.daylight.short=CDT
-America/Menominee.generic.short=CT
-America/Menominee.standard.short=CST
-America/Merida.daylight.short=CDT
-America/Merida.generic.short=CT
-America/Merida.standard.short=CST
-America/Metlakatla.daylight.short=MeDT
-America/Metlakatla.generic.short=MeT
-America/Metlakatla.standard.short=MeST
-America/Mexico_City.daylight.short=CDT
-America/Mexico_City.generic.short=CT
-America/Mexico_City.standard.short=CST
-America/Miquelon.daylight.short=PMDT
-America/Miquelon.generic.short=PMT
-America/Miquelon.standard.short=PMST
-America/Moncton.daylight.short=ADT
-America/Moncton.generic.short=AT
-America/Moncton.standard.short=AST
-America/Monterrey.daylight.short=CDT
-America/Monterrey.generic.short=CT
-America/Monterrey.standard.short=CST
-America/Montevideo.daylight.short=UYST
-America/Montevideo.generic.short=UYT
-America/Montevideo.standard.short=UYT
-America/Montreal.daylight.short=EDT
-America/Montreal.generic.short=ET
-America/Montreal.standard.short=EST
-America/Montserrat.daylight.short=ADT
-America/Montserrat.generic.short=AT
-America/Montserrat.standard.short=AST
-America/Nassau.daylight.short=EDT
-America/Nassau.generic.short=ET
-America/Nassau.standard.short=EST
-America/New_York.daylight.short=EDT
-America/New_York.generic.short=ET
-America/New_York.standard.short=EST
-America/Nipigon.daylight.short=EDT
-America/Nipigon.generic.short=ET
-America/Nipigon.standard.short=EST
-America/Nome.daylight.short=AKDT
-America/Nome.generic.short=AKT
-America/Nome.standard.short=AKST
-America/Noronha.daylight.short=FNST
-America/Noronha.generic.short=FNT
-America/Noronha.standard.short=FNT
-America/North_Dakota/Beulah.daylight.short=CDT
-America/North_Dakota/Beulah.generic.short=CT
-America/North_Dakota/Beulah.standard.short=CST
-America/North_Dakota/Center.daylight.short=CDT
-America/North_Dakota/Center.generic.short=CT
-America/North_Dakota/Center.standard.short=CST
-America/North_Dakota/New_Salem.daylight.short=CDT
-America/North_Dakota/New_Salem.generic.short=CT
-America/North_Dakota/New_Salem.standard.short=CST
-America/Ojinaga.daylight.short=MDT
-America/Ojinaga.generic.short=MT
-America/Ojinaga.standard.short=MST
-America/Panama.daylight.short=EDT
-America/Panama.generic.short=ET
-America/Panama.standard.short=EST
-America/Pangnirtung.daylight.short=EDT
-America/Pangnirtung.generic.short=ET
-America/Pangnirtung.standard.short=EST
-America/Paramaribo.daylight.short=SRST
-America/Paramaribo.generic.short=SRT
-America/Paramaribo.standard.short=SRT
-America/Phoenix.daylight.short=MDT
-America/Phoenix.generic.short=MT
-America/Phoenix.standard.short=MST
-America/Port-au-Prince.daylight.short=EDT
-America/Port-au-Prince.generic.short=ET
-America/Port-au-Prince.standard.short=EST
-America/Porto_Acre.daylight.short=ACST
-America/Porto_Acre.generic.short=ACT
-America/Porto_Acre.standard.short=ACT
-America/Port_of_Spain.daylight.short=ADT
-America/Port_of_Spain.generic.short=AT
-America/Port_of_Spain.standard.short=AST
-America/Porto_Velho.daylight.short=AMST
-America/Porto_Velho.generic.short=AMT
-America/Porto_Velho.standard.short=AMT
-America/Puerto_Rico.daylight.short=ADT
-America/Puerto_Rico.generic.short=AT
-America/Puerto_Rico.standard.short=AST
-America/Rainy_River.daylight.short=CDT
-America/Rainy_River.generic.short=CT
-America/Rainy_River.standard.short=CST
-America/Rankin_Inlet.daylight.short=CDT
-America/Rankin_Inlet.generic.short=CT
-America/Rankin_Inlet.standard.short=CST
-America/Recife.daylight.short=BRST
-America/Recife.generic.short=BRT
-America/Recife.standard.short=BRT
-America/Regina.daylight.short=CDT
-America/Regina.generic.short=CT
-America/Regina.standard.short=CST
-America/Resolute.daylight.short=CDT
-America/Resolute.generic.short=CT
-America/Resolute.standard.short=CST
-America/Rio_Branco.daylight.short=ACST
-America/Rio_Branco.generic.short=ACT
-America/Rio_Branco.standard.short=ACT
-America/Rosario.daylight.short=ARST
-America/Rosario.generic.short=ART
-America/Rosario.standard.short=ART
-America/Santa_Isabel.daylight.short=PDT
-America/Santa_Isabel.generic.short=PT
-America/Santa_Isabel.standard.short=PST
-America/Santarem.daylight.short=BRST
-America/Santarem.generic.short=BRT
-America/Santarem.standard.short=BRT
-America/Santiago.daylight.short=CLST
-America/Santiago.generic.short=CLT
-America/Santiago.standard.short=CLT
-America/Santo_Domingo.daylight.short=ADT
-America/Santo_Domingo.generic.short=AT
-America/Santo_Domingo.standard.short=AST
-America/Sao_Paulo.daylight.short=BRST
-America/Sao_Paulo.generic.short=BRT
-America/Sao_Paulo.standard.short=BRT
-America/Scoresbysund.daylight.short=EGST
-America/Scoresbysund.generic.short=EGT
-America/Scoresbysund.standard.short=EGT
-America/Shiprock.daylight.short=MDT
-America/Shiprock.generic.short=MT
-America/Shiprock.standard.short=MST
-America/Sitka.daylight.short=AKDT
-America/Sitka.generic.short=AKT
-America/Sitka.standard.short=AKST
-America/St_Barthelemy.daylight.short=ADT
-America/St_Barthelemy.generic.short=AT
-America/St_Barthelemy.standard.short=AST
-America/St_Johns.daylight.short=NDT
-America/St_Johns.generic.short=NT
-America/St_Johns.standard.short=NST
-America/St_Kitts.daylight.short=ADT
-America/St_Kitts.generic.short=AT
-America/St_Kitts.standard.short=AST
-America/St_Lucia.daylight.short=ADT
-America/St_Lucia.generic.short=AT
-America/St_Lucia.standard.short=AST
-America/St_Thomas.daylight.short=ADT
-America/St_Thomas.generic.short=AT
-America/St_Thomas.standard.short=AST
-America/St_Vincent.daylight.short=ADT
-America/St_Vincent.generic.short=AT
-America/St_Vincent.standard.short=AST
-America/Swift_Current.daylight.short=CDT
-America/Swift_Current.generic.short=CT
-America/Swift_Current.standard.short=CST
-America/Tegucigalpa.daylight.short=CDT
-America/Tegucigalpa.generic.short=CT
-America/Tegucigalpa.standard.short=CST
-America/Thule.daylight.short=ADT
-America/Thule.generic.short=AT
-America/Thule.standard.short=AST
-America/Thunder_Bay.daylight.short=EDT
-America/Thunder_Bay.generic.short=ET
-America/Thunder_Bay.standard.short=EST
-America/Tijuana.daylight.short=PDT
-America/Tijuana.generic.short=PT
-America/Tijuana.standard.short=PST
-America/Toronto.daylight.short=EDT
-America/Toronto.generic.short=ET
-America/Toronto.standard.short=EST
-America/Tortola.daylight.short=ADT
-America/Tortola.generic.short=AT
-America/Tortola.standard.short=AST
-America/Vancouver.daylight.short=PDT
-America/Vancouver.generic.short=PT
-America/Vancouver.standard.short=PST
-America/Virgin.daylight.short=ADT
-America/Virgin.generic.short=AT
-America/Virgin.standard.short=AST
-America/Whitehorse.daylight.short=PDT
-America/Whitehorse.generic.short=PT
-America/Whitehorse.standard.short=PST
-America/Winnipeg.daylight.short=CDT
-America/Winnipeg.generic.short=CT
-America/Winnipeg.standard.short=CST
-America/Yakutat.daylight.short=AKDT
-America/Yakutat.generic.short=AKT
-America/Yakutat.standard.short=AKST
-America/Yellowknife.daylight.short=MDT
-America/Yellowknife.generic.short=MT
-America/Yellowknife.standard.short=MST
-Antarctica/Casey.daylight.short=WST
-Antarctica/Casey.generic.short=WT
-Antarctica/Casey.standard.short=WST
-Antarctica/Davis.daylight.short=DAVST
-Antarctica/Davis.generic.short=DAVT
-Antarctica/Davis.standard.short=DAVT
-Antarctica/DumontDUrville.daylight.short=DDUST
-Antarctica/DumontDUrville.generic.short=DDUT
-Antarctica/DumontDUrville.standard.short=DDUT
-Antarctica/Macquarie.daylight.short=MIST
-Antarctica/Macquarie.generic.short=MIST
-Antarctica/Macquarie.standard.short=MIST
-Antarctica/Mawson.daylight.short=MAWST
-Antarctica/Mawson.generic.short=MAWT
-Antarctica/Mawson.standard.short=MAWT
-Antarctica/McMurdo.daylight.short=NZDT
-Antarctica/McMurdo.generic.short=NZT
-Antarctica/McMurdo.standard.short=NZST
-Antarctica/Palmer.daylight.short=CLST
-Antarctica/Palmer.generic.short=CLT
-Antarctica/Palmer.standard.short=CLT
-Antarctica/Rothera.daylight.short=ROTST
-Antarctica/Rothera.generic.short=ROTT
-Antarctica/Rothera.standard.short=ROTT
-Antarctica/South_Pole.daylight.short=NZDT
-Antarctica/South_Pole.generic.short=NZT
-Antarctica/South_Pole.standard.short=NZST
-Antarctica/Syowa.daylight.short=SYOST
-Antarctica/Syowa.generic.short=SYOT
-Antarctica/Syowa.standard.short=SYOT
-Antarctica/Vostok.daylight.short=VOSST
-Antarctica/Vostok.generic.short=VOST
-Antarctica/Vostok.standard.short=VOST
-Arctic/Longyearbyen.daylight.short=CEST
-Arctic/Longyearbyen.generic.short=CET
-Arctic/Longyearbyen.standard.short=CET
-ART.daylight.short=EEST
-ART.generic.short=EET
-ART.standard.short=EET
-Asia/Aden.daylight.short=ADT
-Asia/Aden.generic.short=AT
-Asia/Aden.standard.short=AST
-Asia/Almaty.daylight.short=ALMST
-Asia/Almaty.generic.short=ALMT
-Asia/Almaty.standard.short=ALMT
-Asia/Amman.daylight.short=ADT
-Asia/Amman.generic.short=AT
-Asia/Amman.standard.short=AST
-Asia/Anadyr.daylight.short=ANAST
-Asia/Anadyr.generic.short=ANAT
-Asia/Anadyr.standard.short=ANAT
-Asia/Aqtau.daylight.short=AQTST
-Asia/Aqtau.generic.short=AQTT
-Asia/Aqtau.standard.short=AQTT
-Asia/Aqtobe.daylight.short=AQTST
-Asia/Aqtobe.generic.short=AQTT
-Asia/Aqtobe.standard.short=AQTT
-Asia/Ashgabat.daylight.short=TMST
-Asia/Ashgabat.generic.short=TMT
-Asia/Ashgabat.standard.short=TMT
-Asia/Ashkhabad.daylight.short=TMST
-Asia/Ashkhabad.generic.short=TMT
-Asia/Ashkhabad.standard.short=TMT
-Asia/Baghdad.daylight.short=ADT
-Asia/Baghdad.generic.short=AT
-Asia/Baghdad.standard.short=AST
-Asia/Bahrain.daylight.short=ADT
-Asia/Bahrain.generic.short=AT
-Asia/Bahrain.standard.short=AST
-Asia/Baku.daylight.short=AZST
-Asia/Baku.generic.short=AZT
-Asia/Baku.standard.short=AZT
-Asia/Bangkok.daylight.short=ICST
-Asia/Bangkok.generic.short=ICT
-Asia/Bangkok.standard.short=ICT
-Asia/Beirut.daylight.short=EEST
-Asia/Beirut.generic.short=EET
-Asia/Beirut.standard.short=EET
-Asia/Bishkek.daylight.short=KGST
-Asia/Bishkek.generic.short=KGT
-Asia/Bishkek.standard.short=KGT
-Asia/Brunei.daylight.short=BNST
-Asia/Brunei.generic.short=BNT
-Asia/Brunei.standard.short=BNT
-Asia/Calcutta.daylight.short=IDT
-Asia/Calcutta.generic.short=IT
-Asia/Calcutta.standard.short=IST
-Asia/Choibalsan.daylight.short=CHOST
-Asia/Choibalsan.generic.short=CHOT
-Asia/Choibalsan.standard.short=CHOT
-Asia/Chongqing.daylight.short=CDT
-Asia/Chongqing.generic.short=CT
-Asia/Chongqing.standard.short=CST
-Asia/Chungking.daylight.short=CDT
-Asia/Chungking.generic.short=CT
-Asia/Chungking.standard.short=CST
-Asia/Colombo.daylight.short=IDT
-Asia/Colombo.generic.short=IT
-Asia/Colombo.standard.short=IST
-Asia/Dacca.daylight.short=BDST
-Asia/Dacca.generic.short=BDT
-Asia/Dacca.standard.short=BDT
-Asia/Damascus.daylight.short=EEST
-Asia/Damascus.generic.short=EET
-Asia/Damascus.standard.short=EET
-Asia/Dhaka.daylight.short=BDST
-Asia/Dhaka.generic.short=BDT
-Asia/Dhaka.standard.short=BDT
-Asia/Dili.daylight.short=TLST
-Asia/Dili.generic.short=TLT
-Asia/Dili.standard.short=TLT
-Asia/Dubai.daylight.short=GDT
-Asia/Dubai.generic.short=GT
-Asia/Dubai.standard.short=GST
-Asia/Dushanbe.daylight.short=TJST
-Asia/Dushanbe.generic.short=TJT
-Asia/Dushanbe.standard.short=TJT
-Asia/Gaza.daylight.short=EEST
-Asia/Gaza.generic.short=EET
-Asia/Gaza.standard.short=EET
-Asia/Harbin.daylight.short=CDT
-Asia/Harbin.generic.short=CT
-Asia/Harbin.standard.short=CST
-Asia/Hebron.daylight.short=EEST
-Asia/Hebron.generic.short=EET
-Asia/Hebron.standard.short=EET
-Asia/Ho_Chi_Minh.daylight.short=ICST
-Asia/Ho_Chi_Minh.generic.short=ICT
-Asia/Ho_Chi_Minh.standard.short=ICT
-Asia/Hong_Kong.daylight.short=HKST
-Asia/Hong_Kong.generic.short=HKT
-Asia/Hong_Kong.standard.short=HKT
-Asia/Hovd.daylight.short=HOVST
-Asia/Hovd.generic.short=HOVT
-Asia/Hovd.standard.short=HOVT
-Asia/Irkutsk.daylight.short=IRKST
-Asia/Irkutsk.generic.short=IRKT
-Asia/Irkutsk.standard.short=IRKT
-Asia/Istanbul.daylight.short=EEST
-Asia/Istanbul.generic.short=EET
-Asia/Istanbul.standard.short=EET
-Asia/Jakarta.daylight.short=WIST
-Asia/Jakarta.generic.short=WIB
-Asia/Jakarta.standard.short=WIB
-Asia/Jayapura.daylight.short=EIST
-Asia/Jayapura.generic.short=WIT
-Asia/Jayapura.standard.short=WIT
-Asia/Jerusalem.daylight.short=IDT
-Asia/Jerusalem.generic.short=IT
-Asia/Jerusalem.standard.short=IST
-Asia/Kabul.daylight.short=AFST
-Asia/Kabul.generic.short=AFT
-Asia/Kabul.standard.short=AFT
-Asia/Kamchatka.daylight.short=PETST
-Asia/Kamchatka.generic.short=PETT
-Asia/Kamchatka.standard.short=PETT
-Asia/Karachi.daylight.short=PKST
-Asia/Karachi.generic.short=PKT
-Asia/Karachi.standard.short=PKT
-Asia/Kashgar.daylight.short=CDT
-Asia/Kashgar.generic.short=CT
-Asia/Kashgar.standard.short=CST
-Asia/Kathmandu.daylight.short=NPST
-Asia/Kathmandu.generic.short=NPT
-Asia/Kathmandu.standard.short=NPT
-Asia/Katmandu.daylight.short=NPST
-Asia/Katmandu.generic.short=NPT
-Asia/Katmandu.standard.short=NPT
-Asia/Khandyga.daylight.short=YAKST
-Asia/Khandyga.generic.short=YAKT
-Asia/Khandyga.standard.short=YAKT
-Asia/Kolkata.daylight.short=IDT
-Asia/Kolkata.generic.short=IT
-Asia/Kolkata.standard.short=IST
-Asia/Krasnoyarsk.daylight.short=KRAST
-Asia/Krasnoyarsk.generic.short=KRAT
-Asia/Krasnoyarsk.standard.short=KRAT
-Asia/Kuala_Lumpur.daylight.short=MYST
-Asia/Kuala_Lumpur.generic.short=MYT
-Asia/Kuala_Lumpur.standard.short=MYT
-Asia/Kuching.daylight.short=MYST
-Asia/Kuching.generic.short=MYT
-Asia/Kuching.standard.short=MYT
-Asia/Kuwait.daylight.short=ADT
-Asia/Kuwait.generic.short=AT
-Asia/Kuwait.standard.short=AST
-Asia/Macao.daylight.short=CDT
-Asia/Macao.generic.short=CT
-Asia/Macao.standard.short=CST
-Asia/Macau.daylight.short=CDT
-Asia/Macau.generic.short=CT
-Asia/Macau.standard.short=CST
-Asia/Magadan.daylight.short=MAGST
-Asia/Magadan.generic.short=MAGT
-Asia/Magadan.standard.short=MAGT
-Asia/Makassar.daylight.short=CIST
-Asia/Makassar.generic.short=WITA
-Asia/Makassar.standard.short=WITA
-Asia/Manila.daylight.short=PHST
-Asia/Manila.generic.short=PHT
-Asia/Manila.standard.short=PHT
-Asia/Muscat.daylight.short=GDT
-Asia/Muscat.generic.short=GT
-Asia/Muscat.standard.short=GST
-Asia/Nicosia.daylight.short=EEST
-Asia/Nicosia.generic.short=EET
-Asia/Nicosia.standard.short=EET
-Asia/Novokuznetsk.daylight.short=NOVST
-Asia/Novokuznetsk.generic.short=NOVT
-Asia/Novokuznetsk.standard.short=NOVT
-Asia/Novosibirsk.daylight.short=NOVST
-Asia/Novosibirsk.generic.short=NOVT
-Asia/Novosibirsk.standard.short=NOVT
-Asia/Omsk.daylight.short=OMSST
-Asia/Omsk.generic.short=OMST
-Asia/Omsk.standard.short=OMST
-Asia/Oral.daylight.short=ORAST
-Asia/Oral.generic.short=ORAT
-Asia/Oral.standard.short=ORAT
-Asia/Phnom_Penh.daylight.short=ICST
-Asia/Phnom_Penh.generic.short=ICT
-Asia/Phnom_Penh.standard.short=ICT
-Asia/Pontianak.daylight.short=WIST
-Asia/Pontianak.generic.short=WIB
-Asia/Pontianak.standard.short=WIB
-Asia/Pyongyang.daylight.short=KDT
-Asia/Pyongyang.generic.short=KT
-Asia/Pyongyang.standard.short=KST
-Asia/Qatar.daylight.short=ADT
-Asia/Qatar.generic.short=AT
-Asia/Qatar.standard.short=AST
-Asia/Qyzylorda.daylight.short=QYZST
-Asia/Qyzylorda.generic.short=QYZT
-Asia/Qyzylorda.standard.short=QYZT
-Asia/Rangoon.daylight.short=MMST
-Asia/Rangoon.generic.short=MMT
-Asia/Rangoon.standard.short=MMT
-Asia/Saigon.daylight.short=ICST
-Asia/Saigon.generic.short=ICT
-Asia/Saigon.standard.short=ICT
-Asia/Sakhalin.daylight.short=SAKST
-Asia/Sakhalin.generic.short=SAKT
-Asia/Sakhalin.standard.short=SAKT
-Asia/Samarkand.daylight.short=UZST
-Asia/Samarkand.generic.short=UZT
-Asia/Samarkand.standard.short=UZT
-Asia/Seoul.daylight.short=KDT
-Asia/Seoul.generic.short=KT
-Asia/Seoul.standard.short=KST
-Asia/Shanghai.daylight.short=CDT
-Asia/Shanghai.generic.short=CT
-Asia/Shanghai.standard.short=CST
-Asia/Singapore.daylight.short=SGST
-Asia/Singapore.generic.short=SGT
-Asia/Singapore.standard.short=SGT
-Asia/Taipei.daylight.short=CDT
-Asia/Taipei.generic.short=CT
-Asia/Taipei.standard.short=CST
-Asia/Tashkent.daylight.short=UZST
-Asia/Tashkent.generic.short=UZT
-Asia/Tashkent.standard.short=UZT
-Asia/Tbilisi.daylight.short=GEST
-Asia/Tbilisi.generic.short=GET
-Asia/Tbilisi.standard.short=GET
-Asia/Tehran.daylight.short=IRDT
-Asia/Tehran.generic.short=IRT
-Asia/Tehran.standard.short=IRST
-Asia/Tel_Aviv.daylight.short=IDT
-Asia/Tel_Aviv.generic.short=IT
-Asia/Tel_Aviv.standard.short=IST
-Asia/Thimbu.daylight.short=BTST
-Asia/Thimbu.generic.short=BTT
-Asia/Thimbu.standard.short=BTT
-Asia/Thimphu.daylight.short=BTST
-Asia/Thimphu.generic.short=BTT
-Asia/Thimphu.standard.short=BTT
-Asia/Tokyo.daylight.short=JDT
-Asia/Tokyo.generic.short=JT
-Asia/Tokyo.standard.short=JST
-Asia/Ujung_Pandang.daylight.short=CIST
-Asia/Ujung_Pandang.generic.short=WITA
-Asia/Ujung_Pandang.standard.short=WITA
-Asia/Ulaanbaatar.daylight.short=ULAST
-Asia/Ulaanbaatar.generic.short=ULAT
-Asia/Ulaanbaatar.standard.short=ULAT
-Asia/Ulan_Bator.daylight.short=ULAST
-Asia/Ulan_Bator.generic.short=ULAT
-Asia/Ulan_Bator.standard.short=ULAT
-Asia/Urumqi.daylight.short=CDT
-Asia/Urumqi.generic.short=CT
-Asia/Urumqi.standard.short=CST
-Asia/Ust-Nera.daylight.short=VLAST
-Asia/Ust-Nera.generic.short=VLAT
-Asia/Ust-Nera.standard.short=VLAT
-Asia/Vientiane.daylight.short=ICST
-Asia/Vientiane.generic.short=ICT
-Asia/Vientiane.standard.short=ICT
-Asia/Vladivostok.daylight.short=VLAST
-Asia/Vladivostok.generic.short=VLAT
-Asia/Vladivostok.standard.short=VLAT
-Asia/Yakutsk.daylight.short=YAKST
-Asia/Yakutsk.generic.short=YAKT
-Asia/Yakutsk.standard.short=YAKT
-Asia/Yekaterinburg.daylight.short=YEKST
-Asia/Yekaterinburg.generic.short=YEKT
-Asia/Yekaterinburg.standard.short=YEKT
-Asia/Yerevan.daylight.short=AMST
-Asia/Yerevan.generic.short=AMT
-Asia/Yerevan.standard.short=AMT
-AST.daylight.short=AKDT
-AST.generic.short=AKT
-AST.standard.short=AKST
-Atlantic/Azores.daylight.short=AZOST
-Atlantic/Azores.generic.short=AZOT
-Atlantic/Azores.standard.short=AZOT
-Atlantic/Bermuda.daylight.short=ADT
-Atlantic/Bermuda.generic.short=AT
-Atlantic/Bermuda.standard.short=AST
-Atlantic/Canary.daylight.short=WEST
-Atlantic/Canary.generic.short=WET
-Atlantic/Canary.standard.short=WET
-Atlantic/Cape_Verde.daylight.short=CVST
-Atlantic/Cape_Verde.generic.short=CVT
-Atlantic/Cape_Verde.standard.short=CVT
-Atlantic/Faeroe.daylight.short=WEST
-Atlantic/Faeroe.generic.short=WET
-Atlantic/Faeroe.standard.short=WET
-Atlantic/Faroe.daylight.short=WEST
-Atlantic/Faroe.generic.short=WET
-Atlantic/Faroe.standard.short=WET
-Atlantic/Jan_Mayen.daylight.short=CEST
-Atlantic/Jan_Mayen.generic.short=CET
-Atlantic/Jan_Mayen.standard.short=CET
-Atlantic/Madeira.daylight.short=WEST
-Atlantic/Madeira.generic.short=WET
-Atlantic/Madeira.standard.short=WET
-Atlantic/Reykjavik.daylight.short=GMT
-Atlantic/Reykjavik.generic.short=GMT
-Atlantic/Reykjavik.standard.short=GMT
-Atlantic/South_Georgia.daylight.short=GDT
-Atlantic/South_Georgia.generic.short=GT
-Atlantic/South_Georgia.standard.short=GST
-Atlantic/Stanley.daylight.short=FKST
-Atlantic/Stanley.generic.short=FKT
-Atlantic/Stanley.standard.short=FKT
-Atlantic/St_Helena.daylight.short=GMT
-Atlantic/St_Helena.generic.short=GMT
-Atlantic/St_Helena.standard.short=GMT
-Australia/ACT.daylight.short=EST
-Australia/ACT.generic.short=ET
-Australia/ACT.standard.short=EST
-Australia/Adelaide.daylight.short=CST
-Australia/Adelaide.generic.short=CT
-Australia/Adelaide.standard.short=CST
-Australia/Brisbane.daylight.short=EST
-Australia/Brisbane.generic.short=ET
-Australia/Brisbane.standard.short=EST
-Australia/Broken_Hill.daylight.short=CST
-Australia/Broken_Hill.generic.short=CT
-Australia/Broken_Hill.standard.short=CST
-Australia/Canberra.daylight.short=EST
-Australia/Canberra.generic.short=ET
-Australia/Canberra.standard.short=EST
-Australia/Currie.daylight.short=EST
-Australia/Currie.generic.short=ET
-Australia/Currie.standard.short=EST
-Australia/Darwin.daylight.short=CST
-Australia/Darwin.generic.short=CT
-Australia/Darwin.standard.short=CST
-Australia/Eucla.daylight.short=CWST
-Australia/Eucla.generic.short=CWT
-Australia/Eucla.standard.short=CWST
-Australia/Hobart.daylight.short=EST
-Australia/Hobart.generic.short=ET
-Australia/Hobart.standard.short=EST
-Australia/LHI.daylight.short=LHST
-Australia/LHI.generic.short=LHT
-Australia/LHI.standard.short=LHST
-Australia/Lindeman.daylight.short=EST
-Australia/Lindeman.generic.short=ET
-Australia/Lindeman.standard.short=EST
-Australia/Lord_Howe.daylight.short=LHST
-Australia/Lord_Howe.generic.short=LHT
-Australia/Lord_Howe.standard.short=LHST
-Australia/Melbourne.daylight.short=EST
-Australia/Melbourne.generic.short=ET
-Australia/Melbourne.standard.short=EST
-Australia/North.daylight.short=CST
-Australia/North.generic.short=CT
-Australia/North.standard.short=CST
-Australia/NSW.daylight.short=EST
-Australia/NSW.generic.short=ET
-Australia/NSW.standard.short=EST
-Australia/Perth.daylight.short=WST
-Australia/Perth.generic.short=WT
-Australia/Perth.standard.short=WST
-Australia/Queensland.daylight.short=EST
-Australia/Queensland.generic.short=ET
-Australia/Queensland.standard.short=EST
-Australia/South.daylight.short=CST
-Australia/South.generic.short=CT
-Australia/South.standard.short=CST
-Australia/Sydney.daylight.short=EST
-Australia/Sydney.generic.short=ET
-Australia/Sydney.standard.short=EST
-Australia/Tasmania.daylight.short=EST
-Australia/Tasmania.generic.short=ET
-Australia/Tasmania.standard.short=EST
-Australia/Victoria.daylight.short=EST
-Australia/Victoria.generic.short=ET
-Australia/Victoria.standard.short=EST
-Australia/West.daylight.short=WST
-Australia/West.generic.short=WT
-Australia/West.standard.short=WST
-Australia/Yancowinna.daylight.short=CST
-Australia/Yancowinna.generic.short=CT
-Australia/Yancowinna.standard.short=CST
-BET.daylight.short=BRST
-BET.generic.short=BRT
-BET.standard.short=BRT
-Brazil/Acre.daylight.short=ACST
-Brazil/Acre.generic.short=ACT
-Brazil/Acre.standard.short=ACT
-Brazil/DeNoronha.daylight.short=FNST
-Brazil/DeNoronha.generic.short=FNT
-Brazil/DeNoronha.standard.short=FNT
-Brazil/East.daylight.short=BRST
-Brazil/East.generic.short=BRT
-Brazil/East.standard.short=BRT
-Brazil/West.daylight.short=AMST
-Brazil/West.generic.short=AMT
-Brazil/West.standard.short=AMT
-BST.daylight.short=BDST
-BST.generic.short=BDT
-BST.standard.short=BDT
-Canada/Atlantic.daylight.short=ADT
-Canada/Atlantic.generic.short=AT
-Canada/Atlantic.standard.short=AST
-Canada/Central.daylight.short=CDT
-Canada/Central.generic.short=CT
-Canada/Central.standard.short=CST
-Canada/Eastern.daylight.short=EDT
-Canada/Eastern.generic.short=ET
-Canada/Eastern.standard.short=EST
-Canada/East-Saskatchewan.daylight.short=CDT
-Canada/East-Saskatchewan.generic.short=CT
-Canada/East-Saskatchewan.standard.short=CST
-Canada/Mountain.daylight.short=MDT
-Canada/Mountain.generic.short=MT
-Canada/Mountain.standard.short=MST
-Canada/Newfoundland.daylight.short=NDT
-Canada/Newfoundland.generic.short=NT
-Canada/Newfoundland.standard.short=NST
-Canada/Pacific.daylight.short=PDT
-Canada/Pacific.generic.short=PT
-Canada/Pacific.standard.short=PST
-Canada/Saskatchewan.daylight.short=CDT
-Canada/Saskatchewan.generic.short=CT
-Canada/Saskatchewan.standard.short=CST
-Canada/Yukon.daylight.short=PDT
-Canada/Yukon.generic.short=PT
-Canada/Yukon.standard.short=PST
-CAT.daylight.short=CAST
-CAT.generic.short=CAT
-CAT.standard.short=CAT
-CET.daylight.short=CEST
-CET.generic.short=CET
-CET.standard.short=CET
-Chile/Continental.daylight.short=CLST
-Chile/Continental.generic.short=CLT
-Chile/Continental.standard.short=CLT
-Chile/EasterIsland.daylight.short=EASST
-Chile/EasterIsland.generic.short=EAST
-Chile/EasterIsland.standard.short=EAST
-CNT.daylight.short=NDT
-CNT.generic.short=NT
-CNT.standard.short=NST
-CST6CDT.daylight.short=CDT
-CST6CDT.generic.short=CT
-CST6CDT.standard.short=CST
-CST.daylight.short=CDT
-CST.generic.short=CT
-CST.standard.short=CST
-CTT.daylight.short=CDT
-CTT.generic.short=CT
-CTT.standard.short=CST
-Cuba.daylight.short=CDT
-Cuba.generic.short=CT
-Cuba.standard.short=CST
-EAT.daylight.short=EAST
-EAT.generic.short=EAT
-EAT.standard.short=EAT
-ECT.daylight.short=CEST
-ECT.generic.short=CET
-ECT.standard.short=CET
-EET.daylight.short=EEST
-EET.generic.short=EET
-EET.standard.short=EET
-Egypt.daylight.short=EEST
-Egypt.generic.short=EET
-Egypt.standard.short=EET
-Eire.daylight.short=IST
-Eire.generic.short=IT
-Eire.standard.short=GMT
-EST5EDT.daylight.short=EDT
-EST5EDT.generic.short=ET
-EST5EDT.standard.short=EST
-EST.daylight.short=EDT
-EST.generic.short=ET
-EST.standard.short=EST
-Etc/Greenwich.daylight.short=GMT
-Etc/Greenwich.generic.short=GMT
-Etc/Greenwich.standard.short=GMT
-Etc/UCT.daylight.short=UTC
-Etc/UCT.generic.short=UTC
-Etc/UCT.standard.short=UTC
-Etc/Universal.daylight.short=UTC
-Etc/Universal.generic.short=UTC
-Etc/Universal.standard.short=UTC
-Etc/UTC.daylight.short=UTC
-Etc/UTC.generic.short=UTC
-Etc/UTC.standard.short=UTC
-Etc/Zulu.daylight.short=UTC
-Etc/Zulu.generic.short=UTC
-Etc/Zulu.standard.short=UTC
-Europe/Amsterdam.daylight.short=CEST
-Europe/Amsterdam.generic.short=CET
-Europe/Amsterdam.standard.short=CET
-Europe/Andorra.daylight.short=CEST
-Europe/Andorra.generic.short=CET
-Europe/Andorra.standard.short=CET
-Europe/Athens.daylight.short=EEST
-Europe/Athens.generic.short=EET
-Europe/Athens.standard.short=EET
-Europe/Belfast.daylight.short=BST
-Europe/Belfast.generic.short=BT
-Europe/Belfast.standard.short=GMT
-Europe/Belgrade.daylight.short=CEST
-Europe/Belgrade.generic.short=CET
-Europe/Belgrade.standard.short=CET
-Europe/Berlin.daylight.short=CEST
-Europe/Berlin.generic.short=CET
-Europe/Berlin.standard.short=CET
-Europe/Bratislava.daylight.short=CEST
-Europe/Bratislava.generic.short=CET
-Europe/Bratislava.standard.short=CET
-Europe/Brussels.daylight.short=CEST
-Europe/Brussels.generic.short=CET
-Europe/Brussels.standard.short=CET
-Europe/Bucharest.daylight.short=EEST
-Europe/Bucharest.generic.short=EET
-Europe/Bucharest.standard.short=EET
-Europe/Budapest.daylight.short=CEST
-Europe/Budapest.generic.short=CET
-Europe/Budapest.standard.short=CET
-Europe/Busingen.daylight.short=CEST
-Europe/Busingen.generic.short=CET
-Europe/Busingen.standard.short=CET
-Europe/Chisinau.daylight.short=EEST
-Europe/Chisinau.generic.short=EET
-Europe/Chisinau.standard.short=EET
-Europe/Copenhagen.daylight.short=CEST
-Europe/Copenhagen.generic.short=CET
-Europe/Copenhagen.standard.short=CET
-Europe/Dublin.daylight.short=IST
-Europe/Dublin.generic.short=IT
-Europe/Dublin.standard.short=GMT
-Europe/Gibraltar.daylight.short=CEST
-Europe/Gibraltar.generic.short=CET
-Europe/Gibraltar.standard.short=CET
-Europe/Guernsey.daylight.short=BST
-Europe/Guernsey.generic.short=BT
-Europe/Guernsey.standard.short=GMT
-Europe/Helsinki.daylight.short=EEST
-Europe/Helsinki.generic.short=EET
-Europe/Helsinki.standard.short=EET
-Europe/Isle_of_Man.daylight.short=BST
-Europe/Isle_of_Man.generic.short=BT
-Europe/Isle_of_Man.standard.short=GMT
-Europe/Istanbul.daylight.short=EEST
-Europe/Istanbul.generic.short=EET
-Europe/Istanbul.standard.short=EET
-Europe/Jersey.daylight.short=BST
-Europe/Jersey.generic.short=BT
-Europe/Jersey.standard.short=GMT
-Europe/Kaliningrad.daylight.short=FEST
-Europe/Kaliningrad.generic.short=FET
-Europe/Kaliningrad.standard.short=FET
-Europe/Kiev.daylight.short=EEST
-Europe/Kiev.generic.short=EET
-Europe/Kiev.standard.short=EET
-Europe/Lisbon.daylight.short=WEST
-Europe/Lisbon.generic.short=WET
-Europe/Lisbon.standard.short=WET
-Europe/Ljubljana.daylight.short=CEST
-Europe/Ljubljana.generic.short=CET
-Europe/Ljubljana.standard.short=CET
-Europe/London.daylight.short=BST
-Europe/London.generic.short=BT
-Europe/London.standard.short=GMT
-Europe/Luxembourg.daylight.short=CEST
-Europe/Luxembourg.generic.short=CET
-Europe/Luxembourg.standard.short=CET
-Europe/Madrid.daylight.short=CEST
-Europe/Madrid.generic.short=CET
-Europe/Madrid.standard.short=CET
-Europe/Malta.daylight.short=CEST
-Europe/Malta.generic.short=CET
-Europe/Malta.standard.short=CET
-Europe/Mariehamn.daylight.short=EEST
-Europe/Mariehamn.generic.short=EET
-Europe/Mariehamn.standard.short=EET
-Europe/Minsk.daylight.short=FEST
-Europe/Minsk.generic.short=FET
-Europe/Minsk.standard.short=FET
-Europe/Monaco.daylight.short=CEST
-Europe/Monaco.generic.short=CET
-Europe/Monaco.standard.short=CET
-Europe/Moscow.daylight.short=MSD
-Europe/Moscow.generic.short=MT
-Europe/Moscow.standard.short=MSK
-Europe/Nicosia.daylight.short=EEST
-Europe/Nicosia.generic.short=EET
-Europe/Nicosia.standard.short=EET
-Europe/Oslo.daylight.short=CEST
-Europe/Oslo.generic.short=CET
-Europe/Oslo.standard.short=CET
-Europe/Paris.daylight.short=CEST
-Europe/Paris.generic.short=CET
-Europe/Paris.standard.short=CET
-Europe/Podgorica.daylight.short=CEST
-Europe/Podgorica.generic.short=CET
-Europe/Podgorica.standard.short=CET
-Europe/Prague.daylight.short=CEST
-Europe/Prague.generic.short=CET
-Europe/Prague.standard.short=CET
-Europe/Riga.daylight.short=EEST
-Europe/Riga.generic.short=EET
-Europe/Riga.standard.short=EET
-Europe/Rome.daylight.short=CEST
-Europe/Rome.generic.short=CET
-Europe/Rome.standard.short=CET
-Europe/Samara.daylight.short=SAMST
-Europe/Samara.generic.short=SAMT
-Europe/Samara.standard.short=SAMT
-Europe/San_Marino.daylight.short=CEST
-Europe/San_Marino.generic.short=CET
-Europe/San_Marino.standard.short=CET
-Europe/Sarajevo.daylight.short=CEST
-Europe/Sarajevo.generic.short=CET
-Europe/Sarajevo.standard.short=CET
-Europe/Simferopol.daylight.short=EEST
-Europe/Simferopol.generic.short=EET
-Europe/Simferopol.standard.short=EET
-Europe/Skopje.daylight.short=CEST
-Europe/Skopje.generic.short=CET
-Europe/Skopje.standard.short=CET
-Europe/Sofia.daylight.short=EEST
-Europe/Sofia.generic.short=EET
-Europe/Sofia.standard.short=EET
-Europe/Stockholm.daylight.short=CEST
-Europe/Stockholm.generic.short=CET
-Europe/Stockholm.standard.short=CET
-Europe/Tallinn.daylight.short=EEST
-Europe/Tallinn.generic.short=EET
-Europe/Tallinn.standard.short=EET
-Europe/Tirane.daylight.short=CEST
-Europe/Tirane.generic.short=CET
-Europe/Tirane.standard.short=CET
-Europe/Tiraspol.daylight.short=EEST
-Europe/Tiraspol.generic.short=EET
-Europe/Tiraspol.standard.short=EET
-Europe/Uzhgorod.daylight.short=EEST
-Europe/Uzhgorod.generic.short=EET
-Europe/Uzhgorod.standard.short=EET
-Europe/Vaduz.daylight.short=CEST
-Europe/Vaduz.generic.short=CET
-Europe/Vaduz.standard.short=CET
-Europe/Vatican.daylight.short=CEST
-Europe/Vatican.generic.short=CET
-Europe/Vatican.standard.short=CET
-Europe/Vienna.daylight.short=CEST
-Europe/Vienna.generic.short=CET
-Europe/Vienna.standard.short=CET
-Europe/Vilnius.daylight.short=EEST
-Europe/Vilnius.generic.short=EET
-Europe/Vilnius.standard.short=EET
-Europe/Volgograd.daylight.short=VOLST
-Europe/Volgograd.generic.short=VOLT
-Europe/Volgograd.standard.short=VOLT
-Europe/Warsaw.daylight.short=CEST
-Europe/Warsaw.generic.short=CET
-Europe/Warsaw.standard.short=CET
-Europe/Zagreb.daylight.short=CEST
-Europe/Zagreb.generic.short=CET
-Europe/Zagreb.standard.short=CET
-Europe/Zaporozhye.daylight.short=EEST
-Europe/Zaporozhye.generic.short=EET
-Europe/Zaporozhye.standard.short=EET
-Europe/Zurich.daylight.short=CEST
-Europe/Zurich.generic.short=CET
-Europe/Zurich.standard.short=CET
-GB.daylight.short=BST
-GB-Eire.daylight.short=BST
-GB-Eire.generic.short=BT
-GB-Eire.standard.short=GMT
-GB.generic.short=BT
-GB.standard.short=GMT
-GMT.daylight.short=GMT
-GMT.generic.short=GMT
-GMT.standard.short=GMT
-Greenwich.daylight.short=GMT
-Greenwich.generic.short=GMT
-Greenwich.standard.short=GMT
-Hongkong.daylight.short=HKST
-Hongkong.generic.short=HKT
-Hongkong.standard.short=HKT
-HST.daylight.short=HDT
-HST.generic.short=HT
-HST.standard.short=HST
-Iceland.daylight.short=GMT
-Iceland.generic.short=GMT
-Iceland.standard.short=GMT
-IET.daylight.short=EDT
-IET.generic.short=ET
-IET.standard.short=EST
-Indian/Antananarivo.daylight.short=EAST
-Indian/Antananarivo.generic.short=EAT
-Indian/Antananarivo.standard.short=EAT
-Indian/Chagos.daylight.short=IOST
-Indian/Chagos.generic.short=IOT
-Indian/Chagos.standard.short=IOT
-Indian/Christmas.daylight.short=CXST
-Indian/Christmas.generic.short=CIT
-Indian/Christmas.standard.short=CXT
-Indian/Cocos.daylight.short=CCST
-Indian/Cocos.generic.short=CCT
-Indian/Cocos.standard.short=CCT
-Indian/Comoro.daylight.short=EAST
-Indian/Comoro.generic.short=EAT
-Indian/Comoro.standard.short=EAT
-Indian/Kerguelen.daylight.short=TFST
-Indian/Kerguelen.generic.short=TFT
-Indian/Kerguelen.standard.short=TFT
-Indian/Mahe.daylight.short=SCST
-Indian/Mahe.generic.short=SCT
-Indian/Mahe.standard.short=SCT
-Indian/Maldives.daylight.short=MVST
-Indian/Maldives.generic.short=MVT
-Indian/Maldives.standard.short=MVT
-Indian/Mauritius.daylight.short=MUST
-Indian/Mauritius.generic.short=MUT
-Indian/Mauritius.standard.short=MUT
-Indian/Mayotte.daylight.short=EAST
-Indian/Mayotte.generic.short=EAT
-Indian/Mayotte.standard.short=EAT
-Indian/Reunion.daylight.short=REST
-Indian/Reunion.generic.short=RET
-Indian/Reunion.standard.short=RET
-Iran.daylight.short=IRDT
-Iran.generic.short=IRT
-Iran.standard.short=IRST
-Israel.daylight.short=IDT
-Israel.generic.short=IT
-Israel.standard.short=IST
-IST.daylight.short=IDT
-IST.generic.short=IT
-IST.standard.short=IST
-Jamaica.daylight.short=EDT
-Jamaica.generic.short=ET
-Jamaica.standard.short=EST
-Japan.daylight.short=JDT
-Japan.generic.short=JT
-Japan.standard.short=JST
-JST.daylight.short=JDT
-JST.generic.short=JT
-JST.standard.short=JST
-Kwajalein.daylight.short=MHST
-Kwajalein.generic.short=MHT
-Kwajalein.standard.short=MHT
-Libya.daylight.short=EEST
-Libya.generic.short=EET
-Libya.standard.short=EET
-MET.daylight.short=MEST
-MET.generic.short=MET
-MET.standard.short=MET
-Mexico/BajaNorte.daylight.short=PDT
-Mexico/BajaNorte.generic.short=PT
-Mexico/BajaNorte.standard.short=PST
-Mexico/BajaSur.daylight.short=MDT
-Mexico/BajaSur.generic.short=MT
-Mexico/BajaSur.standard.short=MST
-Mexico/General.daylight.short=CDT
-Mexico/General.generic.short=CT
-Mexico/General.standard.short=CST
-MIT.daylight.short=WSDT
-MIT.generic.short=WST
-MIT.standard.short=WST
-MST7MDT.daylight.short=MDT
-MST7MDT.generic.short=MT
-MST7MDT.standard.short=MST
-MST.daylight.short=MDT
-MST.generic.short=MT
-MST.standard.short=MST
-Navajo.daylight.short=MDT
-Navajo.generic.short=MT
-Navajo.standard.short=MST
-NET.daylight.short=AMST
-NET.generic.short=AMT
-NET.standard.short=AMT
-NST.daylight.short=NZDT
-NST.generic.short=NZT
-NST.standard.short=NZST
-NZ-CHAT.daylight.short=CHADT
-NZ-CHAT.generic.short=CHAT
-NZ-CHAT.standard.short=CHAST
-NZ.daylight.short=NZDT
-NZ.generic.short=NZT
-NZ.standard.short=NZST
-Pacific/Apia.daylight.short=WSDT
-Pacific/Apia.generic.short=WST
-Pacific/Apia.standard.short=WST
-Pacific/Auckland.daylight.short=NZDT
-Pacific/Auckland.generic.short=NZT
-Pacific/Auckland.standard.short=NZST
-Pacific/Chatham.daylight.short=CHADT
-Pacific/Chatham.generic.short=CHAT
-Pacific/Chatham.standard.short=CHAST
-Pacific/Chuuk.daylight.short=CHUST
-Pacific/Chuuk.generic.short=CHUT
-Pacific/Chuuk.standard.short=CHUT
-Pacific/Easter.daylight.short=EASST
-Pacific/Easter.generic.short=EAST
-Pacific/Easter.standard.short=EAST
-Pacific/Efate.daylight.short=VUST
-Pacific/Efate.generic.short=VUT
-Pacific/Efate.standard.short=VUT
-Pacific/Enderbury.daylight.short=PHOST
-Pacific/Enderbury.generic.short=PHOT
-Pacific/Enderbury.standard.short=PHOT
-Pacific/Fakaofo.daylight.short=TKST
-Pacific/Fakaofo.generic.short=TKT
-Pacific/Fakaofo.standard.short=TKT
-Pacific/Fiji.daylight.short=FJST
-Pacific/Fiji.generic.short=FJT
-Pacific/Fiji.standard.short=FJT
-Pacific/Funafuti.daylight.short=TVST
-Pacific/Funafuti.generic.short=TVT
-Pacific/Funafuti.standard.short=TVT
-Pacific/Galapagos.daylight.short=GALST
-Pacific/Galapagos.generic.short=GALT
-Pacific/Galapagos.standard.short=GALT
-Pacific/Gambier.daylight.short=GAMST
-Pacific/Gambier.generic.short=GAMT
-Pacific/Gambier.standard.short=GAMT
-Pacific/Guadalcanal.daylight.short=SBST
-Pacific/Guadalcanal.generic.short=SBT
-Pacific/Guadalcanal.standard.short=SBT
-Pacific/Guam.daylight.short=ChDT
-Pacific/Guam.generic.short=ChT
-Pacific/Guam.standard.short=ChST
-Pacific/Honolulu.daylight.short=HDT
-Pacific/Honolulu.generic.short=HT
-Pacific/Honolulu.standard.short=HST
-Pacific/Johnston.daylight.short=HDT
-Pacific/Johnston.generic.short=HT
-Pacific/Johnston.standard.short=HST
-Pacific/Kiritimati.daylight.short=LINST
-Pacific/Kiritimati.generic.short=LINT
-Pacific/Kiritimati.standard.short=LINT
-Pacific/Kosrae.daylight.short=KOSST
-Pacific/Kosrae.generic.short=KOST
-Pacific/Kosrae.standard.short=KOST
-Pacific/Kwajalein.daylight.short=MHST
-Pacific/Kwajalein.generic.short=MHT
-Pacific/Kwajalein.standard.short=MHT
-Pacific/Majuro.daylight.short=MHST
-Pacific/Majuro.generic.short=MHT
-Pacific/Majuro.standard.short=MHT
-Pacific/Marquesas.daylight.short=MARST
-Pacific/Marquesas.generic.short=MART
-Pacific/Marquesas.standard.short=MART
-Pacific/Midway.daylight.short=SDT
-Pacific/Midway.generic.short=ST
-Pacific/Midway.standard.short=SST
-Pacific/Nauru.daylight.short=NRST
-Pacific/Nauru.generic.short=NRT
-Pacific/Nauru.standard.short=NRT
-Pacific/Niue.daylight.short=NUST
-Pacific/Niue.generic.short=NUT
-Pacific/Niue.standard.short=NUT
-Pacific/Norfolk.daylight.short=NFST
-Pacific/Norfolk.generic.short=NFT
-Pacific/Norfolk.standard.short=NFT
-Pacific/Noumea.daylight.short=NCST
-Pacific/Noumea.generic.short=NCT
-Pacific/Noumea.standard.short=NCT
-Pacific/Pago_Pago.daylight.short=SDT
-Pacific/Pago_Pago.generic.short=ST
-Pacific/Pago_Pago.standard.short=SST
-Pacific/Palau.daylight.short=PWST
-Pacific/Palau.generic.short=PWT
-Pacific/Palau.standard.short=PWT
-Pacific/Pitcairn.daylight.short=PDT
-Pacific/Pitcairn.generic.short=PT
-Pacific/Pitcairn.standard.short=PST
-Pacific/Pohnpei.daylight.short=PONST
-Pacific/Pohnpei.generic.short=PONT
-Pacific/Pohnpei.standard.short=PONT
-Pacific/Ponape.daylight.short=PONST
-Pacific/Ponape.generic.short=PONT
-Pacific/Ponape.standard.short=PONT
-Pacific/Port_Moresby.daylight.short=PGST
-Pacific/Port_Moresby.generic.short=PGT
-Pacific/Port_Moresby.standard.short=PGT
-Pacific/Rarotonga.daylight.short=CKHST
-Pacific/Rarotonga.generic.short=CKT
-Pacific/Rarotonga.standard.short=CKT
-Pacific/Saipan.daylight.short=ChDT
-Pacific/Saipan.generic.short=ChT
-Pacific/Saipan.standard.short=ChST
-Pacific/Samoa.daylight.short=SDT
-Pacific/Samoa.generic.short=ST
-Pacific/Samoa.standard.short=SST
-Pacific/Tahiti.daylight.short=TAHST
-Pacific/Tahiti.generic.short=TAHT
-Pacific/Tahiti.standard.short=TAHT
-Pacific/Tarawa.daylight.short=GILST
-Pacific/Tarawa.generic.short=GILT
-Pacific/Tarawa.standard.short=GILT
-Pacific/Tongatapu.daylight.short=TOST
-Pacific/Tongatapu.generic.short=TOT
-Pacific/Tongatapu.standard.short=TOT
-Pacific/Truk.daylight.short=CHUST
-Pacific/Truk.generic.short=CHUT
-Pacific/Truk.standard.short=CHUT
-Pacific/Wake.daylight.short=WAKST
-Pacific/Wake.generic.short=WAKT
-Pacific/Wake.standard.short=WAKT
-Pacific/Wallis.daylight.short=WFST
-Pacific/Wallis.generic.short=WFT
-Pacific/Wallis.standard.short=WFT
-Pacific/Yap.daylight.short=CHUST
-Pacific/Yap.generic.short=CHUT
-Pacific/Yap.standard.short=CHUT
-PLT.daylight.short=PKST
-PLT.generic.short=PKT
-PLT.standard.short=PKT
-PNT.daylight.short=MDT
-PNT.generic.short=MT
-PNT.standard.short=MST
-Poland.daylight.short=CEST
-Poland.generic.short=CET
-Poland.standard.short=CET
-Portugal.daylight.short=WEST
-Portugal.generic.short=WET
-Portugal.standard.short=WET
-PRC.daylight.short=CDT
-PRC.generic.short=CT
-PRC.standard.short=CST
-PRT.daylight.short=ADT
-PRT.generic.short=AT
-PRT.standard.short=AST
-PST8PDT.daylight.short=PDT
-PST8PDT.generic.short=PT
-PST8PDT.standard.short=PST
-PST.daylight.short=PDT
-PST.generic.short=PT
-PST.standard.short=PST
-ROK.daylight.short=KDT
-ROK.generic.short=KT
-ROK.standard.short=KST
-Singapore.daylight.short=SGST
-Singapore.generic.short=SGT
-Singapore.standard.short=SGT
-SST.daylight.short=SBST
-SST.generic.short=SBT
-SST.standard.short=SBT
-SystemV/AST4ADT.daylight.short=ADT
-SystemV/AST4ADT.generic.short=AT
-SystemV/AST4ADT.standard.short=AST
-SystemV/AST4.daylight.short=ADT
-SystemV/AST4.generic.short=AT
-SystemV/AST4.standard.short=AST
-SystemV/CST6CDT.daylight.short=CDT
-SystemV/CST6CDT.generic.short=CT
-SystemV/CST6CDT.standard.short=CST
-SystemV/CST6.daylight.short=CDT
-SystemV/CST6.generic.short=CT
-SystemV/CST6.standard.short=CST
-SystemV/EST5.daylight.short=EDT
-SystemV/EST5EDT.daylight.short=EDT
-SystemV/EST5EDT.generic.short=ET
-SystemV/EST5EDT.standard.short=EST
-SystemV/EST5.generic.short=ET
-SystemV/EST5.standard.short=EST
-SystemV/HST10.daylight.short=HDT
-SystemV/HST10.generic.short=HT
-SystemV/HST10.standard.short=HST
-SystemV/MST7.daylight.short=MDT
-SystemV/MST7.generic.short=MT
-SystemV/MST7MDT.daylight.short=MDT
-SystemV/MST7MDT.generic.short=MT
-SystemV/MST7MDT.standard.short=MST
-SystemV/MST7.standard.short=MST
-SystemV/PST8.daylight.short=PDT
-SystemV/PST8.generic.short=PT
-SystemV/PST8PDT.daylight.short=PDT
-SystemV/PST8PDT.generic.short=PT
-SystemV/PST8PDT.standard.short=PST
-SystemV/PST8.standard.short=PST
-SystemV/YST9.daylight.short=AKDT
-SystemV/YST9.generic.short=AKT
-SystemV/YST9.standard.short=AKST
-SystemV/YST9YDT.daylight.short=AKDT
-SystemV/YST9YDT.generic.short=AKT
-SystemV/YST9YDT.standard.short=AKST
-Turkey.daylight.short=EEST
-Turkey.generic.short=EET
-Turkey.standard.short=EET
-UCT.daylight.short=UTC
-UCT.generic.short=UTC
-UCT.standard.short=UTC
-Universal.daylight.short=UTC
-Universal.generic.short=UTC
-Universal.standard.short=UTC
-US/Alaska.daylight.short=AKDT
-US/Alaska.generic.short=AKT
-US/Alaska.standard.short=AKST
-US/Aleutian.daylight.short=HADT
-US/Aleutian.generic.short=HAT
-US/Aleutian.standard.short=HAST
-US/Arizona.daylight.short=MDT
-US/Arizona.generic.short=MT
-US/Arizona.standard.short=MST
-US/Central.daylight.short=CDT
-US/Central.generic.short=CT
-US/Central.standard.short=CST
-US/Eastern.daylight.short=EDT
-US/Eastern.generic.short=ET
-US/Eastern.standard.short=EST
-US/East-Indiana.daylight.short=EDT
-US/East-Indiana.generic.short=ET
-US/East-Indiana.standard.short=EST
-US/Hawaii.daylight.short=HDT
-US/Hawaii.generic.short=HT
-US/Hawaii.standard.short=HST
-US/Indiana-Starke.daylight.short=CDT
-US/Indiana-Starke.generic.short=CT
-US/Indiana-Starke.standard.short=CST
-US/Michigan.daylight.short=EDT
-US/Michigan.generic.short=ET
-US/Michigan.standard.short=EST
-US/Mountain.daylight.short=MDT
-US/Mountain.generic.short=MT
-US/Mountain.standard.short=MST
-US/Pacific.daylight.short=PDT
-US/Pacific.generic.short=PT
-US/Pacific-New.daylight.short=PDT
-US/Pacific-New.generic.short=PT
-US/Pacific-New.standard.short=PST
-US/Pacific.standard.short=PST
-US/Samoa.daylight.short=SDT
-US/Samoa.generic.short=ST
-US/Samoa.standard.short=SST
-UTC.daylight.short=UTC
-UTC.generic.short=UTC
-UTC.standard.short=UTC
-VST.daylight.short=ICST
-VST.generic.short=ICT
-VST.standard.short=ICT
-WET.daylight.short=WEST
-WET.generic.short=WET
-WET.standard.short=WET
-W-SU.daylight.short=MSD
-W-SU.generic.short=MT
-W-SU.standard.short=MSK
-Zulu.daylight.short=UTC
-Zulu.generic.short=UTC
-Zulu.standard.short=UTC
diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_sv.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_sv.properties
deleted file mode 100644
index e1db445..0000000
--- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_sv.properties
+++ /dev/null
@@ -1,651 +0,0 @@
-ACT.daylight.long=Central sommartid (Nordterritoriet)
-ACT.generic.long=Central tid (Nordterritoriet)
-ACT.standard.long=Central standardtid (Nordterritoriet)
-AET.daylight.long=\u00D6stlig sommartid (New South Wales)
-AET.generic.long=\u00D6stlig tid (New South Wales)
-AET.standard.long=\u00D6stlig standardtid (New South Wales)
-AGT.generic.long=Argentinsk tid
-ART.generic.long=\u00D6steuropeisk tid
-AST.generic.long=Alaskisk tid
-Africa/Abidjan.generic.long=Greenwichtid
-Africa/Accra.generic.long=Ghana, normaltid
-Africa/Addis_Ababa.generic.long=\u00D6stafrikansk tid
-Africa/Algiers.generic.long=Centraleuropeisk tid
-Africa/Asmara.generic.long=\u00D6stafrikansk tid
-Africa/Asmera.generic.long=\u00D6stafrikansk tid
-Africa/Bamako.generic.long=Greenwichtid
-Africa/Bangui.generic.long=V\u00E4stafrikansk tid
-Africa/Banjul.generic.long=Greenwichtid
-Africa/Bissau.generic.long=Greenwichtid
-Africa/Blantyre.generic.long=Centralafrikansk tid
-Africa/Brazzaville.generic.long=V\u00E4stafrikansk tid
-Africa/Bujumbura.generic.long=Centralafrikansk tid
-Africa/Cairo.generic.long=\u00D6steuropeisk tid
-Africa/Casablanca.generic.long=V\u00E4steuropeisk tid
-Africa/Ceuta.generic.long=Centraleuropeisk tid
-Africa/Conakry.generic.long=Greenwichtid
-Africa/Dakar.generic.long=Greenwichtid
-Africa/Dar_es_Salaam.generic.long=\u00D6stafrikansk tid
-Africa/Djibouti.generic.long=\u00D6stafrikansk tid
-Africa/Douala.generic.long=V\u00E4stafrikansk tid
-Africa/El_Aaiun.generic.long=V\u00E4steuropeisk tid
-Africa/Freetown.generic.long=Sierra Leone-tid
-Africa/Gaborone.generic.long=Centralafrikansk tid
-Africa/Harare.generic.long=Centralafrikansk tid
-Africa/Johannesburg.generic.long=Sydafrikansk tid
-Africa/Juba.generic.long=\u00D6stafrikansk tid
-Africa/Kampala.generic.long=\u00D6stafrikansk tid
-Africa/Khartoum.generic.long=\u00D6stafrikansk tid
-Africa/Kigali.generic.long=Centralafrikansk tid
-Africa/Kinshasa.generic.long=V\u00E4stafrikansk tid
-Africa/Lagos.generic.long=V\u00E4stafrikansk tid
-Africa/Libreville.generic.long=V\u00E4stafrikansk tid
-Africa/Lome.generic.long=Greenwichtid
-Africa/Luanda.generic.long=V\u00E4stafrikansk tid
-Africa/Lubumbashi.generic.long=Centralafrikansk tid
-Africa/Lusaka.generic.long=Centralafrikansk tid
-Africa/Malabo.generic.long=V\u00E4stafrikansk tid
-Africa/Maputo.generic.long=Centralafrikansk tid
-Africa/Maseru.generic.long=Sydafrikansk tid
-Africa/Mbabane.generic.long=Sydafrikansk tid
-Africa/Mogadishu.generic.long=\u00D6stafrikansk tid
-Africa/Monrovia.generic.long=Greenwichtid
-Africa/Nairobi.generic.long=\u00D6stafrikansk tid
-Africa/Ndjamena.generic.long=V\u00E4stafrikansk tid
-Africa/Niamey.generic.long=V\u00E4stafrikansk tid
-Africa/Nouakchott.generic.long=Greenwichtid
-Africa/Ouagadougou.generic.long=Greenwichtid
-Africa/Porto-Novo.generic.long=V\u00E4stafrikansk tid
-Africa/Sao_Tome.generic.long=Greenwichtid
-Africa/Timbuktu.generic.long=Greenwichtid
-Africa/Tripoli.generic.long=\u00d6steuropeisk tid
-Africa/Tunis.generic.long=Centraleuropeisk tid
-Africa/Windhoek.generic.long=V\u00E4stafrikansk tid
-America/Adak.generic.long=Hawaiiansk-aleutisk tid
-America/Anchorage.generic.long=Alaskisk tid
-America/Anguilla.generic.long=Atlantisk tid
-America/Antigua.generic.long=Atlantisk tid
-America/Araguaina.generic.long=Brasiliansk tid
-America/Argentina/Buenos_Aires.generic.long=Argentinsk tid
-America/Argentina/Catamarca.generic.long=Argentinsk tid
-America/Argentina/ComodRivadavia.generic.long=Argentinsk tid
-America/Argentina/Cordoba.generic.long=Argentinsk tid
-America/Argentina/Jujuy.generic.long=Argentinsk tid
-America/Argentina/La_Rioja.generic.long=Argentinsk tid
-America/Argentina/Mendoza.generic.long=Argentinsk tid
-America/Argentina/Rio_Gallegos.generic.long=Argentinsk tid
-America/Argentina/Salta.generic.long=Argentinsk tid
-America/Argentina/San_Juan.generic.long=Argentinsk tid
-America/Argentina/San_Luis.generic.long=Argentinsk tid
-America/Argentina/Tucuman.generic.long=Argentinsk tid
-America/Argentina/Ushuaia.generic.long=Argentinsk tid
-America/Aruba.generic.long=Atlantisk tid
-America/Asuncion.generic.long=Paraguayansk tid
-America/Atikokan.generic.long=\u00D6stlig tid
-America/Atka.generic.long=Hawaiiansk-aleutisk tid
-America/Bahia.generic.long=Brasiliansk tid
-America/Bahia_Banderas.generic.long=Central tid
-America/Barbados.generic.long=Atlantisk tid
-America/Belem.generic.long=Brasiliansk tid
-America/Belize.generic.long=Central tid
-America/Blanc-Sablon.generic.long=Atlantisk tid
-America/Boa_Vista.generic.long=Amazonas-tid
-America/Bogota.generic.long=Kolombiansk tid
-America/Boise.generic.long=Mountain-tid
-America/Buenos_Aires.generic.long=Argentinsk tid
-America/Cambridge_Bay.generic.long=Mountain-tid
-America/Campo_Grande.generic.long=Amazonas-tid
-America/Cancun.generic.long=Central tid
-America/Caracas.generic.long=Venezuelansk tid
-America/Catamarca.generic.long=Argentinsk tid
-America/Cayenne.generic.long=Franska Guyana-tid
-America/Cayman.generic.long=\u00D6stlig tid
-America/Chicago.generic.long=Central tid
-America/Chihuahua.generic.long=Mountain-tid
-America/Coral_Harbour.generic.long=\u00D6stlig tid
-America/Cordoba.generic.long=Argentinsk tid
-America/Costa_Rica.generic.long=Central tid
-America/Creston.generic.long=Mountain-tid
-America/Cuiaba.generic.long=Amazonas-tid
-America/Curacao.generic.long=Atlantisk tid
-America/Danmarkshavn.generic.long=Greenwichtid
-America/Dawson.generic.long=Stillahavet
-America/Dawson_Creek.generic.long=Mountain-tid
-America/Denver.generic.long=Mountain-tid
-America/Detroit.generic.long=\u00D6stlig tid
-America/Dominica.generic.long=Atlantisk tid
-America/Edmonton.generic.long=Mountain-tid
-America/Eirunepe.generic.long=Acre, normaltid
-America/El_Salvador.generic.long=Central tid
-America/Ensenada.generic.long=Stillahavet
-America/Fort_Wayne.generic.long=\u00D6stlig tid
-America/Fortaleza.generic.long=Brasiliansk tid
-America/Glace_Bay.generic.long=Atlantisk tid
-America/Godthab.generic.long=V\u00E4stgr\u00F6nl\u00E4ndsk tid
-America/Goose_Bay.generic.long=Atlantisk tid
-America/Grand_Turk.generic.long=\u00D6stlig tid
-America/Grenada.generic.long=Atlantisk tid
-America/Guadeloupe.generic.long=Atlantisk tid
-America/Guatemala.generic.long=Central tid
-America/Guayaquil.generic.long=Ecuadoriansk tid
-America/Guyana.generic.long=Guyansk tid
-America/Halifax.generic.long=Atlantisk tid
-America/Havana.generic.long=Kubansk tid
-America/Hermosillo.generic.long=Mountain-tid
-America/Indiana/Indianapolis.generic.long=\u00D6stlig tid
-America/Indiana/Knox.generic.long=Central tid
-America/Indiana/Marengo.generic.long=\u00D6stlig tid
-America/Indiana/Petersburg.generic.long=\u00D6stlig tid
-America/Indiana/Tell_City.generic.long=Central tid
-America/Indiana/Vevay.generic.long=\u00D6stlig tid
-America/Indiana/Vincennes.generic.long=\u00D6stlig tid
-America/Indiana/Winamac.generic.long=\u00D6stlig tid
-America/Indianapolis.generic.long=\u00D6stlig tid
-America/Inuvik.generic.long=Mountain-tid
-America/Iqaluit.generic.long=\u00D6stlig tid
-America/Jamaica.generic.long=\u00D6stlig tid
-America/Jujuy.generic.long=Argentinsk tid
-America/Juneau.generic.long=Alaskisk tid
-America/Kentucky/Louisville.generic.long=\u00D6stlig tid
-America/Kentucky/Monticello.generic.long=\u00D6stlig tid
-America/Knox_IN.generic.long=Central tid
-America/Kralendijk.generic.long=Atlantisk tid
-America/La_Paz.generic.long=Boliviansk tid
-America/Lima.generic.long=Peruansk tid
-America/Los_Angeles.generic.long=Stillahavet
-America/Louisville.generic.long=\u00D6stlig tid
-America/Lower_Princes.generic.long=Atlantisk tid
-America/Maceio.generic.long=Brasiliansk tid
-America/Managua.generic.long=Central tid
-America/Manaus.generic.long=Amazonas-tid
-America/Marigot.generic.long=Atlantisk tid
-America/Martinique.generic.long=Atlantisk tid
-America/Matamoros.generic.long=Central tid
-America/Mazatlan.generic.long=Mountain-tid
-America/Mendoza.generic.long=Argentinsk tid
-America/Menominee.generic.long=Central tid
-America/Merida.generic.long=Central tid
-America/Metlakatla.daylight.long=Metlakatla, sommartid
-America/Metlakatla.generic.long=Metlakatla-tid
-America/Metlakatla.standard.long=Metlakatla, normaltid
-America/Mexico_City.generic.long=Central tid
-America/Miquelon.generic.long=Saint-Pierre och Miquelons tid
-America/Moncton.generic.long=Atlantisk tid
-America/Monterrey.generic.long=Central tid
-America/Montevideo.generic.long=Uruguayansk tid
-America/Montreal.generic.long=\u00D6stlig tid
-America/Montserrat.generic.long=Atlantisk tid
-America/Nassau.generic.long=\u00D6stlig tid
-America/New_York.generic.long=\u00D6stlig tid
-America/Nipigon.generic.long=\u00D6stlig tid
-America/Nome.generic.long=Alaskisk tid
-America/Noronha.generic.long=Fernando de Noronha-tid
-America/North_Dakota/Beulah.generic.long=Central tid
-America/North_Dakota/Center.generic.long=Central tid
-America/North_Dakota/New_Salem.generic.long=Central tid
-America/Ojinaga.generic.long=Mountain-tid
-America/Panama.generic.long=\u00D6stlig tid
-America/Pangnirtung.generic.long=\u00D6stlig tid
-America/Paramaribo.generic.long=Surinamsk tid
-America/Phoenix.generic.long=Mountain-tid
-America/Port-au-Prince.generic.long=\u00D6stlig tid
-America/Port_of_Spain.generic.long=Atlantisk tid
-America/Porto_Acre.generic.long=Acre, normaltid
-America/Porto_Velho.generic.long=Amazonas-tid
-America/Puerto_Rico.generic.long=Atlantisk tid
-America/Rainy_River.generic.long=Central tid
-America/Rankin_Inlet.generic.long=Central tid
-America/Recife.generic.long=Brasiliansk tid
-America/Regina.generic.long=Central tid
-America/Resolute.generic.long=Central tid
-America/Rio_Branco.generic.long=Acre, normaltid
-America/Rosario.generic.long=Argentinsk tid
-America/Santa_Isabel.generic.long=Stillahavet
-America/Santarem.generic.long=Brasiliansk tid
-America/Santiago.generic.long=Chilensk tid
-America/Santo_Domingo.generic.long=Atlantisk tid
-America/Sao_Paulo.generic.long=Brasiliansk tid
-America/Scoresbysund.generic.long=\u00D6stgr\u00F6nl\u00E4ndsk tid
-America/Shiprock.generic.long=Mountain-tid
-America/Sitka.generic.long=Alaskisk tid
-America/St_Barthelemy.generic.long=Atlantisk tid
-America/St_Johns.generic.long=Newfoundl\u00E4ndsk tid
-America/St_Kitts.generic.long=Atlantisk tid
-America/St_Lucia.generic.long=Atlantisk tid
-America/St_Thomas.generic.long=Atlantisk tid
-America/St_Vincent.generic.long=Atlantisk tid
-America/Swift_Current.generic.long=Central tid
-America/Tegucigalpa.generic.long=Central tid
-America/Thule.generic.long=Atlantisk tid
-America/Thunder_Bay.generic.long=\u00D6stlig tid
-America/Tijuana.generic.long=Stillahavet
-America/Toronto.generic.long=\u00D6stlig tid
-America/Tortola.generic.long=Atlantisk tid
-America/Vancouver.generic.long=Stillahavet
-America/Virgin.generic.long=Atlantisk tid
-America/Whitehorse.generic.long=Stillahavet
-America/Winnipeg.generic.long=Central tid
-America/Yakutat.generic.long=Alaskisk tid
-America/Yellowknife.generic.long=Mountain-tid
-Antarctica/Casey.daylight.long=V\u00E4stlig sommartid (Australien)
-Antarctica/Casey.generic.long=V\u00E4stlig tid (Australien)
-Antarctica/Casey.standard.long=Western Standard Time (Australien)
-Antarctica/Davis.generic.long=Davis-tid
-Antarctica/DumontDUrville.generic.long=Dumont-d'Urville-tid
-Antarctica/Macquarie.daylight.long=Macquarie\u00F6n, sommartid
-Antarctica/Macquarie.generic.long=Macquarie\u00F6n, normaltid
-Antarctica/Macquarie.standard.long=Macquarie\u00F6n, normaltid
-Antarctica/Mawson.generic.long=Mawson-tid
-Antarctica/McMurdo.generic.long=Nyzeel\u00E4ndsk tid
-Antarctica/Palmer.generic.long=Chilensk tid
-Antarctica/Rothera.generic.long=Rothera-tid
-Antarctica/South_Pole.generic.long=Nyzeel\u00E4ndsk tid
-Antarctica/Syowa.generic.long=Syowa-tid
-Antarctica/Vostok.generic.long=Vostok-tid
-Arctic/Longyearbyen.generic.long=Centraleuropeisk tid
-Asia/Aden.generic.long=Arabisk tid
-Asia/Almaty.generic.long=Alma-Ata-tid
-Asia/Amman.generic.long=Arabisk tid
-Asia/Anadyr.generic.long=Anadyr-tid
-Asia/Aqtau.generic.long=Aqtau-tid
-Asia/Aqtobe.generic.long=Aqtobe-tid
-Asia/Ashgabat.generic.long=Turkmensk tid
-Asia/Ashkhabad.generic.long=Turkmensk tid
-Asia/Baghdad.generic.long=Arabisk tid
-Asia/Bahrain.generic.long=Arabisk tid
-Asia/Baku.generic.long=Azerbajdzjansk tid
-Asia/Bangkok.generic.long=Indokinesisk tid
-Asia/Beirut.generic.long=\u00D6steuropeisk tid
-Asia/Bishkek.generic.long=Kirgizisk tid
-Asia/Brunei.generic.long=Bruneisk tid
-Asia/Calcutta.generic.long=Indisk tid
-Asia/Choibalsan.generic.long=Choibalsan-tid
-Asia/Chongqing.generic.long=Kinesisk tid
-Asia/Chungking.generic.long=Kinesisk tid
-Asia/Colombo.generic.long=Indisk tid
-Asia/Dacca.generic.long=Bangladeshisk tid
-Asia/Damascus.generic.long=\u00D6steuropeisk tid
-Asia/Dhaka.generic.long=Bangladeshisk tid
-Asia/Dili.generic.long=\u00D6sttimor, normaltid
-Asia/Dubai.generic.long=Golfens tid
-Asia/Dushanbe.generic.long=Tadzjikisk tid
-Asia/Gaza.generic.long=\u00D6steuropeisk tid
-Asia/Harbin.generic.long=Kinesisk tid
-Asia/Hebron.generic.long=\u00D6steuropeisk tid
-Asia/Ho_Chi_Minh.generic.long=Indokinesisk tid
-Asia/Hong_Kong.generic.long=Hongkong-tid
-Asia/Hovd.generic.long=Hovd-tid
-Asia/Irkutsk.generic.long=Irkutsk-tid
-Asia/Istanbul.generic.long=\u00D6steuropeisk tid
-Asia/Jakarta.generic.long=V\u00E4stindonesisk tid
-Asia/Jayapura.generic.long=\u00D6stindonesisk tid
-Asia/Jerusalem.generic.long=Israelisk tid
-Asia/Kabul.generic.long=Afghansk tid
-Asia/Kamchatka.generic.long=Petropavlovsk-Kamtjatskij-tid
-Asia/Karachi.generic.long=Pakistansk tid
-Asia/Kashgar.generic.long=Kinesisk tid
-Asia/Kathmandu.generic.long=Nepalesisk tid
-Asia/Katmandu.generic.long=Nepalesisk tid
-Asia/Khandyga.daylight.long=Khandyga, sommartid
-Asia/Khandyga.generic.long=Khandyga, normaltid
-Asia/Khandyga.standard.long=Khandyga, normaltid
-Asia/Kolkata.generic.long=Indisk tid
-Asia/Krasnoyarsk.generic.long=Krasnojarsk-tid
-Asia/Kuala_Lumpur.generic.long=Malaysisk tid
-Asia/Kuching.generic.long=Malaysisk tid
-Asia/Kuwait.generic.long=Arabisk tid
-Asia/Macao.generic.long=Kinesisk tid
-Asia/Macau.generic.long=Kinesisk tid
-Asia/Magadan.generic.long=Magadan-tid
-Asia/Makassar.generic.long=Centralindonesisk tid
-Asia/Manila.generic.long=Filippinsk tid
-Asia/Muscat.generic.long=Golfens tid
-Asia/Nicosia.generic.long=\u00D6steuropeisk tid
-Asia/Novokuznetsk.generic.long=Sibirisk tid
-Asia/Novosibirsk.generic.long=Sibirisk tid
-Asia/Omsk.generic.long=Omsk-tid
-Asia/Oral.generic.long=Oral-tid
-Asia/Phnom_Penh.generic.long=Indokinesisk tid
-Asia/Pontianak.generic.long=V\u00E4stindonesisk tid
-Asia/Pyongyang.generic.long=Koreansk tid
-Asia/Qatar.generic.long=Arabisk tid
-Asia/Qyzylorda.generic.long=Qyzylorda-tid
-Asia/Rangoon.generic.long=Myanmar-tid
-Asia/Saigon.generic.long=Indokinesisk tid
-Asia/Sakhalin.generic.long=Sakhalin-tid
-Asia/Samarkand.generic.long=Uzbekisk tid
-Asia/Seoul.generic.long=Koreansk tid
-Asia/Shanghai.generic.long=Kinesisk tid
-Asia/Singapore.generic.long=Singapore-tid
-Asia/Taipei.generic.long=Kinesisk tid
-Asia/Tashkent.generic.long=Uzbekisk tid
-Asia/Tbilisi.generic.long=Georgisk tid
-Asia/Tehran.generic.long=Iransk tid
-Asia/Tel_Aviv.generic.long=Israelisk tid
-Asia/Thimbu.generic.long=Bhutanesisk tid
-Asia/Thimphu.generic.long=Bhutanesisk tid
-Asia/Tokyo.generic.long=Japansk tid
-Asia/Ujung_Pandang.generic.long=Centralindonesisk tid
-Asia/Ulaanbaatar.generic.long=Ulaanbaatar-tid
-Asia/Ulan_Bator.generic.long=Ulaanbaatar-tid
-Asia/Urumqi.generic.long=Kinesisk tid
-Asia/Ust-Nera.daylight.long=Ust-Nera, sommartid
-Asia/Ust-Nera.generic.long=Ust-Nera, normaltid
-Asia/Ust-Nera.standard.long=Ust-Nera, normaltid
-Asia/Vientiane.generic.long=Indokinesisk tid
-Asia/Vladivostok.generic.long=Vladivostok-tid
-Asia/Yakutsk.generic.long=Jakutsk-tid
-Asia/Yekaterinburg.generic.long=Jekaterinburg-tid
-Asia/Yerevan.generic.long=Armenisk tid
-Atlantic/Azores.generic.long=Azorerna-tid
-Atlantic/Bermuda.generic.long=Atlantisk tid
-Atlantic/Canary.generic.long=V\u00E4steuropeisk tid
-Atlantic/Cape_Verde.generic.long=Kap Verde-tid
-Atlantic/Faeroe.generic.long=V\u00E4steuropeisk tid
-Atlantic/Faroe.generic.long=V\u00E4steuropeisk tid
-Atlantic/Jan_Mayen.generic.long=Centraleuropeisk tid
-Atlantic/Madeira.generic.long=V\u00E4steuropeisk tid
-Atlantic/Reykjavik.generic.long=Greenwichtid
-Atlantic/South_Georgia.generic.long=Sydgeorgisk tid
-Atlantic/St_Helena.generic.long=Greenwichtid
-Atlantic/Stanley.generic.long=Falklands\u00F6arna-tid
-Australia/ACT.daylight.long=\u00D6stlig sommartid (New South Wales)
-Australia/ACT.generic.long=\u00D6stlig tid (New South Wales)
-Australia/ACT.standard.long=\u00D6stlig standardtid (New South Wales)
-Australia/Adelaide.daylight.long=Central sommartid (South Australia)
-Australia/Adelaide.generic.long=Central tid (Sydaustralien)
-Australia/Adelaide.standard.long=Central standardtid (Sydaustralien)
-Australia/Brisbane.daylight.long=\u00D6stlig sommartid (Queensland)
-Australia/Brisbane.generic.long=\u00D6stlig tid (Queensland)
-Australia/Brisbane.standard.long=\u00D6stlig standardtid (Queensland)
-Australia/Broken_Hill.daylight.long=Central sommartid (South Australia/New South Wales)
-Australia/Broken_Hill.generic.long=Central tid (Sydaustralien/New South Wales)
-Australia/Broken_Hill.standard.long=Central standardtid (Sydaustralien/New South Wales)
-Australia/Canberra.daylight.long=\u00D6stlig sommartid (New South Wales)
-Australia/Canberra.generic.long=\u00D6stlig tid (New South Wales)
-Australia/Canberra.standard.long=\u00D6stlig standardtid (New South Wales)
-Australia/Currie.daylight.long=\u00D6stlig sommartid (New South Wales)
-Australia/Currie.generic.long=\u00D6stlig tid (New South Wales)
-Australia/Currie.standard.long=\u00D6stlig standardtid (New South Wales)
-Australia/Darwin.daylight.long=Central sommartid (Nordterritoriet)
-Australia/Darwin.generic.long=Central tid (Nordterritoriet)
-Australia/Darwin.standard.long=Central standardtid (Nordterritoriet)
-Australia/Eucla.daylight.long=Central v\u00E4stlig sommartid (Australien)
-Australia/Eucla.generic.long=Central v\u00E4stlig tid (Australien)
-Australia/Eucla.standard.long=Central v\u00E4stlig normaltid (Australien)
-Australia/Hobart.daylight.long=\u00D6stlig sommartid (Tasmanien)
-Australia/Hobart.generic.long=\u00D6stlig tid (Tasmania)
-Australia/Hobart.standard.long=\u00D6stlig standardtid (Tasmania)
-Australia/LHI.generic.long=Lord Howe-tid
-Australia/Lindeman.daylight.long=\u00D6stlig sommartid (Queensland)
-Australia/Lindeman.generic.long=\u00D6stlig tid (Queensland)
-Australia/Lindeman.standard.long=\u00D6stlig standardtid (Queensland)
-Australia/Lord_Howe.generic.long=Lord Howe-tid
-Australia/Melbourne.daylight.long=\u00D6stlig sommartid (Victoria)
-Australia/Melbourne.generic.long=\u00D6stlig tid (Victoria)
-Australia/Melbourne.standard.long=\u00D6stlig standardtid (Victoria)
-Australia/NSW.daylight.long=\u00D6stlig sommartid (New South Wales)
-Australia/NSW.generic.long=\u00D6stlig tid (New South Wales)
-Australia/NSW.standard.long=\u00D6stlig standardtid (New South Wales)
-Australia/North.daylight.long=Central sommartid (Nordterritoriet)
-Australia/North.generic.long=Central tid (Nordterritoriet)
-Australia/North.standard.long=Central standardtid (Nordterritoriet)
-Australia/Perth.daylight.long=V\u00E4stlig sommartid (Australien)
-Australia/Perth.generic.long=V\u00E4stlig tid (Australien)
-Australia/Perth.standard.long=Western Standard Time (Australien)
-Australia/Queensland.daylight.long=\u00D6stlig sommartid (Queensland)
-Australia/Queensland.generic.long=\u00D6stlig tid (Queensland)
-Australia/Queensland.standard.long=\u00D6stlig standardtid (Queensland)
-Australia/South.daylight.long=Central sommartid (South Australia)
-Australia/South.generic.long=Central tid (Sydaustralien)
-Australia/South.standard.long=Central standardtid (Sydaustralien)
-Australia/Sydney.daylight.long=\u00D6stlig sommartid (New South Wales)
-Australia/Sydney.generic.long=\u00D6stlig tid (New South Wales)
-Australia/Sydney.standard.long=\u00D6stlig standardtid (New South Wales)
-Australia/Tasmania.daylight.long=\u00D6stlig sommartid (Tasmanien)
-Australia/Tasmania.generic.long=\u00D6stlig tid (Tasmania)
-Australia/Tasmania.standard.long=\u00D6stlig standardtid (Tasmania)
-Australia/Victoria.daylight.long=\u00D6stlig sommartid (Victoria)
-Australia/Victoria.generic.long=\u00D6stlig tid (Victoria)
-Australia/Victoria.standard.long=\u00D6stlig standardtid (Victoria)
-Australia/West.daylight.long=V\u00E4stlig sommartid (Australien)
-Australia/West.generic.long=V\u00E4stlig tid (Australien)
-Australia/West.standard.long=Western Standard Time (Australien)
-Australia/Yancowinna.daylight.long=Central sommartid (South Australia/New South Wales)
-Australia/Yancowinna.generic.long=Central tid (Sydaustralien/New South Wales)
-Australia/Yancowinna.standard.long=Central standardtid (Sydaustralien/New South Wales)
-BET.generic.long=Brasiliansk tid
-BST.generic.long=Bangladeshisk tid
-Brazil/Acre.generic.long=Acre, normaltid
-Brazil/DeNoronha.generic.long=Fernando de Noronha-tid
-Brazil/East.generic.long=Brasiliansk tid
-Brazil/West.generic.long=Amazonas-tid
-CAT.generic.long=Centralafrikansk tid
-CET.generic.long=Centraleuropeisk tid
-CNT.generic.long=Newfoundl\u00E4ndsk tid
-CST.generic.long=Central tid
-CST6CDT.generic.long=Central tid
-CTT.generic.long=Kinesisk tid
-Canada/Atlantic.generic.long=Atlantisk tid
-Canada/Central.generic.long=Central tid
-Canada/East-Saskatchewan.generic.long=Central tid
-Canada/Eastern.generic.long=\u00D6stlig tid
-Canada/Mountain.generic.long=Mountain-tid
-Canada/Newfoundland.generic.long=Newfoundl\u00E4ndsk tid
-Canada/Pacific.generic.long=Stillahavet
-Canada/Saskatchewan.generic.long=Central tid
-Canada/Yukon.generic.long=Stillahavet
-Chile/Continental.generic.long=Chilensk tid
-Chile/EasterIsland.generic.long=P\u00E5sk\u00F6n-tid
-Cuba.generic.long=Kubansk tid
-EAT.generic.long=\u00D6stafrikansk tid
-ECT.generic.long=Centraleuropeisk tid
-EET.generic.long=\u00d6steuropeisk tid
-EST.generic.long=\u00d6stlig tid
-EST5EDT.generic.long=\u00d6stlig tid
-Egypt.generic.long=\u00D6steuropeisk tid
-Eire.generic.long=Irl\u00E4ndsk tid
-Etc/Greenwich.generic.long=Greenwichtid
-Etc/UCT.generic.long=UTC (koordinerad v\u00E4rldstid)
-Etc/UTC.generic.long=UTC (koordinerad v\u00E4rldstid)
-Etc/Universal.generic.long=UTC (koordinerad v\u00E4rldstid)
-Etc/Zulu.generic.long=UTC (koordinerad v\u00E4rldstid)
-Europe/Amsterdam.generic.long=Centraleuropeisk tid
-Europe/Andorra.generic.long=Centraleuropeisk tid
-Europe/Athens.generic.long=\u00D6steuropeisk tid
-Europe/Belfast.generic.long=Brittisk tid
-Europe/Belgrade.generic.long=Centraleuropeisk tid
-Europe/Berlin.generic.long=Centraleuropeisk tid
-Europe/Bratislava.generic.long=Centraleuropeisk tid
-Europe/Brussels.generic.long=Centraleuropeisk tid
-Europe/Bucharest.generic.long=\u00D6steuropeisk tid
-Europe/Budapest.generic.long=Centraleuropeisk tid
-Europe/Busingen.generic.long=Centraleuropeisk tid
-Europe/Chisinau.generic.long=\u00D6steuropeisk tid
-Europe/Copenhagen.generic.long=Centraleuropeisk tid
-Europe/Dublin.generic.long=Irl\u00E4ndsk tid
-Europe/Gibraltar.generic.long=Centraleuropeisk tid
-Europe/Guernsey.generic.long=Brittisk tid
-Europe/Helsinki.generic.long=\u00D6steuropeisk tid
-Europe/Isle_of_Man.generic.long=Brittisk tid
-Europe/Istanbul.generic.long=\u00D6steuropeisk tid
-Europe/Jersey.generic.long=Brittisk tid
-Europe/Kaliningrad.daylight.long=\u00D6steuropeisk sommartid
-Europe/Kaliningrad.generic.long=Kaliningradtid
-Europe/Kaliningrad.standard.long=Kaliningradtid
-Europe/Kiev.generic.long=\u00D6steuropeisk tid
-Europe/Lisbon.generic.long=V\u00E4steuropeisk tid
-Europe/Ljubljana.generic.long=Centraleuropeisk tid
-Europe/London.generic.long=Brittisk tid
-Europe/Luxembourg.generic.long=Centraleuropeisk tid
-Europe/Madrid.generic.long=Centraleuropeisk tid
-Europe/Malta.generic.long=Centraleuropeisk tid
-Europe/Mariehamn.generic.long=\u00D6steuropeisk tid
-Europe/Minsk.daylight.long=\u00D6steuropeisk sommartid
-Europe/Minsk.generic.long=Kaliningradtid
-Europe/Minsk.standard.long=Kaliningradtid
-Europe/Monaco.generic.long=Centraleuropeisk tid
-Europe/Moscow.generic.long=Moskvas tid
-Europe/Nicosia.generic.long=\u00D6steuropeisk tid
-Europe/Oslo.generic.long=Centraleuropeisk tid
-Europe/Paris.generic.long=Centraleuropeisk tid
-Europe/Podgorica.generic.long=Centraleuropeisk tid
-Europe/Prague.generic.long=Centraleuropeisk tid
-Europe/Riga.generic.long=\u00D6steuropeisk tid
-Europe/Rome.generic.long=Centraleuropeisk tid
-Europe/Samara.generic.long=Samara-tid
-Europe/San_Marino.generic.long=Centraleuropeisk tid
-Europe/Sarajevo.generic.long=Centraleuropeisk tid
-Europe/Simferopol.generic.long=\u00D6steuropeisk tid
-Europe/Skopje.generic.long=Centraleuropeisk tid
-Europe/Sofia.generic.long=\u00D6steuropeisk tid
-Europe/Stockholm.generic.long=Centraleuropeisk tid
-Europe/Tallinn.generic.long=\u00D6steuropeisk tid
-Europe/Tirane.generic.long=Centraleuropeisk tid
-Europe/Tiraspol.generic.long=\u00D6steuropeisk tid
-Europe/Uzhgorod.generic.long=\u00D6steuropeisk tid
-Europe/Vaduz.generic.long=Centraleuropeisk tid
-Europe/Vatican.generic.long=Centraleuropeisk tid
-Europe/Vienna.generic.long=Centraleuropeisk tid
-Europe/Vilnius.generic.long=\u00D6steuropeisk tid
-Europe/Volgograd.generic.long=Volgograd, normaltid
-Europe/Warsaw.generic.long=Centraleuropeisk tid
-Europe/Zagreb.generic.long=Centraleuropeisk tid
-Europe/Zaporozhye.generic.long=\u00D6steuropeisk tid
-Europe/Zurich.generic.long=Centraleuropeisk tid
-GB-Eire.generic.long=Brittisk tid
-GB.generic.long=Brittisk tid
-GMT.generic.long=Greenwichtid
-Greenwich.generic.long=Greenwichtid
-HST.generic.long=Hawaiiansk tid
-Hongkong.generic.long=Hongkong-tid
-IET.generic.long=\u00D6stlig tid
-IST.generic.long=Indisk tid
-Iceland.generic.long=Greenwichtid
-Indian/Antananarivo.generic.long=\u00D6stafrikansk tid
-Indian/Chagos.generic.long=Indiska Ocean\u00F6arna-tid
-Indian/Christmas.generic.long=Jul\u00F6n-tid
-Indian/Cocos.generic.long=Kokos\u00F6arna-tid
-Indian/Comoro.generic.long=\u00D6stafrikansk tid
-Indian/Kerguelen.generic.long=Franska s\u00F6dra och antarktiska \u00F6arna-tid
-Indian/Mahe.generic.long=Seychellisk tid
-Indian/Maldives.generic.long=Maldivisk tid
-Indian/Mauritius.generic.long=Mauritiansk tid
-Indian/Mayotte.generic.long=\u00D6stafrikansk tid
-Indian/Reunion.generic.long=Reunion-tid
-Iran.generic.long=Iransk tid
-Israel.generic.long=Israelisk tid
-JST.generic.long=Japansk tid
-Jamaica.generic.long=\u00D6stlig tid
-Japan.generic.long=Japansk tid
-Kwajalein.generic.long=Marshall\u00F6arna-tid
-Libya.generic.long=\u00d6steuropeisk tid
-MET.generic.long=MET
-MIT.generic.long=V\u00E4stsamoansk tid
-MST.generic.long=Mountain-tid
-MST7MDT.generic.long=Mountain-tid
-Mexico/BajaNorte.generic.long=Stillahavet
-Mexico/BajaSur.generic.long=Mountain-tid
-Mexico/General.generic.long=Central tid
-NET.generic.long=Armenisk tid
-NST.generic.long=Nyzeel\u00E4ndsk tid
-NZ-CHAT.generic.long=Chathams tid
-NZ.generic.long=Nyzeel\u00E4ndsk tid
-Navajo.generic.long=Mountain-tid
-PLT.generic.long=Pakistansk tid
-PNT.generic.long=Mountain-tid
-PRC.generic.long=Kinesisk tid
-PRT.generic.long=Atlantisk tid
-PST.generic.long=Stillahavet
-PST8PDT.generic.long=Stillahavet
-Pacific/Apia.generic.long=V\u00E4stsamoansk tid
-Pacific/Auckland.generic.long=Nyzeel\u00E4ndsk tid
-Pacific/Chatham.generic.long=Chathams tid
-Pacific/Chuuk.daylight.long=Chuuk, sommartid
-Pacific/Chuuk.generic.long=Chuuk, normaltid
-Pacific/Chuuk.standard.long=Chuuk, normaltid
-Pacific/Easter.generic.long=P\u00E5sk\u00F6n-tid
-Pacific/Efate.generic.long=Vanuatu-tid
-Pacific/Enderbury.generic.long=Phoenix\u00F6arna-tid
-Pacific/Fakaofo.generic.long=Tokelau-tid
-Pacific/Fiji.generic.long=Fijiansk tid
-Pacific/Funafuti.generic.long=Tuvalu-tid
-Pacific/Galapagos.generic.long=Galapagos-tid
-Pacific/Gambier.generic.long=Gambier\u00F6arna-tid
-Pacific/Guadalcanal.generic.long=Salomon\u00F6arna-tid
-Pacific/Guam.generic.long=Chamorros tid
-Pacific/Honolulu.generic.long=Hawaiiansk tid
-Pacific/Johnston.generic.long=Hawaiiansk tid
-Pacific/Kiritimati.generic.long=Line Islands-tid
-Pacific/Kosrae.generic.long=Kosrae-tid
-Pacific/Kwajalein.generic.long=Marshall\u00F6arna-tid
-Pacific/Majuro.generic.long=Marshall\u00F6arna-tid
-Pacific/Marquesas.generic.long=Marquesas\u00F6arna-tid
-Pacific/Midway.generic.long=Samoansk tid
-Pacific/Nauru.generic.long=Nauruansk tid
-Pacific/Niue.generic.long=Niue-tid
-Pacific/Norfolk.generic.long=Norfolk-tid
-Pacific/Noumea.generic.long=Nya Kaledonien-tid
-Pacific/Pago_Pago.generic.long=Samoansk tid
-Pacific/Palau.generic.long=Palau-tid
-Pacific/Pitcairn.generic.long=Pitcairn-tid
-Pacific/Pohnpei.daylight.long=Pohnpei, sommartid
-Pacific/Pohnpei.generic.long=Ponape-tid
-Pacific/Pohnpei.standard.long=Pohnpei, normaltid
-Pacific/Ponape.daylight.long=Pohnpei, sommartid
-Pacific/Ponape.generic.long=Ponape-tid
-Pacific/Ponape.standard.long=Pohnpei, normaltid
-Pacific/Port_Moresby.generic.long=Papua Nya Guinea-tid
-Pacific/Rarotonga.generic.long=Cook\u00F6arna-tid
-Pacific/Saipan.generic.long=Chamorros tid
-Pacific/Samoa.generic.long=Samoansk tid
-Pacific/Tahiti.generic.long=Tahiti-tid
-Pacific/Tarawa.generic.long=Gilbert\u00F6arna-tid
-Pacific/Tongatapu.generic.long=Tonga-tid
-Pacific/Truk.daylight.long=Chuuk, sommartid
-Pacific/Truk.generic.long=Chuuk, normaltid
-Pacific/Truk.standard.long=Chuuk, normaltid
-Pacific/Wake.generic.long=Wake-tid
-Pacific/Wallis.generic.long=Wallis- och Futuna\u00F6arna-tid
-Pacific/Yap.daylight.long=Chuuk, sommartid
-Pacific/Yap.generic.long=Chuuk, normaltid
-Pacific/Yap.standard.long=Chuuk, normaltid
-Poland.generic.long=Centraleuropeisk tid
-Portugal.generic.long=V\u00E4steuropeisk tid
-ROK.generic.long=Koreansk tid
-SST.generic.long=Salomon\u00F6arna-tid
-Singapore.generic.long=Singapore-tid
-SystemV/AST4.generic.long=Atlantisk tid
-SystemV/AST4ADT.generic.long=Atlantisk tid
-SystemV/CST6.generic.long=Central tid
-SystemV/CST6CDT.generic.long=Central tid
-SystemV/EST5.generic.long=\u00D6stlig tid
-SystemV/EST5EDT.generic.long=\u00D6stlig tid
-SystemV/HST10.generic.long=Hawaiiansk tid
-SystemV/MST7.generic.long=Mountain-tid
-SystemV/MST7MDT.generic.long=Mountain-tid
-SystemV/PST8.generic.long=Stillahavet
-SystemV/PST8PDT.generic.long=Stillahavet
-SystemV/YST9.generic.long=Alaskisk tid
-SystemV/YST9YDT.generic.long=Alaskisk tid
-Turkey.generic.long=\u00D6steuropeisk tid
-UCT.generic.long=UTC (koordinerad v\u00E4rldstid)
-US/Alaska.generic.long=Alaskisk tid
-US/Aleutian.generic.long=Hawaiiansk-aleutisk tid
-US/Arizona.generic.long=Mountain-tid
-US/Central.generic.long=Central tid
-US/East-Indiana.generic.long=\u00D6stlig tid
-US/Eastern.generic.long=\u00D6stlig tid
-US/Hawaii.generic.long=Hawaiiansk tid
-US/Indiana-Starke.generic.long=Central tid
-US/Michigan.generic.long=\u00D6stlig tid
-US/Mountain.generic.long=Mountain-tid
-US/Pacific-New.generic.long=Stillahavet
-US/Pacific.generic.long=Stillahavet
-US/Samoa.generic.long=Samoansk tid
-UTC.generic.long=UTC (koordinerad v\u00E4rldstid)
-Universal.generic.long=UTC (koordinerad v\u00E4rldstid)
-VST.generic.long=Indokinesisk tid
-W-SU.generic.long=Moskvas tid
-WET.generic.long=V\u00e4steuropeisk tid
-Zulu.generic.long=UTC (koordinerad v\u00E4rldstid)
diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_sv_short.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_sv_short.properties
deleted file mode 100644
index 095522a..0000000
--- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_sv_short.properties
+++ /dev/null
@@ -1,1743 +0,0 @@
-ACT.daylight.short=CST
-ACT.generic.short=CT
-ACT.standard.short=CST
-AET.daylight.short=EST
-AET.generic.short=ET
-AET.standard.short=EST
-Africa/Abidjan.daylight.short=GMT
-Africa/Abidjan.generic.short=GMT
-Africa/Abidjan.standard.short=GMT
-Africa/Accra.daylight.short=GHST
-Africa/Accra.generic.short=GMT
-Africa/Accra.standard.short=GMT
-Africa/Addis_Ababa.daylight.short=EAST
-Africa/Addis_Ababa.generic.short=EAT
-Africa/Addis_Ababa.standard.short=EAT
-Africa/Algiers.daylight.short=CEST
-Africa/Algiers.generic.short=CET
-Africa/Algiers.standard.short=CET
-Africa/Asmara.daylight.short=EAST
-Africa/Asmara.generic.short=EAT
-Africa/Asmara.standard.short=EAT
-Africa/Asmera.daylight.short=EAST
-Africa/Asmera.generic.short=EAT
-Africa/Asmera.standard.short=EAT
-Africa/Bamako.daylight.short=GMT
-Africa/Bamako.generic.short=GMT
-Africa/Bamako.standard.short=GMT
-Africa/Bangui.daylight.short=WAST
-Africa/Bangui.generic.short=WAT
-Africa/Bangui.standard.short=WAT
-Africa/Banjul.daylight.short=GMT
-Africa/Banjul.generic.short=GMT
-Africa/Banjul.standard.short=GMT
-Africa/Bissau.daylight.short=GMT
-Africa/Bissau.generic.short=GMT
-Africa/Bissau.standard.short=GMT
-Africa/Blantyre.daylight.short=CAST
-Africa/Blantyre.generic.short=CAT
-Africa/Blantyre.standard.short=CAT
-Africa/Brazzaville.daylight.short=WAST
-Africa/Brazzaville.generic.short=WAT
-Africa/Brazzaville.standard.short=WAT
-Africa/Bujumbura.daylight.short=CAST
-Africa/Bujumbura.generic.short=CAT
-Africa/Bujumbura.standard.short=CAT
-Africa/Cairo.daylight.short=EEST
-Africa/Cairo.generic.short=EET
-Africa/Cairo.standard.short=EET
-Africa/Casablanca.daylight.short=WEST
-Africa/Casablanca.generic.short=WET
-Africa/Casablanca.standard.short=WET
-Africa/Ceuta.daylight.short=CEST
-Africa/Ceuta.generic.short=CET
-Africa/Ceuta.standard.short=CET
-Africa/Conakry.daylight.short=GMT
-Africa/Conakry.generic.short=GMT
-Africa/Conakry.standard.short=GMT
-Africa/Dakar.daylight.short=GMT
-Africa/Dakar.generic.short=GMT
-Africa/Dakar.standard.short=GMT
-Africa/Dar_es_Salaam.daylight.short=EAST
-Africa/Dar_es_Salaam.generic.short=EAT
-Africa/Dar_es_Salaam.standard.short=EAT
-Africa/Djibouti.daylight.short=EAST
-Africa/Djibouti.generic.short=EAT
-Africa/Djibouti.standard.short=EAT
-Africa/Douala.daylight.short=WAST
-Africa/Douala.generic.short=WAT
-Africa/Douala.standard.short=WAT
-Africa/El_Aaiun.daylight.short=WEST
-Africa/El_Aaiun.generic.short=WET
-Africa/El_Aaiun.standard.short=WET
-Africa/Freetown.daylight.short=SLST
-Africa/Freetown.generic.short=SLT
-Africa/Freetown.standard.short=GMT
-Africa/Gaborone.daylight.short=CAST
-Africa/Gaborone.generic.short=CAT
-Africa/Gaborone.standard.short=CAT
-Africa/Harare.daylight.short=CAST
-Africa/Harare.generic.short=CAT
-Africa/Harare.standard.short=CAT
-Africa/Johannesburg.daylight.short=SAST
-Africa/Johannesburg.generic.short=SAT
-Africa/Johannesburg.standard.short=SAST
-Africa/Juba.daylight.short=EAST
-Africa/Juba.generic.short=EAT
-Africa/Juba.standard.short=EAT
-Africa/Kampala.daylight.short=EAST
-Africa/Kampala.generic.short=EAT
-Africa/Kampala.standard.short=EAT
-Africa/Khartoum.daylight.short=EAST
-Africa/Khartoum.generic.short=EAT
-Africa/Khartoum.standard.short=EAT
-Africa/Kigali.daylight.short=CAST
-Africa/Kigali.generic.short=CAT
-Africa/Kigali.standard.short=CAT
-Africa/Kinshasa.daylight.short=WAST
-Africa/Kinshasa.generic.short=WAT
-Africa/Kinshasa.standard.short=WAT
-Africa/Lagos.daylight.short=WAST
-Africa/Lagos.generic.short=WAT
-Africa/Lagos.standard.short=WAT
-Africa/Libreville.daylight.short=WAST
-Africa/Libreville.generic.short=WAT
-Africa/Libreville.standard.short=WAT
-Africa/Lome.daylight.short=GMT
-Africa/Lome.generic.short=GMT
-Africa/Lome.standard.short=GMT
-Africa/Luanda.daylight.short=WAST
-Africa/Luanda.generic.short=WAT
-Africa/Luanda.standard.short=WAT
-Africa/Lubumbashi.daylight.short=CAST
-Africa/Lubumbashi.generic.short=CAT
-Africa/Lubumbashi.standard.short=CAT
-Africa/Lusaka.daylight.short=CAST
-Africa/Lusaka.generic.short=CAT
-Africa/Lusaka.standard.short=CAT
-Africa/Malabo.daylight.short=WAST
-Africa/Malabo.generic.short=WAT
-Africa/Malabo.standard.short=WAT
-Africa/Maputo.daylight.short=CAST
-Africa/Maputo.generic.short=CAT
-Africa/Maputo.standard.short=CAT
-Africa/Maseru.daylight.short=SAST
-Africa/Maseru.generic.short=SAT
-Africa/Maseru.standard.short=SAST
-Africa/Mbabane.daylight.short=SAST
-Africa/Mbabane.generic.short=SAT
-Africa/Mbabane.standard.short=SAST
-Africa/Mogadishu.daylight.short=EAST
-Africa/Mogadishu.generic.short=EAT
-Africa/Mogadishu.standard.short=EAT
-Africa/Monrovia.daylight.short=GMT
-Africa/Monrovia.generic.short=GMT
-Africa/Monrovia.standard.short=GMT
-Africa/Nairobi.daylight.short=EAST
-Africa/Nairobi.generic.short=EAT
-Africa/Nairobi.standard.short=EAT
-Africa/Ndjamena.daylight.short=WAST
-Africa/Ndjamena.generic.short=WAT
-Africa/Ndjamena.standard.short=WAT
-Africa/Niamey.daylight.short=WAST
-Africa/Niamey.generic.short=WAT
-Africa/Niamey.standard.short=WAT
-Africa/Nouakchott.daylight.short=GMT
-Africa/Nouakchott.generic.short=GMT
-Africa/Nouakchott.standard.short=GMT
-Africa/Ouagadougou.daylight.short=GMT
-Africa/Ouagadougou.generic.short=GMT
-Africa/Ouagadougou.standard.short=GMT
-Africa/Porto-Novo.daylight.short=WAST
-Africa/Porto-Novo.generic.short=WAT
-Africa/Porto-Novo.standard.short=WAT
-Africa/Sao_Tome.daylight.short=GMT
-Africa/Sao_Tome.generic.short=GMT
-Africa/Sao_Tome.standard.short=GMT
-Africa/Timbuktu.daylight.short=GMT
-Africa/Timbuktu.generic.short=GMT
-Africa/Timbuktu.standard.short=GMT
-Africa/Tripoli.daylight.short=EEST
-Africa/Tripoli.generic.short=EET
-Africa/Tripoli.standard.short=EET
-Africa/Tunis.daylight.short=CEST
-Africa/Tunis.generic.short=CET
-Africa/Tunis.standard.short=CET
-Africa/Windhoek.daylight.short=WAST
-Africa/Windhoek.generic.short=WAT
-Africa/Windhoek.standard.short=WAT
-AGT.daylight.short=ARST
-AGT.generic.short=ART
-AGT.standard.short=ART
-America/Adak.daylight.short=HADT
-America/Adak.generic.short=HAT
-America/Adak.standard.short=HAST
-America/Anchorage.daylight.short=AKDT
-America/Anchorage.generic.short=AKT
-America/Anchorage.standard.short=AKST
-America/Anguilla.daylight.short=ADT
-America/Anguilla.generic.short=AT
-America/Anguilla.standard.short=AST
-America/Antigua.daylight.short=ADT
-America/Antigua.generic.short=AT
-America/Antigua.standard.short=AST
-America/Araguaina.daylight.short=BRST
-America/Araguaina.generic.short=BRT
-America/Araguaina.standard.short=BRT
-America/Argentina/Buenos_Aires.daylight.short=ARST
-America/Argentina/Buenos_Aires.generic.short=ART
-America/Argentina/Buenos_Aires.standard.short=ART
-America/Argentina/Catamarca.daylight.short=ARST
-America/Argentina/Catamarca.generic.short=ART
-America/Argentina/Catamarca.standard.short=ART
-America/Argentina/ComodRivadavia.daylight.short=ARST
-America/Argentina/ComodRivadavia.generic.short=ART
-America/Argentina/ComodRivadavia.standard.short=ART
-America/Argentina/Cordoba.daylight.short=ARST
-America/Argentina/Cordoba.generic.short=ART
-America/Argentina/Cordoba.standard.short=ART
-America/Argentina/Jujuy.daylight.short=ARST
-America/Argentina/Jujuy.generic.short=ART
-America/Argentina/Jujuy.standard.short=ART
-America/Argentina/La_Rioja.daylight.short=ARST
-America/Argentina/La_Rioja.generic.short=ART
-America/Argentina/La_Rioja.standard.short=ART
-America/Argentina/Mendoza.daylight.short=ARST
-America/Argentina/Mendoza.generic.short=ART
-America/Argentina/Mendoza.standard.short=ART
-America/Argentina/Rio_Gallegos.daylight.short=ARST
-America/Argentina/Rio_Gallegos.generic.short=ART
-America/Argentina/Rio_Gallegos.standard.short=ART
-America/Argentina/Salta.daylight.short=ARST
-America/Argentina/Salta.generic.short=ART
-America/Argentina/Salta.standard.short=ART
-America/Argentina/San_Juan.daylight.short=ARST
-America/Argentina/San_Juan.generic.short=ART
-America/Argentina/San_Juan.standard.short=ART
-America/Argentina/San_Luis.daylight.short=ARST
-America/Argentina/San_Luis.generic.short=ART
-America/Argentina/San_Luis.standard.short=ART
-America/Argentina/Tucuman.daylight.short=ARST
-America/Argentina/Tucuman.generic.short=ART
-America/Argentina/Tucuman.standard.short=ART
-America/Argentina/Ushuaia.daylight.short=ARST
-America/Argentina/Ushuaia.generic.short=ART
-America/Argentina/Ushuaia.standard.short=ART
-America/Aruba.daylight.short=ADT
-America/Aruba.generic.short=AT
-America/Aruba.standard.short=AST
-America/Asuncion.daylight.short=PYST
-America/Asuncion.generic.short=PYT
-America/Asuncion.standard.short=PYT
-America/Atikokan.daylight.short=EDT
-America/Atikokan.generic.short=ET
-America/Atikokan.standard.short=EST
-America/Atka.daylight.short=HADT
-America/Atka.generic.short=HAT
-America/Atka.standard.short=HAST
-America/Bahia_Banderas.daylight.short=CDT
-America/Bahia_Banderas.generic.short=CT
-America/Bahia_Banderas.standard.short=CST
-America/Bahia.daylight.short=BRST
-America/Bahia.generic.short=BRT
-America/Bahia.standard.short=BRT
-America/Barbados.daylight.short=ADT
-America/Barbados.generic.short=AT
-America/Barbados.standard.short=AST
-America/Belem.daylight.short=BRST
-America/Belem.generic.short=BRT
-America/Belem.standard.short=BRT
-America/Belize.daylight.short=CDT
-America/Belize.generic.short=CT
-America/Belize.standard.short=CST
-America/Blanc-Sablon.daylight.short=ADT
-America/Blanc-Sablon.generic.short=AT
-America/Blanc-Sablon.standard.short=AST
-America/Boa_Vista.daylight.short=AMST
-America/Boa_Vista.generic.short=AMT
-America/Boa_Vista.standard.short=AMT
-America/Bogota.daylight.short=COST
-America/Bogota.generic.short=COT
-America/Bogota.standard.short=COT
-America/Boise.daylight.short=MDT
-America/Boise.generic.short=MT
-America/Boise.standard.short=MST
-America/Buenos_Aires.daylight.short=ARST
-America/Buenos_Aires.generic.short=ART
-America/Buenos_Aires.standard.short=ART
-America/Cambridge_Bay.daylight.short=MDT
-America/Cambridge_Bay.generic.short=MT
-America/Cambridge_Bay.standard.short=MST
-America/Campo_Grande.daylight.short=AMST
-America/Campo_Grande.generic.short=AMT
-America/Campo_Grande.standard.short=AMT
-America/Cancun.daylight.short=CDT
-America/Cancun.generic.short=CT
-America/Cancun.standard.short=CST
-America/Caracas.daylight.short=VEST
-America/Caracas.generic.short=VET
-America/Caracas.standard.short=VET
-America/Catamarca.daylight.short=ARST
-America/Catamarca.generic.short=ART
-America/Catamarca.standard.short=ART
-America/Cayenne.daylight.short=GFST
-America/Cayenne.generic.short=GFT
-America/Cayenne.standard.short=GFT
-America/Cayman.daylight.short=EDT
-America/Cayman.generic.short=ET
-America/Cayman.standard.short=EST
-America/Chicago.daylight.short=CDT
-America/Chicago.generic.short=CT
-America/Chicago.standard.short=CST
-America/Chihuahua.daylight.short=MDT
-America/Chihuahua.generic.short=MT
-America/Chihuahua.standard.short=MST
-America/Coral_Harbour.daylight.short=EDT
-America/Coral_Harbour.generic.short=ET
-America/Coral_Harbour.standard.short=EST
-America/Cordoba.daylight.short=ARST
-America/Cordoba.generic.short=ART
-America/Cordoba.standard.short=ART
-America/Costa_Rica.daylight.short=CDT
-America/Costa_Rica.generic.short=CT
-America/Costa_Rica.standard.short=CST
-America/Creston.daylight.short=MDT
-America/Creston.generic.short=MT
-America/Creston.standard.short=MST
-America/Cuiaba.daylight.short=AMST
-America/Cuiaba.generic.short=AMT
-America/Cuiaba.standard.short=AMT
-America/Curacao.daylight.short=ADT
-America/Curacao.generic.short=AT
-America/Curacao.standard.short=AST
-America/Danmarkshavn.daylight.short=GMT
-America/Danmarkshavn.generic.short=GMT
-America/Danmarkshavn.standard.short=GMT
-America/Dawson_Creek.daylight.short=MDT
-America/Dawson_Creek.generic.short=MT
-America/Dawson_Creek.standard.short=MST
-America/Dawson.daylight.short=PDT
-America/Dawson.generic.short=PT
-America/Dawson.standard.short=PST
-America/Denver.daylight.short=MDT
-America/Denver.generic.short=MT
-America/Denver.standard.short=MST
-America/Detroit.daylight.short=EDT
-America/Detroit.generic.short=ET
-America/Detroit.standard.short=EST
-America/Dominica.daylight.short=ADT
-America/Dominica.generic.short=AT
-America/Dominica.standard.short=AST
-America/Edmonton.daylight.short=MDT
-America/Edmonton.generic.short=MT
-America/Edmonton.standard.short=MST
-America/Eirunepe.daylight.short=ACST
-America/Eirunepe.generic.short=ACT
-America/Eirunepe.standard.short=ACT
-America/El_Salvador.daylight.short=CDT
-America/El_Salvador.generic.short=CT
-America/El_Salvador.standard.short=CST
-America/Ensenada.daylight.short=PDT
-America/Ensenada.generic.short=PT
-America/Ensenada.standard.short=PST
-America/Fortaleza.daylight.short=BRST
-America/Fortaleza.generic.short=BRT
-America/Fortaleza.standard.short=BRT
-America/Fort_Wayne.daylight.short=EDT
-America/Fort_Wayne.generic.short=ET
-America/Fort_Wayne.standard.short=EST
-America/Glace_Bay.daylight.short=ADT
-America/Glace_Bay.generic.short=AT
-America/Glace_Bay.standard.short=AST
-America/Godthab.daylight.short=WGST
-America/Godthab.generic.short=WGT
-America/Godthab.standard.short=WGT
-America/Goose_Bay.daylight.short=ADT
-America/Goose_Bay.generic.short=AT
-America/Goose_Bay.standard.short=AST
-America/Grand_Turk.daylight.short=EDT
-America/Grand_Turk.generic.short=ET
-America/Grand_Turk.standard.short=EST
-America/Grenada.daylight.short=ADT
-America/Grenada.generic.short=AT
-America/Grenada.standard.short=AST
-America/Guadeloupe.daylight.short=ADT
-America/Guadeloupe.generic.short=AT
-America/Guadeloupe.standard.short=AST
-America/Guatemala.daylight.short=CDT
-America/Guatemala.generic.short=CT
-America/Guatemala.standard.short=CST
-America/Guayaquil.daylight.short=ECST
-America/Guayaquil.generic.short=ECT
-America/Guayaquil.standard.short=ECT
-America/Guyana.daylight.short=GYST
-America/Guyana.generic.short=GYT
-America/Guyana.standard.short=GYT
-America/Halifax.daylight.short=ADT
-America/Halifax.generic.short=AT
-America/Halifax.standard.short=AST
-America/Havana.daylight.short=CDT
-America/Havana.generic.short=CT
-America/Havana.standard.short=CST
-America/Hermosillo.daylight.short=MDT
-America/Hermosillo.generic.short=MT
-America/Hermosillo.standard.short=MST
-America/Indiana/Indianapolis.daylight.short=EDT
-America/Indiana/Indianapolis.generic.short=ET
-America/Indiana/Indianapolis.standard.short=EST
-America/Indiana/Knox.daylight.short=CDT
-America/Indiana/Knox.generic.short=CT
-America/Indiana/Knox.standard.short=CST
-America/Indiana/Marengo.daylight.short=EDT
-America/Indiana/Marengo.generic.short=ET
-America/Indiana/Marengo.standard.short=EST
-America/Indiana/Petersburg.daylight.short=EDT
-America/Indiana/Petersburg.generic.short=ET
-America/Indiana/Petersburg.standard.short=EST
-America/Indianapolis.daylight.short=EDT
-America/Indianapolis.generic.short=ET
-America/Indianapolis.standard.short=EST
-America/Indiana/Tell_City.daylight.short=CDT
-America/Indiana/Tell_City.generic.short=CT
-America/Indiana/Tell_City.standard.short=CST
-America/Indiana/Vevay.daylight.short=EDT
-America/Indiana/Vevay.generic.short=ET
-America/Indiana/Vevay.standard.short=EST
-America/Indiana/Vincennes.daylight.short=EDT
-America/Indiana/Vincennes.generic.short=ET
-America/Indiana/Vincennes.standard.short=EST
-America/Indiana/Winamac.daylight.short=EDT
-America/Indiana/Winamac.generic.short=ET
-America/Indiana/Winamac.standard.short=EST
-America/Inuvik.daylight.short=MDT
-America/Inuvik.generic.short=MT
-America/Inuvik.standard.short=MST
-America/Iqaluit.daylight.short=EDT
-America/Iqaluit.generic.short=ET
-America/Iqaluit.standard.short=EST
-America/Jamaica.daylight.short=EDT
-America/Jamaica.generic.short=ET
-America/Jamaica.standard.short=EST
-America/Jujuy.daylight.short=ARST
-America/Jujuy.generic.short=ART
-America/Jujuy.standard.short=ART
-America/Juneau.daylight.short=AKDT
-America/Juneau.generic.short=AKT
-America/Juneau.standard.short=AKST
-America/Kentucky/Louisville.daylight.short=EDT
-America/Kentucky/Louisville.generic.short=ET
-America/Kentucky/Louisville.standard.short=EST
-America/Kentucky/Monticello.daylight.short=EDT
-America/Kentucky/Monticello.generic.short=ET
-America/Kentucky/Monticello.standard.short=EST
-America/Knox_IN.daylight.short=CDT
-America/Knox_IN.generic.short=CT
-America/Knox_IN.standard.short=CST
-America/Kralendijk.daylight.short=ADT
-America/Kralendijk.generic.short=AT
-America/Kralendijk.standard.short=AST
-America/La_Paz.daylight.short=BOST
-America/La_Paz.generic.short=BOT
-America/La_Paz.standard.short=BOT
-America/Lima.daylight.short=PEST
-America/Lima.generic.short=PET
-America/Lima.standard.short=PET
-America/Los_Angeles.daylight.short=PDT
-America/Los_Angeles.generic.short=PT
-America/Los_Angeles.standard.short=PST
-America/Louisville.daylight.short=EDT
-America/Louisville.generic.short=ET
-America/Louisville.standard.short=EST
-America/Lower_Princes.daylight.short=ADT
-America/Lower_Princes.generic.short=AT
-America/Lower_Princes.standard.short=AST
-America/Maceio.daylight.short=BRST
-America/Maceio.generic.short=BRT
-America/Maceio.standard.short=BRT
-America/Managua.daylight.short=CDT
-America/Managua.generic.short=CT
-America/Managua.standard.short=CST
-America/Manaus.daylight.short=AMST
-America/Manaus.generic.short=AMT
-America/Manaus.standard.short=AMT
-America/Marigot.daylight.short=ADT
-America/Marigot.generic.short=AT
-America/Marigot.standard.short=AST
-America/Martinique.daylight.short=ADT
-America/Martinique.generic.short=AT
-America/Martinique.standard.short=AST
-America/Matamoros.daylight.short=CDT
-America/Matamoros.generic.short=CT
-America/Matamoros.standard.short=CST
-America/Mazatlan.daylight.short=MDT
-America/Mazatlan.generic.short=MT
-America/Mazatlan.standard.short=MST
-America/Mendoza.daylight.short=ARST
-America/Mendoza.generic.short=ART
-America/Mendoza.standard.short=ART
-America/Menominee.daylight.short=CDT
-America/Menominee.generic.short=CT
-America/Menominee.standard.short=CST
-America/Merida.daylight.short=CDT
-America/Merida.generic.short=CT
-America/Merida.standard.short=CST
-America/Metlakatla.daylight.short=MeDT
-America/Metlakatla.generic.short=MeT
-America/Metlakatla.standard.short=MeST
-America/Mexico_City.daylight.short=CDT
-America/Mexico_City.generic.short=CT
-America/Mexico_City.standard.short=CST
-America/Miquelon.daylight.short=PMDT
-America/Miquelon.generic.short=PMT
-America/Miquelon.standard.short=PMST
-America/Moncton.daylight.short=ADT
-America/Moncton.generic.short=AT
-America/Moncton.standard.short=AST
-America/Monterrey.daylight.short=CDT
-America/Monterrey.generic.short=CT
-America/Monterrey.standard.short=CST
-America/Montevideo.daylight.short=UYST
-America/Montevideo.generic.short=UYT
-America/Montevideo.standard.short=UYT
-America/Montreal.daylight.short=EDT
-America/Montreal.generic.short=ET
-America/Montreal.standard.short=EST
-America/Montserrat.daylight.short=ADT
-America/Montserrat.generic.short=AT
-America/Montserrat.standard.short=AST
-America/Nassau.daylight.short=EDT
-America/Nassau.generic.short=ET
-America/Nassau.standard.short=EST
-America/New_York.daylight.short=EDT
-America/New_York.generic.short=ET
-America/New_York.standard.short=EST
-America/Nipigon.daylight.short=EDT
-America/Nipigon.generic.short=ET
-America/Nipigon.standard.short=EST
-America/Nome.daylight.short=AKDT
-America/Nome.generic.short=AKT
-America/Nome.standard.short=AKST
-America/Noronha.daylight.short=FNST
-America/Noronha.generic.short=FNT
-America/Noronha.standard.short=FNT
-America/North_Dakota/Beulah.daylight.short=CDT
-America/North_Dakota/Beulah.generic.short=CT
-America/North_Dakota/Beulah.standard.short=CST
-America/North_Dakota/Center.daylight.short=CDT
-America/North_Dakota/Center.generic.short=CT
-America/North_Dakota/Center.standard.short=CST
-America/North_Dakota/New_Salem.daylight.short=CDT
-America/North_Dakota/New_Salem.generic.short=CT
-America/North_Dakota/New_Salem.standard.short=CST
-America/Ojinaga.daylight.short=MDT
-America/Ojinaga.generic.short=MT
-America/Ojinaga.standard.short=MST
-America/Panama.daylight.short=EDT
-America/Panama.generic.short=ET
-America/Panama.standard.short=EST
-America/Pangnirtung.daylight.short=EDT
-America/Pangnirtung.generic.short=ET
-America/Pangnirtung.standard.short=EST
-America/Paramaribo.daylight.short=SRST
-America/Paramaribo.generic.short=SRT
-America/Paramaribo.standard.short=SRT
-America/Phoenix.daylight.short=MDT
-America/Phoenix.generic.short=MT
-America/Phoenix.standard.short=MST
-America/Port-au-Prince.daylight.short=EDT
-America/Port-au-Prince.generic.short=ET
-America/Port-au-Prince.standard.short=EST
-America/Porto_Acre.daylight.short=ACST
-America/Porto_Acre.generic.short=ACT
-America/Porto_Acre.standard.short=ACT
-America/Port_of_Spain.daylight.short=ADT
-America/Port_of_Spain.generic.short=AT
-America/Port_of_Spain.standard.short=AST
-America/Porto_Velho.daylight.short=AMST
-America/Porto_Velho.generic.short=AMT
-America/Porto_Velho.standard.short=AMT
-America/Puerto_Rico.daylight.short=ADT
-America/Puerto_Rico.generic.short=AT
-America/Puerto_Rico.standard.short=AST
-America/Rainy_River.daylight.short=CDT
-America/Rainy_River.generic.short=CT
-America/Rainy_River.standard.short=CST
-America/Rankin_Inlet.daylight.short=CDT
-America/Rankin_Inlet.generic.short=CT
-America/Rankin_Inlet.standard.short=CST
-America/Recife.daylight.short=BRST
-America/Recife.generic.short=BRT
-America/Recife.standard.short=BRT
-America/Regina.daylight.short=CDT
-America/Regina.generic.short=CT
-America/Regina.standard.short=CST
-America/Resolute.daylight.short=CDT
-America/Resolute.generic.short=CT
-America/Resolute.standard.short=CST
-America/Rio_Branco.daylight.short=ACST
-America/Rio_Branco.generic.short=ACT
-America/Rio_Branco.standard.short=ACT
-America/Rosario.daylight.short=ARST
-America/Rosario.generic.short=ART
-America/Rosario.standard.short=ART
-America/Santa_Isabel.daylight.short=PDT
-America/Santa_Isabel.generic.short=PT
-America/Santa_Isabel.standard.short=PST
-America/Santarem.daylight.short=BRST
-America/Santarem.generic.short=BRT
-America/Santarem.standard.short=BRT
-America/Santiago.daylight.short=CLST
-America/Santiago.generic.short=CLT
-America/Santiago.standard.short=CLT
-America/Santo_Domingo.daylight.short=ADT
-America/Santo_Domingo.generic.short=AT
-America/Santo_Domingo.standard.short=AST
-America/Sao_Paulo.daylight.short=BRST
-America/Sao_Paulo.generic.short=BRT
-America/Sao_Paulo.standard.short=BRT
-America/Scoresbysund.daylight.short=EGST
-America/Scoresbysund.generic.short=EGT
-America/Scoresbysund.standard.short=EGT
-America/Shiprock.daylight.short=MDT
-America/Shiprock.generic.short=MT
-America/Shiprock.standard.short=MST
-America/Sitka.daylight.short=AKDT
-America/Sitka.generic.short=AKT
-America/Sitka.standard.short=AKST
-America/St_Barthelemy.daylight.short=ADT
-America/St_Barthelemy.generic.short=AT
-America/St_Barthelemy.standard.short=AST
-America/St_Johns.daylight.short=NDT
-America/St_Johns.generic.short=NT
-America/St_Johns.standard.short=NST
-America/St_Kitts.daylight.short=ADT
-America/St_Kitts.generic.short=AT
-America/St_Kitts.standard.short=AST
-America/St_Lucia.daylight.short=ADT
-America/St_Lucia.generic.short=AT
-America/St_Lucia.standard.short=AST
-America/St_Thomas.daylight.short=ADT
-America/St_Thomas.generic.short=AT
-America/St_Thomas.standard.short=AST
-America/St_Vincent.daylight.short=ADT
-America/St_Vincent.generic.short=AT
-America/St_Vincent.standard.short=AST
-America/Swift_Current.daylight.short=CDT
-America/Swift_Current.generic.short=CT
-America/Swift_Current.standard.short=CST
-America/Tegucigalpa.daylight.short=CDT
-America/Tegucigalpa.generic.short=CT
-America/Tegucigalpa.standard.short=CST
-America/Thule.daylight.short=ADT
-America/Thule.generic.short=AT
-America/Thule.standard.short=AST
-America/Thunder_Bay.daylight.short=EDT
-America/Thunder_Bay.generic.short=ET
-America/Thunder_Bay.standard.short=EST
-America/Tijuana.daylight.short=PDT
-America/Tijuana.generic.short=PT
-America/Tijuana.standard.short=PST
-America/Toronto.daylight.short=EDT
-America/Toronto.generic.short=ET
-America/Toronto.standard.short=EST
-America/Tortola.daylight.short=ADT
-America/Tortola.generic.short=AT
-America/Tortola.standard.short=AST
-America/Vancouver.daylight.short=PDT
-America/Vancouver.generic.short=PT
-America/Vancouver.standard.short=PST
-America/Virgin.daylight.short=ADT
-America/Virgin.generic.short=AT
-America/Virgin.standard.short=AST
-America/Whitehorse.daylight.short=PDT
-America/Whitehorse.generic.short=PT
-America/Whitehorse.standard.short=PST
-America/Winnipeg.daylight.short=CDT
-America/Winnipeg.generic.short=CT
-America/Winnipeg.standard.short=CST
-America/Yakutat.daylight.short=AKDT
-America/Yakutat.generic.short=AKT
-America/Yakutat.standard.short=AKST
-America/Yellowknife.daylight.short=MDT
-America/Yellowknife.generic.short=MT
-America/Yellowknife.standard.short=MST
-Antarctica/Casey.daylight.short=WST
-Antarctica/Casey.generic.short=WT
-Antarctica/Casey.standard.short=WST
-Antarctica/Davis.daylight.short=DAVST
-Antarctica/Davis.generic.short=DAVT
-Antarctica/Davis.standard.short=DAVT
-Antarctica/DumontDUrville.daylight.short=DDUST
-Antarctica/DumontDUrville.generic.short=DDUT
-Antarctica/DumontDUrville.standard.short=DDUT
-Antarctica/Macquarie.daylight.short=MIST
-Antarctica/Macquarie.generic.short=MIST
-Antarctica/Macquarie.standard.short=MIST
-Antarctica/Mawson.daylight.short=MAWST
-Antarctica/Mawson.generic.short=MAWT
-Antarctica/Mawson.standard.short=MAWT
-Antarctica/McMurdo.daylight.short=NZDT
-Antarctica/McMurdo.generic.short=NZT
-Antarctica/McMurdo.standard.short=NZST
-Antarctica/Palmer.daylight.short=CLST
-Antarctica/Palmer.generic.short=CLT
-Antarctica/Palmer.standard.short=CLT
-Antarctica/Rothera.daylight.short=ROTST
-Antarctica/Rothera.generic.short=ROTT
-Antarctica/Rothera.standard.short=ROTT
-Antarctica/South_Pole.daylight.short=NZDT
-Antarctica/South_Pole.generic.short=NZT
-Antarctica/South_Pole.standard.short=NZST
-Antarctica/Syowa.daylight.short=SYOST
-Antarctica/Syowa.generic.short=SYOT
-Antarctica/Syowa.standard.short=SYOT
-Antarctica/Vostok.daylight.short=VOSST
-Antarctica/Vostok.generic.short=VOST
-Antarctica/Vostok.standard.short=VOST
-Arctic/Longyearbyen.daylight.short=CEST
-Arctic/Longyearbyen.generic.short=CET
-Arctic/Longyearbyen.standard.short=CET
-ART.daylight.short=EEST
-ART.generic.short=EET
-ART.standard.short=EET
-Asia/Aden.daylight.short=ADT
-Asia/Aden.generic.short=AT
-Asia/Aden.standard.short=AST
-Asia/Almaty.daylight.short=ALMST
-Asia/Almaty.generic.short=ALMT
-Asia/Almaty.standard.short=ALMT
-Asia/Amman.daylight.short=ADT
-Asia/Amman.generic.short=AT
-Asia/Amman.standard.short=AST
-Asia/Anadyr.daylight.short=ANAST
-Asia/Anadyr.generic.short=ANAT
-Asia/Anadyr.standard.short=ANAT
-Asia/Aqtau.daylight.short=AQTST
-Asia/Aqtau.generic.short=AQTT
-Asia/Aqtau.standard.short=AQTT
-Asia/Aqtobe.daylight.short=AQTST
-Asia/Aqtobe.generic.short=AQTT
-Asia/Aqtobe.standard.short=AQTT
-Asia/Ashgabat.daylight.short=TMST
-Asia/Ashgabat.generic.short=TMT
-Asia/Ashgabat.standard.short=TMT
-Asia/Ashkhabad.daylight.short=TMST
-Asia/Ashkhabad.generic.short=TMT
-Asia/Ashkhabad.standard.short=TMT
-Asia/Baghdad.daylight.short=ADT
-Asia/Baghdad.generic.short=AT
-Asia/Baghdad.standard.short=AST
-Asia/Bahrain.daylight.short=ADT
-Asia/Bahrain.generic.short=AT
-Asia/Bahrain.standard.short=AST
-Asia/Baku.daylight.short=AZST
-Asia/Baku.generic.short=AZT
-Asia/Baku.standard.short=AZT
-Asia/Bangkok.daylight.short=ICST
-Asia/Bangkok.generic.short=ICT
-Asia/Bangkok.standard.short=ICT
-Asia/Beirut.daylight.short=EEST
-Asia/Beirut.generic.short=EET
-Asia/Beirut.standard.short=EET
-Asia/Bishkek.daylight.short=KGST
-Asia/Bishkek.generic.short=KGT
-Asia/Bishkek.standard.short=KGT
-Asia/Brunei.daylight.short=BNST
-Asia/Brunei.generic.short=BNT
-Asia/Brunei.standard.short=BNT
-Asia/Calcutta.daylight.short=IDT
-Asia/Calcutta.generic.short=IT
-Asia/Calcutta.standard.short=IST
-Asia/Choibalsan.daylight.short=CHOST
-Asia/Choibalsan.generic.short=CHOT
-Asia/Choibalsan.standard.short=CHOT
-Asia/Chongqing.daylight.short=CDT
-Asia/Chongqing.generic.short=CT
-Asia/Chongqing.standard.short=CST
-Asia/Chungking.daylight.short=CDT
-Asia/Chungking.generic.short=CT
-Asia/Chungking.standard.short=CST
-Asia/Colombo.daylight.short=IDT
-Asia/Colombo.generic.short=IT
-Asia/Colombo.standard.short=IST
-Asia/Dacca.daylight.short=BDST
-Asia/Dacca.generic.short=BDT
-Asia/Dacca.standard.short=BDT
-Asia/Damascus.daylight.short=EEST
-Asia/Damascus.generic.short=EET
-Asia/Damascus.standard.short=EET
-Asia/Dhaka.daylight.short=BDST
-Asia/Dhaka.generic.short=BDT
-Asia/Dhaka.standard.short=BDT
-Asia/Dili.daylight.short=TLST
-Asia/Dili.generic.short=TLT
-Asia/Dili.standard.short=TLT
-Asia/Dubai.daylight.short=GDT
-Asia/Dubai.generic.short=GT
-Asia/Dubai.standard.short=GST
-Asia/Dushanbe.daylight.short=TJST
-Asia/Dushanbe.generic.short=TJT
-Asia/Dushanbe.standard.short=TJT
-Asia/Gaza.daylight.short=EEST
-Asia/Gaza.generic.short=EET
-Asia/Gaza.standard.short=EET
-Asia/Harbin.daylight.short=CDT
-Asia/Harbin.generic.short=CT
-Asia/Harbin.standard.short=CST
-Asia/Hebron.daylight.short=EEST
-Asia/Hebron.generic.short=EET
-Asia/Hebron.standard.short=EET
-Asia/Ho_Chi_Minh.daylight.short=ICST
-Asia/Ho_Chi_Minh.generic.short=ICT
-Asia/Ho_Chi_Minh.standard.short=ICT
-Asia/Hong_Kong.daylight.short=HKST
-Asia/Hong_Kong.generic.short=HKT
-Asia/Hong_Kong.standard.short=HKT
-Asia/Hovd.daylight.short=HOVST
-Asia/Hovd.generic.short=HOVT
-Asia/Hovd.standard.short=HOVT
-Asia/Irkutsk.daylight.short=IRKST
-Asia/Irkutsk.generic.short=IRKT
-Asia/Irkutsk.standard.short=IRKT
-Asia/Istanbul.daylight.short=EEST
-Asia/Istanbul.generic.short=EET
-Asia/Istanbul.standard.short=EET
-Asia/Jakarta.daylight.short=WIST
-Asia/Jakarta.generic.short=WIB
-Asia/Jakarta.standard.short=WIB
-Asia/Jayapura.daylight.short=EIST
-Asia/Jayapura.generic.short=WIT
-Asia/Jayapura.standard.short=WIT
-Asia/Jerusalem.daylight.short=IDT
-Asia/Jerusalem.generic.short=IT
-Asia/Jerusalem.standard.short=IST
-Asia/Kabul.daylight.short=AFST
-Asia/Kabul.generic.short=AFT
-Asia/Kabul.standard.short=AFT
-Asia/Kamchatka.daylight.short=PETST
-Asia/Kamchatka.generic.short=PETT
-Asia/Kamchatka.standard.short=PETT
-Asia/Karachi.daylight.short=PKST
-Asia/Karachi.generic.short=PKT
-Asia/Karachi.standard.short=PKT
-Asia/Kashgar.daylight.short=CDT
-Asia/Kashgar.generic.short=CT
-Asia/Kashgar.standard.short=CST
-Asia/Kathmandu.daylight.short=NPST
-Asia/Kathmandu.generic.short=NPT
-Asia/Kathmandu.standard.short=NPT
-Asia/Katmandu.daylight.short=NPST
-Asia/Katmandu.generic.short=NPT
-Asia/Katmandu.standard.short=NPT
-Asia/Khandyga.daylight.short=YAKST
-Asia/Khandyga.generic.short=YAKT
-Asia/Khandyga.standard.short=YAKT
-Asia/Kolkata.daylight.short=IDT
-Asia/Kolkata.generic.short=IT
-Asia/Kolkata.standard.short=IST
-Asia/Krasnoyarsk.daylight.short=KRAST
-Asia/Krasnoyarsk.generic.short=KRAT
-Asia/Krasnoyarsk.standard.short=KRAT
-Asia/Kuala_Lumpur.daylight.short=MYST
-Asia/Kuala_Lumpur.generic.short=MYT
-Asia/Kuala_Lumpur.standard.short=MYT
-Asia/Kuching.daylight.short=MYST
-Asia/Kuching.generic.short=MYT
-Asia/Kuching.standard.short=MYT
-Asia/Kuwait.daylight.short=ADT
-Asia/Kuwait.generic.short=AT
-Asia/Kuwait.standard.short=AST
-Asia/Macao.daylight.short=CDT
-Asia/Macao.generic.short=CT
-Asia/Macao.standard.short=CST
-Asia/Macau.daylight.short=CDT
-Asia/Macau.generic.short=CT
-Asia/Macau.standard.short=CST
-Asia/Magadan.daylight.short=MAGST
-Asia/Magadan.generic.short=MAGT
-Asia/Magadan.standard.short=MAGT
-Asia/Makassar.daylight.short=CIST
-Asia/Makassar.generic.short=WITA
-Asia/Makassar.standard.short=WITA
-Asia/Manila.daylight.short=PHST
-Asia/Manila.generic.short=PHT
-Asia/Manila.standard.short=PHT
-Asia/Muscat.daylight.short=GDT
-Asia/Muscat.generic.short=GT
-Asia/Muscat.standard.short=GST
-Asia/Nicosia.daylight.short=EEST
-Asia/Nicosia.generic.short=EET
-Asia/Nicosia.standard.short=EET
-Asia/Novokuznetsk.daylight.short=NOVST
-Asia/Novokuznetsk.generic.short=NOVT
-Asia/Novokuznetsk.standard.short=NOVT
-Asia/Novosibirsk.daylight.short=NOVST
-Asia/Novosibirsk.generic.short=NOVT
-Asia/Novosibirsk.standard.short=NOVT
-Asia/Omsk.daylight.short=OMSST
-Asia/Omsk.generic.short=OMST
-Asia/Omsk.standard.short=OMST
-Asia/Oral.daylight.short=ORAST
-Asia/Oral.generic.short=ORAT
-Asia/Oral.standard.short=ORAT
-Asia/Phnom_Penh.daylight.short=ICST
-Asia/Phnom_Penh.generic.short=ICT
-Asia/Phnom_Penh.standard.short=ICT
-Asia/Pontianak.daylight.short=WIST
-Asia/Pontianak.generic.short=WIB
-Asia/Pontianak.standard.short=WIB
-Asia/Pyongyang.daylight.short=KDT
-Asia/Pyongyang.generic.short=KT
-Asia/Pyongyang.standard.short=KST
-Asia/Qatar.daylight.short=ADT
-Asia/Qatar.generic.short=AT
-Asia/Qatar.standard.short=AST
-Asia/Qyzylorda.daylight.short=QYZST
-Asia/Qyzylorda.generic.short=QYZT
-Asia/Qyzylorda.standard.short=QYZT
-Asia/Rangoon.daylight.short=MMST
-Asia/Rangoon.generic.short=MMT
-Asia/Rangoon.standard.short=MMT
-Asia/Saigon.daylight.short=ICST
-Asia/Saigon.generic.short=ICT
-Asia/Saigon.standard.short=ICT
-Asia/Sakhalin.daylight.short=SAKST
-Asia/Sakhalin.generic.short=SAKT
-Asia/Sakhalin.standard.short=SAKT
-Asia/Samarkand.daylight.short=UZST
-Asia/Samarkand.generic.short=UZT
-Asia/Samarkand.standard.short=UZT
-Asia/Seoul.daylight.short=KDT
-Asia/Seoul.generic.short=KT
-Asia/Seoul.standard.short=KST
-Asia/Shanghai.daylight.short=CDT
-Asia/Shanghai.generic.short=CT
-Asia/Shanghai.standard.short=CST
-Asia/Singapore.daylight.short=SGST
-Asia/Singapore.generic.short=SGT
-Asia/Singapore.standard.short=SGT
-Asia/Taipei.daylight.short=CDT
-Asia/Taipei.generic.short=CT
-Asia/Taipei.standard.short=CST
-Asia/Tashkent.daylight.short=UZST
-Asia/Tashkent.generic.short=UZT
-Asia/Tashkent.standard.short=UZT
-Asia/Tbilisi.daylight.short=GEST
-Asia/Tbilisi.generic.short=GET
-Asia/Tbilisi.standard.short=GET
-Asia/Tehran.daylight.short=IRDT
-Asia/Tehran.generic.short=IRT
-Asia/Tehran.standard.short=IRST
-Asia/Tel_Aviv.daylight.short=IDT
-Asia/Tel_Aviv.generic.short=IT
-Asia/Tel_Aviv.standard.short=IST
-Asia/Thimbu.daylight.short=BTST
-Asia/Thimbu.generic.short=BTT
-Asia/Thimbu.standard.short=BTT
-Asia/Thimphu.daylight.short=BTST
-Asia/Thimphu.generic.short=BTT
-Asia/Thimphu.standard.short=BTT
-Asia/Tokyo.daylight.short=JDT
-Asia/Tokyo.generic.short=JT
-Asia/Tokyo.standard.short=JST
-Asia/Ujung_Pandang.daylight.short=CIST
-Asia/Ujung_Pandang.generic.short=WITA
-Asia/Ujung_Pandang.standard.short=WITA
-Asia/Ulaanbaatar.daylight.short=ULAST
-Asia/Ulaanbaatar.generic.short=ULAT
-Asia/Ulaanbaatar.standard.short=ULAT
-Asia/Ulan_Bator.daylight.short=ULAST
-Asia/Ulan_Bator.generic.short=ULAT
-Asia/Ulan_Bator.standard.short=ULAT
-Asia/Urumqi.daylight.short=CDT
-Asia/Urumqi.generic.short=CT
-Asia/Urumqi.standard.short=CST
-Asia/Ust-Nera.daylight.short=VLAST
-Asia/Ust-Nera.generic.short=VLAT
-Asia/Ust-Nera.standard.short=VLAT
-Asia/Vientiane.daylight.short=ICST
-Asia/Vientiane.generic.short=ICT
-Asia/Vientiane.standard.short=ICT
-Asia/Vladivostok.daylight.short=VLAST
-Asia/Vladivostok.generic.short=VLAT
-Asia/Vladivostok.standard.short=VLAT
-Asia/Yakutsk.daylight.short=YAKST
-Asia/Yakutsk.generic.short=YAKT
-Asia/Yakutsk.standard.short=YAKT
-Asia/Yekaterinburg.daylight.short=YEKST
-Asia/Yekaterinburg.generic.short=YEKT
-Asia/Yekaterinburg.standard.short=YEKT
-Asia/Yerevan.daylight.short=AMST
-Asia/Yerevan.generic.short=AMT
-Asia/Yerevan.standard.short=AMT
-AST.daylight.short=AKDT
-AST.generic.short=AKT
-AST.standard.short=AKST
-Atlantic/Azores.daylight.short=AZOST
-Atlantic/Azores.generic.short=AZOT
-Atlantic/Azores.standard.short=AZOT
-Atlantic/Bermuda.daylight.short=ADT
-Atlantic/Bermuda.generic.short=AT
-Atlantic/Bermuda.standard.short=AST
-Atlantic/Canary.daylight.short=WEST
-Atlantic/Canary.generic.short=WET
-Atlantic/Canary.standard.short=WET
-Atlantic/Cape_Verde.daylight.short=CVST
-Atlantic/Cape_Verde.generic.short=CVT
-Atlantic/Cape_Verde.standard.short=CVT
-Atlantic/Faeroe.daylight.short=WEST
-Atlantic/Faeroe.generic.short=WET
-Atlantic/Faeroe.standard.short=WET
-Atlantic/Faroe.daylight.short=WEST
-Atlantic/Faroe.generic.short=WET
-Atlantic/Faroe.standard.short=WET
-Atlantic/Jan_Mayen.daylight.short=CEST
-Atlantic/Jan_Mayen.generic.short=CET
-Atlantic/Jan_Mayen.standard.short=CET
-Atlantic/Madeira.daylight.short=WEST
-Atlantic/Madeira.generic.short=WET
-Atlantic/Madeira.standard.short=WET
-Atlantic/Reykjavik.daylight.short=GMT
-Atlantic/Reykjavik.generic.short=GMT
-Atlantic/Reykjavik.standard.short=GMT
-Atlantic/South_Georgia.daylight.short=GDT
-Atlantic/South_Georgia.generic.short=GT
-Atlantic/South_Georgia.standard.short=GST
-Atlantic/Stanley.daylight.short=FKST
-Atlantic/Stanley.generic.short=FKT
-Atlantic/Stanley.standard.short=FKT
-Atlantic/St_Helena.daylight.short=GMT
-Atlantic/St_Helena.generic.short=GMT
-Atlantic/St_Helena.standard.short=GMT
-Australia/ACT.daylight.short=EST
-Australia/ACT.generic.short=ET
-Australia/ACT.standard.short=EST
-Australia/Adelaide.daylight.short=CST
-Australia/Adelaide.generic.short=CT
-Australia/Adelaide.standard.short=CST
-Australia/Brisbane.daylight.short=EST
-Australia/Brisbane.generic.short=ET
-Australia/Brisbane.standard.short=EST
-Australia/Broken_Hill.daylight.short=CST
-Australia/Broken_Hill.generic.short=CT
-Australia/Broken_Hill.standard.short=CST
-Australia/Canberra.daylight.short=EST
-Australia/Canberra.generic.short=ET
-Australia/Canberra.standard.short=EST
-Australia/Currie.daylight.short=EST
-Australia/Currie.generic.short=ET
-Australia/Currie.standard.short=EST
-Australia/Darwin.daylight.short=CST
-Australia/Darwin.generic.short=CT
-Australia/Darwin.standard.short=CST
-Australia/Eucla.daylight.short=CWST
-Australia/Eucla.generic.short=CWT
-Australia/Eucla.standard.short=CWST
-Australia/Hobart.daylight.short=EST
-Australia/Hobart.generic.short=ET
-Australia/Hobart.standard.short=EST
-Australia/LHI.daylight.short=LHST
-Australia/LHI.generic.short=LHT
-Australia/LHI.standard.short=LHST
-Australia/Lindeman.daylight.short=EST
-Australia/Lindeman.generic.short=ET
-Australia/Lindeman.standard.short=EST
-Australia/Lord_Howe.daylight.short=LHST
-Australia/Lord_Howe.generic.short=LHT
-Australia/Lord_Howe.standard.short=LHST
-Australia/Melbourne.daylight.short=EST
-Australia/Melbourne.generic.short=ET
-Australia/Melbourne.standard.short=EST
-Australia/North.daylight.short=CST
-Australia/North.generic.short=CT
-Australia/North.standard.short=CST
-Australia/NSW.daylight.short=EST
-Australia/NSW.generic.short=ET
-Australia/NSW.standard.short=EST
-Australia/Perth.daylight.short=WST
-Australia/Perth.generic.short=WT
-Australia/Perth.standard.short=WST
-Australia/Queensland.daylight.short=EST
-Australia/Queensland.generic.short=ET
-Australia/Queensland.standard.short=EST
-Australia/South.daylight.short=CST
-Australia/South.generic.short=CT
-Australia/South.standard.short=CST
-Australia/Sydney.daylight.short=EST
-Australia/Sydney.generic.short=ET
-Australia/Sydney.standard.short=EST
-Australia/Tasmania.daylight.short=EST
-Australia/Tasmania.generic.short=ET
-Australia/Tasmania.standard.short=EST
-Australia/Victoria.daylight.short=EST
-Australia/Victoria.generic.short=ET
-Australia/Victoria.standard.short=EST
-Australia/West.daylight.short=WST
-Australia/West.generic.short=WT
-Australia/West.standard.short=WST
-Australia/Yancowinna.daylight.short=CST
-Australia/Yancowinna.generic.short=CT
-Australia/Yancowinna.standard.short=CST
-BET.daylight.short=BRST
-BET.generic.short=BRT
-BET.standard.short=BRT
-Brazil/Acre.daylight.short=ACST
-Brazil/Acre.generic.short=ACT
-Brazil/Acre.standard.short=ACT
-Brazil/DeNoronha.daylight.short=FNST
-Brazil/DeNoronha.generic.short=FNT
-Brazil/DeNoronha.standard.short=FNT
-Brazil/East.daylight.short=BRST
-Brazil/East.generic.short=BRT
-Brazil/East.standard.short=BRT
-Brazil/West.daylight.short=AMST
-Brazil/West.generic.short=AMT
-Brazil/West.standard.short=AMT
-BST.daylight.short=BDST
-BST.generic.short=BDT
-BST.standard.short=BDT
-Canada/Atlantic.daylight.short=ADT
-Canada/Atlantic.generic.short=AT
-Canada/Atlantic.standard.short=AST
-Canada/Central.daylight.short=CDT
-Canada/Central.generic.short=CT
-Canada/Central.standard.short=CST
-Canada/Eastern.daylight.short=EDT
-Canada/Eastern.generic.short=ET
-Canada/Eastern.standard.short=EST
-Canada/East-Saskatchewan.daylight.short=CDT
-Canada/East-Saskatchewan.generic.short=CT
-Canada/East-Saskatchewan.standard.short=CST
-Canada/Mountain.daylight.short=MDT
-Canada/Mountain.generic.short=MT
-Canada/Mountain.standard.short=MST
-Canada/Newfoundland.daylight.short=NDT
-Canada/Newfoundland.generic.short=NT
-Canada/Newfoundland.standard.short=NST
-Canada/Pacific.daylight.short=PDT
-Canada/Pacific.generic.short=PT
-Canada/Pacific.standard.short=PST
-Canada/Saskatchewan.daylight.short=CDT
-Canada/Saskatchewan.generic.short=CT
-Canada/Saskatchewan.standard.short=CST
-Canada/Yukon.daylight.short=PDT
-Canada/Yukon.generic.short=PT
-Canada/Yukon.standard.short=PST
-CAT.daylight.short=CAST
-CAT.generic.short=CAT
-CAT.standard.short=CAT
-CET.daylight.short=CEST
-CET.generic.short=CET
-CET.standard.short=CET
-Chile/Continental.daylight.short=CLST
-Chile/Continental.generic.short=CLT
-Chile/Continental.standard.short=CLT
-Chile/EasterIsland.daylight.short=EASST
-Chile/EasterIsland.generic.short=EAST
-Chile/EasterIsland.standard.short=EAST
-CNT.daylight.short=NDT
-CNT.generic.short=NT
-CNT.standard.short=NST
-CST6CDT.daylight.short=CDT
-CST6CDT.generic.short=CT
-CST6CDT.standard.short=CST
-CST.daylight.short=CDT
-CST.generic.short=CT
-CST.standard.short=CST
-CTT.daylight.short=CDT
-CTT.generic.short=CT
-CTT.standard.short=CST
-Cuba.daylight.short=CDT
-Cuba.generic.short=CT
-Cuba.standard.short=CST
-EAT.daylight.short=EAST
-EAT.generic.short=EAT
-EAT.standard.short=EAT
-ECT.daylight.short=CEST
-ECT.generic.short=CET
-ECT.standard.short=CET
-EET.daylight.short=EEST
-EET.generic.short=EET
-EET.standard.short=EET
-Egypt.daylight.short=EEST
-Egypt.generic.short=EET
-Egypt.standard.short=EET
-Eire.daylight.short=IST
-Eire.generic.short=IT
-Eire.standard.short=GMT
-EST5EDT.daylight.short=EDT
-EST5EDT.generic.short=ET
-EST5EDT.standard.short=EST
-EST.daylight.short=EDT
-EST.generic.short=ET
-EST.standard.short=EST
-Etc/Greenwich.daylight.short=GMT
-Etc/Greenwich.generic.short=GMT
-Etc/Greenwich.standard.short=GMT
-Etc/UCT.daylight.short=UTC
-Etc/UCT.generic.short=UTC
-Etc/UCT.standard.short=UTC
-Etc/Universal.daylight.short=UTC
-Etc/Universal.generic.short=UTC
-Etc/Universal.standard.short=UTC
-Etc/UTC.daylight.short=UTC
-Etc/UTC.generic.short=UTC
-Etc/UTC.standard.short=UTC
-Etc/Zulu.daylight.short=UTC
-Etc/Zulu.generic.short=UTC
-Etc/Zulu.standard.short=UTC
-Europe/Amsterdam.daylight.short=CEST
-Europe/Amsterdam.generic.short=CET
-Europe/Amsterdam.standard.short=CET
-Europe/Andorra.daylight.short=CEST
-Europe/Andorra.generic.short=CET
-Europe/Andorra.standard.short=CET
-Europe/Athens.daylight.short=EEST
-Europe/Athens.generic.short=EET
-Europe/Athens.standard.short=EET
-Europe/Belfast.daylight.short=BST
-Europe/Belfast.generic.short=BT
-Europe/Belfast.standard.short=GMT
-Europe/Belgrade.daylight.short=CEST
-Europe/Belgrade.generic.short=CET
-Europe/Belgrade.standard.short=CET
-Europe/Berlin.daylight.short=CEST
-Europe/Berlin.generic.short=CET
-Europe/Berlin.standard.short=CET
-Europe/Bratislava.daylight.short=CEST
-Europe/Bratislava.generic.short=CET
-Europe/Bratislava.standard.short=CET
-Europe/Brussels.daylight.short=CEST
-Europe/Brussels.generic.short=CET
-Europe/Brussels.standard.short=CET
-Europe/Bucharest.daylight.short=EEST
-Europe/Bucharest.generic.short=EET
-Europe/Bucharest.standard.short=EET
-Europe/Budapest.daylight.short=CEST
-Europe/Budapest.generic.short=CET
-Europe/Budapest.standard.short=CET
-Europe/Busingen.daylight.short=CEST
-Europe/Busingen.generic.short=CET
-Europe/Busingen.standard.short=CET
-Europe/Chisinau.daylight.short=EEST
-Europe/Chisinau.generic.short=EET
-Europe/Chisinau.standard.short=EET
-Europe/Copenhagen.daylight.short=CEST
-Europe/Copenhagen.generic.short=CET
-Europe/Copenhagen.standard.short=CET
-Europe/Dublin.daylight.short=IST
-Europe/Dublin.generic.short=IT
-Europe/Dublin.standard.short=GMT
-Europe/Gibraltar.daylight.short=CEST
-Europe/Gibraltar.generic.short=CET
-Europe/Gibraltar.standard.short=CET
-Europe/Guernsey.daylight.short=BST
-Europe/Guernsey.generic.short=BT
-Europe/Guernsey.standard.short=GMT
-Europe/Helsinki.daylight.short=EEST
-Europe/Helsinki.generic.short=EET
-Europe/Helsinki.standard.short=EET
-Europe/Isle_of_Man.daylight.short=BST
-Europe/Isle_of_Man.generic.short=BT
-Europe/Isle_of_Man.standard.short=GMT
-Europe/Istanbul.daylight.short=EEST
-Europe/Istanbul.generic.short=EET
-Europe/Istanbul.standard.short=EET
-Europe/Jersey.daylight.short=BST
-Europe/Jersey.generic.short=BT
-Europe/Jersey.standard.short=GMT
-Europe/Kaliningrad.daylight.short=FEST
-Europe/Kaliningrad.generic.short=FET
-Europe/Kaliningrad.standard.short=FET
-Europe/Kiev.daylight.short=EEST
-Europe/Kiev.generic.short=EET
-Europe/Kiev.standard.short=EET
-Europe/Lisbon.daylight.short=WEST
-Europe/Lisbon.generic.short=WET
-Europe/Lisbon.standard.short=WET
-Europe/Ljubljana.daylight.short=CEST
-Europe/Ljubljana.generic.short=CET
-Europe/Ljubljana.standard.short=CET
-Europe/London.daylight.short=BST
-Europe/London.generic.short=BT
-Europe/London.standard.short=GMT
-Europe/Luxembourg.daylight.short=CEST
-Europe/Luxembourg.generic.short=CET
-Europe/Luxembourg.standard.short=CET
-Europe/Madrid.daylight.short=CEST
-Europe/Madrid.generic.short=CET
-Europe/Madrid.standard.short=CET
-Europe/Malta.daylight.short=CEST
-Europe/Malta.generic.short=CET
-Europe/Malta.standard.short=CET
-Europe/Mariehamn.daylight.short=EEST
-Europe/Mariehamn.generic.short=EET
-Europe/Mariehamn.standard.short=EET
-Europe/Minsk.daylight.short=FEST
-Europe/Minsk.generic.short=FET
-Europe/Minsk.standard.short=FET
-Europe/Monaco.daylight.short=CEST
-Europe/Monaco.generic.short=CET
-Europe/Monaco.standard.short=CET
-Europe/Moscow.daylight.short=MSD
-Europe/Moscow.generic.short=MT
-Europe/Moscow.standard.short=MSK
-Europe/Nicosia.daylight.short=EEST
-Europe/Nicosia.generic.short=EET
-Europe/Nicosia.standard.short=EET
-Europe/Oslo.daylight.short=CEST
-Europe/Oslo.generic.short=CET
-Europe/Oslo.standard.short=CET
-Europe/Paris.daylight.short=CEST
-Europe/Paris.generic.short=CET
-Europe/Paris.standard.short=CET
-Europe/Podgorica.daylight.short=CEST
-Europe/Podgorica.generic.short=CET
-Europe/Podgorica.standard.short=CET
-Europe/Prague.daylight.short=CEST
-Europe/Prague.generic.short=CET
-Europe/Prague.standard.short=CET
-Europe/Riga.daylight.short=EEST
-Europe/Riga.generic.short=EET
-Europe/Riga.standard.short=EET
-Europe/Rome.daylight.short=CEST
-Europe/Rome.generic.short=CET
-Europe/Rome.standard.short=CET
-Europe/Samara.daylight.short=SAMST
-Europe/Samara.generic.short=SAMT
-Europe/Samara.standard.short=SAMT
-Europe/San_Marino.daylight.short=CEST
-Europe/San_Marino.generic.short=CET
-Europe/San_Marino.standard.short=CET
-Europe/Sarajevo.daylight.short=CEST
-Europe/Sarajevo.generic.short=CET
-Europe/Sarajevo.standard.short=CET
-Europe/Simferopol.daylight.short=EEST
-Europe/Simferopol.generic.short=EET
-Europe/Simferopol.standard.short=EET
-Europe/Skopje.daylight.short=CEST
-Europe/Skopje.generic.short=CET
-Europe/Skopje.standard.short=CET
-Europe/Sofia.daylight.short=EEST
-Europe/Sofia.generic.short=EET
-Europe/Sofia.standard.short=EET
-Europe/Stockholm.daylight.short=CEST
-Europe/Stockholm.generic.short=CET
-Europe/Stockholm.standard.short=CET
-Europe/Tallinn.daylight.short=EEST
-Europe/Tallinn.generic.short=EET
-Europe/Tallinn.standard.short=EET
-Europe/Tirane.daylight.short=CEST
-Europe/Tirane.generic.short=CET
-Europe/Tirane.standard.short=CET
-Europe/Tiraspol.daylight.short=EEST
-Europe/Tiraspol.generic.short=EET
-Europe/Tiraspol.standard.short=EET
-Europe/Uzhgorod.daylight.short=EEST
-Europe/Uzhgorod.generic.short=EET
-Europe/Uzhgorod.standard.short=EET
-Europe/Vaduz.daylight.short=CEST
-Europe/Vaduz.generic.short=CET
-Europe/Vaduz.standard.short=CET
-Europe/Vatican.daylight.short=CEST
-Europe/Vatican.generic.short=CET
-Europe/Vatican.standard.short=CET
-Europe/Vienna.daylight.short=CEST
-Europe/Vienna.generic.short=CET
-Europe/Vienna.standard.short=CET
-Europe/Vilnius.daylight.short=EEST
-Europe/Vilnius.generic.short=EET
-Europe/Vilnius.standard.short=EET
-Europe/Volgograd.daylight.short=VOLST
-Europe/Volgograd.generic.short=VOLT
-Europe/Volgograd.standard.short=VOLT
-Europe/Warsaw.daylight.short=CEST
-Europe/Warsaw.generic.short=CET
-Europe/Warsaw.standard.short=CET
-Europe/Zagreb.daylight.short=CEST
-Europe/Zagreb.generic.short=CET
-Europe/Zagreb.standard.short=CET
-Europe/Zaporozhye.daylight.short=EEST
-Europe/Zaporozhye.generic.short=EET
-Europe/Zaporozhye.standard.short=EET
-Europe/Zurich.daylight.short=CEST
-Europe/Zurich.generic.short=CET
-Europe/Zurich.standard.short=CET
-GB.daylight.short=BST
-GB-Eire.daylight.short=BST
-GB-Eire.generic.short=BT
-GB-Eire.standard.short=GMT
-GB.generic.short=BT
-GB.standard.short=GMT
-GMT.daylight.short=GMT
-GMT.generic.short=GMT
-GMT.standard.short=GMT
-Greenwich.daylight.short=GMT
-Greenwich.generic.short=GMT
-Greenwich.standard.short=GMT
-Hongkong.daylight.short=HKST
-Hongkong.generic.short=HKT
-Hongkong.standard.short=HKT
-HST.daylight.short=HDT
-HST.generic.short=HT
-HST.standard.short=HST
-Iceland.daylight.short=GMT
-Iceland.generic.short=GMT
-Iceland.standard.short=GMT
-IET.daylight.short=EDT
-IET.generic.short=ET
-IET.standard.short=EST
-Indian/Antananarivo.daylight.short=EAST
-Indian/Antananarivo.generic.short=EAT
-Indian/Antananarivo.standard.short=EAT
-Indian/Chagos.daylight.short=IOST
-Indian/Chagos.generic.short=IOT
-Indian/Chagos.standard.short=IOT
-Indian/Christmas.daylight.short=CXST
-Indian/Christmas.generic.short=CIT
-Indian/Christmas.standard.short=CXT
-Indian/Cocos.daylight.short=CCST
-Indian/Cocos.generic.short=CCT
-Indian/Cocos.standard.short=CCT
-Indian/Comoro.daylight.short=EAST
-Indian/Comoro.generic.short=EAT
-Indian/Comoro.standard.short=EAT
-Indian/Kerguelen.daylight.short=TFST
-Indian/Kerguelen.generic.short=TFT
-Indian/Kerguelen.standard.short=TFT
-Indian/Mahe.daylight.short=SCST
-Indian/Mahe.generic.short=SCT
-Indian/Mahe.standard.short=SCT
-Indian/Maldives.daylight.short=MVST
-Indian/Maldives.generic.short=MVT
-Indian/Maldives.standard.short=MVT
-Indian/Mauritius.daylight.short=MUST
-Indian/Mauritius.generic.short=MUT
-Indian/Mauritius.standard.short=MUT
-Indian/Mayotte.daylight.short=EAST
-Indian/Mayotte.generic.short=EAT
-Indian/Mayotte.standard.short=EAT
-Indian/Reunion.daylight.short=REST
-Indian/Reunion.generic.short=RET
-Indian/Reunion.standard.short=RET
-Iran.daylight.short=IRDT
-Iran.generic.short=IRT
-Iran.standard.short=IRST
-Israel.daylight.short=IDT
-Israel.generic.short=IT
-Israel.standard.short=IST
-IST.daylight.short=IDT
-IST.generic.short=IT
-IST.standard.short=IST
-Jamaica.daylight.short=EDT
-Jamaica.generic.short=ET
-Jamaica.standard.short=EST
-Japan.daylight.short=JDT
-Japan.generic.short=JT
-Japan.standard.short=JST
-JST.daylight.short=JDT
-JST.generic.short=JT
-JST.standard.short=JST
-Kwajalein.daylight.short=MHST
-Kwajalein.generic.short=MHT
-Kwajalein.standard.short=MHT
-Libya.daylight.short=EEST
-Libya.generic.short=EET
-Libya.standard.short=EET
-MET.daylight.short=MEST
-MET.generic.short=MET
-MET.standard.short=MET
-Mexico/BajaNorte.daylight.short=PDT
-Mexico/BajaNorte.generic.short=PT
-Mexico/BajaNorte.standard.short=PST
-Mexico/BajaSur.daylight.short=MDT
-Mexico/BajaSur.generic.short=MT
-Mexico/BajaSur.standard.short=MST
-Mexico/General.daylight.short=CDT
-Mexico/General.generic.short=CT
-Mexico/General.standard.short=CST
-MIT.daylight.short=WSDT
-MIT.generic.short=WST
-MIT.standard.short=WST
-MST7MDT.daylight.short=MDT
-MST7MDT.generic.short=MT
-MST7MDT.standard.short=MST
-MST.daylight.short=MDT
-MST.generic.short=MT
-MST.standard.short=MST
-Navajo.daylight.short=MDT
-Navajo.generic.short=MT
-Navajo.standard.short=MST
-NET.daylight.short=AMST
-NET.generic.short=AMT
-NET.standard.short=AMT
-NST.daylight.short=NZDT
-NST.generic.short=NZT
-NST.standard.short=NZST
-NZ-CHAT.daylight.short=CHADT
-NZ-CHAT.generic.short=CHAT
-NZ-CHAT.standard.short=CHAST
-NZ.daylight.short=NZDT
-NZ.generic.short=NZT
-NZ.standard.short=NZST
-Pacific/Apia.daylight.short=WSDT
-Pacific/Apia.generic.short=WST
-Pacific/Apia.standard.short=WST
-Pacific/Auckland.daylight.short=NZDT
-Pacific/Auckland.generic.short=NZT
-Pacific/Auckland.standard.short=NZST
-Pacific/Chatham.daylight.short=CHADT
-Pacific/Chatham.generic.short=CHAT
-Pacific/Chatham.standard.short=CHAST
-Pacific/Chuuk.daylight.short=CHUST
-Pacific/Chuuk.generic.short=CHUT
-Pacific/Chuuk.standard.short=CHUT
-Pacific/Easter.daylight.short=EASST
-Pacific/Easter.generic.short=EAST
-Pacific/Easter.standard.short=EAST
-Pacific/Efate.daylight.short=VUST
-Pacific/Efate.generic.short=VUT
-Pacific/Efate.standard.short=VUT
-Pacific/Enderbury.daylight.short=PHOST
-Pacific/Enderbury.generic.short=PHOT
-Pacific/Enderbury.standard.short=PHOT
-Pacific/Fakaofo.daylight.short=TKST
-Pacific/Fakaofo.generic.short=TKT
-Pacific/Fakaofo.standard.short=TKT
-Pacific/Fiji.daylight.short=FJST
-Pacific/Fiji.generic.short=FJT
-Pacific/Fiji.standard.short=FJT
-Pacific/Funafuti.daylight.short=TVST
-Pacific/Funafuti.generic.short=TVT
-Pacific/Funafuti.standard.short=TVT
-Pacific/Galapagos.daylight.short=GALST
-Pacific/Galapagos.generic.short=GALT
-Pacific/Galapagos.standard.short=GALT
-Pacific/Gambier.daylight.short=GAMST
-Pacific/Gambier.generic.short=GAMT
-Pacific/Gambier.standard.short=GAMT
-Pacific/Guadalcanal.daylight.short=SBST
-Pacific/Guadalcanal.generic.short=SBT
-Pacific/Guadalcanal.standard.short=SBT
-Pacific/Guam.daylight.short=ChDT
-Pacific/Guam.generic.short=ChT
-Pacific/Guam.standard.short=ChST
-Pacific/Honolulu.daylight.short=HDT
-Pacific/Honolulu.generic.short=HT
-Pacific/Honolulu.standard.short=HST
-Pacific/Johnston.daylight.short=HDT
-Pacific/Johnston.generic.short=HT
-Pacific/Johnston.standard.short=HST
-Pacific/Kiritimati.daylight.short=LINST
-Pacific/Kiritimati.generic.short=LINT
-Pacific/Kiritimati.standard.short=LINT
-Pacific/Kosrae.daylight.short=KOSST
-Pacific/Kosrae.generic.short=KOST
-Pacific/Kosrae.standard.short=KOST
-Pacific/Kwajalein.daylight.short=MHST
-Pacific/Kwajalein.generic.short=MHT
-Pacific/Kwajalein.standard.short=MHT
-Pacific/Majuro.daylight.short=MHST
-Pacific/Majuro.generic.short=MHT
-Pacific/Majuro.standard.short=MHT
-Pacific/Marquesas.daylight.short=MARST
-Pacific/Marquesas.generic.short=MART
-Pacific/Marquesas.standard.short=MART
-Pacific/Midway.daylight.short=SDT
-Pacific/Midway.generic.short=ST
-Pacific/Midway.standard.short=SST
-Pacific/Nauru.daylight.short=NRST
-Pacific/Nauru.generic.short=NRT
-Pacific/Nauru.standard.short=NRT
-Pacific/Niue.daylight.short=NUST
-Pacific/Niue.generic.short=NUT
-Pacific/Niue.standard.short=NUT
-Pacific/Norfolk.daylight.short=NFST
-Pacific/Norfolk.generic.short=NFT
-Pacific/Norfolk.standard.short=NFT
-Pacific/Noumea.daylight.short=NCST
-Pacific/Noumea.generic.short=NCT
-Pacific/Noumea.standard.short=NCT
-Pacific/Pago_Pago.daylight.short=SDT
-Pacific/Pago_Pago.generic.short=ST
-Pacific/Pago_Pago.standard.short=SST
-Pacific/Palau.daylight.short=PWST
-Pacific/Palau.generic.short=PWT
-Pacific/Palau.standard.short=PWT
-Pacific/Pitcairn.daylight.short=PDT
-Pacific/Pitcairn.generic.short=PT
-Pacific/Pitcairn.standard.short=PST
-Pacific/Pohnpei.daylight.short=PONST
-Pacific/Pohnpei.generic.short=PONT
-Pacific/Pohnpei.standard.short=PONT
-Pacific/Ponape.daylight.short=PONST
-Pacific/Ponape.generic.short=PONT
-Pacific/Ponape.standard.short=PONT
-Pacific/Port_Moresby.daylight.short=PGST
-Pacific/Port_Moresby.generic.short=PGT
-Pacific/Port_Moresby.standard.short=PGT
-Pacific/Rarotonga.daylight.short=CKHST
-Pacific/Rarotonga.generic.short=CKT
-Pacific/Rarotonga.standard.short=CKT
-Pacific/Saipan.daylight.short=ChDT
-Pacific/Saipan.generic.short=ChT
-Pacific/Saipan.standard.short=ChST
-Pacific/Samoa.daylight.short=SDT
-Pacific/Samoa.generic.short=ST
-Pacific/Samoa.standard.short=SST
-Pacific/Tahiti.daylight.short=TAHST
-Pacific/Tahiti.generic.short=TAHT
-Pacific/Tahiti.standard.short=TAHT
-Pacific/Tarawa.daylight.short=GILST
-Pacific/Tarawa.generic.short=GILT
-Pacific/Tarawa.standard.short=GILT
-Pacific/Tongatapu.daylight.short=TOST
-Pacific/Tongatapu.generic.short=TOT
-Pacific/Tongatapu.standard.short=TOT
-Pacific/Truk.daylight.short=CHUST
-Pacific/Truk.generic.short=CHUT
-Pacific/Truk.standard.short=CHUT
-Pacific/Wake.daylight.short=WAKST
-Pacific/Wake.generic.short=WAKT
-Pacific/Wake.standard.short=WAKT
-Pacific/Wallis.daylight.short=WFST
-Pacific/Wallis.generic.short=WFT
-Pacific/Wallis.standard.short=WFT
-Pacific/Yap.daylight.short=CHUST
-Pacific/Yap.generic.short=CHUT
-Pacific/Yap.standard.short=CHUT
-PLT.daylight.short=PKST
-PLT.generic.short=PKT
-PLT.standard.short=PKT
-PNT.daylight.short=MDT
-PNT.generic.short=MT
-PNT.standard.short=MST
-Poland.daylight.short=CEST
-Poland.generic.short=CET
-Poland.standard.short=CET
-Portugal.daylight.short=WEST
-Portugal.generic.short=WET
-Portugal.standard.short=WET
-PRC.daylight.short=CDT
-PRC.generic.short=CT
-PRC.standard.short=CST
-PRT.daylight.short=ADT
-PRT.generic.short=AT
-PRT.standard.short=AST
-PST8PDT.daylight.short=PDT
-PST8PDT.generic.short=PT
-PST8PDT.standard.short=PST
-PST.daylight.short=PDT
-PST.generic.short=PT
-PST.standard.short=PST
-ROK.daylight.short=KDT
-ROK.generic.short=KT
-ROK.standard.short=KST
-Singapore.daylight.short=SGST
-Singapore.generic.short=SGT
-Singapore.standard.short=SGT
-SST.daylight.short=SBST
-SST.generic.short=SBT
-SST.standard.short=SBT
-SystemV/AST4ADT.daylight.short=ADT
-SystemV/AST4ADT.generic.short=AT
-SystemV/AST4ADT.standard.short=AST
-SystemV/AST4.daylight.short=ADT
-SystemV/AST4.generic.short=AT
-SystemV/AST4.standard.short=AST
-SystemV/CST6CDT.daylight.short=CDT
-SystemV/CST6CDT.generic.short=CT
-SystemV/CST6CDT.standard.short=CST
-SystemV/CST6.daylight.short=CDT
-SystemV/CST6.generic.short=CT
-SystemV/CST6.standard.short=CST
-SystemV/EST5.daylight.short=EDT
-SystemV/EST5EDT.daylight.short=EDT
-SystemV/EST5EDT.generic.short=ET
-SystemV/EST5EDT.standard.short=EST
-SystemV/EST5.generic.short=ET
-SystemV/EST5.standard.short=EST
-SystemV/HST10.daylight.short=HDT
-SystemV/HST10.generic.short=HT
-SystemV/HST10.standard.short=HST
-SystemV/MST7.daylight.short=MDT
-SystemV/MST7.generic.short=MT
-SystemV/MST7MDT.daylight.short=MDT
-SystemV/MST7MDT.generic.short=MT
-SystemV/MST7MDT.standard.short=MST
-SystemV/MST7.standard.short=MST
-SystemV/PST8.daylight.short=PDT
-SystemV/PST8.generic.short=PT
-SystemV/PST8PDT.daylight.short=PDT
-SystemV/PST8PDT.generic.short=PT
-SystemV/PST8PDT.standard.short=PST
-SystemV/PST8.standard.short=PST
-SystemV/YST9.daylight.short=AKDT
-SystemV/YST9.generic.short=AKT
-SystemV/YST9.standard.short=AKST
-SystemV/YST9YDT.daylight.short=AKDT
-SystemV/YST9YDT.generic.short=AKT
-SystemV/YST9YDT.standard.short=AKST
-Turkey.daylight.short=EEST
-Turkey.generic.short=EET
-Turkey.standard.short=EET
-UCT.daylight.short=UTC
-UCT.generic.short=UTC
-UCT.standard.short=UTC
-Universal.daylight.short=UTC
-Universal.generic.short=UTC
-Universal.standard.short=UTC
-US/Alaska.daylight.short=AKDT
-US/Alaska.generic.short=AKT
-US/Alaska.standard.short=AKST
-US/Aleutian.daylight.short=HADT
-US/Aleutian.generic.short=HAT
-US/Aleutian.standard.short=HAST
-US/Arizona.daylight.short=MDT
-US/Arizona.generic.short=MT
-US/Arizona.standard.short=MST
-US/Central.daylight.short=CDT
-US/Central.generic.short=CT
-US/Central.standard.short=CST
-US/Eastern.daylight.short=EDT
-US/Eastern.generic.short=ET
-US/Eastern.standard.short=EST
-US/East-Indiana.daylight.short=EDT
-US/East-Indiana.generic.short=ET
-US/East-Indiana.standard.short=EST
-US/Hawaii.daylight.short=HDT
-US/Hawaii.generic.short=HT
-US/Hawaii.standard.short=HST
-US/Indiana-Starke.daylight.short=CDT
-US/Indiana-Starke.generic.short=CT
-US/Indiana-Starke.standard.short=CST
-US/Michigan.daylight.short=EDT
-US/Michigan.generic.short=ET
-US/Michigan.standard.short=EST
-US/Mountain.daylight.short=MDT
-US/Mountain.generic.short=MT
-US/Mountain.standard.short=MST
-US/Pacific.daylight.short=PDT
-US/Pacific.generic.short=PT
-US/Pacific-New.daylight.short=PDT
-US/Pacific-New.generic.short=PT
-US/Pacific-New.standard.short=PST
-US/Pacific.standard.short=PST
-US/Samoa.daylight.short=SDT
-US/Samoa.generic.short=ST
-US/Samoa.standard.short=SST
-UTC.daylight.short=UTC
-UTC.generic.short=UTC
-UTC.standard.short=UTC
-VST.daylight.short=ICST
-VST.generic.short=ICT
-VST.standard.short=ICT
-WET.daylight.short=WEST
-WET.generic.short=WET
-WET.standard.short=WET
-W-SU.daylight.short=MSD
-W-SU.generic.short=MT
-W-SU.standard.short=MSK
-Zulu.daylight.short=UTC
-Zulu.generic.short=UTC
-Zulu.standard.short=UTC
diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_zh_CN.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_zh_CN.properties
deleted file mode 100644
index 62ccf293..0000000
--- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_zh_CN.properties
+++ /dev/null
@@ -1,651 +0,0 @@
-ACT.daylight.long=\u4E2D\u592E\u590F\u4EE4\u65F6 (\u5317\u9886\u5730)
-ACT.generic.long=\u4E2D\u90E8\u65F6\u95F4 (\u5317\u90E8\u5730\u533A)
-ACT.standard.long=\u4E2D\u592E\u6807\u51C6\u65F6\u95F4 (\u5317\u9886\u5730)
-AET.daylight.long=\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u65B0\u5357\u5A01\u5C14\u65AF)
-AET.generic.long=\u4E1C\u90E8\u65F6\u95F4 (\u65B0\u5357\u5A01\u5C14\u65AF)
-AET.standard.long=\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u65B0\u5357\u5A01\u5C14\u65AF)
-AGT.generic.long=\u963F\u6839\u5EF7\u65F6\u95F4
-ART.generic.long=\u4E1C\u6B27\u65F6\u95F4
-AST.generic.long=\u963F\u62C9\u65AF\u52A0\u65F6\u95F4
-Africa/Abidjan.generic.long=\u683C\u6797\u5A01\u6CBB\u65F6\u95F4
-Africa/Accra.generic.long=\u52A0\u7EB3\u65F6\u95F4
-Africa/Addis_Ababa.generic.long=\u4E1C\u975E\u65F6\u95F4
-Africa/Algiers.generic.long=\u4E2D\u6B27\u65F6\u95F4
-Africa/Asmara.generic.long=\u4E1C\u975E\u65F6\u95F4
-Africa/Asmera.generic.long=\u4E1C\u975E\u65F6\u95F4
-Africa/Bamako.generic.long=\u683C\u6797\u5A01\u6CBB\u65F6\u95F4
-Africa/Bangui.generic.long=\u897F\u975E\u65F6\u95F4
-Africa/Banjul.generic.long=\u683C\u6797\u5A01\u6CBB\u65F6\u95F4
-Africa/Bissau.generic.long=\u683C\u6797\u5A01\u6CBB\u65F6\u95F4
-Africa/Blantyre.generic.long=\u4E2D\u975E\u65F6\u95F4
-Africa/Brazzaville.generic.long=\u897F\u975E\u65F6\u95F4
-Africa/Bujumbura.generic.long=\u4E2D\u975E\u65F6\u95F4
-Africa/Cairo.generic.long=\u4E1C\u6B27\u65F6\u95F4
-Africa/Casablanca.generic.long=\u897F\u6B27\u65F6\u95F4
-Africa/Ceuta.generic.long=\u4E2D\u6B27\u65F6\u95F4
-Africa/Conakry.generic.long=\u683C\u6797\u5A01\u6CBB\u65F6\u95F4
-Africa/Dakar.generic.long=\u683C\u6797\u5A01\u6CBB\u65F6\u95F4
-Africa/Dar_es_Salaam.generic.long=\u4E1C\u975E\u65F6\u95F4
-Africa/Djibouti.generic.long=\u4E1C\u975E\u65F6\u95F4
-Africa/Douala.generic.long=\u897F\u975E\u65F6\u95F4
-Africa/El_Aaiun.generic.long=\u897F\u6B27\u65F6\u95F4
-Africa/Freetown.generic.long=\u585E\u62C9\u91CC\u6602\u65F6\u95F4
-Africa/Gaborone.generic.long=\u4E2D\u975E\u65F6\u95F4
-Africa/Harare.generic.long=\u4E2D\u975E\u65F6\u95F4
-Africa/Johannesburg.generic.long=\u5357\u975E\u65F6\u95F4
-Africa/Juba.generic.long=\u4E1C\u975E\u65F6\u95F4
-Africa/Kampala.generic.long=\u4E1C\u975E\u65F6\u95F4
-Africa/Khartoum.generic.long=\u4E1C\u975E\u65F6\u95F4
-Africa/Kigali.generic.long=\u4E2D\u975E\u65F6\u95F4
-Africa/Kinshasa.generic.long=\u897F\u975E\u65F6\u95F4
-Africa/Lagos.generic.long=\u897F\u975E\u65F6\u95F4
-Africa/Libreville.generic.long=\u897F\u975E\u65F6\u95F4
-Africa/Lome.generic.long=\u683C\u6797\u5A01\u6CBB\u65F6\u95F4
-Africa/Luanda.generic.long=\u897F\u975E\u65F6\u95F4
-Africa/Lubumbashi.generic.long=\u4E2D\u975E\u65F6\u95F4
-Africa/Lusaka.generic.long=\u4E2D\u975E\u65F6\u95F4
-Africa/Malabo.generic.long=\u897F\u975E\u65F6\u95F4
-Africa/Maputo.generic.long=\u4E2D\u975E\u65F6\u95F4
-Africa/Maseru.generic.long=\u5357\u975E\u65F6\u95F4
-Africa/Mbabane.generic.long=\u5357\u975E\u65F6\u95F4
-Africa/Mogadishu.generic.long=\u4E1C\u975E\u65F6\u95F4
-Africa/Monrovia.generic.long=\u683C\u6797\u5A01\u6CBB\u65F6\u95F4
-Africa/Nairobi.generic.long=\u4E1C\u975E\u65F6\u95F4
-Africa/Ndjamena.generic.long=\u897F\u975E\u65F6\u95F4
-Africa/Niamey.generic.long=\u897F\u975E\u65F6\u95F4
-Africa/Nouakchott.generic.long=\u683C\u6797\u5A01\u6CBB\u65F6\u95F4
-Africa/Ouagadougou.generic.long=\u683C\u6797\u5A01\u6CBB\u65F6\u95F4
-Africa/Porto-Novo.generic.long=\u897F\u975E\u65F6\u95F4
-Africa/Sao_Tome.generic.long=\u683C\u6797\u5A01\u6CBB\u65F6\u95F4
-Africa/Timbuktu.generic.long=\u683C\u6797\u5A01\u6CBB\u65F6\u95F4
-Africa/Tripoli.generic.long=\u4e1c\u6b27\u65f6\u95f4
-Africa/Tunis.generic.long=\u4E2D\u6B27\u65F6\u95F4
-Africa/Windhoek.generic.long=\u897F\u975E\u65F6\u95F4
-America/Adak.generic.long=\u590F\u5A01\u5937-\u963F\u7559\u7533\u65F6\u95F4
-America/Anchorage.generic.long=\u963F\u62C9\u65AF\u52A0\u65F6\u95F4
-America/Anguilla.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4
-America/Antigua.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4
-America/Araguaina.generic.long=\u5DF4\u897F\u5229\u4E9A\u65F6\u95F4
-America/Argentina/Buenos_Aires.generic.long=\u963F\u6839\u5EF7\u65F6\u95F4
-America/Argentina/Catamarca.generic.long=\u963F\u6839\u5EF7\u65F6\u95F4
-America/Argentina/ComodRivadavia.generic.long=\u963F\u6839\u5EF7\u65F6\u95F4
-America/Argentina/Cordoba.generic.long=\u963F\u6839\u5EF7\u65F6\u95F4
-America/Argentina/Jujuy.generic.long=\u963F\u6839\u5EF7\u65F6\u95F4
-America/Argentina/La_Rioja.generic.long=\u963F\u6839\u5EF7\u65F6\u95F4
-America/Argentina/Mendoza.generic.long=\u963F\u6839\u5EF7\u65F6\u95F4
-America/Argentina/Rio_Gallegos.generic.long=\u963F\u6839\u5EF7\u65F6\u95F4
-America/Argentina/Salta.generic.long=\u963F\u6839\u5EF7\u65F6\u95F4
-America/Argentina/San_Juan.generic.long=\u963F\u6839\u5EF7\u65F6\u95F4
-America/Argentina/San_Luis.generic.long=\u963f\u6839\u5ef7\u65f6\u95f4
-America/Argentina/Tucuman.generic.long=\u963F\u6839\u5EF7\u65F6\u95F4
-America/Argentina/Ushuaia.generic.long=\u963F\u6839\u5EF7\u65F6\u95F4
-America/Aruba.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4
-America/Asuncion.generic.long=\u5DF4\u62C9\u572D\u65F6\u95F4
-America/Atikokan.generic.long=\u4E1C\u90E8\u65F6\u95F4
-America/Atka.generic.long=\u590F\u5A01\u5937-\u963F\u7559\u7533\u65F6\u95F4
-America/Bahia.generic.long=\u5DF4\u897F\u5229\u4E9A\u65F6\u95F4
-America/Bahia_Banderas.generic.long=\u4E2D\u90E8\u65F6\u95F4
-America/Barbados.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4
-America/Belem.generic.long=\u5DF4\u897F\u5229\u4E9A\u65F6\u95F4
-America/Belize.generic.long=\u4E2D\u90E8\u65F6\u95F4
-America/Blanc-Sablon.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4
-America/Boa_Vista.generic.long=\u4E9A\u9A6C\u900A\u65F6\u95F4
-America/Bogota.generic.long=\u54E5\u4F26\u6BD4\u4E9A\u65F6\u95F4
-America/Boise.generic.long=\u5C71\u5730\u65F6\u95F4
-America/Buenos_Aires.generic.long=\u963F\u6839\u5EF7\u65F6\u95F4
-America/Cambridge_Bay.generic.long=\u5C71\u5730\u65F6\u95F4
-America/Campo_Grande.generic.long=\u4E9A\u9A6C\u900A\u65F6\u95F4
-America/Cancun.generic.long=\u4E2D\u90E8\u65F6\u95F4
-America/Caracas.generic.long=\u59D4\u5185\u745E\u62C9\u65F6\u95F4
-America/Catamarca.generic.long=\u963F\u6839\u5EF7\u65F6\u95F4
-America/Cayenne.generic.long=\u6CD5\u5C5E\u572D\u4E9A\u90A3\u65F6\u95F4
-America/Cayman.generic.long=\u4E1C\u90E8\u65F6\u95F4
-America/Chicago.generic.long=\u4E2D\u90E8\u65F6\u95F4
-America/Chihuahua.generic.long=\u5C71\u5730\u65F6\u95F4
-America/Coral_Harbour.generic.long=\u4E1C\u90E8\u65F6\u95F4
-America/Cordoba.generic.long=\u963F\u6839\u5EF7\u65F6\u95F4
-America/Costa_Rica.generic.long=\u4E2D\u90E8\u65F6\u95F4
-America/Creston.generic.long=\u5C71\u5730\u65F6\u95F4
-America/Cuiaba.generic.long=\u4E9A\u9A6C\u900A\u65F6\u95F4
-America/Curacao.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4
-America/Danmarkshavn.generic.long=\u683C\u6797\u5A01\u6CBB\u65F6\u95F4
-America/Dawson.generic.long=\u592A\u5E73\u6D0B\u65F6\u95F4
-America/Dawson_Creek.generic.long=\u5C71\u5730\u65F6\u95F4
-America/Denver.generic.long=\u5C71\u5730\u65F6\u95F4
-America/Detroit.generic.long=\u4E1C\u90E8\u65F6\u95F4
-America/Dominica.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4
-America/Edmonton.generic.long=\u5C71\u5730\u65F6\u95F4
-America/Eirunepe.generic.long=Acre \u65f6\u95f4
-America/El_Salvador.generic.long=\u4E2D\u90E8\u65F6\u95F4
-America/Ensenada.generic.long=\u592A\u5E73\u6D0B\u65F6\u95F4
-America/Fort_Wayne.generic.long=\u4E1C\u90E8\u65F6\u95F4
-America/Fortaleza.generic.long=\u5DF4\u897F\u5229\u4E9A\u65F6\u95F4
-America/Glace_Bay.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4
-America/Godthab.generic.long=\u897F\u683C\u6797\u5170\u5C9B\u65F6\u95F4
-America/Goose_Bay.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4
-America/Grand_Turk.generic.long=\u4E1C\u90E8\u65F6\u95F4
-America/Grenada.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4
-America/Guadeloupe.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4
-America/Guatemala.generic.long=\u4E2D\u90E8\u65F6\u95F4
-America/Guayaquil.generic.long=\u5384\u74DC\u591A\u5C14\u65F6\u95F4
-America/Guyana.generic.long=\u572D\u4E9A\u90A3\u65F6\u95F4
-America/Halifax.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4
-America/Havana.generic.long=\u53E4\u5DF4\u65F6\u95F4
-America/Hermosillo.generic.long=\u5C71\u5730\u65F6\u95F4
-America/Indiana/Indianapolis.generic.long=\u4E1C\u90E8\u65F6\u95F4
-America/Indiana/Knox.generic.long=\u4E2D\u90E8\u65F6\u95F4
-America/Indiana/Marengo.generic.long=\u4E1C\u90E8\u65F6\u95F4
-America/Indiana/Petersburg.generic.long=\u4E1C\u90E8\u65F6\u95F4
-America/Indiana/Tell_City.generic.long=\u4E2D\u90E8\u65F6\u95F4
-America/Indiana/Vevay.generic.long=\u4E1C\u90E8\u65F6\u95F4
-America/Indiana/Vincennes.generic.long=\u4E1C\u90E8\u65F6\u95F4
-America/Indiana/Winamac.generic.long=\u4E1C\u90E8\u65F6\u95F4
-America/Indianapolis.generic.long=\u4E1C\u90E8\u65F6\u95F4
-America/Inuvik.generic.long=\u5C71\u5730\u65F6\u95F4
-America/Iqaluit.generic.long=\u4E1C\u90E8\u65F6\u95F4
-America/Jamaica.generic.long=\u4E1C\u90E8\u65F6\u95F4
-America/Jujuy.generic.long=\u963F\u6839\u5EF7\u65F6\u95F4
-America/Juneau.generic.long=\u963F\u62C9\u65AF\u52A0\u65F6\u95F4
-America/Kentucky/Louisville.generic.long=\u4E1C\u90E8\u65F6\u95F4
-America/Kentucky/Monticello.generic.long=\u4E1C\u90E8\u65F6\u95F4
-America/Knox_IN.generic.long=\u4E2D\u90E8\u65F6\u95F4
-America/Kralendijk.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4
-America/La_Paz.generic.long=\u73BB\u5229\u7EF4\u4E9A\u65F6\u95F4
-America/Lima.generic.long=\u79D8\u9C81\u65F6\u95F4
-America/Los_Angeles.generic.long=\u592A\u5E73\u6D0B\u65F6\u95F4
-America/Louisville.generic.long=\u4E1C\u90E8\u65F6\u95F4
-America/Lower_Princes.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4
-America/Maceio.generic.long=\u5DF4\u897F\u5229\u4E9A\u65F6\u95F4
-America/Managua.generic.long=\u4E2D\u90E8\u65F6\u95F4
-America/Manaus.generic.long=\u4E9A\u9A6C\u900A\u65F6\u95F4
-America/Marigot.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4
-America/Martinique.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4
-America/Matamoros.generic.long=\u4E2D\u90E8\u65F6\u95F4
-America/Mazatlan.generic.long=\u5C71\u5730\u65F6\u95F4
-America/Mendoza.generic.long=\u963F\u6839\u5EF7\u65F6\u95F4
-America/Menominee.generic.long=\u4E2D\u90E8\u65F6\u95F4
-America/Merida.generic.long=\u4E2D\u90E8\u65F6\u95F4
-America/Metlakatla.daylight.long=\u6885\u7279\u62C9\u5361\u7279\u62C9\u590F\u4EE4\u65F6
-America/Metlakatla.generic.long=\u6885\u7279\u62C9\u5361\u7279\u62C9\u65F6\u95F4
-America/Metlakatla.standard.long=\u6885\u7279\u62C9\u5361\u7279\u62C9\u6807\u51C6\u65F6\u95F4
-America/Mexico_City.generic.long=\u4E2D\u90E8\u65F6\u95F4
-America/Miquelon.generic.long=\u76AE\u57C3\u5C14\u548C\u5BC6\u514B\u9686\u5C9B\u65F6\u95F4
-America/Moncton.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4
-America/Monterrey.generic.long=\u4E2D\u90E8\u65F6\u95F4
-America/Montevideo.generic.long=\u4E4C\u62C9\u572D\u65F6\u95F4
-America/Montreal.generic.long=\u4E1C\u90E8\u65F6\u95F4
-America/Montserrat.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4
-America/Nassau.generic.long=\u4E1C\u90E8\u65F6\u95F4
-America/New_York.generic.long=\u4E1C\u90E8\u65F6\u95F4
-America/Nipigon.generic.long=\u4E1C\u90E8\u65F6\u95F4
-America/Nome.generic.long=\u963F\u62C9\u65AF\u52A0\u65F6\u95F4
-America/Noronha.generic.long=\u8D39\u5C14\u5357\u591A\u5FB7\u8BFA\u7F57\u5C3C\u4E9A\u65F6\u95F4
-America/North_Dakota/Beulah.generic.long=\u4E2D\u90E8\u65F6\u95F4
-America/North_Dakota/Center.generic.long=\u4E2D\u90E8\u65F6\u95F4
-America/North_Dakota/New_Salem.generic.long=\u4E2D\u90E8\u65F6\u95F4
-America/Ojinaga.generic.long=\u5C71\u5730\u65F6\u95F4
-America/Panama.generic.long=\u4E1C\u90E8\u65F6\u95F4
-America/Pangnirtung.generic.long=\u4E1C\u90E8\u65F6\u95F4
-America/Paramaribo.generic.long=\u82CF\u5229\u5357\u65F6\u95F4
-America/Phoenix.generic.long=\u5C71\u5730\u65F6\u95F4
-America/Port-au-Prince.generic.long=\u4E1C\u90E8\u65F6\u95F4
-America/Port_of_Spain.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4
-America/Porto_Acre.generic.long=Acre \u65f6\u95f4
-America/Porto_Velho.generic.long=\u4E9A\u9A6C\u900A\u65F6\u95F4
-America/Puerto_Rico.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4
-America/Rainy_River.generic.long=\u4E2D\u90E8\u65F6\u95F4
-America/Rankin_Inlet.generic.long=\u4E2D\u90E8\u65F6\u95F4
-America/Recife.generic.long=\u5DF4\u897F\u5229\u4E9A\u65F6\u95F4
-America/Regina.generic.long=\u4E2D\u90E8\u65F6\u95F4
-America/Resolute.generic.long=\u4E2D\u90E8\u65F6\u95F4
-America/Rio_Branco.generic.long=Acre \u65f6\u95f4
-America/Rosario.generic.long=\u963F\u6839\u5EF7\u65F6\u95F4
-America/Santa_Isabel.generic.long=\u592A\u5E73\u6D0B\u65F6\u95F4
-America/Santarem.generic.long=\u5DF4\u897F\u5229\u4E9A\u65F6\u95F4
-America/Santiago.generic.long=\u667A\u5229\u65F6\u95F4
-America/Santo_Domingo.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4
-America/Sao_Paulo.generic.long=\u5DF4\u897F\u5229\u4E9A\u65F6\u95F4
-America/Scoresbysund.generic.long=\u4E1C\u683C\u6797\u5C9B\u65F6\u95F4
-America/Shiprock.generic.long=\u5C71\u5730\u65F6\u95F4
-America/Sitka.generic.long=\u963F\u62C9\u65AF\u52A0\u65F6\u95F4
-America/St_Barthelemy.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4
-America/St_Johns.generic.long=\u7EBD\u82AC\u5170\u65F6\u95F4
-America/St_Kitts.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4
-America/St_Lucia.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4
-America/St_Thomas.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4
-America/St_Vincent.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4
-America/Swift_Current.generic.long=\u4E2D\u90E8\u65F6\u95F4
-America/Tegucigalpa.generic.long=\u4E2D\u90E8\u65F6\u95F4
-America/Thule.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4
-America/Thunder_Bay.generic.long=\u4E1C\u90E8\u65F6\u95F4
-America/Tijuana.generic.long=\u592A\u5E73\u6D0B\u65F6\u95F4
-America/Toronto.generic.long=\u4E1C\u90E8\u65F6\u95F4
-America/Tortola.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4
-America/Vancouver.generic.long=\u592A\u5E73\u6D0B\u65F6\u95F4
-America/Virgin.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4
-America/Whitehorse.generic.long=\u592A\u5E73\u6D0B\u65F6\u95F4
-America/Winnipeg.generic.long=\u4E2D\u90E8\u65F6\u95F4
-America/Yakutat.generic.long=\u963F\u62C9\u65AF\u52A0\u65F6\u95F4
-America/Yellowknife.generic.long=\u5C71\u5730\u65F6\u95F4
-Antarctica/Casey.daylight.long=\u897F\u90E8\u590F\u4EE4\u65F6 (\u6FB3\u5927\u5229\u4E9A)
-Antarctica/Casey.generic.long=\u897F\u90E8\u65F6\u95F4 (\u6FB3\u5927\u5229\u4E9A)
-Antarctica/Casey.standard.long=\u897F\u90E8\u6807\u51C6\u65F6\u95F4 (\u6FB3\u5927\u5229\u4E9A)
-Antarctica/Davis.generic.long=\u6234\u7EF4\u65AF\u65F6\u95F4
-Antarctica/DumontDUrville.generic.long=Dumont-d'Urville \u65F6\u95F4
-Antarctica/Macquarie.daylight.long=\u9EA6\u5938\u91CC\u5C9B\u590F\u4EE4\u65F6
-Antarctica/Macquarie.generic.long=\u9EA6\u5938\u91CC\u5C9B\u65F6\u95F4
-Antarctica/Macquarie.standard.long=\u9EA6\u5938\u91CC\u5C9B\u65F6\u95F4
-Antarctica/Mawson.generic.long=\u83AB\u68EE\u65F6\u95F4
-Antarctica/McMurdo.generic.long=\u65B0\u897F\u5170\u65F6\u95F4
-Antarctica/Palmer.generic.long=\u667A\u5229\u65F6\u95F4
-Antarctica/Rothera.generic.long=\u7F57\u745F\u62C9\u65F6\u95F4
-Antarctica/South_Pole.generic.long=\u65B0\u897F\u5170\u65F6\u95F4
-Antarctica/Syowa.generic.long=Syowa \u65F6\u95F4
-Antarctica/Vostok.generic.long=\u83AB\u65AF\u6258\u514B\u65F6\u95F4
-Arctic/Longyearbyen.generic.long=\u4E2D\u6B27\u65F6\u95F4
-Asia/Aden.generic.long=\u963F\u62C9\u4F2F\u534A\u5C9B\u65F6\u95F4
-Asia/Almaty.generic.long=Alma-Ata \u65F6\u95F4
-Asia/Amman.generic.long=\u963f\u62c9\u4f2f\u534a\u5c9b\u65f6\u95f4
-Asia/Anadyr.generic.long=\u963F\u90A3\u5E95\u6CB3\u65F6\u95F4
-Asia/Aqtau.generic.long=Aqtau \u65F6\u95F4
-Asia/Aqtobe.generic.long=Aqtobe \u65F6\u95F4
-Asia/Ashgabat.generic.long=\u571F\u5E93\u66FC\u65F6\u95F4
-Asia/Ashkhabad.generic.long=\u571F\u5E93\u66FC\u65F6\u95F4
-Asia/Baghdad.generic.long=\u963F\u62C9\u4F2F\u534A\u5C9B\u65F6\u95F4
-Asia/Bahrain.generic.long=\u963F\u62C9\u4F2F\u534A\u5C9B\u65F6\u95F4
-Asia/Baku.generic.long=\u4E9A\u585E\u62DC\u7136\u65F6\u95F4
-Asia/Bangkok.generic.long=\u5370\u5EA6\u652F\u90A3\u65F6\u95F4
-Asia/Beirut.generic.long=\u4E1C\u6B27\u65F6\u95F4
-Asia/Bishkek.generic.long=\u5409\u5C14\u5409\u65AF\u65AF\u5766\u65F6\u95F4
-Asia/Brunei.generic.long=\u6587\u83B1\u65F6\u95F4
-Asia/Calcutta.generic.long=\u5370\u5EA6\u65F6\u95F4
-Asia/Choibalsan.generic.long=Choibalsan \u65F6\u95F4
-Asia/Chongqing.generic.long=\u4E2D\u56FD\u65F6\u95F4
-Asia/Chungking.generic.long=\u4E2D\u56FD\u65F6\u95F4
-Asia/Colombo.generic.long=\u5370\u5EA6\u65F6\u95F4
-Asia/Dacca.generic.long=\u5B5F\u52A0\u62C9\u65F6\u95F4
-Asia/Damascus.generic.long=\u4E1C\u6B27\u65F6\u95F4
-Asia/Dhaka.generic.long=\u5B5F\u52A0\u62C9\u65F6\u95F4
-Asia/Dili.generic.long=\u4E1C\u5E1D\u6C76\u65F6\u95F4
-Asia/Dubai.generic.long=\u6D77\u6E7E\u65F6\u95F4
-Asia/Dushanbe.generic.long=\u5854\u5409\u514B\u65AF\u5766\u65F6\u95F4
-Asia/Gaza.generic.long=\u4E1C\u6B27\u65F6\u95F4
-Asia/Harbin.generic.long=\u4E2D\u56FD\u65F6\u95F4
-Asia/Hebron.generic.long=\u4E1C\u6B27\u65F6\u95F4
-Asia/Ho_Chi_Minh.generic.long=\u5370\u5EA6\u652F\u90A3\u65F6\u95F4
-Asia/Hong_Kong.generic.long=\u9999\u6E2F\u65F6\u95F4
-Asia/Hovd.generic.long=\u79D1\u5E03\u591A\u65F6\u95F4
-Asia/Irkutsk.generic.long=\u4F0A\u5C14\u5E93\u6B21\u514B\u65F6\u95F4
-Asia/Istanbul.generic.long=\u4E1C\u6B27\u65F6\u95F4
-Asia/Jakarta.generic.long=\u897F\u5370\u5EA6\u5C3C\u897F\u4E9A\u65F6\u95F4
-Asia/Jayapura.generic.long=\u4E1C\u5370\u5EA6\u5C3C\u897F\u4E9A\u65F6\u95F4
-Asia/Jerusalem.generic.long=\u4EE5\u8272\u5217\u65F6\u95F4
-Asia/Kabul.generic.long=\u963F\u5BCC\u6C57\u65F6\u95F4
-Asia/Kamchatka.generic.long=\u5F7C\u5F97\u7F57\u5DF4\u752B\u6D1B\u592B\u65AF\u514B\u65F6\u95F4
-Asia/Karachi.generic.long=\u5DF4\u57FA\u65AF\u5766\u65F6\u95F4
-Asia/Kashgar.generic.long=\u4E2D\u56FD\u65F6\u95F4
-Asia/Kathmandu.generic.long=\u5C3C\u6CCA\u5C14\u65F6\u95F4
-Asia/Katmandu.generic.long=\u5C3C\u6CCA\u5C14\u65F6\u95F4
-Asia/Khandyga.daylight.long=\u6C49\u5FB7\u52A0\u590F\u4EE4\u65F6
-Asia/Khandyga.generic.long=\u6C49\u5FB7\u52A0\u65F6\u95F4
-Asia/Khandyga.standard.long=\u6C49\u5FB7\u52A0\u65F6\u95F4
-Asia/Kolkata.generic.long=\u5370\u5EA6\u65F6\u95F4
-Asia/Krasnoyarsk.generic.long=\u514B\u62C9\u65AF\u8BFA\u4E9A\u5C14\u65AF\u514B\u65F6\u95F4
-Asia/Kuala_Lumpur.generic.long=\u9A6C\u6765\u897F\u4E9A\u65F6\u95F4
-Asia/Kuching.generic.long=\u9A6C\u6765\u897F\u4E9A\u65F6\u95F4
-Asia/Kuwait.generic.long=\u963F\u62C9\u4F2F\u534A\u5C9B\u65F6\u95F4
-Asia/Macao.generic.long=\u4E2D\u56FD\u65F6\u95F4
-Asia/Macau.generic.long=\u4E2D\u56FD\u65F6\u95F4
-Asia/Magadan.generic.long=Magadan \u65F6\u95F4
-Asia/Makassar.generic.long=\u4E2D\u90E8\u5370\u5EA6\u5C3C\u897F\u4E9A\u65F6\u95F4
-Asia/Manila.generic.long=\u83F2\u5F8B\u5BBE\u65F6\u95F4
-Asia/Muscat.generic.long=\u6D77\u6E7E\u65F6\u95F4
-Asia/Nicosia.generic.long=\u4E1C\u6B27\u65F6\u95F4
-Asia/Novokuznetsk.generic.long=Novosibirsk \u65F6\u95F4
-Asia/Novosibirsk.generic.long=Novosibirsk \u65F6\u95F4
-Asia/Omsk.generic.long=\u9102\u6728\u65AF\u514B\u65F6\u95F4
-Asia/Oral.generic.long=Oral \u65F6\u95F4
-Asia/Phnom_Penh.generic.long=\u5370\u5EA6\u652F\u90A3\u65F6\u95F4
-Asia/Pontianak.generic.long=\u897F\u5370\u5EA6\u5C3C\u897F\u4E9A\u65F6\u95F4
-Asia/Pyongyang.generic.long=\u97E9\u56FD\u65F6\u95F4
-Asia/Qatar.generic.long=\u963F\u62C9\u4F2F\u534A\u5C9B\u65F6\u95F4
-Asia/Qyzylorda.generic.long=Qyzylorda \u65F6\u95F4
-Asia/Rangoon.generic.long=\u7F05\u7538\u65F6\u95F4
-Asia/Saigon.generic.long=\u5370\u5EA6\u652F\u90A3\u65F6\u95F4
-Asia/Sakhalin.generic.long=\u5E93\u9875\u5C9B\u65F6\u95F4
-Asia/Samarkand.generic.long=\u4E4C\u5179\u522B\u514B\u65AF\u5766\u65F6\u95F4
-Asia/Seoul.generic.long=\u97E9\u56FD\u65F6\u95F4
-Asia/Shanghai.generic.long=\u4E2D\u56FD\u65F6\u95F4
-Asia/Singapore.generic.long=\u65B0\u52A0\u5761\u65F6\u95F4
-Asia/Taipei.generic.long=\u4E2D\u56FD\u65F6\u95F4
-Asia/Tashkent.generic.long=\u4E4C\u5179\u522B\u514B\u65AF\u5766\u65F6\u95F4
-Asia/Tbilisi.generic.long=\u4E54\u6CBB\u4E9A\u65F6\u95F4
-Asia/Tehran.generic.long=\u4F0A\u6717\u65F6\u95F4
-Asia/Tel_Aviv.generic.long=\u4EE5\u8272\u5217\u65F6\u95F4
-Asia/Thimbu.generic.long=\u4E0D\u4E39\u65F6\u95F4
-Asia/Thimphu.generic.long=\u4E0D\u4E39\u65F6\u95F4
-Asia/Tokyo.generic.long=\u65E5\u672C\u65F6\u95F4
-Asia/Ujung_Pandang.generic.long=\u4E2D\u90E8\u5370\u5EA6\u5C3C\u897F\u4E9A\u65F6\u95F4
-Asia/Ulaanbaatar.generic.long=\u5E93\u4F26\u65F6\u95F4
-Asia/Ulan_Bator.generic.long=\u5E93\u4F26\u65F6\u95F4
-Asia/Urumqi.generic.long=\u4E2D\u56FD\u65F6\u95F4
-Asia/Ust-Nera.daylight.long=\u4E4C\u65AF\u5B63\u6D85\u62C9\u590F\u4EE4\u65F6
-Asia/Ust-Nera.generic.long=\u4E4C\u65AF\u5B63\u6D85\u62C9\u65F6\u95F4
-Asia/Ust-Nera.standard.long=\u4E4C\u65AF\u5B63\u6D85\u62C9\u65F6\u95F4
-Asia/Vientiane.generic.long=\u5370\u5EA6\u652F\u90A3\u65F6\u95F4
-Asia/Vladivostok.generic.long=\u6D77\u53C2\u5D34\u65F6\u95F4
-Asia/Yakutsk.generic.long=\u4E9A\u5E93\u6B21\u514B\u65F6\u95F4
-Asia/Yekaterinburg.generic.long=Yekaterinburg \u65F6\u95F4
-Asia/Yerevan.generic.long=\u4E9A\u7F8E\u5C3C\u4E9A\u65F6\u95F4
-Atlantic/Azores.generic.long=\u4E9A\u901F\u5C14\u7FA4\u5C9B\u65F6\u95F4
-Atlantic/Bermuda.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4
-Atlantic/Canary.generic.long=\u897F\u6B27\u65F6\u95F4
-Atlantic/Cape_Verde.generic.long=\u4F5B\u5FB7\u89D2\u65F6\u95F4
-Atlantic/Faeroe.generic.long=\u897F\u6B27\u65F6\u95F4
-Atlantic/Faroe.generic.long=\u897F\u6B27\u65F6\u95F4
-Atlantic/Jan_Mayen.generic.long=\u4E2D\u6B27\u65F6\u95F4
-Atlantic/Madeira.generic.long=\u897F\u6B27\u65F6\u95F4
-Atlantic/Reykjavik.generic.long=\u683C\u6797\u5A01\u6CBB\u65F6\u95F4
-Atlantic/South_Georgia.generic.long=\u5357\u4E54\u6CBB\u4E9A\u5C9B\u65F6\u95F4
-Atlantic/St_Helena.generic.long=\u683C\u6797\u5A01\u6CBB\u65F6\u95F4
-Atlantic/Stanley.generic.long=\u798F\u514B\u5170\u7FA4\u5C9B\u65F6\u95F4
-Australia/ACT.daylight.long=\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u65B0\u5357\u5A01\u5C14\u65AF)
-Australia/ACT.generic.long=\u4E1C\u90E8\u65F6\u95F4 (\u65B0\u5357\u5A01\u5C14\u65AF)
-Australia/ACT.standard.long=\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u65B0\u5357\u5A01\u5C14\u65AF)
-Australia/Adelaide.daylight.long=\u4E2D\u592E\u590F\u4EE4\u65F6 (\u5357\u6FB3\u5927\u5229\u4E9A)
-Australia/Adelaide.generic.long=\u4E2D\u90E8\u65F6\u95F4 (\u5357\u6FB3\u5927\u5229\u4E9A)
-Australia/Adelaide.standard.long=\u4E2D\u592E\u6807\u51C6\u65F6\u95F4 (\u5357\u6FB3\u5927\u5229\u4E9A)
-Australia/Brisbane.daylight.long=\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u6606\u58EB\u5170)
-Australia/Brisbane.generic.long=\u4E1C\u90E8\u65F6\u95F4 (\u6606\u58EB\u5170)
-Australia/Brisbane.standard.long=\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u6606\u58EB\u5170)
-Australia/Broken_Hill.daylight.long=\u4E2D\u592E\u590F\u4EE4\u65F6 (\u5357\u6FB3\u5927\u5229\u4E9A/\u65B0\u5357\u5A01\u5C14\u65AF)
-Australia/Broken_Hill.generic.long=\u4E2D\u90E8\u65F6\u95F4 (\u5357\u6FB3\u5927\u5229\u4E9A/\u65B0\u5357\u5A01\u5C14\u65AF)
-Australia/Broken_Hill.standard.long=\u4E2D\u592E\u6807\u51C6\u65F6\u95F4 (\u5357\u6FB3\u5927\u5229\u4E9A/\u65B0\u5357\u5A01\u5C14\u65AF)
-Australia/Canberra.daylight.long=\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u65B0\u5357\u5A01\u5C14\u65AF)
-Australia/Canberra.generic.long=\u4E1C\u90E8\u65F6\u95F4 (\u65B0\u5357\u5A01\u5C14\u65AF)
-Australia/Canberra.standard.long=\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u65B0\u5357\u5A01\u5C14\u65AF)
-Australia/Currie.daylight.long=\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u65B0\u5357\u5A01\u5C14\u65AF)
-Australia/Currie.generic.long=\u4E1C\u90E8\u65F6\u95F4 (\u65B0\u5357\u5A01\u5C14\u65AF)
-Australia/Currie.standard.long=\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u65B0\u5357\u5A01\u5C14\u65AF)
-Australia/Darwin.daylight.long=\u4E2D\u592E\u590F\u4EE4\u65F6 (\u5317\u9886\u5730)
-Australia/Darwin.generic.long=\u4E2D\u90E8\u65F6\u95F4 (\u5317\u90E8\u5730\u533A)
-Australia/Darwin.standard.long=\u4E2D\u592E\u6807\u51C6\u65F6\u95F4 (\u5317\u9886\u5730)
-Australia/Eucla.daylight.long=\u4E2D\u897F\u90E8\u590F\u4EE4\u65F6 (\u6FB3\u5927\u5229\u4E9A)
-Australia/Eucla.generic.long=\u4E2D\u897F\u90E8\u65F6\u95F4 (\u6FB3\u5927\u5229\u4E9A)
-Australia/Eucla.standard.long=\u4E2D\u897F\u90E8\u6807\u51C6\u65F6\u95F4 (\u6FB3\u5927\u5229\u4E9A)
-Australia/Hobart.daylight.long=\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u5854\u65AF\u9A6C\u5C3C\u4E9A)
-Australia/Hobart.generic.long=\u4E1C\u90E8\u65F6\u95F4 (\u5854\u65AF\u9A6C\u5C3C\u4E9A)
-Australia/Hobart.standard.long=\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u5854\u65AF\u9A6C\u5C3C\u4E9A)
-Australia/LHI.generic.long=\u8C6A\u516C\u65F6\u95F4
-Australia/Lindeman.daylight.long=\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u6606\u58EB\u5170)
-Australia/Lindeman.generic.long=\u4E1C\u90E8\u65F6\u95F4 (\u6606\u58EB\u5170)
-Australia/Lindeman.standard.long=\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u6606\u58EB\u5170)
-Australia/Lord_Howe.generic.long=\u8C6A\u516C\u65F6\u95F4
-Australia/Melbourne.daylight.long=\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u7EF4\u591A\u5229\u4E9A)
-Australia/Melbourne.generic.long=\u4E1C\u90E8\u65F6\u95F4 (\u7EF4\u591A\u5229\u4E9A)
-Australia/Melbourne.standard.long=\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u7EF4\u591A\u5229\u4E9A)
-Australia/NSW.daylight.long=\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u65B0\u5357\u5A01\u5C14\u65AF)
-Australia/NSW.generic.long=\u4E1C\u90E8\u65F6\u95F4 (\u65B0\u5357\u5A01\u5C14\u65AF)
-Australia/NSW.standard.long=\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u65B0\u5357\u5A01\u5C14\u65AF)
-Australia/North.daylight.long=\u4E2D\u592E\u590F\u4EE4\u65F6 (\u5317\u9886\u5730)
-Australia/North.generic.long=\u4E2D\u90E8\u65F6\u95F4 (\u5317\u90E8\u5730\u533A)
-Australia/North.standard.long=\u4E2D\u592E\u6807\u51C6\u65F6\u95F4 (\u5317\u9886\u5730)
-Australia/Perth.daylight.long=\u897F\u90E8\u590F\u4EE4\u65F6 (\u6FB3\u5927\u5229\u4E9A)
-Australia/Perth.generic.long=\u897F\u90E8\u65F6\u95F4 (\u6FB3\u5927\u5229\u4E9A)
-Australia/Perth.standard.long=\u897F\u90E8\u6807\u51C6\u65F6\u95F4 (\u6FB3\u5927\u5229\u4E9A)
-Australia/Queensland.daylight.long=\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u6606\u58EB\u5170)
-Australia/Queensland.generic.long=\u4E1C\u90E8\u65F6\u95F4 (\u6606\u58EB\u5170)
-Australia/Queensland.standard.long=\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u6606\u58EB\u5170)
-Australia/South.daylight.long=\u4E2D\u592E\u590F\u4EE4\u65F6 (\u5357\u6FB3\u5927\u5229\u4E9A)
-Australia/South.generic.long=\u4E2D\u90E8\u65F6\u95F4 (\u5357\u6FB3\u5927\u5229\u4E9A)
-Australia/South.standard.long=\u4E2D\u592E\u6807\u51C6\u65F6\u95F4 (\u5357\u6FB3\u5927\u5229\u4E9A)
-Australia/Sydney.daylight.long=\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u65B0\u5357\u5A01\u5C14\u65AF)
-Australia/Sydney.generic.long=\u4E1C\u90E8\u65F6\u95F4 (\u65B0\u5357\u5A01\u5C14\u65AF)
-Australia/Sydney.standard.long=\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u65B0\u5357\u5A01\u5C14\u65AF)
-Australia/Tasmania.daylight.long=\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u5854\u65AF\u9A6C\u5C3C\u4E9A)
-Australia/Tasmania.generic.long=\u4E1C\u90E8\u65F6\u95F4 (\u5854\u65AF\u9A6C\u5C3C\u4E9A)
-Australia/Tasmania.standard.long=\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u5854\u65AF\u9A6C\u5C3C\u4E9A)
-Australia/Victoria.daylight.long=\u4E1C\u90E8\u590F\u4EE4\u65F6 (\u7EF4\u591A\u5229\u4E9A)
-Australia/Victoria.generic.long=\u4E1C\u90E8\u65F6\u95F4 (\u7EF4\u591A\u5229\u4E9A)
-Australia/Victoria.standard.long=\u4E1C\u90E8\u6807\u51C6\u65F6\u95F4 (\u7EF4\u591A\u5229\u4E9A)
-Australia/West.daylight.long=\u897F\u90E8\u590F\u4EE4\u65F6 (\u6FB3\u5927\u5229\u4E9A)
-Australia/West.generic.long=\u897F\u90E8\u65F6\u95F4 (\u6FB3\u5927\u5229\u4E9A)
-Australia/West.standard.long=\u897F\u90E8\u6807\u51C6\u65F6\u95F4 (\u6FB3\u5927\u5229\u4E9A)
-Australia/Yancowinna.daylight.long=\u4E2D\u592E\u590F\u4EE4\u65F6 (\u5357\u6FB3\u5927\u5229\u4E9A/\u65B0\u5357\u5A01\u5C14\u65AF)
-Australia/Yancowinna.generic.long=\u4E2D\u90E8\u65F6\u95F4 (\u5357\u6FB3\u5927\u5229\u4E9A/\u65B0\u5357\u5A01\u5C14\u65AF)
-Australia/Yancowinna.standard.long=\u4E2D\u592E\u6807\u51C6\u65F6\u95F4 (\u5357\u6FB3\u5927\u5229\u4E9A/\u65B0\u5357\u5A01\u5C14\u65AF)
-BET.generic.long=\u5DF4\u897F\u5229\u4E9A\u65F6\u95F4
-BST.generic.long=\u5B5F\u52A0\u62C9\u65F6\u95F4
-Brazil/Acre.generic.long=Acre \u65f6\u95f4
-Brazil/DeNoronha.generic.long=\u8D39\u5C14\u5357\u591A\u5FB7\u8BFA\u7F57\u5C3C\u4E9A\u65F6\u95F4
-Brazil/East.generic.long=\u5DF4\u897F\u5229\u4E9A\u65F6\u95F4
-Brazil/West.generic.long=\u4E9A\u9A6C\u900A\u65F6\u95F4
-CAT.generic.long=\u4E2D\u975E\u65F6\u95F4
-CET.generic.long=\u4e2d\u6b27\u65f6\u95f4
-CNT.generic.long=\u7EBD\u82AC\u5170\u65F6\u95F4
-CST.generic.long=\u4E2D\u90E8\u65F6\u95F4
-CST6CDT.generic.long=\u4e2d\u90e8\u65f6\u95f4
-CTT.generic.long=\u4E2D\u56FD\u65F6\u95F4
-Canada/Atlantic.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4
-Canada/Central.generic.long=\u4E2D\u90E8\u65F6\u95F4
-Canada/East-Saskatchewan.generic.long=\u4E2D\u90E8\u65F6\u95F4
-Canada/Eastern.generic.long=\u4E1C\u90E8\u65F6\u95F4
-Canada/Mountain.generic.long=\u5C71\u5730\u65F6\u95F4
-Canada/Newfoundland.generic.long=\u7EBD\u82AC\u5170\u65F6\u95F4
-Canada/Pacific.generic.long=\u592A\u5E73\u6D0B\u65F6\u95F4
-Canada/Saskatchewan.generic.long=\u4E2D\u90E8\u65F6\u95F4
-Canada/Yukon.generic.long=\u592A\u5E73\u6D0B\u65F6\u95F4
-Chile/Continental.generic.long=\u667A\u5229\u65F6\u95F4
-Chile/EasterIsland.generic.long=\u590D\u6D3B\u5C9B\u65F6\u95F4
-Cuba.generic.long=\u53E4\u5DF4\u65F6\u95F4
-EAT.generic.long=\u4E1C\u975E\u65F6\u95F4
-ECT.generic.long=\u4E2D\u6B27\u65F6\u95F4
-EET.generic.long=\u4e1c\u6b27\u65f6\u95f4
-EST.generic.long=\u4e1c\u90e8\u65f6\u95f4
-EST5EDT.generic.long=\u4e1c\u90e8\u65f6\u95f4
-Egypt.generic.long=\u4E1C\u6B27\u65F6\u95F4
-Eire.generic.long=\u7231\u5C14\u5170\u65F6\u95F4
-Etc/Greenwich.generic.long=\u683C\u6797\u5A01\u6CBB\u65F6\u95F4
-Etc/UCT.generic.long=\u534F\u8C03\u4E16\u754C\u65F6\u95F4
-Etc/UTC.generic.long=\u534F\u8C03\u4E16\u754C\u65F6\u95F4
-Etc/Universal.generic.long=\u534F\u8C03\u4E16\u754C\u65F6\u95F4
-Etc/Zulu.generic.long=\u534F\u8C03\u4E16\u754C\u65F6\u95F4
-Europe/Amsterdam.generic.long=\u4E2D\u6B27\u65F6\u95F4
-Europe/Andorra.generic.long=\u4E2D\u6B27\u65F6\u95F4
-Europe/Athens.generic.long=\u4E1C\u6B27\u65F6\u95F4
-Europe/Belfast.generic.long=\u82F1\u56FD\u65F6\u95F4
-Europe/Belgrade.generic.long=\u4E2D\u6B27\u65F6\u95F4
-Europe/Berlin.generic.long=\u4E2D\u6B27\u65F6\u95F4
-Europe/Bratislava.generic.long=\u4E2D\u6B27\u65F6\u95F4
-Europe/Brussels.generic.long=\u4E2D\u6B27\u65F6\u95F4
-Europe/Bucharest.generic.long=\u4E1C\u6B27\u65F6\u95F4
-Europe/Budapest.generic.long=\u4E2D\u6B27\u65F6\u95F4
-Europe/Busingen.generic.long=\u4E2D\u6B27\u65F6\u95F4
-Europe/Chisinau.generic.long=\u4E1C\u6B27\u65F6\u95F4
-Europe/Copenhagen.generic.long=\u4E2D\u6B27\u65F6\u95F4
-Europe/Dublin.generic.long=\u7231\u5C14\u5170\u65F6\u95F4
-Europe/Gibraltar.generic.long=\u4E2D\u6B27\u65F6\u95F4
-Europe/Guernsey.generic.long=\u82F1\u56FD\u65F6\u95F4
-Europe/Helsinki.generic.long=\u4E1C\u6B27\u65F6\u95F4
-Europe/Isle_of_Man.generic.long=\u82F1\u56FD\u65F6\u95F4
-Europe/Istanbul.generic.long=\u4E1C\u6B27\u65F6\u95F4
-Europe/Jersey.generic.long=\u82F1\u56FD\u65F6\u95F4
-Europe/Kaliningrad.daylight.long=\u8FDC\u4E1C\u6B27\u590F\u4EE4\u65F6
-Europe/Kaliningrad.generic.long=\u8FDC\u4E1C\u6B27\u65F6\u95F4
-Europe/Kaliningrad.standard.long=\u8FDC\u4E1C\u6B27\u65F6\u95F4
-Europe/Kiev.generic.long=\u4E1C\u6B27\u65F6\u95F4
-Europe/Lisbon.generic.long=\u897F\u6B27\u65F6\u95F4
-Europe/Ljubljana.generic.long=\u4E2D\u6B27\u65F6\u95F4
-Europe/London.generic.long=\u82F1\u56FD\u65F6\u95F4
-Europe/Luxembourg.generic.long=\u4E2D\u6B27\u65F6\u95F4
-Europe/Madrid.generic.long=\u4E2D\u6B27\u65F6\u95F4
-Europe/Malta.generic.long=\u4E2D\u6B27\u65F6\u95F4
-Europe/Mariehamn.generic.long=\u4E1C\u6B27\u65F6\u95F4
-Europe/Minsk.daylight.long=\u8FDC\u4E1C\u6B27\u590F\u4EE4\u65F6
-Europe/Minsk.generic.long=\u8FDC\u4E1C\u6B27\u65F6\u95F4
-Europe/Minsk.standard.long=\u8FDC\u4E1C\u6B27\u65F6\u95F4
-Europe/Monaco.generic.long=\u4E2D\u6B27\u65F6\u95F4
-Europe/Moscow.generic.long=\u83AB\u65AF\u79D1\u65F6\u95F4
-Europe/Nicosia.generic.long=\u4E1C\u6B27\u65F6\u95F4
-Europe/Oslo.generic.long=\u4E2D\u6B27\u65F6\u95F4
-Europe/Paris.generic.long=\u4E2D\u6B27\u65F6\u95F4
-Europe/Podgorica.generic.long=\u4E2D\u6B27\u65F6\u95F4
-Europe/Prague.generic.long=\u4E2D\u6B27\u65F6\u95F4
-Europe/Riga.generic.long=\u4E1C\u6B27\u65F6\u95F4
-Europe/Rome.generic.long=\u4E2D\u6B27\u65F6\u95F4
-Europe/Samara.generic.long=\u6C99\u9A6C\u62C9\u65F6\u95F4
-Europe/San_Marino.generic.long=\u4E2D\u6B27\u65F6\u95F4
-Europe/Sarajevo.generic.long=\u4E2D\u6B27\u65F6\u95F4
-Europe/Simferopol.generic.long=\u4E1C\u6B27\u65F6\u95F4
-Europe/Skopje.generic.long=\u4E2D\u6B27\u65F6\u95F4
-Europe/Sofia.generic.long=\u4E1C\u6B27\u65F6\u95F4
-Europe/Stockholm.generic.long=\u4E2D\u6B27\u65F6\u95F4
-Europe/Tallinn.generic.long=\u4E1C\u6B27\u65F6\u95F4
-Europe/Tirane.generic.long=\u4E2D\u6B27\u65F6\u95F4
-Europe/Tiraspol.generic.long=\u4E1C\u6B27\u65F6\u95F4
-Europe/Uzhgorod.generic.long=\u4E1C\u6B27\u65F6\u95F4
-Europe/Vaduz.generic.long=\u4E2D\u6B27\u65F6\u95F4
-Europe/Vatican.generic.long=\u4E2D\u6B27\u65F6\u95F4
-Europe/Vienna.generic.long=\u4E2D\u6B27\u65F6\u95F4
-Europe/Vilnius.generic.long=\u4E1C\u6B27\u65F6\u95F4
-Europe/Volgograd.generic.long=\u4F0F\u5C14\u52A0\u683C\u52D2\u65F6\u95F4
-Europe/Warsaw.generic.long=\u4E2D\u6B27\u65F6\u95F4
-Europe/Zagreb.generic.long=\u4E2D\u6B27\u65F6\u95F4
-Europe/Zaporozhye.generic.long=\u4E1C\u6B27\u65F6\u95F4
-Europe/Zurich.generic.long=\u4E2D\u6B27\u65F6\u95F4
-GB-Eire.generic.long=\u82F1\u56FD\u65F6\u95F4
-GB.generic.long=\u82F1\u56FD\u65F6\u95F4
-GMT.generic.long=\u683C\u6797\u5A01\u6CBB\u65F6\u95F4
-Greenwich.generic.long=\u683C\u6797\u5A01\u6CBB\u65F6\u95F4
-HST.generic.long=\u590f\u5a01\u5937\u65f6\u95f4
-Hongkong.generic.long=\u9999\u6E2F\u65F6\u95F4
-IET.generic.long=\u4E1C\u90E8\u65F6\u95F4
-IST.generic.long=\u5370\u5EA6\u65F6\u95F4
-Iceland.generic.long=\u683C\u6797\u5A01\u6CBB\u65F6\u95F4
-Indian/Antananarivo.generic.long=\u4E1C\u975E\u65F6\u95F4
-Indian/Chagos.generic.long=\u5370\u5EA6\u6D0B\u5730\u5E26\u65F6\u95F4
-Indian/Christmas.generic.long=\u5723\u8BDE\u5C9B\u65F6\u95F4
-Indian/Cocos.generic.long=\u53EF\u53EF\u65AF\u7FA4\u5C9B\u65F6\u95F4
-Indian/Comoro.generic.long=\u4E1C\u975E\u65F6\u95F4
-Indian/Kerguelen.generic.long=\u6CD5\u5C5E\u5357\u6781\u65F6\u95F4
-Indian/Mahe.generic.long=\u585E\u5E2D\u5C14\u7FA4\u5C9B\u65F6\u95F4
-Indian/Maldives.generic.long=\u9A6C\u5C14\u4EE3\u592B\u65F6\u95F4
-Indian/Mauritius.generic.long=\u6469\u91CC\u897F\u65AF\u65F6\u95F4
-Indian/Mayotte.generic.long=\u4E1C\u975E\u65F6\u95F4
-Indian/Reunion.generic.long=\u7559\u5C3C\u65FA\u5C9B\u65F6\u95F4
-Iran.generic.long=\u4F0A\u6717\u65F6\u95F4
-Israel.generic.long=\u4EE5\u8272\u5217\u65F6\u95F4
-JST.generic.long=\u65E5\u672C\u65F6\u95F4
-Jamaica.generic.long=\u4E1C\u90E8\u65F6\u95F4
-Japan.generic.long=\u65E5\u672C\u65F6\u95F4
-Kwajalein.generic.long=\u9A6C\u7ECD\u5C14\u7FA4\u5C9B\u65F6\u95F4
-Libya.generic.long=\u4e1c\u6b27\u65f6\u95f4
-MET.generic.long=MET
-MIT.generic.long=\u897F\u8428\u6469\u4E9A\u65F6\u95F4
-MST.generic.long=\u5c71\u5730\u65f6\u95f4
-MST7MDT.generic.long=\u5c71\u5730\u65f6\u95f4
-Mexico/BajaNorte.generic.long=\u592A\u5E73\u6D0B\u65F6\u95F4
-Mexico/BajaSur.generic.long=\u5C71\u5730\u65F6\u95F4
-Mexico/General.generic.long=\u4E2D\u90E8\u65F6\u95F4
-NET.generic.long=\u4E9A\u7F8E\u5C3C\u4E9A\u65F6\u95F4
-NST.generic.long=\u65B0\u897F\u5170\u65F6\u95F4
-NZ-CHAT.generic.long=\u67E5\u5854\u59C6\u65F6\u95F4
-NZ.generic.long=\u65B0\u897F\u5170\u65F6\u95F4
-Navajo.generic.long=\u5C71\u5730\u65F6\u95F4
-PLT.generic.long=\u5DF4\u57FA\u65AF\u5766\u65F6\u95F4
-PNT.generic.long=\u5C71\u5730\u65F6\u95F4
-PRC.generic.long=\u4E2D\u56FD\u65F6\u95F4
-PRT.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4
-PST.generic.long=\u592A\u5E73\u6D0B\u65F6\u95F4
-PST8PDT.generic.long=\u592a\u5e73\u6d0b\u65f6\u95f4
-Pacific/Apia.generic.long=\u897F\u8428\u6469\u4E9A\u65F6\u95F4
-Pacific/Auckland.generic.long=\u65B0\u897F\u5170\u65F6\u95F4
-Pacific/Chatham.generic.long=\u67E5\u5854\u59C6\u65F6\u95F4
-Pacific/Chuuk.daylight.long=\u4E18\u514B\u590F\u4EE4\u65F6
-Pacific/Chuuk.generic.long=\u4E18\u514B\u65F6\u95F4
-Pacific/Chuuk.standard.long=\u4E18\u514B\u65F6\u95F4
-Pacific/Easter.generic.long=\u590D\u6D3B\u5C9B\u65F6\u95F4
-Pacific/Efate.generic.long=\u74E6\u5974\u963F\u56FE\u65F6\u95F4
-Pacific/Enderbury.generic.long=\u83F2\u5C3C\u514B\u65AF\u7FA4\u5C9B\u65F6\u95F4
-Pacific/Fakaofo.generic.long=\u6258\u514B\u52B3\u7FA4\u5C9B\u65F6\u95F4
-Pacific/Fiji.generic.long=\u6590\u6D4E\u65F6\u95F4
-Pacific/Funafuti.generic.long=\u5410\u9C81\u74E6\u65F6\u95F4
-Pacific/Galapagos.generic.long=\u52A0\u62C9\u5DF4\u54E5\u65F6\u95F4
-Pacific/Gambier.generic.long=\u5188\u6BD4\u4E9A\u65F6\u95F4
-Pacific/Guadalcanal.generic.long=\u6240\u7F57\u95E8\u7FA4\u5C9B\u65F6\u95F4
-Pacific/Guam.generic.long=\u67E5\u6469\u6D1B\u65F6\u95F4
-Pacific/Honolulu.generic.long=\u590F\u5A01\u5937\u65F6\u95F4
-Pacific/Johnston.generic.long=\u590F\u5A01\u5937\u65F6\u95F4
-Pacific/Kiritimati.generic.long=Line \u5C9B\u65F6\u95F4
-Pacific/Kosrae.generic.long=Kosrae \u65F6\u95F4
-Pacific/Kwajalein.generic.long=\u9A6C\u7ECD\u5C14\u7FA4\u5C9B\u65F6\u95F4
-Pacific/Majuro.generic.long=\u9A6C\u7ECD\u5C14\u7FA4\u5C9B\u65F6\u95F4
-Pacific/Marquesas.generic.long=\u9A6C\u514B\u8428\u65AF\u65F6\u95F4
-Pacific/Midway.generic.long=\u8428\u6469\u4E9A\u65F6\u95F4
-Pacific/Nauru.generic.long=\u8BFA\u9C81\u65F6\u95F4
-Pacific/Niue.generic.long=\u7EBD\u5A01\u5C9B\u65F6\u95F4
-Pacific/Norfolk.generic.long=\u8BFA\u798F\u514B\u65F6\u95F4
-Pacific/Noumea.generic.long=\u65B0\u52A0\u52D2\u591A\u5C3C\u4E9A\u65F6\u95F4
-Pacific/Pago_Pago.generic.long=\u8428\u6469\u4E9A\u65F6\u95F4
-Pacific/Palau.generic.long=\u5E1B\u7409\u65F6\u95F4
-Pacific/Pitcairn.generic.long=\u76AE\u7279\u51EF\u6069\u65F6\u95F4
-Pacific/Pohnpei.daylight.long=\u6CE2\u7EB3\u4F69\u590F\u4EE4\u65F6
-Pacific/Pohnpei.generic.long=\u6CE2\u7EB3\u4F69\u65F6\u95F4
-Pacific/Pohnpei.standard.long=\u6CE2\u7EB3\u4F69\u65F6\u95F4
-Pacific/Ponape.daylight.long=\u6CE2\u7EB3\u4F69\u590F\u4EE4\u65F6
-Pacific/Ponape.generic.long=\u6CE2\u7EB3\u4F69\u65F6\u95F4
-Pacific/Ponape.standard.long=\u6CE2\u7EB3\u4F69\u65F6\u95F4
-Pacific/Port_Moresby.generic.long=\u5DF4\u5E03\u4E9A\u65B0\u51E0\u5185\u4E9A\u65F6\u95F4
-Pacific/Rarotonga.generic.long=\u5E93\u514B\u7FA4\u5C9B\u65F6\u95F4
-Pacific/Saipan.generic.long=\u67E5\u6469\u6D1B\u65F6\u95F4
-Pacific/Samoa.generic.long=\u8428\u6469\u4E9A\u65F6\u95F4
-Pacific/Tahiti.generic.long=\u5927\u6EAA\u5730\u5C9B\u65F6\u95F4
-Pacific/Tarawa.generic.long=\u5409\u4F2F\u7279\u7FA4\u5C9B\u65F6\u95F4
-Pacific/Tongatapu.generic.long=\u4E1C\u52A0\u65F6\u95F4
-Pacific/Truk.daylight.long=\u4E18\u514B\u590F\u4EE4\u65F6
-Pacific/Truk.generic.long=\u4E18\u514B\u65F6\u95F4
-Pacific/Truk.standard.long=\u4E18\u514B\u65F6\u95F4
-Pacific/Wake.generic.long=\u5A01\u514B\u65F6\u95F4
-Pacific/Wallis.generic.long=\u74E6\u5229\u65AF\u53CA\u798F\u675C\u7EB3\u7FA4\u5C9B\u65F6\u95F4
-Pacific/Yap.daylight.long=\u4E18\u514B\u590F\u4EE4\u65F6
-Pacific/Yap.generic.long=\u4E18\u514B\u65F6\u95F4
-Pacific/Yap.standard.long=\u4E18\u514B\u65F6\u95F4
-Poland.generic.long=\u4E2D\u6B27\u65F6\u95F4
-Portugal.generic.long=\u897F\u6B27\u65F6\u95F4
-ROK.generic.long=\u97E9\u56FD\u65F6\u95F4
-SST.generic.long=\u6240\u7F57\u95E8\u7FA4\u5C9B\u65F6\u95F4
-Singapore.generic.long=\u65B0\u52A0\u5761\u65F6\u95F4
-SystemV/AST4.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4
-SystemV/AST4ADT.generic.long=\u5927\u897F\u6D0B\u65F6\u95F4
-SystemV/CST6.generic.long=\u4E2D\u90E8\u65F6\u95F4
-SystemV/CST6CDT.generic.long=\u4E2D\u90E8\u65F6\u95F4
-SystemV/EST5.generic.long=\u4E1C\u90E8\u65F6\u95F4
-SystemV/EST5EDT.generic.long=\u4E1C\u90E8\u65F6\u95F4
-SystemV/HST10.generic.long=\u590F\u5A01\u5937\u65F6\u95F4
-SystemV/MST7.generic.long=\u5C71\u5730\u65F6\u95F4
-SystemV/MST7MDT.generic.long=\u5C71\u5730\u65F6\u95F4
-SystemV/PST8.generic.long=\u592A\u5E73\u6D0B\u65F6\u95F4
-SystemV/PST8PDT.generic.long=\u592A\u5E73\u6D0B\u65F6\u95F4
-SystemV/YST9.generic.long=\u963F\u62C9\u65AF\u52A0\u65F6\u95F4
-SystemV/YST9YDT.generic.long=\u963F\u62C9\u65AF\u52A0\u65F6\u95F4
-Turkey.generic.long=\u4E1C\u6B27\u65F6\u95F4
-UCT.generic.long=\u534F\u8C03\u4E16\u754C\u65F6\u95F4
-US/Alaska.generic.long=\u963F\u62C9\u65AF\u52A0\u65F6\u95F4
-US/Aleutian.generic.long=\u590F\u5A01\u5937-\u963F\u7559\u7533\u65F6\u95F4
-US/Arizona.generic.long=\u5C71\u5730\u65F6\u95F4
-US/Central.generic.long=\u4E2D\u90E8\u65F6\u95F4
-US/East-Indiana.generic.long=\u4E1C\u90E8\u65F6\u95F4
-US/Eastern.generic.long=\u4E1C\u90E8\u65F6\u95F4
-US/Hawaii.generic.long=\u590F\u5A01\u5937\u65F6\u95F4
-US/Indiana-Starke.generic.long=\u4E2D\u90E8\u65F6\u95F4
-US/Michigan.generic.long=\u4E1C\u90E8\u65F6\u95F4
-US/Mountain.generic.long=\u5C71\u5730\u65F6\u95F4
-US/Pacific-New.generic.long=\u592A\u5E73\u6D0B\u65F6\u95F4
-US/Pacific.generic.long=\u592A\u5E73\u6D0B\u65F6\u95F4
-US/Samoa.generic.long=\u8428\u6469\u4E9A\u65F6\u95F4
-UTC.generic.long=\u534F\u8C03\u4E16\u754C\u65F6\u95F4
-Universal.generic.long=\u534F\u8C03\u4E16\u754C\u65F6\u95F4
-VST.generic.long=\u5370\u5EA6\u652F\u90A3\u65F6\u95F4
-W-SU.generic.long=\u83AB\u65AF\u79D1\u65F6\u95F4
-WET.generic.long=\u897f\u6b27\u65f6\u95f4
-Zulu.generic.long=\u534F\u8C03\u4E16\u754C\u65F6\u95F4
diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_zh_CN_short.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_zh_CN_short.properties
deleted file mode 100644
index 095522a..0000000
--- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_zh_CN_short.properties
+++ /dev/null
@@ -1,1743 +0,0 @@
-ACT.daylight.short=CST
-ACT.generic.short=CT
-ACT.standard.short=CST
-AET.daylight.short=EST
-AET.generic.short=ET
-AET.standard.short=EST
-Africa/Abidjan.daylight.short=GMT
-Africa/Abidjan.generic.short=GMT
-Africa/Abidjan.standard.short=GMT
-Africa/Accra.daylight.short=GHST
-Africa/Accra.generic.short=GMT
-Africa/Accra.standard.short=GMT
-Africa/Addis_Ababa.daylight.short=EAST
-Africa/Addis_Ababa.generic.short=EAT
-Africa/Addis_Ababa.standard.short=EAT
-Africa/Algiers.daylight.short=CEST
-Africa/Algiers.generic.short=CET
-Africa/Algiers.standard.short=CET
-Africa/Asmara.daylight.short=EAST
-Africa/Asmara.generic.short=EAT
-Africa/Asmara.standard.short=EAT
-Africa/Asmera.daylight.short=EAST
-Africa/Asmera.generic.short=EAT
-Africa/Asmera.standard.short=EAT
-Africa/Bamako.daylight.short=GMT
-Africa/Bamako.generic.short=GMT
-Africa/Bamako.standard.short=GMT
-Africa/Bangui.daylight.short=WAST
-Africa/Bangui.generic.short=WAT
-Africa/Bangui.standard.short=WAT
-Africa/Banjul.daylight.short=GMT
-Africa/Banjul.generic.short=GMT
-Africa/Banjul.standard.short=GMT
-Africa/Bissau.daylight.short=GMT
-Africa/Bissau.generic.short=GMT
-Africa/Bissau.standard.short=GMT
-Africa/Blantyre.daylight.short=CAST
-Africa/Blantyre.generic.short=CAT
-Africa/Blantyre.standard.short=CAT
-Africa/Brazzaville.daylight.short=WAST
-Africa/Brazzaville.generic.short=WAT
-Africa/Brazzaville.standard.short=WAT
-Africa/Bujumbura.daylight.short=CAST
-Africa/Bujumbura.generic.short=CAT
-Africa/Bujumbura.standard.short=CAT
-Africa/Cairo.daylight.short=EEST
-Africa/Cairo.generic.short=EET
-Africa/Cairo.standard.short=EET
-Africa/Casablanca.daylight.short=WEST
-Africa/Casablanca.generic.short=WET
-Africa/Casablanca.standard.short=WET
-Africa/Ceuta.daylight.short=CEST
-Africa/Ceuta.generic.short=CET
-Africa/Ceuta.standard.short=CET
-Africa/Conakry.daylight.short=GMT
-Africa/Conakry.generic.short=GMT
-Africa/Conakry.standard.short=GMT
-Africa/Dakar.daylight.short=GMT
-Africa/Dakar.generic.short=GMT
-Africa/Dakar.standard.short=GMT
-Africa/Dar_es_Salaam.daylight.short=EAST
-Africa/Dar_es_Salaam.generic.short=EAT
-Africa/Dar_es_Salaam.standard.short=EAT
-Africa/Djibouti.daylight.short=EAST
-Africa/Djibouti.generic.short=EAT
-Africa/Djibouti.standard.short=EAT
-Africa/Douala.daylight.short=WAST
-Africa/Douala.generic.short=WAT
-Africa/Douala.standard.short=WAT
-Africa/El_Aaiun.daylight.short=WEST
-Africa/El_Aaiun.generic.short=WET
-Africa/El_Aaiun.standard.short=WET
-Africa/Freetown.daylight.short=SLST
-Africa/Freetown.generic.short=SLT
-Africa/Freetown.standard.short=GMT
-Africa/Gaborone.daylight.short=CAST
-Africa/Gaborone.generic.short=CAT
-Africa/Gaborone.standard.short=CAT
-Africa/Harare.daylight.short=CAST
-Africa/Harare.generic.short=CAT
-Africa/Harare.standard.short=CAT
-Africa/Johannesburg.daylight.short=SAST
-Africa/Johannesburg.generic.short=SAT
-Africa/Johannesburg.standard.short=SAST
-Africa/Juba.daylight.short=EAST
-Africa/Juba.generic.short=EAT
-Africa/Juba.standard.short=EAT
-Africa/Kampala.daylight.short=EAST
-Africa/Kampala.generic.short=EAT
-Africa/Kampala.standard.short=EAT
-Africa/Khartoum.daylight.short=EAST
-Africa/Khartoum.generic.short=EAT
-Africa/Khartoum.standard.short=EAT
-Africa/Kigali.daylight.short=CAST
-Africa/Kigali.generic.short=CAT
-Africa/Kigali.standard.short=CAT
-Africa/Kinshasa.daylight.short=WAST
-Africa/Kinshasa.generic.short=WAT
-Africa/Kinshasa.standard.short=WAT
-Africa/Lagos.daylight.short=WAST
-Africa/Lagos.generic.short=WAT
-Africa/Lagos.standard.short=WAT
-Africa/Libreville.daylight.short=WAST
-Africa/Libreville.generic.short=WAT
-Africa/Libreville.standard.short=WAT
-Africa/Lome.daylight.short=GMT
-Africa/Lome.generic.short=GMT
-Africa/Lome.standard.short=GMT
-Africa/Luanda.daylight.short=WAST
-Africa/Luanda.generic.short=WAT
-Africa/Luanda.standard.short=WAT
-Africa/Lubumbashi.daylight.short=CAST
-Africa/Lubumbashi.generic.short=CAT
-Africa/Lubumbashi.standard.short=CAT
-Africa/Lusaka.daylight.short=CAST
-Africa/Lusaka.generic.short=CAT
-Africa/Lusaka.standard.short=CAT
-Africa/Malabo.daylight.short=WAST
-Africa/Malabo.generic.short=WAT
-Africa/Malabo.standard.short=WAT
-Africa/Maputo.daylight.short=CAST
-Africa/Maputo.generic.short=CAT
-Africa/Maputo.standard.short=CAT
-Africa/Maseru.daylight.short=SAST
-Africa/Maseru.generic.short=SAT
-Africa/Maseru.standard.short=SAST
-Africa/Mbabane.daylight.short=SAST
-Africa/Mbabane.generic.short=SAT
-Africa/Mbabane.standard.short=SAST
-Africa/Mogadishu.daylight.short=EAST
-Africa/Mogadishu.generic.short=EAT
-Africa/Mogadishu.standard.short=EAT
-Africa/Monrovia.daylight.short=GMT
-Africa/Monrovia.generic.short=GMT
-Africa/Monrovia.standard.short=GMT
-Africa/Nairobi.daylight.short=EAST
-Africa/Nairobi.generic.short=EAT
-Africa/Nairobi.standard.short=EAT
-Africa/Ndjamena.daylight.short=WAST
-Africa/Ndjamena.generic.short=WAT
-Africa/Ndjamena.standard.short=WAT
-Africa/Niamey.daylight.short=WAST
-Africa/Niamey.generic.short=WAT
-Africa/Niamey.standard.short=WAT
-Africa/Nouakchott.daylight.short=GMT
-Africa/Nouakchott.generic.short=GMT
-Africa/Nouakchott.standard.short=GMT
-Africa/Ouagadougou.daylight.short=GMT
-Africa/Ouagadougou.generic.short=GMT
-Africa/Ouagadougou.standard.short=GMT
-Africa/Porto-Novo.daylight.short=WAST
-Africa/Porto-Novo.generic.short=WAT
-Africa/Porto-Novo.standard.short=WAT
-Africa/Sao_Tome.daylight.short=GMT
-Africa/Sao_Tome.generic.short=GMT
-Africa/Sao_Tome.standard.short=GMT
-Africa/Timbuktu.daylight.short=GMT
-Africa/Timbuktu.generic.short=GMT
-Africa/Timbuktu.standard.short=GMT
-Africa/Tripoli.daylight.short=EEST
-Africa/Tripoli.generic.short=EET
-Africa/Tripoli.standard.short=EET
-Africa/Tunis.daylight.short=CEST
-Africa/Tunis.generic.short=CET
-Africa/Tunis.standard.short=CET
-Africa/Windhoek.daylight.short=WAST
-Africa/Windhoek.generic.short=WAT
-Africa/Windhoek.standard.short=WAT
-AGT.daylight.short=ARST
-AGT.generic.short=ART
-AGT.standard.short=ART
-America/Adak.daylight.short=HADT
-America/Adak.generic.short=HAT
-America/Adak.standard.short=HAST
-America/Anchorage.daylight.short=AKDT
-America/Anchorage.generic.short=AKT
-America/Anchorage.standard.short=AKST
-America/Anguilla.daylight.short=ADT
-America/Anguilla.generic.short=AT
-America/Anguilla.standard.short=AST
-America/Antigua.daylight.short=ADT
-America/Antigua.generic.short=AT
-America/Antigua.standard.short=AST
-America/Araguaina.daylight.short=BRST
-America/Araguaina.generic.short=BRT
-America/Araguaina.standard.short=BRT
-America/Argentina/Buenos_Aires.daylight.short=ARST
-America/Argentina/Buenos_Aires.generic.short=ART
-America/Argentina/Buenos_Aires.standard.short=ART
-America/Argentina/Catamarca.daylight.short=ARST
-America/Argentina/Catamarca.generic.short=ART
-America/Argentina/Catamarca.standard.short=ART
-America/Argentina/ComodRivadavia.daylight.short=ARST
-America/Argentina/ComodRivadavia.generic.short=ART
-America/Argentina/ComodRivadavia.standard.short=ART
-America/Argentina/Cordoba.daylight.short=ARST
-America/Argentina/Cordoba.generic.short=ART
-America/Argentina/Cordoba.standard.short=ART
-America/Argentina/Jujuy.daylight.short=ARST
-America/Argentina/Jujuy.generic.short=ART
-America/Argentina/Jujuy.standard.short=ART
-America/Argentina/La_Rioja.daylight.short=ARST
-America/Argentina/La_Rioja.generic.short=ART
-America/Argentina/La_Rioja.standard.short=ART
-America/Argentina/Mendoza.daylight.short=ARST
-America/Argentina/Mendoza.generic.short=ART
-America/Argentina/Mendoza.standard.short=ART
-America/Argentina/Rio_Gallegos.daylight.short=ARST
-America/Argentina/Rio_Gallegos.generic.short=ART
-America/Argentina/Rio_Gallegos.standard.short=ART
-America/Argentina/Salta.daylight.short=ARST
-America/Argentina/Salta.generic.short=ART
-America/Argentina/Salta.standard.short=ART
-America/Argentina/San_Juan.daylight.short=ARST
-America/Argentina/San_Juan.generic.short=ART
-America/Argentina/San_Juan.standard.short=ART
-America/Argentina/San_Luis.daylight.short=ARST
-America/Argentina/San_Luis.generic.short=ART
-America/Argentina/San_Luis.standard.short=ART
-America/Argentina/Tucuman.daylight.short=ARST
-America/Argentina/Tucuman.generic.short=ART
-America/Argentina/Tucuman.standard.short=ART
-America/Argentina/Ushuaia.daylight.short=ARST
-America/Argentina/Ushuaia.generic.short=ART
-America/Argentina/Ushuaia.standard.short=ART
-America/Aruba.daylight.short=ADT
-America/Aruba.generic.short=AT
-America/Aruba.standard.short=AST
-America/Asuncion.daylight.short=PYST
-America/Asuncion.generic.short=PYT
-America/Asuncion.standard.short=PYT
-America/Atikokan.daylight.short=EDT
-America/Atikokan.generic.short=ET
-America/Atikokan.standard.short=EST
-America/Atka.daylight.short=HADT
-America/Atka.generic.short=HAT
-America/Atka.standard.short=HAST
-America/Bahia_Banderas.daylight.short=CDT
-America/Bahia_Banderas.generic.short=CT
-America/Bahia_Banderas.standard.short=CST
-America/Bahia.daylight.short=BRST
-America/Bahia.generic.short=BRT
-America/Bahia.standard.short=BRT
-America/Barbados.daylight.short=ADT
-America/Barbados.generic.short=AT
-America/Barbados.standard.short=AST
-America/Belem.daylight.short=BRST
-America/Belem.generic.short=BRT
-America/Belem.standard.short=BRT
-America/Belize.daylight.short=CDT
-America/Belize.generic.short=CT
-America/Belize.standard.short=CST
-America/Blanc-Sablon.daylight.short=ADT
-America/Blanc-Sablon.generic.short=AT
-America/Blanc-Sablon.standard.short=AST
-America/Boa_Vista.daylight.short=AMST
-America/Boa_Vista.generic.short=AMT
-America/Boa_Vista.standard.short=AMT
-America/Bogota.daylight.short=COST
-America/Bogota.generic.short=COT
-America/Bogota.standard.short=COT
-America/Boise.daylight.short=MDT
-America/Boise.generic.short=MT
-America/Boise.standard.short=MST
-America/Buenos_Aires.daylight.short=ARST
-America/Buenos_Aires.generic.short=ART
-America/Buenos_Aires.standard.short=ART
-America/Cambridge_Bay.daylight.short=MDT
-America/Cambridge_Bay.generic.short=MT
-America/Cambridge_Bay.standard.short=MST
-America/Campo_Grande.daylight.short=AMST
-America/Campo_Grande.generic.short=AMT
-America/Campo_Grande.standard.short=AMT
-America/Cancun.daylight.short=CDT
-America/Cancun.generic.short=CT
-America/Cancun.standard.short=CST
-America/Caracas.daylight.short=VEST
-America/Caracas.generic.short=VET
-America/Caracas.standard.short=VET
-America/Catamarca.daylight.short=ARST
-America/Catamarca.generic.short=ART
-America/Catamarca.standard.short=ART
-America/Cayenne.daylight.short=GFST
-America/Cayenne.generic.short=GFT
-America/Cayenne.standard.short=GFT
-America/Cayman.daylight.short=EDT
-America/Cayman.generic.short=ET
-America/Cayman.standard.short=EST
-America/Chicago.daylight.short=CDT
-America/Chicago.generic.short=CT
-America/Chicago.standard.short=CST
-America/Chihuahua.daylight.short=MDT
-America/Chihuahua.generic.short=MT
-America/Chihuahua.standard.short=MST
-America/Coral_Harbour.daylight.short=EDT
-America/Coral_Harbour.generic.short=ET
-America/Coral_Harbour.standard.short=EST
-America/Cordoba.daylight.short=ARST
-America/Cordoba.generic.short=ART
-America/Cordoba.standard.short=ART
-America/Costa_Rica.daylight.short=CDT
-America/Costa_Rica.generic.short=CT
-America/Costa_Rica.standard.short=CST
-America/Creston.daylight.short=MDT
-America/Creston.generic.short=MT
-America/Creston.standard.short=MST
-America/Cuiaba.daylight.short=AMST
-America/Cuiaba.generic.short=AMT
-America/Cuiaba.standard.short=AMT
-America/Curacao.daylight.short=ADT
-America/Curacao.generic.short=AT
-America/Curacao.standard.short=AST
-America/Danmarkshavn.daylight.short=GMT
-America/Danmarkshavn.generic.short=GMT
-America/Danmarkshavn.standard.short=GMT
-America/Dawson_Creek.daylight.short=MDT
-America/Dawson_Creek.generic.short=MT
-America/Dawson_Creek.standard.short=MST
-America/Dawson.daylight.short=PDT
-America/Dawson.generic.short=PT
-America/Dawson.standard.short=PST
-America/Denver.daylight.short=MDT
-America/Denver.generic.short=MT
-America/Denver.standard.short=MST
-America/Detroit.daylight.short=EDT
-America/Detroit.generic.short=ET
-America/Detroit.standard.short=EST
-America/Dominica.daylight.short=ADT
-America/Dominica.generic.short=AT
-America/Dominica.standard.short=AST
-America/Edmonton.daylight.short=MDT
-America/Edmonton.generic.short=MT
-America/Edmonton.standard.short=MST
-America/Eirunepe.daylight.short=ACST
-America/Eirunepe.generic.short=ACT
-America/Eirunepe.standard.short=ACT
-America/El_Salvador.daylight.short=CDT
-America/El_Salvador.generic.short=CT
-America/El_Salvador.standard.short=CST
-America/Ensenada.daylight.short=PDT
-America/Ensenada.generic.short=PT
-America/Ensenada.standard.short=PST
-America/Fortaleza.daylight.short=BRST
-America/Fortaleza.generic.short=BRT
-America/Fortaleza.standard.short=BRT
-America/Fort_Wayne.daylight.short=EDT
-America/Fort_Wayne.generic.short=ET
-America/Fort_Wayne.standard.short=EST
-America/Glace_Bay.daylight.short=ADT
-America/Glace_Bay.generic.short=AT
-America/Glace_Bay.standard.short=AST
-America/Godthab.daylight.short=WGST
-America/Godthab.generic.short=WGT
-America/Godthab.standard.short=WGT
-America/Goose_Bay.daylight.short=ADT
-America/Goose_Bay.generic.short=AT
-America/Goose_Bay.standard.short=AST
-America/Grand_Turk.daylight.short=EDT
-America/Grand_Turk.generic.short=ET
-America/Grand_Turk.standard.short=EST
-America/Grenada.daylight.short=ADT
-America/Grenada.generic.short=AT
-America/Grenada.standard.short=AST
-America/Guadeloupe.daylight.short=ADT
-America/Guadeloupe.generic.short=AT
-America/Guadeloupe.standard.short=AST
-America/Guatemala.daylight.short=CDT
-America/Guatemala.generic.short=CT
-America/Guatemala.standard.short=CST
-America/Guayaquil.daylight.short=ECST
-America/Guayaquil.generic.short=ECT
-America/Guayaquil.standard.short=ECT
-America/Guyana.daylight.short=GYST
-America/Guyana.generic.short=GYT
-America/Guyana.standard.short=GYT
-America/Halifax.daylight.short=ADT
-America/Halifax.generic.short=AT
-America/Halifax.standard.short=AST
-America/Havana.daylight.short=CDT
-America/Havana.generic.short=CT
-America/Havana.standard.short=CST
-America/Hermosillo.daylight.short=MDT
-America/Hermosillo.generic.short=MT
-America/Hermosillo.standard.short=MST
-America/Indiana/Indianapolis.daylight.short=EDT
-America/Indiana/Indianapolis.generic.short=ET
-America/Indiana/Indianapolis.standard.short=EST
-America/Indiana/Knox.daylight.short=CDT
-America/Indiana/Knox.generic.short=CT
-America/Indiana/Knox.standard.short=CST
-America/Indiana/Marengo.daylight.short=EDT
-America/Indiana/Marengo.generic.short=ET
-America/Indiana/Marengo.standard.short=EST
-America/Indiana/Petersburg.daylight.short=EDT
-America/Indiana/Petersburg.generic.short=ET
-America/Indiana/Petersburg.standard.short=EST
-America/Indianapolis.daylight.short=EDT
-America/Indianapolis.generic.short=ET
-America/Indianapolis.standard.short=EST
-America/Indiana/Tell_City.daylight.short=CDT
-America/Indiana/Tell_City.generic.short=CT
-America/Indiana/Tell_City.standard.short=CST
-America/Indiana/Vevay.daylight.short=EDT
-America/Indiana/Vevay.generic.short=ET
-America/Indiana/Vevay.standard.short=EST
-America/Indiana/Vincennes.daylight.short=EDT
-America/Indiana/Vincennes.generic.short=ET
-America/Indiana/Vincennes.standard.short=EST
-America/Indiana/Winamac.daylight.short=EDT
-America/Indiana/Winamac.generic.short=ET
-America/Indiana/Winamac.standard.short=EST
-America/Inuvik.daylight.short=MDT
-America/Inuvik.generic.short=MT
-America/Inuvik.standard.short=MST
-America/Iqaluit.daylight.short=EDT
-America/Iqaluit.generic.short=ET
-America/Iqaluit.standard.short=EST
-America/Jamaica.daylight.short=EDT
-America/Jamaica.generic.short=ET
-America/Jamaica.standard.short=EST
-America/Jujuy.daylight.short=ARST
-America/Jujuy.generic.short=ART
-America/Jujuy.standard.short=ART
-America/Juneau.daylight.short=AKDT
-America/Juneau.generic.short=AKT
-America/Juneau.standard.short=AKST
-America/Kentucky/Louisville.daylight.short=EDT
-America/Kentucky/Louisville.generic.short=ET
-America/Kentucky/Louisville.standard.short=EST
-America/Kentucky/Monticello.daylight.short=EDT
-America/Kentucky/Monticello.generic.short=ET
-America/Kentucky/Monticello.standard.short=EST
-America/Knox_IN.daylight.short=CDT
-America/Knox_IN.generic.short=CT
-America/Knox_IN.standard.short=CST
-America/Kralendijk.daylight.short=ADT
-America/Kralendijk.generic.short=AT
-America/Kralendijk.standard.short=AST
-America/La_Paz.daylight.short=BOST
-America/La_Paz.generic.short=BOT
-America/La_Paz.standard.short=BOT
-America/Lima.daylight.short=PEST
-America/Lima.generic.short=PET
-America/Lima.standard.short=PET
-America/Los_Angeles.daylight.short=PDT
-America/Los_Angeles.generic.short=PT
-America/Los_Angeles.standard.short=PST
-America/Louisville.daylight.short=EDT
-America/Louisville.generic.short=ET
-America/Louisville.standard.short=EST
-America/Lower_Princes.daylight.short=ADT
-America/Lower_Princes.generic.short=AT
-America/Lower_Princes.standard.short=AST
-America/Maceio.daylight.short=BRST
-America/Maceio.generic.short=BRT
-America/Maceio.standard.short=BRT
-America/Managua.daylight.short=CDT
-America/Managua.generic.short=CT
-America/Managua.standard.short=CST
-America/Manaus.daylight.short=AMST
-America/Manaus.generic.short=AMT
-America/Manaus.standard.short=AMT
-America/Marigot.daylight.short=ADT
-America/Marigot.generic.short=AT
-America/Marigot.standard.short=AST
-America/Martinique.daylight.short=ADT
-America/Martinique.generic.short=AT
-America/Martinique.standard.short=AST
-America/Matamoros.daylight.short=CDT
-America/Matamoros.generic.short=CT
-America/Matamoros.standard.short=CST
-America/Mazatlan.daylight.short=MDT
-America/Mazatlan.generic.short=MT
-America/Mazatlan.standard.short=MST
-America/Mendoza.daylight.short=ARST
-America/Mendoza.generic.short=ART
-America/Mendoza.standard.short=ART
-America/Menominee.daylight.short=CDT
-America/Menominee.generic.short=CT
-America/Menominee.standard.short=CST
-America/Merida.daylight.short=CDT
-America/Merida.generic.short=CT
-America/Merida.standard.short=CST
-America/Metlakatla.daylight.short=MeDT
-America/Metlakatla.generic.short=MeT
-America/Metlakatla.standard.short=MeST
-America/Mexico_City.daylight.short=CDT
-America/Mexico_City.generic.short=CT
-America/Mexico_City.standard.short=CST
-America/Miquelon.daylight.short=PMDT
-America/Miquelon.generic.short=PMT
-America/Miquelon.standard.short=PMST
-America/Moncton.daylight.short=ADT
-America/Moncton.generic.short=AT
-America/Moncton.standard.short=AST
-America/Monterrey.daylight.short=CDT
-America/Monterrey.generic.short=CT
-America/Monterrey.standard.short=CST
-America/Montevideo.daylight.short=UYST
-America/Montevideo.generic.short=UYT
-America/Montevideo.standard.short=UYT
-America/Montreal.daylight.short=EDT
-America/Montreal.generic.short=ET
-America/Montreal.standard.short=EST
-America/Montserrat.daylight.short=ADT
-America/Montserrat.generic.short=AT
-America/Montserrat.standard.short=AST
-America/Nassau.daylight.short=EDT
-America/Nassau.generic.short=ET
-America/Nassau.standard.short=EST
-America/New_York.daylight.short=EDT
-America/New_York.generic.short=ET
-America/New_York.standard.short=EST
-America/Nipigon.daylight.short=EDT
-America/Nipigon.generic.short=ET
-America/Nipigon.standard.short=EST
-America/Nome.daylight.short=AKDT
-America/Nome.generic.short=AKT
-America/Nome.standard.short=AKST
-America/Noronha.daylight.short=FNST
-America/Noronha.generic.short=FNT
-America/Noronha.standard.short=FNT
-America/North_Dakota/Beulah.daylight.short=CDT
-America/North_Dakota/Beulah.generic.short=CT
-America/North_Dakota/Beulah.standard.short=CST
-America/North_Dakota/Center.daylight.short=CDT
-America/North_Dakota/Center.generic.short=CT
-America/North_Dakota/Center.standard.short=CST
-America/North_Dakota/New_Salem.daylight.short=CDT
-America/North_Dakota/New_Salem.generic.short=CT
-America/North_Dakota/New_Salem.standard.short=CST
-America/Ojinaga.daylight.short=MDT
-America/Ojinaga.generic.short=MT
-America/Ojinaga.standard.short=MST
-America/Panama.daylight.short=EDT
-America/Panama.generic.short=ET
-America/Panama.standard.short=EST
-America/Pangnirtung.daylight.short=EDT
-America/Pangnirtung.generic.short=ET
-America/Pangnirtung.standard.short=EST
-America/Paramaribo.daylight.short=SRST
-America/Paramaribo.generic.short=SRT
-America/Paramaribo.standard.short=SRT
-America/Phoenix.daylight.short=MDT
-America/Phoenix.generic.short=MT
-America/Phoenix.standard.short=MST
-America/Port-au-Prince.daylight.short=EDT
-America/Port-au-Prince.generic.short=ET
-America/Port-au-Prince.standard.short=EST
-America/Porto_Acre.daylight.short=ACST
-America/Porto_Acre.generic.short=ACT
-America/Porto_Acre.standard.short=ACT
-America/Port_of_Spain.daylight.short=ADT
-America/Port_of_Spain.generic.short=AT
-America/Port_of_Spain.standard.short=AST
-America/Porto_Velho.daylight.short=AMST
-America/Porto_Velho.generic.short=AMT
-America/Porto_Velho.standard.short=AMT
-America/Puerto_Rico.daylight.short=ADT
-America/Puerto_Rico.generic.short=AT
-America/Puerto_Rico.standard.short=AST
-America/Rainy_River.daylight.short=CDT
-America/Rainy_River.generic.short=CT
-America/Rainy_River.standard.short=CST
-America/Rankin_Inlet.daylight.short=CDT
-America/Rankin_Inlet.generic.short=CT
-America/Rankin_Inlet.standard.short=CST
-America/Recife.daylight.short=BRST
-America/Recife.generic.short=BRT
-America/Recife.standard.short=BRT
-America/Regina.daylight.short=CDT
-America/Regina.generic.short=CT
-America/Regina.standard.short=CST
-America/Resolute.daylight.short=CDT
-America/Resolute.generic.short=CT
-America/Resolute.standard.short=CST
-America/Rio_Branco.daylight.short=ACST
-America/Rio_Branco.generic.short=ACT
-America/Rio_Branco.standard.short=ACT
-America/Rosario.daylight.short=ARST
-America/Rosario.generic.short=ART
-America/Rosario.standard.short=ART
-America/Santa_Isabel.daylight.short=PDT
-America/Santa_Isabel.generic.short=PT
-America/Santa_Isabel.standard.short=PST
-America/Santarem.daylight.short=BRST
-America/Santarem.generic.short=BRT
-America/Santarem.standard.short=BRT
-America/Santiago.daylight.short=CLST
-America/Santiago.generic.short=CLT
-America/Santiago.standard.short=CLT
-America/Santo_Domingo.daylight.short=ADT
-America/Santo_Domingo.generic.short=AT
-America/Santo_Domingo.standard.short=AST
-America/Sao_Paulo.daylight.short=BRST
-America/Sao_Paulo.generic.short=BRT
-America/Sao_Paulo.standard.short=BRT
-America/Scoresbysund.daylight.short=EGST
-America/Scoresbysund.generic.short=EGT
-America/Scoresbysund.standard.short=EGT
-America/Shiprock.daylight.short=MDT
-America/Shiprock.generic.short=MT
-America/Shiprock.standard.short=MST
-America/Sitka.daylight.short=AKDT
-America/Sitka.generic.short=AKT
-America/Sitka.standard.short=AKST
-America/St_Barthelemy.daylight.short=ADT
-America/St_Barthelemy.generic.short=AT
-America/St_Barthelemy.standard.short=AST
-America/St_Johns.daylight.short=NDT
-America/St_Johns.generic.short=NT
-America/St_Johns.standard.short=NST
-America/St_Kitts.daylight.short=ADT
-America/St_Kitts.generic.short=AT
-America/St_Kitts.standard.short=AST
-America/St_Lucia.daylight.short=ADT
-America/St_Lucia.generic.short=AT
-America/St_Lucia.standard.short=AST
-America/St_Thomas.daylight.short=ADT
-America/St_Thomas.generic.short=AT
-America/St_Thomas.standard.short=AST
-America/St_Vincent.daylight.short=ADT
-America/St_Vincent.generic.short=AT
-America/St_Vincent.standard.short=AST
-America/Swift_Current.daylight.short=CDT
-America/Swift_Current.generic.short=CT
-America/Swift_Current.standard.short=CST
-America/Tegucigalpa.daylight.short=CDT
-America/Tegucigalpa.generic.short=CT
-America/Tegucigalpa.standard.short=CST
-America/Thule.daylight.short=ADT
-America/Thule.generic.short=AT
-America/Thule.standard.short=AST
-America/Thunder_Bay.daylight.short=EDT
-America/Thunder_Bay.generic.short=ET
-America/Thunder_Bay.standard.short=EST
-America/Tijuana.daylight.short=PDT
-America/Tijuana.generic.short=PT
-America/Tijuana.standard.short=PST
-America/Toronto.daylight.short=EDT
-America/Toronto.generic.short=ET
-America/Toronto.standard.short=EST
-America/Tortola.daylight.short=ADT
-America/Tortola.generic.short=AT
-America/Tortola.standard.short=AST
-America/Vancouver.daylight.short=PDT
-America/Vancouver.generic.short=PT
-America/Vancouver.standard.short=PST
-America/Virgin.daylight.short=ADT
-America/Virgin.generic.short=AT
-America/Virgin.standard.short=AST
-America/Whitehorse.daylight.short=PDT
-America/Whitehorse.generic.short=PT
-America/Whitehorse.standard.short=PST
-America/Winnipeg.daylight.short=CDT
-America/Winnipeg.generic.short=CT
-America/Winnipeg.standard.short=CST
-America/Yakutat.daylight.short=AKDT
-America/Yakutat.generic.short=AKT
-America/Yakutat.standard.short=AKST
-America/Yellowknife.daylight.short=MDT
-America/Yellowknife.generic.short=MT
-America/Yellowknife.standard.short=MST
-Antarctica/Casey.daylight.short=WST
-Antarctica/Casey.generic.short=WT
-Antarctica/Casey.standard.short=WST
-Antarctica/Davis.daylight.short=DAVST
-Antarctica/Davis.generic.short=DAVT
-Antarctica/Davis.standard.short=DAVT
-Antarctica/DumontDUrville.daylight.short=DDUST
-Antarctica/DumontDUrville.generic.short=DDUT
-Antarctica/DumontDUrville.standard.short=DDUT
-Antarctica/Macquarie.daylight.short=MIST
-Antarctica/Macquarie.generic.short=MIST
-Antarctica/Macquarie.standard.short=MIST
-Antarctica/Mawson.daylight.short=MAWST
-Antarctica/Mawson.generic.short=MAWT
-Antarctica/Mawson.standard.short=MAWT
-Antarctica/McMurdo.daylight.short=NZDT
-Antarctica/McMurdo.generic.short=NZT
-Antarctica/McMurdo.standard.short=NZST
-Antarctica/Palmer.daylight.short=CLST
-Antarctica/Palmer.generic.short=CLT
-Antarctica/Palmer.standard.short=CLT
-Antarctica/Rothera.daylight.short=ROTST
-Antarctica/Rothera.generic.short=ROTT
-Antarctica/Rothera.standard.short=ROTT
-Antarctica/South_Pole.daylight.short=NZDT
-Antarctica/South_Pole.generic.short=NZT
-Antarctica/South_Pole.standard.short=NZST
-Antarctica/Syowa.daylight.short=SYOST
-Antarctica/Syowa.generic.short=SYOT
-Antarctica/Syowa.standard.short=SYOT
-Antarctica/Vostok.daylight.short=VOSST
-Antarctica/Vostok.generic.short=VOST
-Antarctica/Vostok.standard.short=VOST
-Arctic/Longyearbyen.daylight.short=CEST
-Arctic/Longyearbyen.generic.short=CET
-Arctic/Longyearbyen.standard.short=CET
-ART.daylight.short=EEST
-ART.generic.short=EET
-ART.standard.short=EET
-Asia/Aden.daylight.short=ADT
-Asia/Aden.generic.short=AT
-Asia/Aden.standard.short=AST
-Asia/Almaty.daylight.short=ALMST
-Asia/Almaty.generic.short=ALMT
-Asia/Almaty.standard.short=ALMT
-Asia/Amman.daylight.short=ADT
-Asia/Amman.generic.short=AT
-Asia/Amman.standard.short=AST
-Asia/Anadyr.daylight.short=ANAST
-Asia/Anadyr.generic.short=ANAT
-Asia/Anadyr.standard.short=ANAT
-Asia/Aqtau.daylight.short=AQTST
-Asia/Aqtau.generic.short=AQTT
-Asia/Aqtau.standard.short=AQTT
-Asia/Aqtobe.daylight.short=AQTST
-Asia/Aqtobe.generic.short=AQTT
-Asia/Aqtobe.standard.short=AQTT
-Asia/Ashgabat.daylight.short=TMST
-Asia/Ashgabat.generic.short=TMT
-Asia/Ashgabat.standard.short=TMT
-Asia/Ashkhabad.daylight.short=TMST
-Asia/Ashkhabad.generic.short=TMT
-Asia/Ashkhabad.standard.short=TMT
-Asia/Baghdad.daylight.short=ADT
-Asia/Baghdad.generic.short=AT
-Asia/Baghdad.standard.short=AST
-Asia/Bahrain.daylight.short=ADT
-Asia/Bahrain.generic.short=AT
-Asia/Bahrain.standard.short=AST
-Asia/Baku.daylight.short=AZST
-Asia/Baku.generic.short=AZT
-Asia/Baku.standard.short=AZT
-Asia/Bangkok.daylight.short=ICST
-Asia/Bangkok.generic.short=ICT
-Asia/Bangkok.standard.short=ICT
-Asia/Beirut.daylight.short=EEST
-Asia/Beirut.generic.short=EET
-Asia/Beirut.standard.short=EET
-Asia/Bishkek.daylight.short=KGST
-Asia/Bishkek.generic.short=KGT
-Asia/Bishkek.standard.short=KGT
-Asia/Brunei.daylight.short=BNST
-Asia/Brunei.generic.short=BNT
-Asia/Brunei.standard.short=BNT
-Asia/Calcutta.daylight.short=IDT
-Asia/Calcutta.generic.short=IT
-Asia/Calcutta.standard.short=IST
-Asia/Choibalsan.daylight.short=CHOST
-Asia/Choibalsan.generic.short=CHOT
-Asia/Choibalsan.standard.short=CHOT
-Asia/Chongqing.daylight.short=CDT
-Asia/Chongqing.generic.short=CT
-Asia/Chongqing.standard.short=CST
-Asia/Chungking.daylight.short=CDT
-Asia/Chungking.generic.short=CT
-Asia/Chungking.standard.short=CST
-Asia/Colombo.daylight.short=IDT
-Asia/Colombo.generic.short=IT
-Asia/Colombo.standard.short=IST
-Asia/Dacca.daylight.short=BDST
-Asia/Dacca.generic.short=BDT
-Asia/Dacca.standard.short=BDT
-Asia/Damascus.daylight.short=EEST
-Asia/Damascus.generic.short=EET
-Asia/Damascus.standard.short=EET
-Asia/Dhaka.daylight.short=BDST
-Asia/Dhaka.generic.short=BDT
-Asia/Dhaka.standard.short=BDT
-Asia/Dili.daylight.short=TLST
-Asia/Dili.generic.short=TLT
-Asia/Dili.standard.short=TLT
-Asia/Dubai.daylight.short=GDT
-Asia/Dubai.generic.short=GT
-Asia/Dubai.standard.short=GST
-Asia/Dushanbe.daylight.short=TJST
-Asia/Dushanbe.generic.short=TJT
-Asia/Dushanbe.standard.short=TJT
-Asia/Gaza.daylight.short=EEST
-Asia/Gaza.generic.short=EET
-Asia/Gaza.standard.short=EET
-Asia/Harbin.daylight.short=CDT
-Asia/Harbin.generic.short=CT
-Asia/Harbin.standard.short=CST
-Asia/Hebron.daylight.short=EEST
-Asia/Hebron.generic.short=EET
-Asia/Hebron.standard.short=EET
-Asia/Ho_Chi_Minh.daylight.short=ICST
-Asia/Ho_Chi_Minh.generic.short=ICT
-Asia/Ho_Chi_Minh.standard.short=ICT
-Asia/Hong_Kong.daylight.short=HKST
-Asia/Hong_Kong.generic.short=HKT
-Asia/Hong_Kong.standard.short=HKT
-Asia/Hovd.daylight.short=HOVST
-Asia/Hovd.generic.short=HOVT
-Asia/Hovd.standard.short=HOVT
-Asia/Irkutsk.daylight.short=IRKST
-Asia/Irkutsk.generic.short=IRKT
-Asia/Irkutsk.standard.short=IRKT
-Asia/Istanbul.daylight.short=EEST
-Asia/Istanbul.generic.short=EET
-Asia/Istanbul.standard.short=EET
-Asia/Jakarta.daylight.short=WIST
-Asia/Jakarta.generic.short=WIB
-Asia/Jakarta.standard.short=WIB
-Asia/Jayapura.daylight.short=EIST
-Asia/Jayapura.generic.short=WIT
-Asia/Jayapura.standard.short=WIT
-Asia/Jerusalem.daylight.short=IDT
-Asia/Jerusalem.generic.short=IT
-Asia/Jerusalem.standard.short=IST
-Asia/Kabul.daylight.short=AFST
-Asia/Kabul.generic.short=AFT
-Asia/Kabul.standard.short=AFT
-Asia/Kamchatka.daylight.short=PETST
-Asia/Kamchatka.generic.short=PETT
-Asia/Kamchatka.standard.short=PETT
-Asia/Karachi.daylight.short=PKST
-Asia/Karachi.generic.short=PKT
-Asia/Karachi.standard.short=PKT
-Asia/Kashgar.daylight.short=CDT
-Asia/Kashgar.generic.short=CT
-Asia/Kashgar.standard.short=CST
-Asia/Kathmandu.daylight.short=NPST
-Asia/Kathmandu.generic.short=NPT
-Asia/Kathmandu.standard.short=NPT
-Asia/Katmandu.daylight.short=NPST
-Asia/Katmandu.generic.short=NPT
-Asia/Katmandu.standard.short=NPT
-Asia/Khandyga.daylight.short=YAKST
-Asia/Khandyga.generic.short=YAKT
-Asia/Khandyga.standard.short=YAKT
-Asia/Kolkata.daylight.short=IDT
-Asia/Kolkata.generic.short=IT
-Asia/Kolkata.standard.short=IST
-Asia/Krasnoyarsk.daylight.short=KRAST
-Asia/Krasnoyarsk.generic.short=KRAT
-Asia/Krasnoyarsk.standard.short=KRAT
-Asia/Kuala_Lumpur.daylight.short=MYST
-Asia/Kuala_Lumpur.generic.short=MYT
-Asia/Kuala_Lumpur.standard.short=MYT
-Asia/Kuching.daylight.short=MYST
-Asia/Kuching.generic.short=MYT
-Asia/Kuching.standard.short=MYT
-Asia/Kuwait.daylight.short=ADT
-Asia/Kuwait.generic.short=AT
-Asia/Kuwait.standard.short=AST
-Asia/Macao.daylight.short=CDT
-Asia/Macao.generic.short=CT
-Asia/Macao.standard.short=CST
-Asia/Macau.daylight.short=CDT
-Asia/Macau.generic.short=CT
-Asia/Macau.standard.short=CST
-Asia/Magadan.daylight.short=MAGST
-Asia/Magadan.generic.short=MAGT
-Asia/Magadan.standard.short=MAGT
-Asia/Makassar.daylight.short=CIST
-Asia/Makassar.generic.short=WITA
-Asia/Makassar.standard.short=WITA
-Asia/Manila.daylight.short=PHST
-Asia/Manila.generic.short=PHT
-Asia/Manila.standard.short=PHT
-Asia/Muscat.daylight.short=GDT
-Asia/Muscat.generic.short=GT
-Asia/Muscat.standard.short=GST
-Asia/Nicosia.daylight.short=EEST
-Asia/Nicosia.generic.short=EET
-Asia/Nicosia.standard.short=EET
-Asia/Novokuznetsk.daylight.short=NOVST
-Asia/Novokuznetsk.generic.short=NOVT
-Asia/Novokuznetsk.standard.short=NOVT
-Asia/Novosibirsk.daylight.short=NOVST
-Asia/Novosibirsk.generic.short=NOVT
-Asia/Novosibirsk.standard.short=NOVT
-Asia/Omsk.daylight.short=OMSST
-Asia/Omsk.generic.short=OMST
-Asia/Omsk.standard.short=OMST
-Asia/Oral.daylight.short=ORAST
-Asia/Oral.generic.short=ORAT
-Asia/Oral.standard.short=ORAT
-Asia/Phnom_Penh.daylight.short=ICST
-Asia/Phnom_Penh.generic.short=ICT
-Asia/Phnom_Penh.standard.short=ICT
-Asia/Pontianak.daylight.short=WIST
-Asia/Pontianak.generic.short=WIB
-Asia/Pontianak.standard.short=WIB
-Asia/Pyongyang.daylight.short=KDT
-Asia/Pyongyang.generic.short=KT
-Asia/Pyongyang.standard.short=KST
-Asia/Qatar.daylight.short=ADT
-Asia/Qatar.generic.short=AT
-Asia/Qatar.standard.short=AST
-Asia/Qyzylorda.daylight.short=QYZST
-Asia/Qyzylorda.generic.short=QYZT
-Asia/Qyzylorda.standard.short=QYZT
-Asia/Rangoon.daylight.short=MMST
-Asia/Rangoon.generic.short=MMT
-Asia/Rangoon.standard.short=MMT
-Asia/Saigon.daylight.short=ICST
-Asia/Saigon.generic.short=ICT
-Asia/Saigon.standard.short=ICT
-Asia/Sakhalin.daylight.short=SAKST
-Asia/Sakhalin.generic.short=SAKT
-Asia/Sakhalin.standard.short=SAKT
-Asia/Samarkand.daylight.short=UZST
-Asia/Samarkand.generic.short=UZT
-Asia/Samarkand.standard.short=UZT
-Asia/Seoul.daylight.short=KDT
-Asia/Seoul.generic.short=KT
-Asia/Seoul.standard.short=KST
-Asia/Shanghai.daylight.short=CDT
-Asia/Shanghai.generic.short=CT
-Asia/Shanghai.standard.short=CST
-Asia/Singapore.daylight.short=SGST
-Asia/Singapore.generic.short=SGT
-Asia/Singapore.standard.short=SGT
-Asia/Taipei.daylight.short=CDT
-Asia/Taipei.generic.short=CT
-Asia/Taipei.standard.short=CST
-Asia/Tashkent.daylight.short=UZST
-Asia/Tashkent.generic.short=UZT
-Asia/Tashkent.standard.short=UZT
-Asia/Tbilisi.daylight.short=GEST
-Asia/Tbilisi.generic.short=GET
-Asia/Tbilisi.standard.short=GET
-Asia/Tehran.daylight.short=IRDT
-Asia/Tehran.generic.short=IRT
-Asia/Tehran.standard.short=IRST
-Asia/Tel_Aviv.daylight.short=IDT
-Asia/Tel_Aviv.generic.short=IT
-Asia/Tel_Aviv.standard.short=IST
-Asia/Thimbu.daylight.short=BTST
-Asia/Thimbu.generic.short=BTT
-Asia/Thimbu.standard.short=BTT
-Asia/Thimphu.daylight.short=BTST
-Asia/Thimphu.generic.short=BTT
-Asia/Thimphu.standard.short=BTT
-Asia/Tokyo.daylight.short=JDT
-Asia/Tokyo.generic.short=JT
-Asia/Tokyo.standard.short=JST
-Asia/Ujung_Pandang.daylight.short=CIST
-Asia/Ujung_Pandang.generic.short=WITA
-Asia/Ujung_Pandang.standard.short=WITA
-Asia/Ulaanbaatar.daylight.short=ULAST
-Asia/Ulaanbaatar.generic.short=ULAT
-Asia/Ulaanbaatar.standard.short=ULAT
-Asia/Ulan_Bator.daylight.short=ULAST
-Asia/Ulan_Bator.generic.short=ULAT
-Asia/Ulan_Bator.standard.short=ULAT
-Asia/Urumqi.daylight.short=CDT
-Asia/Urumqi.generic.short=CT
-Asia/Urumqi.standard.short=CST
-Asia/Ust-Nera.daylight.short=VLAST
-Asia/Ust-Nera.generic.short=VLAT
-Asia/Ust-Nera.standard.short=VLAT
-Asia/Vientiane.daylight.short=ICST
-Asia/Vientiane.generic.short=ICT
-Asia/Vientiane.standard.short=ICT
-Asia/Vladivostok.daylight.short=VLAST
-Asia/Vladivostok.generic.short=VLAT
-Asia/Vladivostok.standard.short=VLAT
-Asia/Yakutsk.daylight.short=YAKST
-Asia/Yakutsk.generic.short=YAKT
-Asia/Yakutsk.standard.short=YAKT
-Asia/Yekaterinburg.daylight.short=YEKST
-Asia/Yekaterinburg.generic.short=YEKT
-Asia/Yekaterinburg.standard.short=YEKT
-Asia/Yerevan.daylight.short=AMST
-Asia/Yerevan.generic.short=AMT
-Asia/Yerevan.standard.short=AMT
-AST.daylight.short=AKDT
-AST.generic.short=AKT
-AST.standard.short=AKST
-Atlantic/Azores.daylight.short=AZOST
-Atlantic/Azores.generic.short=AZOT
-Atlantic/Azores.standard.short=AZOT
-Atlantic/Bermuda.daylight.short=ADT
-Atlantic/Bermuda.generic.short=AT
-Atlantic/Bermuda.standard.short=AST
-Atlantic/Canary.daylight.short=WEST
-Atlantic/Canary.generic.short=WET
-Atlantic/Canary.standard.short=WET
-Atlantic/Cape_Verde.daylight.short=CVST
-Atlantic/Cape_Verde.generic.short=CVT
-Atlantic/Cape_Verde.standard.short=CVT
-Atlantic/Faeroe.daylight.short=WEST
-Atlantic/Faeroe.generic.short=WET
-Atlantic/Faeroe.standard.short=WET
-Atlantic/Faroe.daylight.short=WEST
-Atlantic/Faroe.generic.short=WET
-Atlantic/Faroe.standard.short=WET
-Atlantic/Jan_Mayen.daylight.short=CEST
-Atlantic/Jan_Mayen.generic.short=CET
-Atlantic/Jan_Mayen.standard.short=CET
-Atlantic/Madeira.daylight.short=WEST
-Atlantic/Madeira.generic.short=WET
-Atlantic/Madeira.standard.short=WET
-Atlantic/Reykjavik.daylight.short=GMT
-Atlantic/Reykjavik.generic.short=GMT
-Atlantic/Reykjavik.standard.short=GMT
-Atlantic/South_Georgia.daylight.short=GDT
-Atlantic/South_Georgia.generic.short=GT
-Atlantic/South_Georgia.standard.short=GST
-Atlantic/Stanley.daylight.short=FKST
-Atlantic/Stanley.generic.short=FKT
-Atlantic/Stanley.standard.short=FKT
-Atlantic/St_Helena.daylight.short=GMT
-Atlantic/St_Helena.generic.short=GMT
-Atlantic/St_Helena.standard.short=GMT
-Australia/ACT.daylight.short=EST
-Australia/ACT.generic.short=ET
-Australia/ACT.standard.short=EST
-Australia/Adelaide.daylight.short=CST
-Australia/Adelaide.generic.short=CT
-Australia/Adelaide.standard.short=CST
-Australia/Brisbane.daylight.short=EST
-Australia/Brisbane.generic.short=ET
-Australia/Brisbane.standard.short=EST
-Australia/Broken_Hill.daylight.short=CST
-Australia/Broken_Hill.generic.short=CT
-Australia/Broken_Hill.standard.short=CST
-Australia/Canberra.daylight.short=EST
-Australia/Canberra.generic.short=ET
-Australia/Canberra.standard.short=EST
-Australia/Currie.daylight.short=EST
-Australia/Currie.generic.short=ET
-Australia/Currie.standard.short=EST
-Australia/Darwin.daylight.short=CST
-Australia/Darwin.generic.short=CT
-Australia/Darwin.standard.short=CST
-Australia/Eucla.daylight.short=CWST
-Australia/Eucla.generic.short=CWT
-Australia/Eucla.standard.short=CWST
-Australia/Hobart.daylight.short=EST
-Australia/Hobart.generic.short=ET
-Australia/Hobart.standard.short=EST
-Australia/LHI.daylight.short=LHST
-Australia/LHI.generic.short=LHT
-Australia/LHI.standard.short=LHST
-Australia/Lindeman.daylight.short=EST
-Australia/Lindeman.generic.short=ET
-Australia/Lindeman.standard.short=EST
-Australia/Lord_Howe.daylight.short=LHST
-Australia/Lord_Howe.generic.short=LHT
-Australia/Lord_Howe.standard.short=LHST
-Australia/Melbourne.daylight.short=EST
-Australia/Melbourne.generic.short=ET
-Australia/Melbourne.standard.short=EST
-Australia/North.daylight.short=CST
-Australia/North.generic.short=CT
-Australia/North.standard.short=CST
-Australia/NSW.daylight.short=EST
-Australia/NSW.generic.short=ET
-Australia/NSW.standard.short=EST
-Australia/Perth.daylight.short=WST
-Australia/Perth.generic.short=WT
-Australia/Perth.standard.short=WST
-Australia/Queensland.daylight.short=EST
-Australia/Queensland.generic.short=ET
-Australia/Queensland.standard.short=EST
-Australia/South.daylight.short=CST
-Australia/South.generic.short=CT
-Australia/South.standard.short=CST
-Australia/Sydney.daylight.short=EST
-Australia/Sydney.generic.short=ET
-Australia/Sydney.standard.short=EST
-Australia/Tasmania.daylight.short=EST
-Australia/Tasmania.generic.short=ET
-Australia/Tasmania.standard.short=EST
-Australia/Victoria.daylight.short=EST
-Australia/Victoria.generic.short=ET
-Australia/Victoria.standard.short=EST
-Australia/West.daylight.short=WST
-Australia/West.generic.short=WT
-Australia/West.standard.short=WST
-Australia/Yancowinna.daylight.short=CST
-Australia/Yancowinna.generic.short=CT
-Australia/Yancowinna.standard.short=CST
-BET.daylight.short=BRST
-BET.generic.short=BRT
-BET.standard.short=BRT
-Brazil/Acre.daylight.short=ACST
-Brazil/Acre.generic.short=ACT
-Brazil/Acre.standard.short=ACT
-Brazil/DeNoronha.daylight.short=FNST
-Brazil/DeNoronha.generic.short=FNT
-Brazil/DeNoronha.standard.short=FNT
-Brazil/East.daylight.short=BRST
-Brazil/East.generic.short=BRT
-Brazil/East.standard.short=BRT
-Brazil/West.daylight.short=AMST
-Brazil/West.generic.short=AMT
-Brazil/West.standard.short=AMT
-BST.daylight.short=BDST
-BST.generic.short=BDT
-BST.standard.short=BDT
-Canada/Atlantic.daylight.short=ADT
-Canada/Atlantic.generic.short=AT
-Canada/Atlantic.standard.short=AST
-Canada/Central.daylight.short=CDT
-Canada/Central.generic.short=CT
-Canada/Central.standard.short=CST
-Canada/Eastern.daylight.short=EDT
-Canada/Eastern.generic.short=ET
-Canada/Eastern.standard.short=EST
-Canada/East-Saskatchewan.daylight.short=CDT
-Canada/East-Saskatchewan.generic.short=CT
-Canada/East-Saskatchewan.standard.short=CST
-Canada/Mountain.daylight.short=MDT
-Canada/Mountain.generic.short=MT
-Canada/Mountain.standard.short=MST
-Canada/Newfoundland.daylight.short=NDT
-Canada/Newfoundland.generic.short=NT
-Canada/Newfoundland.standard.short=NST
-Canada/Pacific.daylight.short=PDT
-Canada/Pacific.generic.short=PT
-Canada/Pacific.standard.short=PST
-Canada/Saskatchewan.daylight.short=CDT
-Canada/Saskatchewan.generic.short=CT
-Canada/Saskatchewan.standard.short=CST
-Canada/Yukon.daylight.short=PDT
-Canada/Yukon.generic.short=PT
-Canada/Yukon.standard.short=PST
-CAT.daylight.short=CAST
-CAT.generic.short=CAT
-CAT.standard.short=CAT
-CET.daylight.short=CEST
-CET.generic.short=CET
-CET.standard.short=CET
-Chile/Continental.daylight.short=CLST
-Chile/Continental.generic.short=CLT
-Chile/Continental.standard.short=CLT
-Chile/EasterIsland.daylight.short=EASST
-Chile/EasterIsland.generic.short=EAST
-Chile/EasterIsland.standard.short=EAST
-CNT.daylight.short=NDT
-CNT.generic.short=NT
-CNT.standard.short=NST
-CST6CDT.daylight.short=CDT
-CST6CDT.generic.short=CT
-CST6CDT.standard.short=CST
-CST.daylight.short=CDT
-CST.generic.short=CT
-CST.standard.short=CST
-CTT.daylight.short=CDT
-CTT.generic.short=CT
-CTT.standard.short=CST
-Cuba.daylight.short=CDT
-Cuba.generic.short=CT
-Cuba.standard.short=CST
-EAT.daylight.short=EAST
-EAT.generic.short=EAT
-EAT.standard.short=EAT
-ECT.daylight.short=CEST
-ECT.generic.short=CET
-ECT.standard.short=CET
-EET.daylight.short=EEST
-EET.generic.short=EET
-EET.standard.short=EET
-Egypt.daylight.short=EEST
-Egypt.generic.short=EET
-Egypt.standard.short=EET
-Eire.daylight.short=IST
-Eire.generic.short=IT
-Eire.standard.short=GMT
-EST5EDT.daylight.short=EDT
-EST5EDT.generic.short=ET
-EST5EDT.standard.short=EST
-EST.daylight.short=EDT
-EST.generic.short=ET
-EST.standard.short=EST
-Etc/Greenwich.daylight.short=GMT
-Etc/Greenwich.generic.short=GMT
-Etc/Greenwich.standard.short=GMT
-Etc/UCT.daylight.short=UTC
-Etc/UCT.generic.short=UTC
-Etc/UCT.standard.short=UTC
-Etc/Universal.daylight.short=UTC
-Etc/Universal.generic.short=UTC
-Etc/Universal.standard.short=UTC
-Etc/UTC.daylight.short=UTC
-Etc/UTC.generic.short=UTC
-Etc/UTC.standard.short=UTC
-Etc/Zulu.daylight.short=UTC
-Etc/Zulu.generic.short=UTC
-Etc/Zulu.standard.short=UTC
-Europe/Amsterdam.daylight.short=CEST
-Europe/Amsterdam.generic.short=CET
-Europe/Amsterdam.standard.short=CET
-Europe/Andorra.daylight.short=CEST
-Europe/Andorra.generic.short=CET
-Europe/Andorra.standard.short=CET
-Europe/Athens.daylight.short=EEST
-Europe/Athens.generic.short=EET
-Europe/Athens.standard.short=EET
-Europe/Belfast.daylight.short=BST
-Europe/Belfast.generic.short=BT
-Europe/Belfast.standard.short=GMT
-Europe/Belgrade.daylight.short=CEST
-Europe/Belgrade.generic.short=CET
-Europe/Belgrade.standard.short=CET
-Europe/Berlin.daylight.short=CEST
-Europe/Berlin.generic.short=CET
-Europe/Berlin.standard.short=CET
-Europe/Bratislava.daylight.short=CEST
-Europe/Bratislava.generic.short=CET
-Europe/Bratislava.standard.short=CET
-Europe/Brussels.daylight.short=CEST
-Europe/Brussels.generic.short=CET
-Europe/Brussels.standard.short=CET
-Europe/Bucharest.daylight.short=EEST
-Europe/Bucharest.generic.short=EET
-Europe/Bucharest.standard.short=EET
-Europe/Budapest.daylight.short=CEST
-Europe/Budapest.generic.short=CET
-Europe/Budapest.standard.short=CET
-Europe/Busingen.daylight.short=CEST
-Europe/Busingen.generic.short=CET
-Europe/Busingen.standard.short=CET
-Europe/Chisinau.daylight.short=EEST
-Europe/Chisinau.generic.short=EET
-Europe/Chisinau.standard.short=EET
-Europe/Copenhagen.daylight.short=CEST
-Europe/Copenhagen.generic.short=CET
-Europe/Copenhagen.standard.short=CET
-Europe/Dublin.daylight.short=IST
-Europe/Dublin.generic.short=IT
-Europe/Dublin.standard.short=GMT
-Europe/Gibraltar.daylight.short=CEST
-Europe/Gibraltar.generic.short=CET
-Europe/Gibraltar.standard.short=CET
-Europe/Guernsey.daylight.short=BST
-Europe/Guernsey.generic.short=BT
-Europe/Guernsey.standard.short=GMT
-Europe/Helsinki.daylight.short=EEST
-Europe/Helsinki.generic.short=EET
-Europe/Helsinki.standard.short=EET
-Europe/Isle_of_Man.daylight.short=BST
-Europe/Isle_of_Man.generic.short=BT
-Europe/Isle_of_Man.standard.short=GMT
-Europe/Istanbul.daylight.short=EEST
-Europe/Istanbul.generic.short=EET
-Europe/Istanbul.standard.short=EET
-Europe/Jersey.daylight.short=BST
-Europe/Jersey.generic.short=BT
-Europe/Jersey.standard.short=GMT
-Europe/Kaliningrad.daylight.short=FEST
-Europe/Kaliningrad.generic.short=FET
-Europe/Kaliningrad.standard.short=FET
-Europe/Kiev.daylight.short=EEST
-Europe/Kiev.generic.short=EET
-Europe/Kiev.standard.short=EET
-Europe/Lisbon.daylight.short=WEST
-Europe/Lisbon.generic.short=WET
-Europe/Lisbon.standard.short=WET
-Europe/Ljubljana.daylight.short=CEST
-Europe/Ljubljana.generic.short=CET
-Europe/Ljubljana.standard.short=CET
-Europe/London.daylight.short=BST
-Europe/London.generic.short=BT
-Europe/London.standard.short=GMT
-Europe/Luxembourg.daylight.short=CEST
-Europe/Luxembourg.generic.short=CET
-Europe/Luxembourg.standard.short=CET
-Europe/Madrid.daylight.short=CEST
-Europe/Madrid.generic.short=CET
-Europe/Madrid.standard.short=CET
-Europe/Malta.daylight.short=CEST
-Europe/Malta.generic.short=CET
-Europe/Malta.standard.short=CET
-Europe/Mariehamn.daylight.short=EEST
-Europe/Mariehamn.generic.short=EET
-Europe/Mariehamn.standard.short=EET
-Europe/Minsk.daylight.short=FEST
-Europe/Minsk.generic.short=FET
-Europe/Minsk.standard.short=FET
-Europe/Monaco.daylight.short=CEST
-Europe/Monaco.generic.short=CET
-Europe/Monaco.standard.short=CET
-Europe/Moscow.daylight.short=MSD
-Europe/Moscow.generic.short=MT
-Europe/Moscow.standard.short=MSK
-Europe/Nicosia.daylight.short=EEST
-Europe/Nicosia.generic.short=EET
-Europe/Nicosia.standard.short=EET
-Europe/Oslo.daylight.short=CEST
-Europe/Oslo.generic.short=CET
-Europe/Oslo.standard.short=CET
-Europe/Paris.daylight.short=CEST
-Europe/Paris.generic.short=CET
-Europe/Paris.standard.short=CET
-Europe/Podgorica.daylight.short=CEST
-Europe/Podgorica.generic.short=CET
-Europe/Podgorica.standard.short=CET
-Europe/Prague.daylight.short=CEST
-Europe/Prague.generic.short=CET
-Europe/Prague.standard.short=CET
-Europe/Riga.daylight.short=EEST
-Europe/Riga.generic.short=EET
-Europe/Riga.standard.short=EET
-Europe/Rome.daylight.short=CEST
-Europe/Rome.generic.short=CET
-Europe/Rome.standard.short=CET
-Europe/Samara.daylight.short=SAMST
-Europe/Samara.generic.short=SAMT
-Europe/Samara.standard.short=SAMT
-Europe/San_Marino.daylight.short=CEST
-Europe/San_Marino.generic.short=CET
-Europe/San_Marino.standard.short=CET
-Europe/Sarajevo.daylight.short=CEST
-Europe/Sarajevo.generic.short=CET
-Europe/Sarajevo.standard.short=CET
-Europe/Simferopol.daylight.short=EEST
-Europe/Simferopol.generic.short=EET
-Europe/Simferopol.standard.short=EET
-Europe/Skopje.daylight.short=CEST
-Europe/Skopje.generic.short=CET
-Europe/Skopje.standard.short=CET
-Europe/Sofia.daylight.short=EEST
-Europe/Sofia.generic.short=EET
-Europe/Sofia.standard.short=EET
-Europe/Stockholm.daylight.short=CEST
-Europe/Stockholm.generic.short=CET
-Europe/Stockholm.standard.short=CET
-Europe/Tallinn.daylight.short=EEST
-Europe/Tallinn.generic.short=EET
-Europe/Tallinn.standard.short=EET
-Europe/Tirane.daylight.short=CEST
-Europe/Tirane.generic.short=CET
-Europe/Tirane.standard.short=CET
-Europe/Tiraspol.daylight.short=EEST
-Europe/Tiraspol.generic.short=EET
-Europe/Tiraspol.standard.short=EET
-Europe/Uzhgorod.daylight.short=EEST
-Europe/Uzhgorod.generic.short=EET
-Europe/Uzhgorod.standard.short=EET
-Europe/Vaduz.daylight.short=CEST
-Europe/Vaduz.generic.short=CET
-Europe/Vaduz.standard.short=CET
-Europe/Vatican.daylight.short=CEST
-Europe/Vatican.generic.short=CET
-Europe/Vatican.standard.short=CET
-Europe/Vienna.daylight.short=CEST
-Europe/Vienna.generic.short=CET
-Europe/Vienna.standard.short=CET
-Europe/Vilnius.daylight.short=EEST
-Europe/Vilnius.generic.short=EET
-Europe/Vilnius.standard.short=EET
-Europe/Volgograd.daylight.short=VOLST
-Europe/Volgograd.generic.short=VOLT
-Europe/Volgograd.standard.short=VOLT
-Europe/Warsaw.daylight.short=CEST
-Europe/Warsaw.generic.short=CET
-Europe/Warsaw.standard.short=CET
-Europe/Zagreb.daylight.short=CEST
-Europe/Zagreb.generic.short=CET
-Europe/Zagreb.standard.short=CET
-Europe/Zaporozhye.daylight.short=EEST
-Europe/Zaporozhye.generic.short=EET
-Europe/Zaporozhye.standard.short=EET
-Europe/Zurich.daylight.short=CEST
-Europe/Zurich.generic.short=CET
-Europe/Zurich.standard.short=CET
-GB.daylight.short=BST
-GB-Eire.daylight.short=BST
-GB-Eire.generic.short=BT
-GB-Eire.standard.short=GMT
-GB.generic.short=BT
-GB.standard.short=GMT
-GMT.daylight.short=GMT
-GMT.generic.short=GMT
-GMT.standard.short=GMT
-Greenwich.daylight.short=GMT
-Greenwich.generic.short=GMT
-Greenwich.standard.short=GMT
-Hongkong.daylight.short=HKST
-Hongkong.generic.short=HKT
-Hongkong.standard.short=HKT
-HST.daylight.short=HDT
-HST.generic.short=HT
-HST.standard.short=HST
-Iceland.daylight.short=GMT
-Iceland.generic.short=GMT
-Iceland.standard.short=GMT
-IET.daylight.short=EDT
-IET.generic.short=ET
-IET.standard.short=EST
-Indian/Antananarivo.daylight.short=EAST
-Indian/Antananarivo.generic.short=EAT
-Indian/Antananarivo.standard.short=EAT
-Indian/Chagos.daylight.short=IOST
-Indian/Chagos.generic.short=IOT
-Indian/Chagos.standard.short=IOT
-Indian/Christmas.daylight.short=CXST
-Indian/Christmas.generic.short=CIT
-Indian/Christmas.standard.short=CXT
-Indian/Cocos.daylight.short=CCST
-Indian/Cocos.generic.short=CCT
-Indian/Cocos.standard.short=CCT
-Indian/Comoro.daylight.short=EAST
-Indian/Comoro.generic.short=EAT
-Indian/Comoro.standard.short=EAT
-Indian/Kerguelen.daylight.short=TFST
-Indian/Kerguelen.generic.short=TFT
-Indian/Kerguelen.standard.short=TFT
-Indian/Mahe.daylight.short=SCST
-Indian/Mahe.generic.short=SCT
-Indian/Mahe.standard.short=SCT
-Indian/Maldives.daylight.short=MVST
-Indian/Maldives.generic.short=MVT
-Indian/Maldives.standard.short=MVT
-Indian/Mauritius.daylight.short=MUST
-Indian/Mauritius.generic.short=MUT
-Indian/Mauritius.standard.short=MUT
-Indian/Mayotte.daylight.short=EAST
-Indian/Mayotte.generic.short=EAT
-Indian/Mayotte.standard.short=EAT
-Indian/Reunion.daylight.short=REST
-Indian/Reunion.generic.short=RET
-Indian/Reunion.standard.short=RET
-Iran.daylight.short=IRDT
-Iran.generic.short=IRT
-Iran.standard.short=IRST
-Israel.daylight.short=IDT
-Israel.generic.short=IT
-Israel.standard.short=IST
-IST.daylight.short=IDT
-IST.generic.short=IT
-IST.standard.short=IST
-Jamaica.daylight.short=EDT
-Jamaica.generic.short=ET
-Jamaica.standard.short=EST
-Japan.daylight.short=JDT
-Japan.generic.short=JT
-Japan.standard.short=JST
-JST.daylight.short=JDT
-JST.generic.short=JT
-JST.standard.short=JST
-Kwajalein.daylight.short=MHST
-Kwajalein.generic.short=MHT
-Kwajalein.standard.short=MHT
-Libya.daylight.short=EEST
-Libya.generic.short=EET
-Libya.standard.short=EET
-MET.daylight.short=MEST
-MET.generic.short=MET
-MET.standard.short=MET
-Mexico/BajaNorte.daylight.short=PDT
-Mexico/BajaNorte.generic.short=PT
-Mexico/BajaNorte.standard.short=PST
-Mexico/BajaSur.daylight.short=MDT
-Mexico/BajaSur.generic.short=MT
-Mexico/BajaSur.standard.short=MST
-Mexico/General.daylight.short=CDT
-Mexico/General.generic.short=CT
-Mexico/General.standard.short=CST
-MIT.daylight.short=WSDT
-MIT.generic.short=WST
-MIT.standard.short=WST
-MST7MDT.daylight.short=MDT
-MST7MDT.generic.short=MT
-MST7MDT.standard.short=MST
-MST.daylight.short=MDT
-MST.generic.short=MT
-MST.standard.short=MST
-Navajo.daylight.short=MDT
-Navajo.generic.short=MT
-Navajo.standard.short=MST
-NET.daylight.short=AMST
-NET.generic.short=AMT
-NET.standard.short=AMT
-NST.daylight.short=NZDT
-NST.generic.short=NZT
-NST.standard.short=NZST
-NZ-CHAT.daylight.short=CHADT
-NZ-CHAT.generic.short=CHAT
-NZ-CHAT.standard.short=CHAST
-NZ.daylight.short=NZDT
-NZ.generic.short=NZT
-NZ.standard.short=NZST
-Pacific/Apia.daylight.short=WSDT
-Pacific/Apia.generic.short=WST
-Pacific/Apia.standard.short=WST
-Pacific/Auckland.daylight.short=NZDT
-Pacific/Auckland.generic.short=NZT
-Pacific/Auckland.standard.short=NZST
-Pacific/Chatham.daylight.short=CHADT
-Pacific/Chatham.generic.short=CHAT
-Pacific/Chatham.standard.short=CHAST
-Pacific/Chuuk.daylight.short=CHUST
-Pacific/Chuuk.generic.short=CHUT
-Pacific/Chuuk.standard.short=CHUT
-Pacific/Easter.daylight.short=EASST
-Pacific/Easter.generic.short=EAST
-Pacific/Easter.standard.short=EAST
-Pacific/Efate.daylight.short=VUST
-Pacific/Efate.generic.short=VUT
-Pacific/Efate.standard.short=VUT
-Pacific/Enderbury.daylight.short=PHOST
-Pacific/Enderbury.generic.short=PHOT
-Pacific/Enderbury.standard.short=PHOT
-Pacific/Fakaofo.daylight.short=TKST
-Pacific/Fakaofo.generic.short=TKT
-Pacific/Fakaofo.standard.short=TKT
-Pacific/Fiji.daylight.short=FJST
-Pacific/Fiji.generic.short=FJT
-Pacific/Fiji.standard.short=FJT
-Pacific/Funafuti.daylight.short=TVST
-Pacific/Funafuti.generic.short=TVT
-Pacific/Funafuti.standard.short=TVT
-Pacific/Galapagos.daylight.short=GALST
-Pacific/Galapagos.generic.short=GALT
-Pacific/Galapagos.standard.short=GALT
-Pacific/Gambier.daylight.short=GAMST
-Pacific/Gambier.generic.short=GAMT
-Pacific/Gambier.standard.short=GAMT
-Pacific/Guadalcanal.daylight.short=SBST
-Pacific/Guadalcanal.generic.short=SBT
-Pacific/Guadalcanal.standard.short=SBT
-Pacific/Guam.daylight.short=ChDT
-Pacific/Guam.generic.short=ChT
-Pacific/Guam.standard.short=ChST
-Pacific/Honolulu.daylight.short=HDT
-Pacific/Honolulu.generic.short=HT
-Pacific/Honolulu.standard.short=HST
-Pacific/Johnston.daylight.short=HDT
-Pacific/Johnston.generic.short=HT
-Pacific/Johnston.standard.short=HST
-Pacific/Kiritimati.daylight.short=LINST
-Pacific/Kiritimati.generic.short=LINT
-Pacific/Kiritimati.standard.short=LINT
-Pacific/Kosrae.daylight.short=KOSST
-Pacific/Kosrae.generic.short=KOST
-Pacific/Kosrae.standard.short=KOST
-Pacific/Kwajalein.daylight.short=MHST
-Pacific/Kwajalein.generic.short=MHT
-Pacific/Kwajalein.standard.short=MHT
-Pacific/Majuro.daylight.short=MHST
-Pacific/Majuro.generic.short=MHT
-Pacific/Majuro.standard.short=MHT
-Pacific/Marquesas.daylight.short=MARST
-Pacific/Marquesas.generic.short=MART
-Pacific/Marquesas.standard.short=MART
-Pacific/Midway.daylight.short=SDT
-Pacific/Midway.generic.short=ST
-Pacific/Midway.standard.short=SST
-Pacific/Nauru.daylight.short=NRST
-Pacific/Nauru.generic.short=NRT
-Pacific/Nauru.standard.short=NRT
-Pacific/Niue.daylight.short=NUST
-Pacific/Niue.generic.short=NUT
-Pacific/Niue.standard.short=NUT
-Pacific/Norfolk.daylight.short=NFST
-Pacific/Norfolk.generic.short=NFT
-Pacific/Norfolk.standard.short=NFT
-Pacific/Noumea.daylight.short=NCST
-Pacific/Noumea.generic.short=NCT
-Pacific/Noumea.standard.short=NCT
-Pacific/Pago_Pago.daylight.short=SDT
-Pacific/Pago_Pago.generic.short=ST
-Pacific/Pago_Pago.standard.short=SST
-Pacific/Palau.daylight.short=PWST
-Pacific/Palau.generic.short=PWT
-Pacific/Palau.standard.short=PWT
-Pacific/Pitcairn.daylight.short=PDT
-Pacific/Pitcairn.generic.short=PT
-Pacific/Pitcairn.standard.short=PST
-Pacific/Pohnpei.daylight.short=PONST
-Pacific/Pohnpei.generic.short=PONT
-Pacific/Pohnpei.standard.short=PONT
-Pacific/Ponape.daylight.short=PONST
-Pacific/Ponape.generic.short=PONT
-Pacific/Ponape.standard.short=PONT
-Pacific/Port_Moresby.daylight.short=PGST
-Pacific/Port_Moresby.generic.short=PGT
-Pacific/Port_Moresby.standard.short=PGT
-Pacific/Rarotonga.daylight.short=CKHST
-Pacific/Rarotonga.generic.short=CKT
-Pacific/Rarotonga.standard.short=CKT
-Pacific/Saipan.daylight.short=ChDT
-Pacific/Saipan.generic.short=ChT
-Pacific/Saipan.standard.short=ChST
-Pacific/Samoa.daylight.short=SDT
-Pacific/Samoa.generic.short=ST
-Pacific/Samoa.standard.short=SST
-Pacific/Tahiti.daylight.short=TAHST
-Pacific/Tahiti.generic.short=TAHT
-Pacific/Tahiti.standard.short=TAHT
-Pacific/Tarawa.daylight.short=GILST
-Pacific/Tarawa.generic.short=GILT
-Pacific/Tarawa.standard.short=GILT
-Pacific/Tongatapu.daylight.short=TOST
-Pacific/Tongatapu.generic.short=TOT
-Pacific/Tongatapu.standard.short=TOT
-Pacific/Truk.daylight.short=CHUST
-Pacific/Truk.generic.short=CHUT
-Pacific/Truk.standard.short=CHUT
-Pacific/Wake.daylight.short=WAKST
-Pacific/Wake.generic.short=WAKT
-Pacific/Wake.standard.short=WAKT
-Pacific/Wallis.daylight.short=WFST
-Pacific/Wallis.generic.short=WFT
-Pacific/Wallis.standard.short=WFT
-Pacific/Yap.daylight.short=CHUST
-Pacific/Yap.generic.short=CHUT
-Pacific/Yap.standard.short=CHUT
-PLT.daylight.short=PKST
-PLT.generic.short=PKT
-PLT.standard.short=PKT
-PNT.daylight.short=MDT
-PNT.generic.short=MT
-PNT.standard.short=MST
-Poland.daylight.short=CEST
-Poland.generic.short=CET
-Poland.standard.short=CET
-Portugal.daylight.short=WEST
-Portugal.generic.short=WET
-Portugal.standard.short=WET
-PRC.daylight.short=CDT
-PRC.generic.short=CT
-PRC.standard.short=CST
-PRT.daylight.short=ADT
-PRT.generic.short=AT
-PRT.standard.short=AST
-PST8PDT.daylight.short=PDT
-PST8PDT.generic.short=PT
-PST8PDT.standard.short=PST
-PST.daylight.short=PDT
-PST.generic.short=PT
-PST.standard.short=PST
-ROK.daylight.short=KDT
-ROK.generic.short=KT
-ROK.standard.short=KST
-Singapore.daylight.short=SGST
-Singapore.generic.short=SGT
-Singapore.standard.short=SGT
-SST.daylight.short=SBST
-SST.generic.short=SBT
-SST.standard.short=SBT
-SystemV/AST4ADT.daylight.short=ADT
-SystemV/AST4ADT.generic.short=AT
-SystemV/AST4ADT.standard.short=AST
-SystemV/AST4.daylight.short=ADT
-SystemV/AST4.generic.short=AT
-SystemV/AST4.standard.short=AST
-SystemV/CST6CDT.daylight.short=CDT
-SystemV/CST6CDT.generic.short=CT
-SystemV/CST6CDT.standard.short=CST
-SystemV/CST6.daylight.short=CDT
-SystemV/CST6.generic.short=CT
-SystemV/CST6.standard.short=CST
-SystemV/EST5.daylight.short=EDT
-SystemV/EST5EDT.daylight.short=EDT
-SystemV/EST5EDT.generic.short=ET
-SystemV/EST5EDT.standard.short=EST
-SystemV/EST5.generic.short=ET
-SystemV/EST5.standard.short=EST
-SystemV/HST10.daylight.short=HDT
-SystemV/HST10.generic.short=HT
-SystemV/HST10.standard.short=HST
-SystemV/MST7.daylight.short=MDT
-SystemV/MST7.generic.short=MT
-SystemV/MST7MDT.daylight.short=MDT
-SystemV/MST7MDT.generic.short=MT
-SystemV/MST7MDT.standard.short=MST
-SystemV/MST7.standard.short=MST
-SystemV/PST8.daylight.short=PDT
-SystemV/PST8.generic.short=PT
-SystemV/PST8PDT.daylight.short=PDT
-SystemV/PST8PDT.generic.short=PT
-SystemV/PST8PDT.standard.short=PST
-SystemV/PST8.standard.short=PST
-SystemV/YST9.daylight.short=AKDT
-SystemV/YST9.generic.short=AKT
-SystemV/YST9.standard.short=AKST
-SystemV/YST9YDT.daylight.short=AKDT
-SystemV/YST9YDT.generic.short=AKT
-SystemV/YST9YDT.standard.short=AKST
-Turkey.daylight.short=EEST
-Turkey.generic.short=EET
-Turkey.standard.short=EET
-UCT.daylight.short=UTC
-UCT.generic.short=UTC
-UCT.standard.short=UTC
-Universal.daylight.short=UTC
-Universal.generic.short=UTC
-Universal.standard.short=UTC
-US/Alaska.daylight.short=AKDT
-US/Alaska.generic.short=AKT
-US/Alaska.standard.short=AKST
-US/Aleutian.daylight.short=HADT
-US/Aleutian.generic.short=HAT
-US/Aleutian.standard.short=HAST
-US/Arizona.daylight.short=MDT
-US/Arizona.generic.short=MT
-US/Arizona.standard.short=MST
-US/Central.daylight.short=CDT
-US/Central.generic.short=CT
-US/Central.standard.short=CST
-US/Eastern.daylight.short=EDT
-US/Eastern.generic.short=ET
-US/Eastern.standard.short=EST
-US/East-Indiana.daylight.short=EDT
-US/East-Indiana.generic.short=ET
-US/East-Indiana.standard.short=EST
-US/Hawaii.daylight.short=HDT
-US/Hawaii.generic.short=HT
-US/Hawaii.standard.short=HST
-US/Indiana-Starke.daylight.short=CDT
-US/Indiana-Starke.generic.short=CT
-US/Indiana-Starke.standard.short=CST
-US/Michigan.daylight.short=EDT
-US/Michigan.generic.short=ET
-US/Michigan.standard.short=EST
-US/Mountain.daylight.short=MDT
-US/Mountain.generic.short=MT
-US/Mountain.standard.short=MST
-US/Pacific.daylight.short=PDT
-US/Pacific.generic.short=PT
-US/Pacific-New.daylight.short=PDT
-US/Pacific-New.generic.short=PT
-US/Pacific-New.standard.short=PST
-US/Pacific.standard.short=PST
-US/Samoa.daylight.short=SDT
-US/Samoa.generic.short=ST
-US/Samoa.standard.short=SST
-UTC.daylight.short=UTC
-UTC.generic.short=UTC
-UTC.standard.short=UTC
-VST.daylight.short=ICST
-VST.generic.short=ICT
-VST.standard.short=ICT
-WET.daylight.short=WEST
-WET.generic.short=WET
-WET.standard.short=WET
-W-SU.daylight.short=MSD
-W-SU.generic.short=MT
-W-SU.standard.short=MSK
-Zulu.daylight.short=UTC
-Zulu.generic.short=UTC
-Zulu.standard.short=UTC
diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_zh_TW.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_zh_TW.properties
deleted file mode 100644
index a9b77a6..0000000
--- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_zh_TW.properties
+++ /dev/null
@@ -1,651 +0,0 @@
-ACT.daylight.long=\u4E2D\u90E8\u590F\u4EE4\u6642\u9593 (\u5317\u90E8\u5404\u5730\u5340)
-ACT.generic.long=\u6FB3\u5927\u5229\u4E9E\u4E2D\u90E8\u6642\u9593 (\u5317\u65B9\u5340\u57DF)
-ACT.standard.long=\u4E2D\u90E8\u6A19\u6E96\u6642\u9593 (\u5317\u90E8\u5404\u5730\u5340)
-AET.daylight.long=\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF)
-AET.generic.long=\u6771\u90E8\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF)
-AET.standard.long=\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF)
-AGT.generic.long=\u963F\u6839\u5EF7\u6642\u9593
-ART.generic.long=\u6771\u6B50\u6642\u9593
-AST.generic.long=\u963F\u62C9\u65AF\u52A0\u6642\u9593
-Africa/Abidjan.generic.long=\u683C\u6797\u5A01\u6CBB\u6642\u9593
-Africa/Accra.generic.long=\u8FE6\u7D0D\u6642\u9593
-Africa/Addis_Ababa.generic.long=\u6771\u975E\u6642\u9593
-Africa/Algiers.generic.long=\u4E2D\u6B50\u6642\u9593
-Africa/Asmara.generic.long=\u6771\u975E\u6642\u9593
-Africa/Asmera.generic.long=\u6771\u975E\u6642\u9593
-Africa/Bamako.generic.long=\u683C\u6797\u5A01\u6CBB\u6642\u9593
-Africa/Bangui.generic.long=\u897F\u975E\u6642\u9593
-Africa/Banjul.generic.long=\u683C\u6797\u5A01\u6CBB\u6642\u9593
-Africa/Bissau.generic.long=\u683C\u6797\u5A01\u6CBB\u6642\u9593
-Africa/Blantyre.generic.long=\u4E2D\u975E\u6642\u9593
-Africa/Brazzaville.generic.long=\u897F\u975E\u6642\u9593
-Africa/Bujumbura.generic.long=\u4E2D\u975E\u6642\u9593
-Africa/Cairo.generic.long=\u6771\u6B50\u6642\u9593
-Africa/Casablanca.generic.long=\u897F\u6B50\u6642\u9593
-Africa/Ceuta.generic.long=\u4E2D\u6B50\u6642\u9593
-Africa/Conakry.generic.long=\u683C\u6797\u5A01\u6CBB\u6642\u9593
-Africa/Dakar.generic.long=\u683C\u6797\u5A01\u6CBB\u6642\u9593
-Africa/Dar_es_Salaam.generic.long=\u6771\u975E\u6642\u9593
-Africa/Djibouti.generic.long=\u6771\u975E\u6642\u9593
-Africa/Douala.generic.long=\u897F\u975E\u6642\u9593
-Africa/El_Aaiun.generic.long=\u897F\u6B50\u6642\u9593
-Africa/Freetown.generic.long=\u7345\u5B50\u5C71\u6642\u9593
-Africa/Gaborone.generic.long=\u4E2D\u975E\u6642\u9593
-Africa/Harare.generic.long=\u4E2D\u975E\u6642\u9593
-Africa/Johannesburg.generic.long=\u5357\u975E\u6642\u9593
-Africa/Juba.generic.long=\u6771\u975E\u6642\u9593
-Africa/Kampala.generic.long=\u6771\u975E\u6642\u9593
-Africa/Khartoum.generic.long=\u6771\u975E\u6642\u9593
-Africa/Kigali.generic.long=\u4E2D\u975E\u6642\u9593
-Africa/Kinshasa.generic.long=\u897F\u975E\u6642\u9593
-Africa/Lagos.generic.long=\u897F\u975E\u6642\u9593
-Africa/Libreville.generic.long=\u897F\u975E\u6642\u9593
-Africa/Lome.generic.long=\u683C\u6797\u5A01\u6CBB\u6642\u9593
-Africa/Luanda.generic.long=\u897F\u975E\u6642\u9593
-Africa/Lubumbashi.generic.long=\u4E2D\u975E\u6642\u9593
-Africa/Lusaka.generic.long=\u4E2D\u975E\u6642\u9593
-Africa/Malabo.generic.long=\u897F\u975E\u6642\u9593
-Africa/Maputo.generic.long=\u4E2D\u975E\u6642\u9593
-Africa/Maseru.generic.long=\u5357\u975E\u6642\u9593
-Africa/Mbabane.generic.long=\u5357\u975E\u6642\u9593
-Africa/Mogadishu.generic.long=\u6771\u975E\u6642\u9593
-Africa/Monrovia.generic.long=\u683C\u6797\u5A01\u6CBB\u6642\u9593
-Africa/Nairobi.generic.long=\u6771\u975E\u6642\u9593
-Africa/Ndjamena.generic.long=\u897F\u975E\u6642\u9593
-Africa/Niamey.generic.long=\u897F\u975E\u6642\u9593
-Africa/Nouakchott.generic.long=\u683C\u6797\u5A01\u6CBB\u6642\u9593
-Africa/Ouagadougou.generic.long=\u683C\u6797\u5A01\u6CBB\u6642\u9593
-Africa/Porto-Novo.generic.long=\u897F\u975E\u6642\u9593
-Africa/Sao_Tome.generic.long=\u683C\u6797\u5A01\u6CBB\u6642\u9593
-Africa/Timbuktu.generic.long=\u683C\u6797\u5A01\u6CBB\u6642\u9593
-Africa/Tripoli.generic.long=\u6771\u6b50\u6642\u9593
-Africa/Tunis.generic.long=\u4E2D\u6B50\u6642\u9593
-Africa/Windhoek.generic.long=\u897F\u975E\u6642\u9593
-America/Adak.generic.long=\u590F\u5A01\u5937-\u963F\u7559\u7533\u6642\u9593
-America/Anchorage.generic.long=\u963F\u62C9\u65AF\u52A0\u6642\u9593
-America/Anguilla.generic.long=\u5927\u897F\u6D0B\u6642\u9593
-America/Antigua.generic.long=\u5927\u897F\u6D0B\u6642\u9593
-America/Araguaina.generic.long=\u5DF4\u897F\u5229\u4E9E\u6642\u9593
-America/Argentina/Buenos_Aires.generic.long=\u963F\u6839\u5EF7\u6642\u9593
-America/Argentina/Catamarca.generic.long=\u963F\u6839\u5EF7\u6642\u9593
-America/Argentina/ComodRivadavia.generic.long=\u963F\u6839\u5EF7\u6642\u9593
-America/Argentina/Cordoba.generic.long=\u963F\u6839\u5EF7\u6642\u9593
-America/Argentina/Jujuy.generic.long=\u963F\u6839\u5EF7\u6642\u9593
-America/Argentina/La_Rioja.generic.long=\u963F\u6839\u5EF7\u6642\u9593
-America/Argentina/Mendoza.generic.long=\u963F\u6839\u5EF7\u6642\u9593
-America/Argentina/Rio_Gallegos.generic.long=\u963F\u6839\u5EF7\u6642\u9593
-America/Argentina/Salta.generic.long=\u963F\u6839\u5EF7\u6642\u9593
-America/Argentina/San_Juan.generic.long=\u963F\u6839\u5EF7\u6642\u9593
-America/Argentina/San_Luis.generic.long=\u963f\u6839\u5ef7\u6642\u9593
-America/Argentina/Tucuman.generic.long=\u963F\u6839\u5EF7\u6642\u9593
-America/Argentina/Ushuaia.generic.long=\u963F\u6839\u5EF7\u6642\u9593
-America/Aruba.generic.long=\u5927\u897F\u6D0B\u6642\u9593
-America/Asuncion.generic.long=\u5DF4\u62C9\u572D\u6642\u9593
-America/Atikokan.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593
-America/Atka.generic.long=\u590F\u5A01\u5937-\u963F\u7559\u7533\u6642\u9593
-America/Bahia.generic.long=\u5DF4\u897F\u5229\u4E9E\u6642\u9593
-America/Bahia_Banderas.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593
-America/Barbados.generic.long=\u5927\u897F\u6D0B\u6642\u9593
-America/Belem.generic.long=\u5DF4\u897F\u5229\u4E9E\u6642\u9593
-America/Belize.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593
-America/Blanc-Sablon.generic.long=\u5927\u897F\u6D0B\u6642\u9593
-America/Boa_Vista.generic.long=\u4E9E\u99AC\u905C\u6642\u9593
-America/Bogota.generic.long=\u54E5\u502B\u6BD4\u4E9E\u6642\u9593
-America/Boise.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593
-America/Buenos_Aires.generic.long=\u963F\u6839\u5EF7\u6642\u9593
-America/Cambridge_Bay.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593
-America/Campo_Grande.generic.long=\u4E9E\u99AC\u905C\u6642\u9593
-America/Cancun.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593
-America/Caracas.generic.long=\u59D4\u5167\u745E\u62C9\u6642\u9593
-America/Catamarca.generic.long=\u963F\u6839\u5EF7\u6642\u9593
-America/Cayenne.generic.long=\u6CD5\u5C6C\u572D\u4E9E\u90A3\u6642\u9593
-America/Cayman.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593
-America/Chicago.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593
-America/Chihuahua.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593
-America/Coral_Harbour.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593
-America/Cordoba.generic.long=\u963F\u6839\u5EF7\u6642\u9593
-America/Costa_Rica.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593
-America/Creston.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593
-America/Cuiaba.generic.long=\u4E9E\u99AC\u905C\u6642\u9593
-America/Curacao.generic.long=\u5927\u897F\u6D0B\u6642\u9593
-America/Danmarkshavn.generic.long=\u683C\u6797\u5A01\u6CBB\u6642\u9593
-America/Dawson.generic.long=\u592A\u5E73\u6D0B\u6642\u9593
-America/Dawson_Creek.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593
-America/Denver.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593
-America/Detroit.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593
-America/Dominica.generic.long=\u5927\u897F\u6D0B\u6642\u9593
-America/Edmonton.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593
-America/Eirunepe.generic.long=Acre \u6642\u9593
-America/El_Salvador.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593
-America/Ensenada.generic.long=\u592A\u5E73\u6D0B\u6642\u9593
-America/Fort_Wayne.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593
-America/Fortaleza.generic.long=\u5DF4\u897F\u5229\u4E9E\u6642\u9593
-America/Glace_Bay.generic.long=\u5927\u897F\u6D0B\u6642\u9593
-America/Godthab.generic.long=\u897F\u683C\u9675\u862D\u6642\u9593
-America/Goose_Bay.generic.long=\u5927\u897F\u6D0B\u6642\u9593
-America/Grand_Turk.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593
-America/Grenada.generic.long=\u5927\u897F\u6D0B\u6642\u9593
-America/Guadeloupe.generic.long=\u5927\u897F\u6D0B\u6642\u9593
-America/Guatemala.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593
-America/Guayaquil.generic.long=\u5384\u74DC\u591A\u723E\u6642\u9593
-America/Guyana.generic.long=\u84CB\u4E9E\u90A3\u6642\u9593
-America/Halifax.generic.long=\u5927\u897F\u6D0B\u6642\u9593
-America/Havana.generic.long=\u53E4\u5DF4\u6642\u9593
-America/Hermosillo.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593
-America/Indiana/Indianapolis.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593
-America/Indiana/Knox.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593
-America/Indiana/Marengo.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593
-America/Indiana/Petersburg.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593
-America/Indiana/Tell_City.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593
-America/Indiana/Vevay.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593
-America/Indiana/Vincennes.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593
-America/Indiana/Winamac.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593
-America/Indianapolis.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593
-America/Inuvik.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593
-America/Iqaluit.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593
-America/Jamaica.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593
-America/Jujuy.generic.long=\u963F\u6839\u5EF7\u6642\u9593
-America/Juneau.generic.long=\u963F\u62C9\u65AF\u52A0\u6642\u9593
-America/Kentucky/Louisville.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593
-America/Kentucky/Monticello.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593
-America/Knox_IN.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593
-America/Kralendijk.generic.long=\u5927\u897F\u6D0B\u6642\u9593
-America/La_Paz.generic.long=\u73BB\u5229\u7DAD\u4E9E\u6642\u9593
-America/Lima.generic.long=\u7955\u9B6F\u6642\u9593
-America/Los_Angeles.generic.long=\u592A\u5E73\u6D0B\u6642\u9593
-America/Louisville.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593
-America/Lower_Princes.generic.long=\u5927\u897F\u6D0B\u6642\u9593
-America/Maceio.generic.long=\u5DF4\u897F\u5229\u4E9E\u6642\u9593
-America/Managua.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593
-America/Manaus.generic.long=\u4E9E\u99AC\u905C\u6642\u9593
-America/Marigot.generic.long=\u5927\u897F\u6D0B\u6642\u9593
-America/Martinique.generic.long=\u5927\u897F\u6D0B\u6642\u9593
-America/Matamoros.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593
-America/Mazatlan.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593
-America/Mendoza.generic.long=\u963F\u6839\u5EF7\u6642\u9593
-America/Menominee.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593
-America/Merida.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593
-America/Metlakatla.daylight.long=\u6885\u7279\u62C9\u5361\u7279\u62C9\u65E5\u5149\u7BC0\u7D04\u6642\u9593
-America/Metlakatla.generic.long=\u6885\u7279\u62C9\u5361\u7279\u62C9\u6642\u9593
-America/Metlakatla.standard.long=\u6885\u7279\u62C9\u5361\u7279\u62C9\u6A19\u6E96\u6642\u9593
-America/Mexico_City.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593
-America/Miquelon.generic.long=\u8056\u5F7C\u5FB7\u8207\u5BC6\u555F\u5D19\u6642\u9593
-America/Moncton.generic.long=\u5927\u897F\u6D0B\u6642\u9593
-America/Monterrey.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593
-America/Montevideo.generic.long=\u70CF\u62C9\u572D\u6642\u9593
-America/Montreal.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593
-America/Montserrat.generic.long=\u5927\u897F\u6D0B\u6642\u9593
-America/Nassau.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593
-America/New_York.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593
-America/Nipigon.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593
-America/Nome.generic.long=\u963F\u62C9\u65AF\u52A0\u6642\u9593
-America/Noronha.generic.long=\u8CBB\u723E\u5357\u591A-\u8FEA\u8AFE\u7F85\u5C3C\u4E9E\u6642\u9593
-America/North_Dakota/Beulah.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593
-America/North_Dakota/Center.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593
-America/North_Dakota/New_Salem.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593
-America/Ojinaga.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593
-America/Panama.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593
-America/Pangnirtung.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593
-America/Paramaribo.generic.long=\u8607\u5229\u5357\u6642\u9593
-America/Phoenix.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593
-America/Port-au-Prince.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593
-America/Port_of_Spain.generic.long=\u5927\u897F\u6D0B\u6642\u9593
-America/Porto_Acre.generic.long=Acre \u6642\u9593
-America/Porto_Velho.generic.long=\u4E9E\u99AC\u905C\u6642\u9593
-America/Puerto_Rico.generic.long=\u5927\u897F\u6D0B\u6642\u9593
-America/Rainy_River.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593
-America/Rankin_Inlet.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593
-America/Recife.generic.long=\u5DF4\u897F\u5229\u4E9E\u6642\u9593
-America/Regina.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593
-America/Resolute.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593
-America/Rio_Branco.generic.long=Acre \u6642\u9593
-America/Rosario.generic.long=\u963F\u6839\u5EF7\u6642\u9593
-America/Santa_Isabel.generic.long=\u592A\u5E73\u6D0B\u6642\u9593
-America/Santarem.generic.long=\u5DF4\u897F\u5229\u4E9E\u6642\u9593
-America/Santiago.generic.long=\u667A\u5229\u6642\u9593
-America/Santo_Domingo.generic.long=\u5927\u897F\u6D0B\u6642\u9593
-America/Sao_Paulo.generic.long=\u5DF4\u897F\u5229\u4E9E\u6642\u9593
-America/Scoresbysund.generic.long=\u6771\u683C\u9675\u862D\u6642\u9593
-America/Shiprock.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593
-America/Sitka.generic.long=\u963F\u62C9\u65AF\u52A0\u6642\u9593
-America/St_Barthelemy.generic.long=\u5927\u897F\u6D0B\u6642\u9593
-America/St_Johns.generic.long=\u7D10\u82AC\u862D\u6642\u9593
-America/St_Kitts.generic.long=\u5927\u897F\u6D0B\u6642\u9593
-America/St_Lucia.generic.long=\u5927\u897F\u6D0B\u6642\u9593
-America/St_Thomas.generic.long=\u5927\u897F\u6D0B\u6642\u9593
-America/St_Vincent.generic.long=\u5927\u897F\u6D0B\u6642\u9593
-America/Swift_Current.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593
-America/Tegucigalpa.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593
-America/Thule.generic.long=\u5927\u897F\u6D0B\u6642\u9593
-America/Thunder_Bay.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593
-America/Tijuana.generic.long=\u592A\u5E73\u6D0B\u6642\u9593
-America/Toronto.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593
-America/Tortola.generic.long=\u5927\u897F\u6D0B\u6642\u9593
-America/Vancouver.generic.long=\u592A\u5E73\u6D0B\u6642\u9593
-America/Virgin.generic.long=\u5927\u897F\u6D0B\u6642\u9593
-America/Whitehorse.generic.long=\u592A\u5E73\u6D0B\u6642\u9593
-America/Winnipeg.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593
-America/Yakutat.generic.long=\u963F\u62C9\u65AF\u52A0\u6642\u9593
-America/Yellowknife.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593
-Antarctica/Casey.daylight.long=\u897F\u90E8\u590F\u4EE4\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E)
-Antarctica/Casey.generic.long=\u897F\u90E8\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E)
-Antarctica/Casey.standard.long=\u897F\u90E8\u6A19\u6E96\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E)
-Antarctica/Davis.generic.long=\u81FA\u7DAD\u65AF\u6642\u9593
-Antarctica/DumontDUrville.generic.long=Dumont-d'Urville \u6642\u9593
-Antarctica/Macquarie.daylight.long=\u9EA5\u5938\u5229\u5CF6\u590F\u4EE4\u6642\u9593
-Antarctica/Macquarie.generic.long=\u9EA5\u5938\u5229\u5CF6\u6642\u9593
-Antarctica/Macquarie.standard.long=\u9EA5\u5938\u5229\u5CF6\u6642\u9593
-Antarctica/Mawson.generic.long=\u83AB\u68EE\u6642\u9593
-Antarctica/McMurdo.generic.long=\u7D10\u897F\u862D\u6642\u9593
-Antarctica/Palmer.generic.long=\u667A\u5229\u6642\u9593
-Antarctica/Rothera.generic.long=\u7F85\u897F\u62C9\u6642\u9593
-Antarctica/South_Pole.generic.long=\u7D10\u897F\u862D\u6642\u9593
-Antarctica/Syowa.generic.long=\u5915\u6B50\u74E6 (Syowa) \u6642\u9593
-Antarctica/Vostok.generic.long=\u4F5B\u65AF\u6258 (Vostok) \u6642\u9593
-Arctic/Longyearbyen.generic.long=\u4E2D\u6B50\u6642\u9593
-Asia/Aden.generic.long=\u963F\u62C9\u4F2F\u6642\u9593
-Asia/Almaty.generic.long=\u963F\u62C9\u6728\u5716\u6642\u9593
-Asia/Amman.generic.long=\u963f\u62c9\u4f2f\u6642\u9593
-Asia/Anadyr.generic.long=\u963F\u90A3\u5E95\u6CB3\u6642\u9593
-Asia/Aqtau.generic.long=\u963F\u514B\u5957\u6642\u9593
-Asia/Aqtobe.generic.long=\u963F\u514B\u6258\u5225\u6642\u9593
-Asia/Ashgabat.generic.long=\u571F\u5EAB\u66FC\u6642\u9593
-Asia/Ashkhabad.generic.long=\u571F\u5EAB\u66FC\u6642\u9593
-Asia/Baghdad.generic.long=\u963F\u62C9\u4F2F\u6642\u9593
-Asia/Bahrain.generic.long=\u963F\u62C9\u4F2F\u6642\u9593
-Asia/Baku.generic.long=\u4E9E\u585E\u62DC\u7136\u6642\u9593
-Asia/Bangkok.generic.long=\u5370\u5EA6\u652F\u90A3\u6642\u9593
-Asia/Beirut.generic.long=\u6771\u6B50\u6642\u9593
-Asia/Bishkek.generic.long=\u5409\u723E\u5409\u65AF\u6642\u9593
-Asia/Brunei.generic.long=\u6C76\u840A\u6642\u9593
-Asia/Calcutta.generic.long=\u5370\u5EA6\u6642\u9593
-Asia/Choibalsan.generic.long=\u5DE7\u5DF4\u5C71 (Choibalsan) \u6642\u9593
-Asia/Chongqing.generic.long=\u4E2D\u570B\u6642\u9593
-Asia/Chungking.generic.long=\u4E2D\u570B\u6642\u9593
-Asia/Colombo.generic.long=\u5370\u5EA6\u6642\u9593
-Asia/Dacca.generic.long=\u5B5F\u52A0\u62C9\u6642\u9593
-Asia/Damascus.generic.long=\u6771\u6B50\u6642\u9593
-Asia/Dhaka.generic.long=\u5B5F\u52A0\u62C9\u6642\u9593
-Asia/Dili.generic.long=\u6771\u5E1D\u6C76\u6642\u9593
-Asia/Dubai.generic.long=\u6CE2\u65AF\u7063\u6642\u9593
-Asia/Dushanbe.generic.long=\u5854\u5409\u514B\u6642\u9593
-Asia/Gaza.generic.long=\u6771\u6B50\u6642\u9593
-Asia/Harbin.generic.long=\u4E2D\u570B\u6642\u9593
-Asia/Hebron.generic.long=\u6771\u6B50\u6642\u9593
-Asia/Ho_Chi_Minh.generic.long=\u5370\u5EA6\u652F\u90A3\u6642\u9593
-Asia/Hong_Kong.generic.long=\u9999\u6E2F\u6642\u9593
-Asia/Hovd.generic.long=\u4FAF\u5FB7 (Hovd) \u6642\u9593
-Asia/Irkutsk.generic.long=\u4F0A\u723E\u5EAB\u6B21\u514B\u6642\u9593
-Asia/Istanbul.generic.long=\u6771\u6B50\u6642\u9593
-Asia/Jakarta.generic.long=\u897F\u5370\u5C3C\u6642\u9593
-Asia/Jayapura.generic.long=\u6771\u5370\u5EA6\u5C3C\u897F\u4E9E\u6642\u9593
-Asia/Jerusalem.generic.long=\u4EE5\u8272\u5217\u6642\u9593
-Asia/Kabul.generic.long=\u963F\u5BCC\u6C57\u6642\u9593
-Asia/Kamchatka.generic.long=Petropavlovsk-Kamchatski \u6642\u9593
-Asia/Karachi.generic.long=\u5DF4\u57FA\u65AF\u5766\u6642\u9593
-Asia/Kashgar.generic.long=\u4E2D\u570B\u6642\u9593
-Asia/Kathmandu.generic.long=\u5C3C\u6CCA\u723E\u6642\u9593
-Asia/Katmandu.generic.long=\u5C3C\u6CCA\u723E\u6642\u9593
-Asia/Khandyga.daylight.long=\u6F22\u5730\u52A0 (Khandyga) \u590F\u4EE4\u6642\u9593
-Asia/Khandyga.generic.long=\u6F22\u5730\u52A0 (Khandyga) \u6642\u9593
-Asia/Khandyga.standard.long=\u6F22\u5730\u52A0 (Khandyga) \u6642\u9593
-Asia/Kolkata.generic.long=\u5370\u5EA6\u6642\u9593
-Asia/Krasnoyarsk.generic.long=\u514B\u62C9\u65AF\u8AFE\u4E9E\u723E\u65AF\u514B\u6642\u9593
-Asia/Kuala_Lumpur.generic.long=\u99AC\u4F86\u897F\u4E9E\u6642\u9593
-Asia/Kuching.generic.long=\u99AC\u4F86\u897F\u4E9E\u6642\u9593
-Asia/Kuwait.generic.long=\u963F\u62C9\u4F2F\u6642\u9593
-Asia/Macao.generic.long=\u4E2D\u570B\u6642\u9593
-Asia/Macau.generic.long=\u4E2D\u570B\u6642\u9593
-Asia/Magadan.generic.long=\u99AC\u52A0\u4E39\u6642\u9593
-Asia/Makassar.generic.long=\u4E2D\u5370\u5EA6\u5C3C\u897F\u4E9E\u6642\u9593
-Asia/Manila.generic.long=\u83F2\u5F8B\u8CD3\u6642\u9593
-Asia/Muscat.generic.long=\u6CE2\u65AF\u7063\u6642\u9593
-Asia/Nicosia.generic.long=\u6771\u6B50\u6642\u9593
-Asia/Novokuznetsk.generic.long=\u65B0\u897F\u4F2F\u5229\u4E9E\u6642\u9593
-Asia/Novosibirsk.generic.long=\u65B0\u897F\u4F2F\u5229\u4E9E\u6642\u9593
-Asia/Omsk.generic.long=\u6B50\u59C6\u65AF\u514B (Omsk) \u6642\u9593
-Asia/Oral.generic.long=\u6B50\u4F5B\u6642\u9593
-Asia/Phnom_Penh.generic.long=\u5370\u5EA6\u652F\u90A3\u6642\u9593
-Asia/Pontianak.generic.long=\u897F\u5370\u5C3C\u6642\u9593
-Asia/Pyongyang.generic.long=\u97D3\u570B\u6642\u9593
-Asia/Qatar.generic.long=\u963F\u62C9\u4F2F\u6642\u9593
-Asia/Qyzylorda.generic.long=\u514B\u5B5C\u6D1B\u723E\u9054\u6642\u9593
-Asia/Rangoon.generic.long=\u7DEC\u7538\u6642\u9593
-Asia/Saigon.generic.long=\u5370\u5EA6\u652F\u90A3\u6642\u9593
-Asia/Sakhalin.generic.long=\u5EAB\u9801\u5CF6\u6642\u9593
-Asia/Samarkand.generic.long=\u70CF\u8332\u5225\u514B\u65AF\u5766\u6642\u9593
-Asia/Seoul.generic.long=\u97D3\u570B\u6642\u9593
-Asia/Shanghai.generic.long=\u4E2D\u570B\u6642\u9593
-Asia/Singapore.generic.long=\u65B0\u52A0\u5761\u6642\u9593
-Asia/Taipei.generic.long=\u53f0\u7063\u6642\u9593
-Asia/Tashkent.generic.long=\u70CF\u8332\u5225\u514B\u65AF\u5766\u6642\u9593
-Asia/Tbilisi.generic.long=\u55AC\u6CBB\u4E9E\u6642\u9593
-Asia/Tehran.generic.long=\u4F0A\u6717\u6642\u9593
-Asia/Tel_Aviv.generic.long=\u4EE5\u8272\u5217\u6642\u9593
-Asia/Thimbu.generic.long=\u4E0D\u4E39\u6642\u9593
-Asia/Thimphu.generic.long=\u4E0D\u4E39\u6642\u9593
-Asia/Tokyo.generic.long=\u65E5\u672C\u6642\u9593
-Asia/Ujung_Pandang.generic.long=\u4E2D\u5370\u5EA6\u5C3C\u897F\u4E9E\u6642\u9593
-Asia/Ulaanbaatar.generic.long=\u5EAB\u502B\u6642\u9593
-Asia/Ulan_Bator.generic.long=\u5EAB\u502B\u6642\u9593
-Asia/Urumqi.generic.long=\u4E2D\u570B\u6642\u9593
-Asia/Ust-Nera.daylight.long=\u70CF\u65AF\u5167\u62C9 (Ust-Nera) \u590F\u4EE4\u6642\u9593
-Asia/Ust-Nera.generic.long=\u70CF\u65AF\u5167\u62C9 (Ust-Nera) \u6642\u9593
-Asia/Ust-Nera.standard.long=\u70CF\u65AF\u5167\u62C9 (Ust-Nera) \u6642\u9593
-Asia/Vientiane.generic.long=\u5370\u5EA6\u652F\u90A3\u6642\u9593
-Asia/Vladivostok.generic.long=\u6D77\u53C3\u5D34\u6642\u9593
-Asia/Yakutsk.generic.long=\u4E9E\u5EAB\u6B21\u514B\u6642\u9593
-Asia/Yekaterinburg.generic.long=\u8449\u5361\u6377\u7433\u5821\u6642\u9593
-Asia/Yerevan.generic.long=\u4E9E\u7F8E\u5C3C\u4E9E\u6642\u9593
-Atlantic/Azores.generic.long=\u4E9E\u901F\u723E\u7FA4\u5CF6\u6642\u9593
-Atlantic/Bermuda.generic.long=\u5927\u897F\u6D0B\u6642\u9593
-Atlantic/Canary.generic.long=\u897F\u6B50\u6642\u9593
-Atlantic/Cape_Verde.generic.long=\u4F5B\u5FB7\u89D2\u6642\u9593
-Atlantic/Faeroe.generic.long=\u897F\u6B50\u6642\u9593
-Atlantic/Faroe.generic.long=\u897F\u6B50\u6642\u9593
-Atlantic/Jan_Mayen.generic.long=\u4E2D\u6B50\u6642\u9593
-Atlantic/Madeira.generic.long=\u897F\u6B50\u6642\u9593
-Atlantic/Reykjavik.generic.long=\u683C\u6797\u5A01\u6CBB\u6642\u9593
-Atlantic/South_Georgia.generic.long=\u5357\u55AC\u6CBB\u4E9E\u6642\u9593
-Atlantic/St_Helena.generic.long=\u683C\u6797\u5A01\u6CBB\u6642\u9593
-Atlantic/Stanley.generic.long=\u798F\u514B\u862D\u7FA4\u5CF6\u6642\u9593
-Australia/ACT.daylight.long=\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF)
-Australia/ACT.generic.long=\u6771\u90E8\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF)
-Australia/ACT.standard.long=\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF)
-Australia/Adelaide.daylight.long=\u4E2D\u90E8\u590F\u4EE4\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u5340)
-Australia/Adelaide.generic.long=\u4E2D\u90E8\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u90E8)
-Australia/Adelaide.standard.long=\u4E2D\u90E8\u6A19\u6E96\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u90E8)
-Australia/Brisbane.daylight.long=\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u6606\u58EB\u862D)
-Australia/Brisbane.generic.long=\u6771\u90E8\u6642\u9593 (\u6606\u58EB\u862D)
-Australia/Brisbane.standard.long=\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u6606\u58EB\u862D)
-Australia/Broken_Hill.daylight.long=\u4E2D\u90E8\u590F\u4EE4\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u5340/\u65B0\u5357\u5A01\u723E\u65AF)
-Australia/Broken_Hill.generic.long=\u4E2D\u90E8\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u90E8/\u65B0\u5357\u5A01\u723E\u65AF)
-Australia/Broken_Hill.standard.long=\u4E2D\u90E8\u6A19\u6E96\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u5340/\u65B0\u5357\u5A01\u723E\u65AF)
-Australia/Canberra.daylight.long=\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF)
-Australia/Canberra.generic.long=\u6771\u90E8\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF)
-Australia/Canberra.standard.long=\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF)
-Australia/Currie.daylight.long=\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF)
-Australia/Currie.generic.long=\u6771\u90E8\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF)
-Australia/Currie.standard.long=\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF)
-Australia/Darwin.daylight.long=\u4E2D\u90E8\u590F\u4EE4\u6642\u9593 (\u5317\u90E8\u5404\u5730\u5340)
-Australia/Darwin.generic.long=\u6FB3\u5927\u5229\u4E9E\u4E2D\u90E8\u6642\u9593 (\u5317\u65B9\u5340\u57DF)
-Australia/Darwin.standard.long=\u4E2D\u90E8\u6A19\u6E96\u6642\u9593 (\u5317\u90E8\u5404\u5730\u5340)
-Australia/Eucla.daylight.long=\u4E2D\u897F\u90E8\u590F\u4EE4\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E)
-Australia/Eucla.generic.long=\u4E2D\u897F\u90E8\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E)
-Australia/Eucla.standard.long=\u4E2D\u897F\u90E8\u6A19\u6E96\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E)
-Australia/Hobart.daylight.long=\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u5854\u65AF\u6885\u5C3C\u4E9E\u5CF6)
-Australia/Hobart.generic.long=\u6FB3\u5927\u5229\u4E9E\u6771\u90E8\u6642\u9593 (\u5854\u65AF\u99AC\u5C3C\u4E9E\u5CF6)
-Australia/Hobart.standard.long=\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u5854\u65AF\u6885\u5C3C\u4E9E\u5CF6)
-Australia/LHI.generic.long=\u8C6A\u52F3\u7235\u5CF6\u6642\u9593
-Australia/Lindeman.daylight.long=\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u6606\u58EB\u862D)
-Australia/Lindeman.generic.long=\u6771\u90E8\u6642\u9593 (\u6606\u58EB\u862D)
-Australia/Lindeman.standard.long=\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u6606\u58EB\u862D)
-Australia/Lord_Howe.generic.long=\u8C6A\u52F3\u7235\u5CF6\u6642\u9593
-Australia/Melbourne.daylight.long=\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u7DAD\u591A\u5229\u4E9E\u90A6)
-Australia/Melbourne.generic.long=\u6771\u90E8\u6642\u9593 (\u7DAD\u591A\u5229\u4E9E)
-Australia/Melbourne.standard.long=\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u7DAD\u591A\u5229\u4E9E\u90A6)
-Australia/NSW.daylight.long=\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF)
-Australia/NSW.generic.long=\u6771\u90E8\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF)
-Australia/NSW.standard.long=\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF)
-Australia/North.daylight.long=\u4E2D\u90E8\u590F\u4EE4\u6642\u9593 (\u5317\u90E8\u5404\u5730\u5340)
-Australia/North.generic.long=\u6FB3\u5927\u5229\u4E9E\u4E2D\u90E8\u6642\u9593 (\u5317\u65B9\u5340\u57DF)
-Australia/North.standard.long=\u4E2D\u90E8\u6A19\u6E96\u6642\u9593 (\u5317\u90E8\u5404\u5730\u5340)
-Australia/Perth.daylight.long=\u897F\u90E8\u590F\u4EE4\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E)
-Australia/Perth.generic.long=\u897F\u90E8\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E)
-Australia/Perth.standard.long=\u897F\u90E8\u6A19\u6E96\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E)
-Australia/Queensland.daylight.long=\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u6606\u58EB\u862D)
-Australia/Queensland.generic.long=\u6771\u90E8\u6642\u9593 (\u6606\u58EB\u862D)
-Australia/Queensland.standard.long=\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u6606\u58EB\u862D)
-Australia/South.daylight.long=\u4E2D\u90E8\u590F\u4EE4\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u5340)
-Australia/South.generic.long=\u4E2D\u90E8\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u90E8)
-Australia/South.standard.long=\u4E2D\u90E8\u6A19\u6E96\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u90E8)
-Australia/Sydney.daylight.long=\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF)
-Australia/Sydney.generic.long=\u6771\u90E8\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF)
-Australia/Sydney.standard.long=\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u65B0\u5357\u5A01\u723E\u65AF)
-Australia/Tasmania.daylight.long=\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u5854\u65AF\u6885\u5C3C\u4E9E\u5CF6)
-Australia/Tasmania.generic.long=\u6FB3\u5927\u5229\u4E9E\u6771\u90E8\u6642\u9593 (\u5854\u65AF\u99AC\u5C3C\u4E9E\u5CF6)
-Australia/Tasmania.standard.long=\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u5854\u65AF\u6885\u5C3C\u4E9E\u5CF6)
-Australia/Victoria.daylight.long=\u6771\u90E8\u590F\u4EE4\u6642\u9593 (\u7DAD\u591A\u5229\u4E9E\u90A6)
-Australia/Victoria.generic.long=\u6771\u90E8\u6642\u9593 (\u7DAD\u591A\u5229\u4E9E)
-Australia/Victoria.standard.long=\u6771\u90E8\u6A19\u6E96\u6642\u9593 (\u7DAD\u591A\u5229\u4E9E\u90A6)
-Australia/West.daylight.long=\u897F\u90E8\u590F\u4EE4\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E)
-Australia/West.generic.long=\u897F\u90E8\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E)
-Australia/West.standard.long=\u897F\u90E8\u6A19\u6E96\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E)
-Australia/Yancowinna.daylight.long=\u4E2D\u90E8\u590F\u4EE4\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u5340/\u65B0\u5357\u5A01\u723E\u65AF)
-Australia/Yancowinna.generic.long=\u4E2D\u90E8\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u90E8/\u65B0\u5357\u5A01\u723E\u65AF)
-Australia/Yancowinna.standard.long=\u4E2D\u90E8\u6A19\u6E96\u6642\u9593 (\u6FB3\u5927\u5229\u4E9E\u5357\u5340/\u65B0\u5357\u5A01\u723E\u65AF)
-BET.generic.long=\u5DF4\u897F\u5229\u4E9E\u6642\u9593
-BST.generic.long=\u5B5F\u52A0\u62C9\u6642\u9593
-Brazil/Acre.generic.long=Acre \u6642\u9593
-Brazil/DeNoronha.generic.long=\u8CBB\u723E\u5357\u591A-\u8FEA\u8AFE\u7F85\u5C3C\u4E9E\u6642\u9593
-Brazil/East.generic.long=\u5DF4\u897F\u5229\u4E9E\u6642\u9593
-Brazil/West.generic.long=\u4E9E\u99AC\u905C\u6642\u9593
-CAT.generic.long=\u4E2D\u975E\u6642\u9593
-CET.generic.long=\u4e2d\u6b50\u6642\u9593
-CNT.generic.long=\u7D10\u82AC\u862D\u6642\u9593
-CST.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593
-CST6CDT.generic.long=\u7f8e\u570b\u4e2d\u90e8\u6642\u9593
-CTT.generic.long=\u4E2D\u570B\u6642\u9593
-Canada/Atlantic.generic.long=\u5927\u897F\u6D0B\u6642\u9593
-Canada/Central.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593
-Canada/East-Saskatchewan.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593
-Canada/Eastern.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593
-Canada/Mountain.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593
-Canada/Newfoundland.generic.long=\u7D10\u82AC\u862D\u6642\u9593
-Canada/Pacific.generic.long=\u592A\u5E73\u6D0B\u6642\u9593
-Canada/Saskatchewan.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593
-Canada/Yukon.generic.long=\u592A\u5E73\u6D0B\u6642\u9593
-Chile/Continental.generic.long=\u667A\u5229\u6642\u9593
-Chile/EasterIsland.generic.long=\u5FA9\u6D3B\u5CF6\u6642\u9593
-Cuba.generic.long=\u53E4\u5DF4\u6642\u9593
-EAT.generic.long=\u6771\u975E\u6642\u9593
-ECT.generic.long=\u4E2D\u6B50\u6642\u9593
-EET.generic.long=\u6771\u6b50\u6642\u9593
-EST.generic.long=\u7f8e\u570b\u6771\u90e8\u6642\u9593
-EST5EDT.generic.long=\u7f8e\u570b\u6771\u90e8\u6642\u9593
-Egypt.generic.long=\u6771\u6B50\u6642\u9593
-Eire.generic.long=\u611B\u723E\u862D\u6587\u6642\u9593
-Etc/Greenwich.generic.long=\u683C\u6797\u5A01\u6CBB\u6642\u9593
-Etc/UCT.generic.long=\u5354\u8ABF\u4E16\u754C\u6642\u9593
-Etc/UTC.generic.long=\u5354\u8ABF\u4E16\u754C\u6642\u9593
-Etc/Universal.generic.long=\u5354\u8ABF\u4E16\u754C\u6642\u9593
-Etc/Zulu.generic.long=\u5354\u8ABF\u4E16\u754C\u6642\u9593
-Europe/Amsterdam.generic.long=\u4E2D\u6B50\u6642\u9593
-Europe/Andorra.generic.long=\u4E2D\u6B50\u6642\u9593
-Europe/Athens.generic.long=\u6771\u6B50\u6642\u9593
-Europe/Belfast.generic.long=\u82F1\u570B\u6642\u9593
-Europe/Belgrade.generic.long=\u4E2D\u6B50\u6642\u9593
-Europe/Berlin.generic.long=\u4E2D\u6B50\u6642\u9593
-Europe/Bratislava.generic.long=\u4E2D\u6B50\u6642\u9593
-Europe/Brussels.generic.long=\u4E2D\u6B50\u6642\u9593
-Europe/Bucharest.generic.long=\u6771\u6B50\u6642\u9593
-Europe/Budapest.generic.long=\u4E2D\u6B50\u6642\u9593
-Europe/Busingen.generic.long=\u4E2D\u6B50\u6642\u9593
-Europe/Chisinau.generic.long=\u6771\u6B50\u6642\u9593
-Europe/Copenhagen.generic.long=\u4E2D\u6B50\u6642\u9593
-Europe/Dublin.generic.long=\u611B\u723E\u862D\u6587\u6642\u9593
-Europe/Gibraltar.generic.long=\u4E2D\u6B50\u6642\u9593
-Europe/Guernsey.generic.long=\u82F1\u570B\u6642\u9593
-Europe/Helsinki.generic.long=\u6771\u6B50\u6642\u9593
-Europe/Isle_of_Man.generic.long=\u82F1\u570B\u6642\u9593
-Europe/Istanbul.generic.long=\u6771\u6B50\u6642\u9593
-Europe/Jersey.generic.long=\u82F1\u570B\u6642\u9593
-Europe/Kaliningrad.daylight.long=\u6771\u6B50\u5167\u9678\u590F\u4EE4\u6642\u9593
-Europe/Kaliningrad.generic.long=\u6771\u6B50\u5167\u9678\u6642\u9593
-Europe/Kaliningrad.standard.long=\u6771\u6B50\u5167\u9678\u6642\u9593
-Europe/Kiev.generic.long=\u6771\u6B50\u6642\u9593
-Europe/Lisbon.generic.long=\u897F\u6B50\u6642\u9593
-Europe/Ljubljana.generic.long=\u4E2D\u6B50\u6642\u9593
-Europe/London.generic.long=\u82F1\u570B\u6642\u9593
-Europe/Luxembourg.generic.long=\u4E2D\u6B50\u6642\u9593
-Europe/Madrid.generic.long=\u4E2D\u6B50\u6642\u9593
-Europe/Malta.generic.long=\u4E2D\u6B50\u6642\u9593
-Europe/Mariehamn.generic.long=\u6771\u6B50\u6642\u9593
-Europe/Minsk.daylight.long=\u6771\u6B50\u5167\u9678\u590F\u4EE4\u6642\u9593
-Europe/Minsk.generic.long=\u6771\u6B50\u5167\u9678\u6642\u9593
-Europe/Minsk.standard.long=\u6771\u6B50\u5167\u9678\u6642\u9593
-Europe/Monaco.generic.long=\u4E2D\u6B50\u6642\u9593
-Europe/Moscow.generic.long=\u83AB\u65AF\u79D1\u6642\u9593
-Europe/Nicosia.generic.long=\u6771\u6B50\u6642\u9593
-Europe/Oslo.generic.long=\u4E2D\u6B50\u6642\u9593
-Europe/Paris.generic.long=\u4E2D\u6B50\u6642\u9593
-Europe/Podgorica.generic.long=\u4E2D\u6B50\u6642\u9593
-Europe/Prague.generic.long=\u4E2D\u6B50\u6642\u9593
-Europe/Riga.generic.long=\u6771\u6B50\u6642\u9593
-Europe/Rome.generic.long=\u4E2D\u6B50\u6642\u9593
-Europe/Samara.generic.long=\u6C99\u99AC\u62C9\u6642\u9593
-Europe/San_Marino.generic.long=\u4E2D\u6B50\u6642\u9593
-Europe/Sarajevo.generic.long=\u4E2D\u6B50\u6642\u9593
-Europe/Simferopol.generic.long=\u6771\u6B50\u6642\u9593
-Europe/Skopje.generic.long=\u4E2D\u6B50\u6642\u9593
-Europe/Sofia.generic.long=\u6771\u6B50\u6642\u9593
-Europe/Stockholm.generic.long=\u4E2D\u6B50\u6642\u9593
-Europe/Tallinn.generic.long=\u6771\u6B50\u6642\u9593
-Europe/Tirane.generic.long=\u4E2D\u6B50\u6642\u9593
-Europe/Tiraspol.generic.long=\u6771\u6B50\u6642\u9593
-Europe/Uzhgorod.generic.long=\u6771\u6B50\u6642\u9593
-Europe/Vaduz.generic.long=\u4E2D\u6B50\u6642\u9593
-Europe/Vatican.generic.long=\u4E2D\u6B50\u6642\u9593
-Europe/Vienna.generic.long=\u4E2D\u6B50\u6642\u9593
-Europe/Vilnius.generic.long=\u6771\u6B50\u6642\u9593
-Europe/Volgograd.generic.long=\u4F0F\u723E\u52A0\u683C\u52D2\u6642\u9593
-Europe/Warsaw.generic.long=\u4E2D\u6B50\u6642\u9593
-Europe/Zagreb.generic.long=\u4E2D\u6B50\u6642\u9593
-Europe/Zaporozhye.generic.long=\u6771\u6B50\u6642\u9593
-Europe/Zurich.generic.long=\u4E2D\u6B50\u6642\u9593
-GB-Eire.generic.long=\u82F1\u570B\u6642\u9593
-GB.generic.long=\u82F1\u570B\u6642\u9593
-GMT.generic.long=\u683C\u6797\u5A01\u6CBB\u6642\u9593
-Greenwich.generic.long=\u683C\u6797\u5A01\u6CBB\u6642\u9593
-HST.generic.long=\u590f\u5a01\u5937\u6642\u9593
-Hongkong.generic.long=\u9999\u6E2F\u6642\u9593
-IET.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593
-IST.generic.long=\u5370\u5EA6\u6642\u9593
-Iceland.generic.long=\u683C\u6797\u5A01\u6CBB\u6642\u9593
-Indian/Antananarivo.generic.long=\u6771\u975E\u6642\u9593
-Indian/Chagos.generic.long=\u82F1\u5C6C\u5370\u5EA6\u6D0B\u5730\u5340
-Indian/Christmas.generic.long=\u8056\u8A95\u5CF6\u6642\u9593
-Indian/Cocos.generic.long=\u53EF\u53EF\u65AF\u7FA4\u5CF6\u6642\u9593
-Indian/Comoro.generic.long=\u6771\u975E\u6642\u9593
-Indian/Kerguelen.generic.long=\u6CD5\u570B\u5357\u534A\u7403\u53CA\u5357\u6975\u5C6C\u5730\u6642\u9593
-Indian/Mahe.generic.long=\u585E\u5E2D\u723E\u7FA4\u5CF6\u6642\u9593
-Indian/Maldives.generic.long=\u99AC\u723E\u5730\u592B\u6642\u9593
-Indian/Mauritius.generic.long=\u6469\u91CC\u897F\u65AF\u6642\u9593
-Indian/Mayotte.generic.long=\u6771\u975E\u6642\u9593
-Indian/Reunion.generic.long=\u7559\u5C3C\u65FA\u5CF6\u6642\u9593
-Iran.generic.long=\u4F0A\u6717\u6642\u9593
-Israel.generic.long=\u4EE5\u8272\u5217\u6642\u9593
-JST.generic.long=\u65E5\u672C\u6642\u9593
-Jamaica.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593
-Japan.generic.long=\u65E5\u672C\u6642\u9593
-Kwajalein.generic.long=\u99AC\u7D39\u723E\u7FA4\u5CF6\u6642\u9593
-Libya.generic.long=\u6771\u6b50\u6642\u9593
-MET.generic.long=MET
-MIT.generic.long=\u897F\u85A9\u6469\u4E9E\u6642\u9593
-MST.generic.long=\u7f8e\u570b\u5c71\u5340\u6642\u9593
-MST7MDT.generic.long=\u7f8e\u570b\u5c71\u5340\u6642\u9593
-Mexico/BajaNorte.generic.long=\u592A\u5E73\u6D0B\u6642\u9593
-Mexico/BajaSur.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593
-Mexico/General.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593
-NET.generic.long=\u4E9E\u7F8E\u5C3C\u4E9E\u6642\u9593
-NST.generic.long=\u7D10\u897F\u862D\u6642\u9593
-NZ-CHAT.generic.long=\u67E5\u5766\u6642\u9593
-NZ.generic.long=\u7D10\u897F\u862D\u6642\u9593
-Navajo.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593
-PLT.generic.long=\u5DF4\u57FA\u65AF\u5766\u6642\u9593
-PNT.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593
-PRC.generic.long=\u4E2D\u570B\u6642\u9593
-PRT.generic.long=\u5927\u897F\u6D0B\u6642\u9593
-PST.generic.long=\u592A\u5E73\u6D0B\u6642\u9593
-PST8PDT.generic.long=\u592a\u5e73\u6d0b\u6642\u9593
-Pacific/Apia.generic.long=\u897F\u85A9\u6469\u4E9E\u6642\u9593
-Pacific/Auckland.generic.long=\u7D10\u897F\u862D\u6642\u9593
-Pacific/Chatham.generic.long=\u67E5\u5766\u6642\u9593
-Pacific/Chuuk.daylight.long=\u695A\u514B\u590F\u4EE4\u6642\u9593
-Pacific/Chuuk.generic.long=\u695A\u514B\u6642\u9593
-Pacific/Chuuk.standard.long=\u695A\u514B\u6642\u9593
-Pacific/Easter.generic.long=\u5FA9\u6D3B\u5CF6\u6642\u9593
-Pacific/Efate.generic.long=\u74E6\u5974\u963F\u5716\u6642\u9593
-Pacific/Enderbury.generic.long=\u83F2\u5C3C\u514B\u65AF\u7FA4\u5CF6\u6642\u9593
-Pacific/Fakaofo.generic.long=\u6258\u514B\u52DE\u7FA4\u5CF6\u6642\u9593
-Pacific/Fiji.generic.long=\u6590\u6FDF\u6642\u9593
-Pacific/Funafuti.generic.long=\u5410\u74E6\u9B6F\u6642\u9593
-Pacific/Galapagos.generic.long=\u52A0\u62C9\u5DF4\u54E5\u6642\u9593
-Pacific/Gambier.generic.long=\u7518\u6BD4\u723E\u6642\u9593
-Pacific/Guadalcanal.generic.long=\u6240\u7F85\u9580\u7FA4\u5CF6\u6642\u9593
-Pacific/Guam.generic.long=\u67E5\u83AB\u7F85\u6642\u9593
-Pacific/Honolulu.generic.long=\u590F\u5A01\u5937\u6642\u9593
-Pacific/Johnston.generic.long=\u590F\u5A01\u5937\u6642\u9593
-Pacific/Kiritimati.generic.long=\u5217\u5DBC\u7FA4\u5CF6\u6642\u9593
-Pacific/Kosrae.generic.long=Kosrae \u6642\u9593
-Pacific/Kwajalein.generic.long=\u99AC\u7D39\u723E\u7FA4\u5CF6\u6642\u9593
-Pacific/Majuro.generic.long=\u99AC\u7D39\u723E\u7FA4\u5CF6\u6642\u9593
-Pacific/Marquesas.generic.long=\u99AC\u514B\u85A9\u65AF\u6642\u9593
-Pacific/Midway.generic.long=\u85A9\u6469\u4E9E\u6642\u9593
-Pacific/Nauru.generic.long=\u8AFE\u9B6F\u6642\u9593
-Pacific/Niue.generic.long=\u7D10\u5A01\u5CF6\u6642\u9593
-Pacific/Norfolk.generic.long=\u8AFE\u798F\u514B\u6642\u9593
-Pacific/Noumea.generic.long=\u65B0\u52A0\u52D2\u591A\u5C3C\u4E9E\u6642\u9593
-Pacific/Pago_Pago.generic.long=\u85A9\u6469\u4E9E\u6642\u9593
-Pacific/Palau.generic.long=\u5E1B\u7409\u6642\u9593
-Pacific/Pitcairn.generic.long=\u76AE\u7279\u5EB7\u6642\u9593
-Pacific/Pohnpei.daylight.long=\u6CE2\u7D0D\u4F69\u590F\u4EE4\u6642\u9593
-Pacific/Pohnpei.generic.long=\u6CE2\u7D0D\u4F69\u5CF6\u6642\u9593
-Pacific/Pohnpei.standard.long=\u6CE2\u7D0D\u4F69\u6642\u9593
-Pacific/Ponape.daylight.long=\u6CE2\u7D0D\u4F69\u590F\u4EE4\u6642\u9593
-Pacific/Ponape.generic.long=\u6CE2\u7D0D\u4F69\u5CF6\u6642\u9593
-Pacific/Ponape.standard.long=\u6CE2\u7D0D\u4F69\u6642\u9593
-Pacific/Port_Moresby.generic.long=\u5DF4\u5E03\u4E9E\u65B0\u5E7E\u5167\u4E9E\u6642\u9593
-Pacific/Rarotonga.generic.long=\u5EAB\u514B\u7FA4\u5CF6\u6642\u9593
-Pacific/Saipan.generic.long=\u67E5\u83AB\u7F85\u6642\u9593
-Pacific/Samoa.generic.long=\u85A9\u6469\u4E9E\u6642\u9593
-Pacific/Tahiti.generic.long=\u5927\u6EAA\u5730\u6642\u9593
-Pacific/Tarawa.generic.long=\u5409\u4F2F\u7279\u7FA4\u5CF6\u6642\u9593
-Pacific/Tongatapu.generic.long=\u6771\u52A0\u6642\u9593
-Pacific/Truk.daylight.long=\u695A\u514B\u590F\u4EE4\u6642\u9593
-Pacific/Truk.generic.long=\u695A\u514B\u6642\u9593
-Pacific/Truk.standard.long=\u695A\u514B\u6642\u9593
-Pacific/Wake.generic.long=\u5A01\u514B\u6642\u9593
-Pacific/Wallis.generic.long=\u74E6\u5229\u65AF\u53CA\u798F\u675C\u7D0D\u7FA4\u5CF6\u6642\u9593
-Pacific/Yap.daylight.long=\u695A\u514B\u590F\u4EE4\u6642\u9593
-Pacific/Yap.generic.long=\u695A\u514B\u6642\u9593
-Pacific/Yap.standard.long=\u695A\u514B\u6642\u9593
-Poland.generic.long=\u4E2D\u6B50\u6642\u9593
-Portugal.generic.long=\u897F\u6B50\u6642\u9593
-ROK.generic.long=\u97D3\u570B\u6642\u9593
-SST.generic.long=\u6240\u7F85\u9580\u7FA4\u5CF6\u6642\u9593
-Singapore.generic.long=\u65B0\u52A0\u5761\u6642\u9593
-SystemV/AST4.generic.long=\u5927\u897F\u6D0B\u6642\u9593
-SystemV/AST4ADT.generic.long=\u5927\u897F\u6D0B\u6642\u9593
-SystemV/CST6.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593
-SystemV/CST6CDT.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593
-SystemV/EST5.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593
-SystemV/EST5EDT.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593
-SystemV/HST10.generic.long=\u590F\u5A01\u5937\u6642\u9593
-SystemV/MST7.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593
-SystemV/MST7MDT.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593
-SystemV/PST8.generic.long=\u592A\u5E73\u6D0B\u6642\u9593
-SystemV/PST8PDT.generic.long=\u592A\u5E73\u6D0B\u6642\u9593
-SystemV/YST9.generic.long=\u963F\u62C9\u65AF\u52A0\u6642\u9593
-SystemV/YST9YDT.generic.long=\u963F\u62C9\u65AF\u52A0\u6642\u9593
-Turkey.generic.long=\u6771\u6B50\u6642\u9593
-UCT.generic.long=\u5354\u8ABF\u4E16\u754C\u6642\u9593
-US/Alaska.generic.long=\u963F\u62C9\u65AF\u52A0\u6642\u9593
-US/Aleutian.generic.long=\u590F\u5A01\u5937-\u963F\u7559\u7533\u6642\u9593
-US/Arizona.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593
-US/Central.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593
-US/East-Indiana.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593
-US/Eastern.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593
-US/Hawaii.generic.long=\u590F\u5A01\u5937\u6642\u9593
-US/Indiana-Starke.generic.long=\u7F8E\u570B\u4E2D\u90E8\u6642\u9593
-US/Michigan.generic.long=\u7F8E\u570B\u6771\u90E8\u6642\u9593
-US/Mountain.generic.long=\u7F8E\u570B\u5C71\u5340\u6642\u9593
-US/Pacific-New.generic.long=\u592A\u5E73\u6D0B\u6642\u9593
-US/Pacific.generic.long=\u592A\u5E73\u6D0B\u6642\u9593
-US/Samoa.generic.long=\u85A9\u6469\u4E9E\u6642\u9593
-UTC.generic.long=\u5354\u8ABF\u4E16\u754C\u6642\u9593
-Universal.generic.long=\u5354\u8ABF\u4E16\u754C\u6642\u9593
-VST.generic.long=\u5370\u5EA6\u652F\u90A3\u6642\u9593
-W-SU.generic.long=\u83AB\u65AF\u79D1\u6642\u9593
-WET.generic.long=\u897f\u6b50\u6642\u9593
-Zulu.generic.long=\u5354\u8ABF\u4E16\u754C\u6642\u9593
diff --git a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_zh_TW_short.properties b/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_zh_TW_short.properties
deleted file mode 100644
index c2de6fd..0000000
--- a/jdk/test/sun/util/resources/TimeZone/TimeZoneNames/TimeZoneNames_zh_TW_short.properties
+++ /dev/null
@@ -1,1743 +0,0 @@
-ACT.daylight.short=CST
-ACT.generic.short=CT
-ACT.standard.short=CST
-AET.daylight.short=EST
-AET.generic.short=ET
-AET.standard.short=EST
-Africa/Abidjan.daylight.short=GMT
-Africa/Abidjan.generic.short=GMT
-Africa/Abidjan.standard.short=GMT
-Africa/Accra.daylight.short=GHST
-Africa/Accra.generic.short=GMT
-Africa/Accra.standard.short=GMT
-Africa/Addis_Ababa.daylight.short=EAST
-Africa/Addis_Ababa.generic.short=EAT
-Africa/Addis_Ababa.standard.short=EAT
-Africa/Algiers.daylight.short=CEST
-Africa/Algiers.generic.short=CET
-Africa/Algiers.standard.short=CET
-Africa/Asmara.daylight.short=EAST
-Africa/Asmara.generic.short=EAT
-Africa/Asmara.standard.short=EAT
-Africa/Asmera.daylight.short=EAST
-Africa/Asmera.generic.short=EAT
-Africa/Asmera.standard.short=EAT
-Africa/Bamako.daylight.short=GMT
-Africa/Bamako.generic.short=GMT
-Africa/Bamako.standard.short=GMT
-Africa/Bangui.daylight.short=WAST
-Africa/Bangui.generic.short=WAT
-Africa/Bangui.standard.short=WAT
-Africa/Banjul.daylight.short=GMT
-Africa/Banjul.generic.short=GMT
-Africa/Banjul.standard.short=GMT
-Africa/Bissau.daylight.short=GMT
-Africa/Bissau.generic.short=GMT
-Africa/Bissau.standard.short=GMT
-Africa/Blantyre.daylight.short=CAST
-Africa/Blantyre.generic.short=CAT
-Africa/Blantyre.standard.short=CAT
-Africa/Brazzaville.daylight.short=WAST
-Africa/Brazzaville.generic.short=WAT
-Africa/Brazzaville.standard.short=WAT
-Africa/Bujumbura.daylight.short=CAST
-Africa/Bujumbura.generic.short=CAT
-Africa/Bujumbura.standard.short=CAT
-Africa/Cairo.daylight.short=EEST
-Africa/Cairo.generic.short=EET
-Africa/Cairo.standard.short=EET
-Africa/Casablanca.daylight.short=WEST
-Africa/Casablanca.generic.short=WET
-Africa/Casablanca.standard.short=WET
-Africa/Ceuta.daylight.short=CEST
-Africa/Ceuta.generic.short=CET
-Africa/Ceuta.standard.short=CET
-Africa/Conakry.daylight.short=GMT
-Africa/Conakry.generic.short=GMT
-Africa/Conakry.standard.short=GMT
-Africa/Dakar.daylight.short=GMT
-Africa/Dakar.generic.short=GMT
-Africa/Dakar.standard.short=GMT
-Africa/Dar_es_Salaam.daylight.short=EAST
-Africa/Dar_es_Salaam.generic.short=EAT
-Africa/Dar_es_Salaam.standard.short=EAT
-Africa/Djibouti.daylight.short=EAST
-Africa/Djibouti.generic.short=EAT
-Africa/Djibouti.standard.short=EAT
-Africa/Douala.daylight.short=WAST
-Africa/Douala.generic.short=WAT
-Africa/Douala.standard.short=WAT
-Africa/El_Aaiun.daylight.short=WEST
-Africa/El_Aaiun.generic.short=WET
-Africa/El_Aaiun.standard.short=WET
-Africa/Freetown.daylight.short=SLST
-Africa/Freetown.generic.short=SLT
-Africa/Freetown.standard.short=GMT
-Africa/Gaborone.daylight.short=CAST
-Africa/Gaborone.generic.short=CAT
-Africa/Gaborone.standard.short=CAT
-Africa/Harare.daylight.short=CAST
-Africa/Harare.generic.short=CAT
-Africa/Harare.standard.short=CAT
-Africa/Johannesburg.daylight.short=SAST
-Africa/Johannesburg.generic.short=SAT
-Africa/Johannesburg.standard.short=SAST
-Africa/Juba.daylight.short=EAST
-Africa/Juba.generic.short=EAT
-Africa/Juba.standard.short=EAT
-Africa/Kampala.daylight.short=EAST
-Africa/Kampala.generic.short=EAT
-Africa/Kampala.standard.short=EAT
-Africa/Khartoum.daylight.short=EAST
-Africa/Khartoum.generic.short=EAT
-Africa/Khartoum.standard.short=EAT
-Africa/Kigali.daylight.short=CAST
-Africa/Kigali.generic.short=CAT
-Africa/Kigali.standard.short=CAT
-Africa/Kinshasa.daylight.short=WAST
-Africa/Kinshasa.generic.short=WAT
-Africa/Kinshasa.standard.short=WAT
-Africa/Lagos.daylight.short=WAST
-Africa/Lagos.generic.short=WAT
-Africa/Lagos.standard.short=WAT
-Africa/Libreville.daylight.short=WAST
-Africa/Libreville.generic.short=WAT
-Africa/Libreville.standard.short=WAT
-Africa/Lome.daylight.short=GMT
-Africa/Lome.generic.short=GMT
-Africa/Lome.standard.short=GMT
-Africa/Luanda.daylight.short=WAST
-Africa/Luanda.generic.short=WAT
-Africa/Luanda.standard.short=WAT
-Africa/Lubumbashi.daylight.short=CAST
-Africa/Lubumbashi.generic.short=CAT
-Africa/Lubumbashi.standard.short=CAT
-Africa/Lusaka.daylight.short=CAST
-Africa/Lusaka.generic.short=CAT
-Africa/Lusaka.standard.short=CAT
-Africa/Malabo.daylight.short=WAST
-Africa/Malabo.generic.short=WAT
-Africa/Malabo.standard.short=WAT
-Africa/Maputo.daylight.short=CAST
-Africa/Maputo.generic.short=CAT
-Africa/Maputo.standard.short=CAT
-Africa/Maseru.daylight.short=SAST
-Africa/Maseru.generic.short=SAT
-Africa/Maseru.standard.short=SAST
-Africa/Mbabane.daylight.short=SAST
-Africa/Mbabane.generic.short=SAT
-Africa/Mbabane.standard.short=SAST
-Africa/Mogadishu.daylight.short=EAST
-Africa/Mogadishu.generic.short=EAT
-Africa/Mogadishu.standard.short=EAT
-Africa/Monrovia.daylight.short=GMT
-Africa/Monrovia.generic.short=GMT
-Africa/Monrovia.standard.short=GMT
-Africa/Nairobi.daylight.short=EAST
-Africa/Nairobi.generic.short=EAT
-Africa/Nairobi.standard.short=EAT
-Africa/Ndjamena.daylight.short=WAST
-Africa/Ndjamena.generic.short=WAT
-Africa/Ndjamena.standard.short=WAT
-Africa/Niamey.daylight.short=WAST
-Africa/Niamey.generic.short=WAT
-Africa/Niamey.standard.short=WAT
-Africa/Nouakchott.daylight.short=GMT
-Africa/Nouakchott.generic.short=GMT
-Africa/Nouakchott.standard.short=GMT
-Africa/Ouagadougou.daylight.short=GMT
-Africa/Ouagadougou.generic.short=GMT
-Africa/Ouagadougou.standard.short=GMT
-Africa/Porto-Novo.daylight.short=WAST
-Africa/Porto-Novo.generic.short=WAT
-Africa/Porto-Novo.standard.short=WAT
-Africa/Sao_Tome.daylight.short=GMT
-Africa/Sao_Tome.generic.short=GMT
-Africa/Sao_Tome.standard.short=GMT
-Africa/Timbuktu.daylight.short=GMT
-Africa/Timbuktu.generic.short=GMT
-Africa/Timbuktu.standard.short=GMT
-Africa/Tripoli.daylight.short=EEST
-Africa/Tripoli.generic.short=EET
-Africa/Tripoli.standard.short=EET
-Africa/Tunis.daylight.short=CEST
-Africa/Tunis.generic.short=CET
-Africa/Tunis.standard.short=CET
-Africa/Windhoek.daylight.short=WAST
-Africa/Windhoek.generic.short=WAT
-Africa/Windhoek.standard.short=WAT
-AGT.daylight.short=ARST
-AGT.generic.short=ART
-AGT.standard.short=ART
-America/Adak.daylight.short=HADT
-America/Adak.generic.short=HAT
-America/Adak.standard.short=HAST
-America/Anchorage.daylight.short=AKDT
-America/Anchorage.generic.short=AKT
-America/Anchorage.standard.short=AKST
-America/Anguilla.daylight.short=ADT
-America/Anguilla.generic.short=AT
-America/Anguilla.standard.short=AST
-America/Antigua.daylight.short=ADT
-America/Antigua.generic.short=AT
-America/Antigua.standard.short=AST
-America/Araguaina.daylight.short=BRST
-America/Araguaina.generic.short=BRT
-America/Araguaina.standard.short=BRT
-America/Argentina/Buenos_Aires.daylight.short=ARST
-America/Argentina/Buenos_Aires.generic.short=ART
-America/Argentina/Buenos_Aires.standard.short=ART
-America/Argentina/Catamarca.daylight.short=ARST
-America/Argentina/Catamarca.generic.short=ART
-America/Argentina/Catamarca.standard.short=ART
-America/Argentina/ComodRivadavia.daylight.short=ARST
-America/Argentina/ComodRivadavia.generic.short=ART
-America/Argentina/ComodRivadavia.standard.short=ART
-America/Argentina/Cordoba.daylight.short=ARST
-America/Argentina/Cordoba.generic.short=ART
-America/Argentina/Cordoba.standard.short=ART
-America/Argentina/Jujuy.daylight.short=ARST
-America/Argentina/Jujuy.generic.short=ART
-America/Argentina/Jujuy.standard.short=ART
-America/Argentina/La_Rioja.daylight.short=ARST
-America/Argentina/La_Rioja.generic.short=ART
-America/Argentina/La_Rioja.standard.short=ART
-America/Argentina/Mendoza.daylight.short=ARST
-America/Argentina/Mendoza.generic.short=ART
-America/Argentina/Mendoza.standard.short=ART
-America/Argentina/Rio_Gallegos.daylight.short=ARST
-America/Argentina/Rio_Gallegos.generic.short=ART
-America/Argentina/Rio_Gallegos.standard.short=ART
-America/Argentina/Salta.daylight.short=ARST
-America/Argentina/Salta.generic.short=ART
-America/Argentina/Salta.standard.short=ART
-America/Argentina/San_Juan.daylight.short=ARST
-America/Argentina/San_Juan.generic.short=ART
-America/Argentina/San_Juan.standard.short=ART
-America/Argentina/San_Luis.daylight.short=ARST
-America/Argentina/San_Luis.generic.short=ART
-America/Argentina/San_Luis.standard.short=ART
-America/Argentina/Tucuman.daylight.short=ARST
-America/Argentina/Tucuman.generic.short=ART
-America/Argentina/Tucuman.standard.short=ART
-America/Argentina/Ushuaia.daylight.short=ARST
-America/Argentina/Ushuaia.generic.short=ART
-America/Argentina/Ushuaia.standard.short=ART
-America/Aruba.daylight.short=ADT
-America/Aruba.generic.short=AT
-America/Aruba.standard.short=AST
-America/Asuncion.daylight.short=PYST
-America/Asuncion.generic.short=PYT
-America/Asuncion.standard.short=PYT
-America/Atikokan.daylight.short=EDT
-America/Atikokan.generic.short=ET
-America/Atikokan.standard.short=EST
-America/Atka.daylight.short=HADT
-America/Atka.generic.short=HAT
-America/Atka.standard.short=HAST
-America/Bahia_Banderas.daylight.short=CDT
-America/Bahia_Banderas.generic.short=CT
-America/Bahia_Banderas.standard.short=CST
-America/Bahia.daylight.short=BRST
-America/Bahia.generic.short=BRT
-America/Bahia.standard.short=BRT
-America/Barbados.daylight.short=ADT
-America/Barbados.generic.short=AT
-America/Barbados.standard.short=AST
-America/Belem.daylight.short=BRST
-America/Belem.generic.short=BRT
-America/Belem.standard.short=BRT
-America/Belize.daylight.short=CDT
-America/Belize.generic.short=CT
-America/Belize.standard.short=CST
-America/Blanc-Sablon.daylight.short=ADT
-America/Blanc-Sablon.generic.short=AT
-America/Blanc-Sablon.standard.short=AST
-America/Boa_Vista.daylight.short=AMST
-America/Boa_Vista.generic.short=AMT
-America/Boa_Vista.standard.short=AMT
-America/Bogota.daylight.short=COST
-America/Bogota.generic.short=COT
-America/Bogota.standard.short=COT
-America/Boise.daylight.short=MDT
-America/Boise.generic.short=MT
-America/Boise.standard.short=MST
-America/Buenos_Aires.daylight.short=ARST
-America/Buenos_Aires.generic.short=ART
-America/Buenos_Aires.standard.short=ART
-America/Cambridge_Bay.daylight.short=MDT
-America/Cambridge_Bay.generic.short=MT
-America/Cambridge_Bay.standard.short=MST
-America/Campo_Grande.daylight.short=AMST
-America/Campo_Grande.generic.short=AMT
-America/Campo_Grande.standard.short=AMT
-America/Cancun.daylight.short=CDT
-America/Cancun.generic.short=CT
-America/Cancun.standard.short=CST
-America/Caracas.daylight.short=VEST
-America/Caracas.generic.short=VET
-America/Caracas.standard.short=VET
-America/Catamarca.daylight.short=ARST
-America/Catamarca.generic.short=ART
-America/Catamarca.standard.short=ART
-America/Cayenne.daylight.short=GFST
-America/Cayenne.generic.short=GFT
-America/Cayenne.standard.short=GFT
-America/Cayman.daylight.short=EDT
-America/Cayman.generic.short=ET
-America/Cayman.standard.short=EST
-America/Chicago.daylight.short=CDT
-America/Chicago.generic.short=CT
-America/Chicago.standard.short=CST
-America/Chihuahua.daylight.short=MDT
-America/Chihuahua.generic.short=MT
-America/Chihuahua.standard.short=MST
-America/Coral_Harbour.daylight.short=EDT
-America/Coral_Harbour.generic.short=ET
-America/Coral_Harbour.standard.short=EST
-America/Cordoba.daylight.short=ARST
-America/Cordoba.generic.short=ART
-America/Cordoba.standard.short=ART
-America/Costa_Rica.daylight.short=CDT
-America/Costa_Rica.generic.short=CT
-America/Costa_Rica.standard.short=CST
-America/Creston.daylight.short=MDT
-America/Creston.generic.short=MT
-America/Creston.standard.short=MST
-America/Cuiaba.daylight.short=AMST
-America/Cuiaba.generic.short=AMT
-America/Cuiaba.standard.short=AMT
-America/Curacao.daylight.short=ADT
-America/Curacao.generic.short=AT
-America/Curacao.standard.short=AST
-America/Danmarkshavn.daylight.short=GMT
-America/Danmarkshavn.generic.short=GMT
-America/Danmarkshavn.standard.short=GMT
-America/Dawson_Creek.daylight.short=MDT
-America/Dawson_Creek.generic.short=MT
-America/Dawson_Creek.standard.short=MST
-America/Dawson.daylight.short=PDT
-America/Dawson.generic.short=PT
-America/Dawson.standard.short=PST
-America/Denver.daylight.short=MDT
-America/Denver.generic.short=MT
-America/Denver.standard.short=MST
-America/Detroit.daylight.short=EDT
-America/Detroit.generic.short=ET
-America/Detroit.standard.short=EST
-America/Dominica.daylight.short=ADT
-America/Dominica.generic.short=AT
-America/Dominica.standard.short=AST
-America/Edmonton.daylight.short=MDT
-America/Edmonton.generic.short=MT
-America/Edmonton.standard.short=MST
-America/Eirunepe.daylight.short=ACST
-America/Eirunepe.generic.short=ACT
-America/Eirunepe.standard.short=ACT
-America/El_Salvador.daylight.short=CDT
-America/El_Salvador.generic.short=CT
-America/El_Salvador.standard.short=CST
-America/Ensenada.daylight.short=PDT
-America/Ensenada.generic.short=PT
-America/Ensenada.standard.short=PST
-America/Fortaleza.daylight.short=BRST
-America/Fortaleza.generic.short=BRT
-America/Fortaleza.standard.short=BRT
-America/Fort_Wayne.daylight.short=EDT
-America/Fort_Wayne.generic.short=ET
-America/Fort_Wayne.standard.short=EST
-America/Glace_Bay.daylight.short=ADT
-America/Glace_Bay.generic.short=AT
-America/Glace_Bay.standard.short=AST
-America/Godthab.daylight.short=WGST
-America/Godthab.generic.short=WGT
-America/Godthab.standard.short=WGT
-America/Goose_Bay.daylight.short=ADT
-America/Goose_Bay.generic.short=AT
-America/Goose_Bay.standard.short=AST
-America/Grand_Turk.daylight.short=EDT
-America/Grand_Turk.generic.short=ET
-America/Grand_Turk.standard.short=EST
-America/Grenada.daylight.short=ADT
-America/Grenada.generic.short=AT
-America/Grenada.standard.short=AST
-America/Guadeloupe.daylight.short=ADT
-America/Guadeloupe.generic.short=AT
-America/Guadeloupe.standard.short=AST
-America/Guatemala.daylight.short=CDT
-America/Guatemala.generic.short=CT
-America/Guatemala.standard.short=CST
-America/Guayaquil.daylight.short=ECST
-America/Guayaquil.generic.short=ECT
-America/Guayaquil.standard.short=ECT
-America/Guyana.daylight.short=GYST
-America/Guyana.generic.short=GYT
-America/Guyana.standard.short=GYT
-America/Halifax.daylight.short=ADT
-America/Halifax.generic.short=AT
-America/Halifax.standard.short=AST
-America/Havana.daylight.short=CDT
-America/Havana.generic.short=CT
-America/Havana.standard.short=CST
-America/Hermosillo.daylight.short=MDT
-America/Hermosillo.generic.short=MT
-America/Hermosillo.standard.short=MST
-America/Indiana/Indianapolis.daylight.short=EDT
-America/Indiana/Indianapolis.generic.short=ET
-America/Indiana/Indianapolis.standard.short=EST
-America/Indiana/Knox.daylight.short=CDT
-America/Indiana/Knox.generic.short=CT
-America/Indiana/Knox.standard.short=CST
-America/Indiana/Marengo.daylight.short=EDT
-America/Indiana/Marengo.generic.short=ET
-America/Indiana/Marengo.standard.short=EST
-America/Indiana/Petersburg.daylight.short=EDT
-America/Indiana/Petersburg.generic.short=ET
-America/Indiana/Petersburg.standard.short=EST
-America/Indianapolis.daylight.short=EDT
-America/Indianapolis.generic.short=ET
-America/Indianapolis.standard.short=EST
-America/Indiana/Tell_City.daylight.short=CDT
-America/Indiana/Tell_City.generic.short=CT
-America/Indiana/Tell_City.standard.short=CST
-America/Indiana/Vevay.daylight.short=EDT
-America/Indiana/Vevay.generic.short=ET
-America/Indiana/Vevay.standard.short=EST
-America/Indiana/Vincennes.daylight.short=EDT
-America/Indiana/Vincennes.generic.short=ET
-America/Indiana/Vincennes.standard.short=EST
-America/Indiana/Winamac.daylight.short=EDT
-America/Indiana/Winamac.generic.short=ET
-America/Indiana/Winamac.standard.short=EST
-America/Inuvik.daylight.short=MDT
-America/Inuvik.generic.short=MT
-America/Inuvik.standard.short=MST
-America/Iqaluit.daylight.short=EDT
-America/Iqaluit.generic.short=ET
-America/Iqaluit.standard.short=EST
-America/Jamaica.daylight.short=EDT
-America/Jamaica.generic.short=ET
-America/Jamaica.standard.short=EST
-America/Jujuy.daylight.short=ARST
-America/Jujuy.generic.short=ART
-America/Jujuy.standard.short=ART
-America/Juneau.daylight.short=AKDT
-America/Juneau.generic.short=AKT
-America/Juneau.standard.short=AKST
-America/Kentucky/Louisville.daylight.short=EDT
-America/Kentucky/Louisville.generic.short=ET
-America/Kentucky/Louisville.standard.short=EST
-America/Kentucky/Monticello.daylight.short=EDT
-America/Kentucky/Monticello.generic.short=ET
-America/Kentucky/Monticello.standard.short=EST
-America/Knox_IN.daylight.short=CDT
-America/Knox_IN.generic.short=CT
-America/Knox_IN.standard.short=CST
-America/Kralendijk.daylight.short=ADT
-America/Kralendijk.generic.short=AT
-America/Kralendijk.standard.short=AST
-America/La_Paz.daylight.short=BOST
-America/La_Paz.generic.short=BOT
-America/La_Paz.standard.short=BOT
-America/Lima.daylight.short=PEST
-America/Lima.generic.short=PET
-America/Lima.standard.short=PET
-America/Los_Angeles.daylight.short=PDT
-America/Los_Angeles.generic.short=PT
-America/Los_Angeles.standard.short=PST
-America/Louisville.daylight.short=EDT
-America/Louisville.generic.short=ET
-America/Louisville.standard.short=EST
-America/Lower_Princes.daylight.short=ADT
-America/Lower_Princes.generic.short=AT
-America/Lower_Princes.standard.short=AST
-America/Maceio.daylight.short=BRST
-America/Maceio.generic.short=BRT
-America/Maceio.standard.short=BRT
-America/Managua.daylight.short=CDT
-America/Managua.generic.short=CT
-America/Managua.standard.short=CST
-America/Manaus.daylight.short=AMST
-America/Manaus.generic.short=AMT
-America/Manaus.standard.short=AMT
-America/Marigot.daylight.short=ADT
-America/Marigot.generic.short=AT
-America/Marigot.standard.short=AST
-America/Martinique.daylight.short=ADT
-America/Martinique.generic.short=AT
-America/Martinique.standard.short=AST
-America/Matamoros.daylight.short=CDT
-America/Matamoros.generic.short=CT
-America/Matamoros.standard.short=CST
-America/Mazatlan.daylight.short=MDT
-America/Mazatlan.generic.short=MT
-America/Mazatlan.standard.short=MST
-America/Mendoza.daylight.short=ARST
-America/Mendoza.generic.short=ART
-America/Mendoza.standard.short=ART
-America/Menominee.daylight.short=CDT
-America/Menominee.generic.short=CT
-America/Menominee.standard.short=CST
-America/Merida.daylight.short=CDT
-America/Merida.generic.short=CT
-America/Merida.standard.short=CST
-America/Metlakatla.daylight.short=MeDT
-America/Metlakatla.generic.short=MeT
-America/Metlakatla.standard.short=MeST
-America/Mexico_City.daylight.short=CDT
-America/Mexico_City.generic.short=CT
-America/Mexico_City.standard.short=CST
-America/Miquelon.daylight.short=PMDT
-America/Miquelon.generic.short=PMT
-America/Miquelon.standard.short=PMST
-America/Moncton.daylight.short=ADT
-America/Moncton.generic.short=AT
-America/Moncton.standard.short=AST
-America/Monterrey.daylight.short=CDT
-America/Monterrey.generic.short=CT
-America/Monterrey.standard.short=CST
-America/Montevideo.daylight.short=UYST
-America/Montevideo.generic.short=UYT
-America/Montevideo.standard.short=UYT
-America/Montreal.daylight.short=EDT
-America/Montreal.generic.short=ET
-America/Montreal.standard.short=EST
-America/Montserrat.daylight.short=ADT
-America/Montserrat.generic.short=AT
-America/Montserrat.standard.short=AST
-America/Nassau.daylight.short=EDT
-America/Nassau.generic.short=ET
-America/Nassau.standard.short=EST
-America/New_York.daylight.short=EDT
-America/New_York.generic.short=ET
-America/New_York.standard.short=EST
-America/Nipigon.daylight.short=EDT
-America/Nipigon.generic.short=ET
-America/Nipigon.standard.short=EST
-America/Nome.daylight.short=AKDT
-America/Nome.generic.short=AKT
-America/Nome.standard.short=AKST
-America/Noronha.daylight.short=FNST
-America/Noronha.generic.short=FNT
-America/Noronha.standard.short=FNT
-America/North_Dakota/Beulah.daylight.short=CDT
-America/North_Dakota/Beulah.generic.short=CT
-America/North_Dakota/Beulah.standard.short=CST
-America/North_Dakota/Center.daylight.short=CDT
-America/North_Dakota/Center.generic.short=CT
-America/North_Dakota/Center.standard.short=CST
-America/North_Dakota/New_Salem.daylight.short=CDT
-America/North_Dakota/New_Salem.generic.short=CT
-America/North_Dakota/New_Salem.standard.short=CST
-America/Ojinaga.daylight.short=MDT
-America/Ojinaga.generic.short=MT
-America/Ojinaga.standard.short=MST
-America/Panama.daylight.short=EDT
-America/Panama.generic.short=ET
-America/Panama.standard.short=EST
-America/Pangnirtung.daylight.short=EDT
-America/Pangnirtung.generic.short=ET
-America/Pangnirtung.standard.short=EST
-America/Paramaribo.daylight.short=SRST
-America/Paramaribo.generic.short=SRT
-America/Paramaribo.standard.short=SRT
-America/Phoenix.daylight.short=MDT
-America/Phoenix.generic.short=MT
-America/Phoenix.standard.short=MST
-America/Port-au-Prince.daylight.short=EDT
-America/Port-au-Prince.generic.short=ET
-America/Port-au-Prince.standard.short=EST
-America/Porto_Acre.daylight.short=ACST
-America/Porto_Acre.generic.short=ACT
-America/Porto_Acre.standard.short=ACT
-America/Port_of_Spain.daylight.short=ADT
-America/Port_of_Spain.generic.short=AT
-America/Port_of_Spain.standard.short=AST
-America/Porto_Velho.daylight.short=AMST
-America/Porto_Velho.generic.short=AMT
-America/Porto_Velho.standard.short=AMT
-America/Puerto_Rico.daylight.short=ADT
-America/Puerto_Rico.generic.short=AT
-America/Puerto_Rico.standard.short=AST
-America/Rainy_River.daylight.short=CDT
-America/Rainy_River.generic.short=CT
-America/Rainy_River.standard.short=CST
-America/Rankin_Inlet.daylight.short=CDT
-America/Rankin_Inlet.generic.short=CT
-America/Rankin_Inlet.standard.short=CST
-America/Recife.daylight.short=BRST
-America/Recife.generic.short=BRT
-America/Recife.standard.short=BRT
-America/Regina.daylight.short=CDT
-America/Regina.generic.short=CT
-America/Regina.standard.short=CST
-America/Resolute.daylight.short=CDT
-America/Resolute.generic.short=CT
-America/Resolute.standard.short=CST
-America/Rio_Branco.daylight.short=ACST
-America/Rio_Branco.generic.short=ACT
-America/Rio_Branco.standard.short=ACT
-America/Rosario.daylight.short=ARST
-America/Rosario.generic.short=ART
-America/Rosario.standard.short=ART
-America/Santa_Isabel.daylight.short=PDT
-America/Santa_Isabel.generic.short=PT
-America/Santa_Isabel.standard.short=PST
-America/Santarem.daylight.short=BRST
-America/Santarem.generic.short=BRT
-America/Santarem.standard.short=BRT
-America/Santiago.daylight.short=CLST
-America/Santiago.generic.short=CLT
-America/Santiago.standard.short=CLT
-America/Santo_Domingo.daylight.short=ADT
-America/Santo_Domingo.generic.short=AT
-America/Santo_Domingo.standard.short=AST
-America/Sao_Paulo.daylight.short=BRST
-America/Sao_Paulo.generic.short=BRT
-America/Sao_Paulo.standard.short=BRT
-America/Scoresbysund.daylight.short=EGST
-America/Scoresbysund.generic.short=EGT
-America/Scoresbysund.standard.short=EGT
-America/Shiprock.daylight.short=MDT
-America/Shiprock.generic.short=MT
-America/Shiprock.standard.short=MST
-America/Sitka.daylight.short=AKDT
-America/Sitka.generic.short=AKT
-America/Sitka.standard.short=AKST
-America/St_Barthelemy.daylight.short=ADT
-America/St_Barthelemy.generic.short=AT
-America/St_Barthelemy.standard.short=AST
-America/St_Johns.daylight.short=NDT
-America/St_Johns.generic.short=NT
-America/St_Johns.standard.short=NST
-America/St_Kitts.daylight.short=ADT
-America/St_Kitts.generic.short=AT
-America/St_Kitts.standard.short=AST
-America/St_Lucia.daylight.short=ADT
-America/St_Lucia.generic.short=AT
-America/St_Lucia.standard.short=AST
-America/St_Thomas.daylight.short=ADT
-America/St_Thomas.generic.short=AT
-America/St_Thomas.standard.short=AST
-America/St_Vincent.daylight.short=ADT
-America/St_Vincent.generic.short=AT
-America/St_Vincent.standard.short=AST
-America/Swift_Current.daylight.short=CDT
-America/Swift_Current.generic.short=CT
-America/Swift_Current.standard.short=CST
-America/Tegucigalpa.daylight.short=CDT
-America/Tegucigalpa.generic.short=CT
-America/Tegucigalpa.standard.short=CST
-America/Thule.daylight.short=ADT
-America/Thule.generic.short=AT
-America/Thule.standard.short=AST
-America/Thunder_Bay.daylight.short=EDT
-America/Thunder_Bay.generic.short=ET
-America/Thunder_Bay.standard.short=EST
-America/Tijuana.daylight.short=PDT
-America/Tijuana.generic.short=PT
-America/Tijuana.standard.short=PST
-America/Toronto.daylight.short=EDT
-America/Toronto.generic.short=ET
-America/Toronto.standard.short=EST
-America/Tortola.daylight.short=ADT
-America/Tortola.generic.short=AT
-America/Tortola.standard.short=AST
-America/Vancouver.daylight.short=PDT
-America/Vancouver.generic.short=PT
-America/Vancouver.standard.short=PST
-America/Virgin.daylight.short=ADT
-America/Virgin.generic.short=AT
-America/Virgin.standard.short=AST
-America/Whitehorse.daylight.short=PDT
-America/Whitehorse.generic.short=PT
-America/Whitehorse.standard.short=PST
-America/Winnipeg.daylight.short=CDT
-America/Winnipeg.generic.short=CT
-America/Winnipeg.standard.short=CST
-America/Yakutat.daylight.short=AKDT
-America/Yakutat.generic.short=AKT
-America/Yakutat.standard.short=AKST
-America/Yellowknife.daylight.short=MDT
-America/Yellowknife.generic.short=MT
-America/Yellowknife.standard.short=MST
-Antarctica/Casey.daylight.short=WST
-Antarctica/Casey.generic.short=WT
-Antarctica/Casey.standard.short=WST
-Antarctica/Davis.daylight.short=DAVST
-Antarctica/Davis.generic.short=DAVT
-Antarctica/Davis.standard.short=DAVT
-Antarctica/DumontDUrville.daylight.short=DDUST
-Antarctica/DumontDUrville.generic.short=DDUT
-Antarctica/DumontDUrville.standard.short=DDUT
-Antarctica/Macquarie.daylight.short=MIST
-Antarctica/Macquarie.generic.short=MIST
-Antarctica/Macquarie.standard.short=MIST
-Antarctica/Mawson.daylight.short=MAWST
-Antarctica/Mawson.generic.short=MAWT
-Antarctica/Mawson.standard.short=MAWT
-Antarctica/McMurdo.daylight.short=NZDT
-Antarctica/McMurdo.generic.short=NZT
-Antarctica/McMurdo.standard.short=NZST
-Antarctica/Palmer.daylight.short=CLST
-Antarctica/Palmer.generic.short=CLT
-Antarctica/Palmer.standard.short=CLT
-Antarctica/Rothera.daylight.short=ROTST
-Antarctica/Rothera.generic.short=ROTT
-Antarctica/Rothera.standard.short=ROTT
-Antarctica/South_Pole.daylight.short=NZDT
-Antarctica/South_Pole.generic.short=NZT
-Antarctica/South_Pole.standard.short=NZST
-Antarctica/Syowa.daylight.short=SYOST
-Antarctica/Syowa.generic.short=SYOT
-Antarctica/Syowa.standard.short=SYOT
-Antarctica/Vostok.daylight.short=VOSST
-Antarctica/Vostok.generic.short=VOST
-Antarctica/Vostok.standard.short=VOST
-Arctic/Longyearbyen.daylight.short=CEST
-Arctic/Longyearbyen.generic.short=CET
-Arctic/Longyearbyen.standard.short=CET
-ART.daylight.short=EEST
-ART.generic.short=EET
-ART.standard.short=EET
-Asia/Aden.daylight.short=ADT
-Asia/Aden.generic.short=AT
-Asia/Aden.standard.short=AST
-Asia/Almaty.daylight.short=ALMST
-Asia/Almaty.generic.short=ALMT
-Asia/Almaty.standard.short=ALMT
-Asia/Amman.daylight.short=ADT
-Asia/Amman.generic.short=AT
-Asia/Amman.standard.short=AST
-Asia/Anadyr.daylight.short=ANAST
-Asia/Anadyr.generic.short=ANAT
-Asia/Anadyr.standard.short=ANAT
-Asia/Aqtau.daylight.short=AQTST
-Asia/Aqtau.generic.short=AQTT
-Asia/Aqtau.standard.short=AQTT
-Asia/Aqtobe.daylight.short=AQTST
-Asia/Aqtobe.generic.short=AQTT
-Asia/Aqtobe.standard.short=AQTT
-Asia/Ashgabat.daylight.short=TMST
-Asia/Ashgabat.generic.short=TMT
-Asia/Ashgabat.standard.short=TMT
-Asia/Ashkhabad.daylight.short=TMST
-Asia/Ashkhabad.generic.short=TMT
-Asia/Ashkhabad.standard.short=TMT
-Asia/Baghdad.daylight.short=ADT
-Asia/Baghdad.generic.short=AT
-Asia/Baghdad.standard.short=AST
-Asia/Bahrain.daylight.short=ADT
-Asia/Bahrain.generic.short=AT
-Asia/Bahrain.standard.short=AST
-Asia/Baku.daylight.short=AZST
-Asia/Baku.generic.short=AZT
-Asia/Baku.standard.short=AZT
-Asia/Bangkok.daylight.short=ICST
-Asia/Bangkok.generic.short=ICT
-Asia/Bangkok.standard.short=ICT
-Asia/Beirut.daylight.short=EEST
-Asia/Beirut.generic.short=EET
-Asia/Beirut.standard.short=EET
-Asia/Bishkek.daylight.short=KGST
-Asia/Bishkek.generic.short=KGT
-Asia/Bishkek.standard.short=KGT
-Asia/Brunei.daylight.short=BNST
-Asia/Brunei.generic.short=BNT
-Asia/Brunei.standard.short=BNT
-Asia/Calcutta.daylight.short=IDT
-Asia/Calcutta.generic.short=IT
-Asia/Calcutta.standard.short=IST
-Asia/Choibalsan.daylight.short=CHOST
-Asia/Choibalsan.generic.short=CHOT
-Asia/Choibalsan.standard.short=CHOT
-Asia/Chongqing.daylight.short=CDT
-Asia/Chongqing.generic.short=CT
-Asia/Chongqing.standard.short=CST
-Asia/Chungking.daylight.short=CDT
-Asia/Chungking.generic.short=CT
-Asia/Chungking.standard.short=CST
-Asia/Colombo.daylight.short=IDT
-Asia/Colombo.generic.short=IT
-Asia/Colombo.standard.short=IST
-Asia/Dacca.daylight.short=BDST
-Asia/Dacca.generic.short=BDT
-Asia/Dacca.standard.short=BDT
-Asia/Damascus.daylight.short=EEST
-Asia/Damascus.generic.short=EET
-Asia/Damascus.standard.short=EET
-Asia/Dhaka.daylight.short=BDST
-Asia/Dhaka.generic.short=BDT
-Asia/Dhaka.standard.short=BDT
-Asia/Dili.daylight.short=TLST
-Asia/Dili.generic.short=TLT
-Asia/Dili.standard.short=TLT
-Asia/Dubai.daylight.short=GDT
-Asia/Dubai.generic.short=GT
-Asia/Dubai.standard.short=GST
-Asia/Dushanbe.daylight.short=TJST
-Asia/Dushanbe.generic.short=TJT
-Asia/Dushanbe.standard.short=TJT
-Asia/Gaza.daylight.short=EEST
-Asia/Gaza.generic.short=EET
-Asia/Gaza.standard.short=EET
-Asia/Harbin.daylight.short=CDT
-Asia/Harbin.generic.short=CT
-Asia/Harbin.standard.short=CST
-Asia/Hebron.daylight.short=EEST
-Asia/Hebron.generic.short=EET
-Asia/Hebron.standard.short=EET
-Asia/Ho_Chi_Minh.daylight.short=ICST
-Asia/Ho_Chi_Minh.generic.short=ICT
-Asia/Ho_Chi_Minh.standard.short=ICT
-Asia/Hong_Kong.daylight.short=HKST
-Asia/Hong_Kong.generic.short=HKT
-Asia/Hong_Kong.standard.short=HKT
-Asia/Hovd.daylight.short=HOVST
-Asia/Hovd.generic.short=HOVT
-Asia/Hovd.standard.short=HOVT
-Asia/Irkutsk.daylight.short=IRKST
-Asia/Irkutsk.generic.short=IRKT
-Asia/Irkutsk.standard.short=IRKT
-Asia/Istanbul.daylight.short=EEST
-Asia/Istanbul.generic.short=EET
-Asia/Istanbul.standard.short=EET
-Asia/Jakarta.daylight.short=WIST
-Asia/Jakarta.generic.short=WIB
-Asia/Jakarta.standard.short=WIB
-Asia/Jayapura.daylight.short=EIST
-Asia/Jayapura.generic.short=WIT
-Asia/Jayapura.standard.short=WIT
-Asia/Jerusalem.daylight.short=IDT
-Asia/Jerusalem.generic.short=IT
-Asia/Jerusalem.standard.short=IST
-Asia/Kabul.daylight.short=AFST
-Asia/Kabul.generic.short=AFT
-Asia/Kabul.standard.short=AFT
-Asia/Kamchatka.daylight.short=PETST
-Asia/Kamchatka.generic.short=PETT
-Asia/Kamchatka.standard.short=PETT
-Asia/Karachi.daylight.short=PKST
-Asia/Karachi.generic.short=PKT
-Asia/Karachi.standard.short=PKT
-Asia/Kashgar.daylight.short=CDT
-Asia/Kashgar.generic.short=CT
-Asia/Kashgar.standard.short=CST
-Asia/Kathmandu.daylight.short=NPST
-Asia/Kathmandu.generic.short=NPT
-Asia/Kathmandu.standard.short=NPT
-Asia/Katmandu.daylight.short=NPST
-Asia/Katmandu.generic.short=NPT
-Asia/Katmandu.standard.short=NPT
-Asia/Khandyga.daylight.short=YAKST
-Asia/Khandyga.generic.short=YAKT
-Asia/Khandyga.standard.short=YAKT
-Asia/Kolkata.daylight.short=IDT
-Asia/Kolkata.generic.short=IT
-Asia/Kolkata.standard.short=IST
-Asia/Krasnoyarsk.daylight.short=KRAST
-Asia/Krasnoyarsk.generic.short=KRAT
-Asia/Krasnoyarsk.standard.short=KRAT
-Asia/Kuala_Lumpur.daylight.short=MYST
-Asia/Kuala_Lumpur.generic.short=MYT
-Asia/Kuala_Lumpur.standard.short=MYT
-Asia/Kuching.daylight.short=MYST
-Asia/Kuching.generic.short=MYT
-Asia/Kuching.standard.short=MYT
-Asia/Kuwait.daylight.short=ADT
-Asia/Kuwait.generic.short=AT
-Asia/Kuwait.standard.short=AST
-Asia/Macao.daylight.short=CDT
-Asia/Macao.generic.short=CT
-Asia/Macao.standard.short=CST
-Asia/Macau.daylight.short=CDT
-Asia/Macau.generic.short=CT
-Asia/Macau.standard.short=CST
-Asia/Magadan.daylight.short=MAGST
-Asia/Magadan.generic.short=MAGT
-Asia/Magadan.standard.short=MAGT
-Asia/Makassar.daylight.short=CIST
-Asia/Makassar.generic.short=WITA
-Asia/Makassar.standard.short=WITA
-Asia/Manila.daylight.short=PHST
-Asia/Manila.generic.short=PHT
-Asia/Manila.standard.short=PHT
-Asia/Muscat.daylight.short=GDT
-Asia/Muscat.generic.short=GT
-Asia/Muscat.standard.short=GST
-Asia/Nicosia.daylight.short=EEST
-Asia/Nicosia.generic.short=EET
-Asia/Nicosia.standard.short=EET
-Asia/Novokuznetsk.daylight.short=NOVST
-Asia/Novokuznetsk.generic.short=NOVT
-Asia/Novokuznetsk.standard.short=NOVT
-Asia/Novosibirsk.daylight.short=NOVST
-Asia/Novosibirsk.generic.short=NOVT
-Asia/Novosibirsk.standard.short=NOVT
-Asia/Omsk.daylight.short=OMSST
-Asia/Omsk.generic.short=OMST
-Asia/Omsk.standard.short=OMST
-Asia/Oral.daylight.short=ORAST
-Asia/Oral.generic.short=ORAT
-Asia/Oral.standard.short=ORAT
-Asia/Phnom_Penh.daylight.short=ICST
-Asia/Phnom_Penh.generic.short=ICT
-Asia/Phnom_Penh.standard.short=ICT
-Asia/Pontianak.daylight.short=WIST
-Asia/Pontianak.generic.short=WIB
-Asia/Pontianak.standard.short=WIB
-Asia/Pyongyang.daylight.short=KDT
-Asia/Pyongyang.generic.short=KT
-Asia/Pyongyang.standard.short=KST
-Asia/Qatar.daylight.short=ADT
-Asia/Qatar.generic.short=AT
-Asia/Qatar.standard.short=AST
-Asia/Qyzylorda.daylight.short=QYZST
-Asia/Qyzylorda.generic.short=QYZT
-Asia/Qyzylorda.standard.short=QYZT
-Asia/Rangoon.daylight.short=MMST
-Asia/Rangoon.generic.short=MMT
-Asia/Rangoon.standard.short=MMT
-Asia/Saigon.daylight.short=ICST
-Asia/Saigon.generic.short=ICT
-Asia/Saigon.standard.short=ICT
-Asia/Sakhalin.daylight.short=SAKST
-Asia/Sakhalin.generic.short=SAKT
-Asia/Sakhalin.standard.short=SAKT
-Asia/Samarkand.daylight.short=UZST
-Asia/Samarkand.generic.short=UZT
-Asia/Samarkand.standard.short=UZT
-Asia/Seoul.daylight.short=KDT
-Asia/Seoul.generic.short=KT
-Asia/Seoul.standard.short=KST
-Asia/Shanghai.daylight.short=CDT
-Asia/Shanghai.generic.short=CT
-Asia/Shanghai.standard.short=CST
-Asia/Singapore.daylight.short=SGST
-Asia/Singapore.generic.short=SGT
-Asia/Singapore.standard.short=SGT
-Asia/Taipei.daylight.short=TDT
-Asia/Taipei.generic.short=TT
-Asia/Taipei.standard.short=TST
-Asia/Tashkent.daylight.short=UZST
-Asia/Tashkent.generic.short=UZT
-Asia/Tashkent.standard.short=UZT
-Asia/Tbilisi.daylight.short=GEST
-Asia/Tbilisi.generic.short=GET
-Asia/Tbilisi.standard.short=GET
-Asia/Tehran.daylight.short=IRDT
-Asia/Tehran.generic.short=IRT
-Asia/Tehran.standard.short=IRST
-Asia/Tel_Aviv.daylight.short=IDT
-Asia/Tel_Aviv.generic.short=IT
-Asia/Tel_Aviv.standard.short=IST
-Asia/Thimbu.daylight.short=BTST
-Asia/Thimbu.generic.short=BTT
-Asia/Thimbu.standard.short=BTT
-Asia/Thimphu.daylight.short=BTST
-Asia/Thimphu.generic.short=BTT
-Asia/Thimphu.standard.short=BTT
-Asia/Tokyo.daylight.short=JDT
-Asia/Tokyo.generic.short=JT
-Asia/Tokyo.standard.short=JST
-Asia/Ujung_Pandang.daylight.short=CIST
-Asia/Ujung_Pandang.generic.short=WITA
-Asia/Ujung_Pandang.standard.short=WITA
-Asia/Ulaanbaatar.daylight.short=ULAST
-Asia/Ulaanbaatar.generic.short=ULAT
-Asia/Ulaanbaatar.standard.short=ULAT
-Asia/Ulan_Bator.daylight.short=ULAST
-Asia/Ulan_Bator.generic.short=ULAT
-Asia/Ulan_Bator.standard.short=ULAT
-Asia/Urumqi.daylight.short=CDT
-Asia/Urumqi.generic.short=CT
-Asia/Urumqi.standard.short=CST
-Asia/Ust-Nera.daylight.short=VLAST
-Asia/Ust-Nera.generic.short=VLAT
-Asia/Ust-Nera.standard.short=VLAT
-Asia/Vientiane.daylight.short=ICST
-Asia/Vientiane.generic.short=ICT
-Asia/Vientiane.standard.short=ICT
-Asia/Vladivostok.daylight.short=VLAST
-Asia/Vladivostok.generic.short=VLAT
-Asia/Vladivostok.standard.short=VLAT
-Asia/Yakutsk.daylight.short=YAKST
-Asia/Yakutsk.generic.short=YAKT
-Asia/Yakutsk.standard.short=YAKT
-Asia/Yekaterinburg.daylight.short=YEKST
-Asia/Yekaterinburg.generic.short=YEKT
-Asia/Yekaterinburg.standard.short=YEKT
-Asia/Yerevan.daylight.short=AMST
-Asia/Yerevan.generic.short=AMT
-Asia/Yerevan.standard.short=AMT
-AST.daylight.short=AKDT
-AST.generic.short=AKT
-AST.standard.short=AKST
-Atlantic/Azores.daylight.short=AZOST
-Atlantic/Azores.generic.short=AZOT
-Atlantic/Azores.standard.short=AZOT
-Atlantic/Bermuda.daylight.short=ADT
-Atlantic/Bermuda.generic.short=AT
-Atlantic/Bermuda.standard.short=AST
-Atlantic/Canary.daylight.short=WEST
-Atlantic/Canary.generic.short=WET
-Atlantic/Canary.standard.short=WET
-Atlantic/Cape_Verde.daylight.short=CVST
-Atlantic/Cape_Verde.generic.short=CVT
-Atlantic/Cape_Verde.standard.short=CVT
-Atlantic/Faeroe.daylight.short=WEST
-Atlantic/Faeroe.generic.short=WET
-Atlantic/Faeroe.standard.short=WET
-Atlantic/Faroe.daylight.short=WEST
-Atlantic/Faroe.generic.short=WET
-Atlantic/Faroe.standard.short=WET
-Atlantic/Jan_Mayen.daylight.short=CEST
-Atlantic/Jan_Mayen.generic.short=CET
-Atlantic/Jan_Mayen.standard.short=CET
-Atlantic/Madeira.daylight.short=WEST
-Atlantic/Madeira.generic.short=WET
-Atlantic/Madeira.standard.short=WET
-Atlantic/Reykjavik.daylight.short=GMT
-Atlantic/Reykjavik.generic.short=GMT
-Atlantic/Reykjavik.standard.short=GMT
-Atlantic/South_Georgia.daylight.short=GDT
-Atlantic/South_Georgia.generic.short=GT
-Atlantic/South_Georgia.standard.short=GST
-Atlantic/Stanley.daylight.short=FKST
-Atlantic/Stanley.generic.short=FKT
-Atlantic/Stanley.standard.short=FKT
-Atlantic/St_Helena.daylight.short=GMT
-Atlantic/St_Helena.generic.short=GMT
-Atlantic/St_Helena.standard.short=GMT
-Australia/ACT.daylight.short=EST
-Australia/ACT.generic.short=ET
-Australia/ACT.standard.short=EST
-Australia/Adelaide.daylight.short=CST
-Australia/Adelaide.generic.short=CT
-Australia/Adelaide.standard.short=CST
-Australia/Brisbane.daylight.short=EST
-Australia/Brisbane.generic.short=ET
-Australia/Brisbane.standard.short=EST
-Australia/Broken_Hill.daylight.short=CST
-Australia/Broken_Hill.generic.short=CT
-Australia/Broken_Hill.standard.short=CST
-Australia/Canberra.daylight.short=EST
-Australia/Canberra.generic.short=ET
-Australia/Canberra.standard.short=EST
-Australia/Currie.daylight.short=EST
-Australia/Currie.generic.short=ET
-Australia/Currie.standard.short=EST
-Australia/Darwin.daylight.short=CST
-Australia/Darwin.generic.short=CT
-Australia/Darwin.standard.short=CST
-Australia/Eucla.daylight.short=CWST
-Australia/Eucla.generic.short=CWT
-Australia/Eucla.standard.short=CWST
-Australia/Hobart.daylight.short=EST
-Australia/Hobart.generic.short=ET
-Australia/Hobart.standard.short=EST
-Australia/LHI.daylight.short=LHST
-Australia/LHI.generic.short=LHT
-Australia/LHI.standard.short=LHST
-Australia/Lindeman.daylight.short=EST
-Australia/Lindeman.generic.short=ET
-Australia/Lindeman.standard.short=EST
-Australia/Lord_Howe.daylight.short=LHST
-Australia/Lord_Howe.generic.short=LHT
-Australia/Lord_Howe.standard.short=LHST
-Australia/Melbourne.daylight.short=EST
-Australia/Melbourne.generic.short=ET
-Australia/Melbourne.standard.short=EST
-Australia/North.daylight.short=CST
-Australia/North.generic.short=CT
-Australia/North.standard.short=CST
-Australia/NSW.daylight.short=EST
-Australia/NSW.generic.short=ET
-Australia/NSW.standard.short=EST
-Australia/Perth.daylight.short=WST
-Australia/Perth.generic.short=WT
-Australia/Perth.standard.short=WST
-Australia/Queensland.daylight.short=EST
-Australia/Queensland.generic.short=ET
-Australia/Queensland.standard.short=EST
-Australia/South.daylight.short=CST
-Australia/South.generic.short=CT
-Australia/South.standard.short=CST
-Australia/Sydney.daylight.short=EST
-Australia/Sydney.generic.short=ET
-Australia/Sydney.standard.short=EST
-Australia/Tasmania.daylight.short=EST
-Australia/Tasmania.generic.short=ET
-Australia/Tasmania.standard.short=EST
-Australia/Victoria.daylight.short=EST
-Australia/Victoria.generic.short=ET
-Australia/Victoria.standard.short=EST
-Australia/West.daylight.short=WST
-Australia/West.generic.short=WT
-Australia/West.standard.short=WST
-Australia/Yancowinna.daylight.short=CST
-Australia/Yancowinna.generic.short=CT
-Australia/Yancowinna.standard.short=CST
-BET.daylight.short=BRST
-BET.generic.short=BRT
-BET.standard.short=BRT
-Brazil/Acre.daylight.short=ACST
-Brazil/Acre.generic.short=ACT
-Brazil/Acre.standard.short=ACT
-Brazil/DeNoronha.daylight.short=FNST
-Brazil/DeNoronha.generic.short=FNT
-Brazil/DeNoronha.standard.short=FNT
-Brazil/East.daylight.short=BRST
-Brazil/East.generic.short=BRT
-Brazil/East.standard.short=BRT
-Brazil/West.daylight.short=AMST
-Brazil/West.generic.short=AMT
-Brazil/West.standard.short=AMT
-BST.daylight.short=BDST
-BST.generic.short=BDT
-BST.standard.short=BDT
-Canada/Atlantic.daylight.short=ADT
-Canada/Atlantic.generic.short=AT
-Canada/Atlantic.standard.short=AST
-Canada/Central.daylight.short=CDT
-Canada/Central.generic.short=CT
-Canada/Central.standard.short=CST
-Canada/Eastern.daylight.short=EDT
-Canada/Eastern.generic.short=ET
-Canada/Eastern.standard.short=EST
-Canada/East-Saskatchewan.daylight.short=CDT
-Canada/East-Saskatchewan.generic.short=CT
-Canada/East-Saskatchewan.standard.short=CST
-Canada/Mountain.daylight.short=MDT
-Canada/Mountain.generic.short=MT
-Canada/Mountain.standard.short=MST
-Canada/Newfoundland.daylight.short=NDT
-Canada/Newfoundland.generic.short=NT
-Canada/Newfoundland.standard.short=NST
-Canada/Pacific.daylight.short=PDT
-Canada/Pacific.generic.short=PT
-Canada/Pacific.standard.short=PST
-Canada/Saskatchewan.daylight.short=CDT
-Canada/Saskatchewan.generic.short=CT
-Canada/Saskatchewan.standard.short=CST
-Canada/Yukon.daylight.short=PDT
-Canada/Yukon.generic.short=PT
-Canada/Yukon.standard.short=PST
-CAT.daylight.short=CAST
-CAT.generic.short=CAT
-CAT.standard.short=CAT
-CET.daylight.short=CEST
-CET.generic.short=CET
-CET.standard.short=CET
-Chile/Continental.daylight.short=CLST
-Chile/Continental.generic.short=CLT
-Chile/Continental.standard.short=CLT
-Chile/EasterIsland.daylight.short=EASST
-Chile/EasterIsland.generic.short=EAST
-Chile/EasterIsland.standard.short=EAST
-CNT.daylight.short=NDT
-CNT.generic.short=NT
-CNT.standard.short=NST
-CST6CDT.daylight.short=CDT
-CST6CDT.generic.short=CT
-CST6CDT.standard.short=CST
-CST.daylight.short=CDT
-CST.generic.short=CT
-CST.standard.short=CST
-CTT.daylight.short=CDT
-CTT.generic.short=CT
-CTT.standard.short=CST
-Cuba.daylight.short=CDT
-Cuba.generic.short=CT
-Cuba.standard.short=CST
-EAT.daylight.short=EAST
-EAT.generic.short=EAT
-EAT.standard.short=EAT
-ECT.daylight.short=CEST
-ECT.generic.short=CET
-ECT.standard.short=CET
-EET.daylight.short=EEST
-EET.generic.short=EET
-EET.standard.short=EET
-Egypt.daylight.short=EEST
-Egypt.generic.short=EET
-Egypt.standard.short=EET
-Eire.daylight.short=IST
-Eire.generic.short=IT
-Eire.standard.short=GMT
-EST5EDT.daylight.short=EDT
-EST5EDT.generic.short=ET
-EST5EDT.standard.short=EST
-EST.daylight.short=EDT
-EST.generic.short=ET
-EST.standard.short=EST
-Etc/Greenwich.daylight.short=GMT
-Etc/Greenwich.generic.short=GMT
-Etc/Greenwich.standard.short=GMT
-Etc/UCT.daylight.short=UTC
-Etc/UCT.generic.short=UTC
-Etc/UCT.standard.short=UTC
-Etc/Universal.daylight.short=UTC
-Etc/Universal.generic.short=UTC
-Etc/Universal.standard.short=UTC
-Etc/UTC.daylight.short=UTC
-Etc/UTC.generic.short=UTC
-Etc/UTC.standard.short=UTC
-Etc/Zulu.daylight.short=UTC
-Etc/Zulu.generic.short=UTC
-Etc/Zulu.standard.short=UTC
-Europe/Amsterdam.daylight.short=CEST
-Europe/Amsterdam.generic.short=CET
-Europe/Amsterdam.standard.short=CET
-Europe/Andorra.daylight.short=CEST
-Europe/Andorra.generic.short=CET
-Europe/Andorra.standard.short=CET
-Europe/Athens.daylight.short=EEST
-Europe/Athens.generic.short=EET
-Europe/Athens.standard.short=EET
-Europe/Belfast.daylight.short=BST
-Europe/Belfast.generic.short=BT
-Europe/Belfast.standard.short=GMT
-Europe/Belgrade.daylight.short=CEST
-Europe/Belgrade.generic.short=CET
-Europe/Belgrade.standard.short=CET
-Europe/Berlin.daylight.short=CEST
-Europe/Berlin.generic.short=CET
-Europe/Berlin.standard.short=CET
-Europe/Bratislava.daylight.short=CEST
-Europe/Bratislava.generic.short=CET
-Europe/Bratislava.standard.short=CET
-Europe/Brussels.daylight.short=CEST
-Europe/Brussels.generic.short=CET
-Europe/Brussels.standard.short=CET
-Europe/Bucharest.daylight.short=EEST
-Europe/Bucharest.generic.short=EET
-Europe/Bucharest.standard.short=EET
-Europe/Budapest.daylight.short=CEST
-Europe/Budapest.generic.short=CET
-Europe/Budapest.standard.short=CET
-Europe/Busingen.daylight.short=CEST
-Europe/Busingen.generic.short=CET
-Europe/Busingen.standard.short=CET
-Europe/Chisinau.daylight.short=EEST
-Europe/Chisinau.generic.short=EET
-Europe/Chisinau.standard.short=EET
-Europe/Copenhagen.daylight.short=CEST
-Europe/Copenhagen.generic.short=CET
-Europe/Copenhagen.standard.short=CET
-Europe/Dublin.daylight.short=IST
-Europe/Dublin.generic.short=IT
-Europe/Dublin.standard.short=GMT
-Europe/Gibraltar.daylight.short=CEST
-Europe/Gibraltar.generic.short=CET
-Europe/Gibraltar.standard.short=CET
-Europe/Guernsey.daylight.short=BST
-Europe/Guernsey.generic.short=BT
-Europe/Guernsey.standard.short=GMT
-Europe/Helsinki.daylight.short=EEST
-Europe/Helsinki.generic.short=EET
-Europe/Helsinki.standard.short=EET
-Europe/Isle_of_Man.daylight.short=BST
-Europe/Isle_of_Man.generic.short=BT
-Europe/Isle_of_Man.standard.short=GMT
-Europe/Istanbul.daylight.short=EEST
-Europe/Istanbul.generic.short=EET
-Europe/Istanbul.standard.short=EET
-Europe/Jersey.daylight.short=BST
-Europe/Jersey.generic.short=BT
-Europe/Jersey.standard.short=GMT
-Europe/Kaliningrad.daylight.short=FEST
-Europe/Kaliningrad.generic.short=FET
-Europe/Kaliningrad.standard.short=FET
-Europe/Kiev.daylight.short=EEST
-Europe/Kiev.generic.short=EET
-Europe/Kiev.standard.short=EET
-Europe/Lisbon.daylight.short=WEST
-Europe/Lisbon.generic.short=WET
-Europe/Lisbon.standard.short=WET
-Europe/Ljubljana.daylight.short=CEST
-Europe/Ljubljana.generic.short=CET
-Europe/Ljubljana.standard.short=CET
-Europe/London.daylight.short=BST
-Europe/London.generic.short=BT
-Europe/London.standard.short=GMT
-Europe/Luxembourg.daylight.short=CEST
-Europe/Luxembourg.generic.short=CET
-Europe/Luxembourg.standard.short=CET
-Europe/Madrid.daylight.short=CEST
-Europe/Madrid.generic.short=CET
-Europe/Madrid.standard.short=CET
-Europe/Malta.daylight.short=CEST
-Europe/Malta.generic.short=CET
-Europe/Malta.standard.short=CET
-Europe/Mariehamn.daylight.short=EEST
-Europe/Mariehamn.generic.short=EET
-Europe/Mariehamn.standard.short=EET
-Europe/Minsk.daylight.short=FEST
-Europe/Minsk.generic.short=FET
-Europe/Minsk.standard.short=FET
-Europe/Monaco.daylight.short=CEST
-Europe/Monaco.generic.short=CET
-Europe/Monaco.standard.short=CET
-Europe/Moscow.daylight.short=MSD
-Europe/Moscow.generic.short=MT
-Europe/Moscow.standard.short=MSK
-Europe/Nicosia.daylight.short=EEST
-Europe/Nicosia.generic.short=EET
-Europe/Nicosia.standard.short=EET
-Europe/Oslo.daylight.short=CEST
-Europe/Oslo.generic.short=CET
-Europe/Oslo.standard.short=CET
-Europe/Paris.daylight.short=CEST
-Europe/Paris.generic.short=CET
-Europe/Paris.standard.short=CET
-Europe/Podgorica.daylight.short=CEST
-Europe/Podgorica.generic.short=CET
-Europe/Podgorica.standard.short=CET
-Europe/Prague.daylight.short=CEST
-Europe/Prague.generic.short=CET
-Europe/Prague.standard.short=CET
-Europe/Riga.daylight.short=EEST
-Europe/Riga.generic.short=EET
-Europe/Riga.standard.short=EET
-Europe/Rome.daylight.short=CEST
-Europe/Rome.generic.short=CET
-Europe/Rome.standard.short=CET
-Europe/Samara.daylight.short=SAMST
-Europe/Samara.generic.short=SAMT
-Europe/Samara.standard.short=SAMT
-Europe/San_Marino.daylight.short=CEST
-Europe/San_Marino.generic.short=CET
-Europe/San_Marino.standard.short=CET
-Europe/Sarajevo.daylight.short=CEST
-Europe/Sarajevo.generic.short=CET
-Europe/Sarajevo.standard.short=CET
-Europe/Simferopol.daylight.short=EEST
-Europe/Simferopol.generic.short=EET
-Europe/Simferopol.standard.short=EET
-Europe/Skopje.daylight.short=CEST
-Europe/Skopje.generic.short=CET
-Europe/Skopje.standard.short=CET
-Europe/Sofia.daylight.short=EEST
-Europe/Sofia.generic.short=EET
-Europe/Sofia.standard.short=EET
-Europe/Stockholm.daylight.short=CEST
-Europe/Stockholm.generic.short=CET
-Europe/Stockholm.standard.short=CET
-Europe/Tallinn.daylight.short=EEST
-Europe/Tallinn.generic.short=EET
-Europe/Tallinn.standard.short=EET
-Europe/Tirane.daylight.short=CEST
-Europe/Tirane.generic.short=CET
-Europe/Tirane.standard.short=CET
-Europe/Tiraspol.daylight.short=EEST
-Europe/Tiraspol.generic.short=EET
-Europe/Tiraspol.standard.short=EET
-Europe/Uzhgorod.daylight.short=EEST
-Europe/Uzhgorod.generic.short=EET
-Europe/Uzhgorod.standard.short=EET
-Europe/Vaduz.daylight.short=CEST
-Europe/Vaduz.generic.short=CET
-Europe/Vaduz.standard.short=CET
-Europe/Vatican.daylight.short=CEST
-Europe/Vatican.generic.short=CET
-Europe/Vatican.standard.short=CET
-Europe/Vienna.daylight.short=CEST
-Europe/Vienna.generic.short=CET
-Europe/Vienna.standard.short=CET
-Europe/Vilnius.daylight.short=EEST
-Europe/Vilnius.generic.short=EET
-Europe/Vilnius.standard.short=EET
-Europe/Volgograd.daylight.short=VOLST
-Europe/Volgograd.generic.short=VOLT
-Europe/Volgograd.standard.short=VOLT
-Europe/Warsaw.daylight.short=CEST
-Europe/Warsaw.generic.short=CET
-Europe/Warsaw.standard.short=CET
-Europe/Zagreb.daylight.short=CEST
-Europe/Zagreb.generic.short=CET
-Europe/Zagreb.standard.short=CET
-Europe/Zaporozhye.daylight.short=EEST
-Europe/Zaporozhye.generic.short=EET
-Europe/Zaporozhye.standard.short=EET
-Europe/Zurich.daylight.short=CEST
-Europe/Zurich.generic.short=CET
-Europe/Zurich.standard.short=CET
-GB.daylight.short=BST
-GB-Eire.daylight.short=BST
-GB-Eire.generic.short=BT
-GB-Eire.standard.short=GMT
-GB.generic.short=BT
-GB.standard.short=GMT
-GMT.daylight.short=GMT
-GMT.generic.short=GMT
-GMT.standard.short=GMT
-Greenwich.daylight.short=GMT
-Greenwich.generic.short=GMT
-Greenwich.standard.short=GMT
-Hongkong.daylight.short=HKST
-Hongkong.generic.short=HKT
-Hongkong.standard.short=HKT
-HST.daylight.short=HDT
-HST.generic.short=HT
-HST.standard.short=HST
-Iceland.daylight.short=GMT
-Iceland.generic.short=GMT
-Iceland.standard.short=GMT
-IET.daylight.short=EDT
-IET.generic.short=ET
-IET.standard.short=EST
-Indian/Antananarivo.daylight.short=EAST
-Indian/Antananarivo.generic.short=EAT
-Indian/Antananarivo.standard.short=EAT
-Indian/Chagos.daylight.short=IOST
-Indian/Chagos.generic.short=IOT
-Indian/Chagos.standard.short=IOT
-Indian/Christmas.daylight.short=CXST
-Indian/Christmas.generic.short=CIT
-Indian/Christmas.standard.short=CXT
-Indian/Cocos.daylight.short=CCST
-Indian/Cocos.generic.short=CCT
-Indian/Cocos.standard.short=CCT
-Indian/Comoro.daylight.short=EAST
-Indian/Comoro.generic.short=EAT
-Indian/Comoro.standard.short=EAT
-Indian/Kerguelen.daylight.short=TFST
-Indian/Kerguelen.generic.short=TFT
-Indian/Kerguelen.standard.short=TFT
-Indian/Mahe.daylight.short=SCST
-Indian/Mahe.generic.short=SCT
-Indian/Mahe.standard.short=SCT
-Indian/Maldives.daylight.short=MVST
-Indian/Maldives.generic.short=MVT
-Indian/Maldives.standard.short=MVT
-Indian/Mauritius.daylight.short=MUST
-Indian/Mauritius.generic.short=MUT
-Indian/Mauritius.standard.short=MUT
-Indian/Mayotte.daylight.short=EAST
-Indian/Mayotte.generic.short=EAT
-Indian/Mayotte.standard.short=EAT
-Indian/Reunion.daylight.short=REST
-Indian/Reunion.generic.short=RET
-Indian/Reunion.standard.short=RET
-Iran.daylight.short=IRDT
-Iran.generic.short=IRT
-Iran.standard.short=IRST
-Israel.daylight.short=IDT
-Israel.generic.short=IT
-Israel.standard.short=IST
-IST.daylight.short=IDT
-IST.generic.short=IT
-IST.standard.short=IST
-Jamaica.daylight.short=EDT
-Jamaica.generic.short=ET
-Jamaica.standard.short=EST
-Japan.daylight.short=JDT
-Japan.generic.short=JT
-Japan.standard.short=JST
-JST.daylight.short=JDT
-JST.generic.short=JT
-JST.standard.short=JST
-Kwajalein.daylight.short=MHST
-Kwajalein.generic.short=MHT
-Kwajalein.standard.short=MHT
-Libya.daylight.short=EEST
-Libya.generic.short=EET
-Libya.standard.short=EET
-MET.daylight.short=MEST
-MET.generic.short=MET
-MET.standard.short=MET
-Mexico/BajaNorte.daylight.short=PDT
-Mexico/BajaNorte.generic.short=PT
-Mexico/BajaNorte.standard.short=PST
-Mexico/BajaSur.daylight.short=MDT
-Mexico/BajaSur.generic.short=MT
-Mexico/BajaSur.standard.short=MST
-Mexico/General.daylight.short=CDT
-Mexico/General.generic.short=CT
-Mexico/General.standard.short=CST
-MIT.daylight.short=WSDT
-MIT.generic.short=WST
-MIT.standard.short=WST
-MST7MDT.daylight.short=MDT
-MST7MDT.generic.short=MT
-MST7MDT.standard.short=MST
-MST.daylight.short=MDT
-MST.generic.short=MT
-MST.standard.short=MST
-Navajo.daylight.short=MDT
-Navajo.generic.short=MT
-Navajo.standard.short=MST
-NET.daylight.short=AMST
-NET.generic.short=AMT
-NET.standard.short=AMT
-NST.daylight.short=NZDT
-NST.generic.short=NZT
-NST.standard.short=NZST
-NZ-CHAT.daylight.short=CHADT
-NZ-CHAT.generic.short=CHAT
-NZ-CHAT.standard.short=CHAST
-NZ.daylight.short=NZDT
-NZ.generic.short=NZT
-NZ.standard.short=NZST
-Pacific/Apia.daylight.short=WSDT
-Pacific/Apia.generic.short=WST
-Pacific/Apia.standard.short=WST
-Pacific/Auckland.daylight.short=NZDT
-Pacific/Auckland.generic.short=NZT
-Pacific/Auckland.standard.short=NZST
-Pacific/Chatham.daylight.short=CHADT
-Pacific/Chatham.generic.short=CHAT
-Pacific/Chatham.standard.short=CHAST
-Pacific/Chuuk.daylight.short=CHUST
-Pacific/Chuuk.generic.short=CHUT
-Pacific/Chuuk.standard.short=CHUT
-Pacific/Easter.daylight.short=EASST
-Pacific/Easter.generic.short=EAST
-Pacific/Easter.standard.short=EAST
-Pacific/Efate.daylight.short=VUST
-Pacific/Efate.generic.short=VUT
-Pacific/Efate.standard.short=VUT
-Pacific/Enderbury.daylight.short=PHOST
-Pacific/Enderbury.generic.short=PHOT
-Pacific/Enderbury.standard.short=PHOT
-Pacific/Fakaofo.daylight.short=TKST
-Pacific/Fakaofo.generic.short=TKT
-Pacific/Fakaofo.standard.short=TKT
-Pacific/Fiji.daylight.short=FJST
-Pacific/Fiji.generic.short=FJT
-Pacific/Fiji.standard.short=FJT
-Pacific/Funafuti.daylight.short=TVST
-Pacific/Funafuti.generic.short=TVT
-Pacific/Funafuti.standard.short=TVT
-Pacific/Galapagos.daylight.short=GALST
-Pacific/Galapagos.generic.short=GALT
-Pacific/Galapagos.standard.short=GALT
-Pacific/Gambier.daylight.short=GAMST
-Pacific/Gambier.generic.short=GAMT
-Pacific/Gambier.standard.short=GAMT
-Pacific/Guadalcanal.daylight.short=SBST
-Pacific/Guadalcanal.generic.short=SBT
-Pacific/Guadalcanal.standard.short=SBT
-Pacific/Guam.daylight.short=ChDT
-Pacific/Guam.generic.short=ChT
-Pacific/Guam.standard.short=ChST
-Pacific/Honolulu.daylight.short=HDT
-Pacific/Honolulu.generic.short=HT
-Pacific/Honolulu.standard.short=HST
-Pacific/Johnston.daylight.short=HDT
-Pacific/Johnston.generic.short=HT
-Pacific/Johnston.standard.short=HST
-Pacific/Kiritimati.daylight.short=LINST
-Pacific/Kiritimati.generic.short=LINT
-Pacific/Kiritimati.standard.short=LINT
-Pacific/Kosrae.daylight.short=KOSST
-Pacific/Kosrae.generic.short=KOST
-Pacific/Kosrae.standard.short=KOST
-Pacific/Kwajalein.daylight.short=MHST
-Pacific/Kwajalein.generic.short=MHT
-Pacific/Kwajalein.standard.short=MHT
-Pacific/Majuro.daylight.short=MHST
-Pacific/Majuro.generic.short=MHT
-Pacific/Majuro.standard.short=MHT
-Pacific/Marquesas.daylight.short=MARST
-Pacific/Marquesas.generic.short=MART
-Pacific/Marquesas.standard.short=MART
-Pacific/Midway.daylight.short=SDT
-Pacific/Midway.generic.short=ST
-Pacific/Midway.standard.short=SST
-Pacific/Nauru.daylight.short=NRST
-Pacific/Nauru.generic.short=NRT
-Pacific/Nauru.standard.short=NRT
-Pacific/Niue.daylight.short=NUST
-Pacific/Niue.generic.short=NUT
-Pacific/Niue.standard.short=NUT
-Pacific/Norfolk.daylight.short=NFST
-Pacific/Norfolk.generic.short=NFT
-Pacific/Norfolk.standard.short=NFT
-Pacific/Noumea.daylight.short=NCST
-Pacific/Noumea.generic.short=NCT
-Pacific/Noumea.standard.short=NCT
-Pacific/Pago_Pago.daylight.short=SDT
-Pacific/Pago_Pago.generic.short=ST
-Pacific/Pago_Pago.standard.short=SST
-Pacific/Palau.daylight.short=PWST
-Pacific/Palau.generic.short=PWT
-Pacific/Palau.standard.short=PWT
-Pacific/Pitcairn.daylight.short=PDT
-Pacific/Pitcairn.generic.short=PT
-Pacific/Pitcairn.standard.short=PST
-Pacific/Pohnpei.daylight.short=PONST
-Pacific/Pohnpei.generic.short=PONT
-Pacific/Pohnpei.standard.short=PONT
-Pacific/Ponape.daylight.short=PONST
-Pacific/Ponape.generic.short=PONT
-Pacific/Ponape.standard.short=PONT
-Pacific/Port_Moresby.daylight.short=PGST
-Pacific/Port_Moresby.generic.short=PGT
-Pacific/Port_Moresby.standard.short=PGT
-Pacific/Rarotonga.daylight.short=CKHST
-Pacific/Rarotonga.generic.short=CKT
-Pacific/Rarotonga.standard.short=CKT
-Pacific/Saipan.daylight.short=ChDT
-Pacific/Saipan.generic.short=ChT
-Pacific/Saipan.standard.short=ChST
-Pacific/Samoa.daylight.short=SDT
-Pacific/Samoa.generic.short=ST
-Pacific/Samoa.standard.short=SST
-Pacific/Tahiti.daylight.short=TAHST
-Pacific/Tahiti.generic.short=TAHT
-Pacific/Tahiti.standard.short=TAHT
-Pacific/Tarawa.daylight.short=GILST
-Pacific/Tarawa.generic.short=GILT
-Pacific/Tarawa.standard.short=GILT
-Pacific/Tongatapu.daylight.short=TOST
-Pacific/Tongatapu.generic.short=TOT
-Pacific/Tongatapu.standard.short=TOT
-Pacific/Truk.daylight.short=CHUST
-Pacific/Truk.generic.short=CHUT
-Pacific/Truk.standard.short=CHUT
-Pacific/Wake.daylight.short=WAKST
-Pacific/Wake.generic.short=WAKT
-Pacific/Wake.standard.short=WAKT
-Pacific/Wallis.daylight.short=WFST
-Pacific/Wallis.generic.short=WFT
-Pacific/Wallis.standard.short=WFT
-Pacific/Yap.daylight.short=CHUST
-Pacific/Yap.generic.short=CHUT
-Pacific/Yap.standard.short=CHUT
-PLT.daylight.short=PKST
-PLT.generic.short=PKT
-PLT.standard.short=PKT
-PNT.daylight.short=MDT
-PNT.generic.short=MT
-PNT.standard.short=MST
-Poland.daylight.short=CEST
-Poland.generic.short=CET
-Poland.standard.short=CET
-Portugal.daylight.short=WEST
-Portugal.generic.short=WET
-Portugal.standard.short=WET
-PRC.daylight.short=CDT
-PRC.generic.short=CT
-PRC.standard.short=CST
-PRT.daylight.short=ADT
-PRT.generic.short=AT
-PRT.standard.short=AST
-PST8PDT.daylight.short=PDT
-PST8PDT.generic.short=PT
-PST8PDT.standard.short=PST
-PST.daylight.short=PDT
-PST.generic.short=PT
-PST.standard.short=PST
-ROK.daylight.short=KDT
-ROK.generic.short=KT
-ROK.standard.short=KST
-Singapore.daylight.short=SGST
-Singapore.generic.short=SGT
-Singapore.standard.short=SGT
-SST.daylight.short=SBST
-SST.generic.short=SBT
-SST.standard.short=SBT
-SystemV/AST4ADT.daylight.short=ADT
-SystemV/AST4ADT.generic.short=AT
-SystemV/AST4ADT.standard.short=AST
-SystemV/AST4.daylight.short=ADT
-SystemV/AST4.generic.short=AT
-SystemV/AST4.standard.short=AST
-SystemV/CST6CDT.daylight.short=CDT
-SystemV/CST6CDT.generic.short=CT
-SystemV/CST6CDT.standard.short=CST
-SystemV/CST6.daylight.short=CDT
-SystemV/CST6.generic.short=CT
-SystemV/CST6.standard.short=CST
-SystemV/EST5.daylight.short=EDT
-SystemV/EST5EDT.daylight.short=EDT
-SystemV/EST5EDT.generic.short=ET
-SystemV/EST5EDT.standard.short=EST
-SystemV/EST5.generic.short=ET
-SystemV/EST5.standard.short=EST
-SystemV/HST10.daylight.short=HDT
-SystemV/HST10.generic.short=HT
-SystemV/HST10.standard.short=HST
-SystemV/MST7.daylight.short=MDT
-SystemV/MST7.generic.short=MT
-SystemV/MST7MDT.daylight.short=MDT
-SystemV/MST7MDT.generic.short=MT
-SystemV/MST7MDT.standard.short=MST
-SystemV/MST7.standard.short=MST
-SystemV/PST8.daylight.short=PDT
-SystemV/PST8.generic.short=PT
-SystemV/PST8PDT.daylight.short=PDT
-SystemV/PST8PDT.generic.short=PT
-SystemV/PST8PDT.standard.short=PST
-SystemV/PST8.standard.short=PST
-SystemV/YST9.daylight.short=AKDT
-SystemV/YST9.generic.short=AKT
-SystemV/YST9.standard.short=AKST
-SystemV/YST9YDT.daylight.short=AKDT
-SystemV/YST9YDT.generic.short=AKT
-SystemV/YST9YDT.standard.short=AKST
-Turkey.daylight.short=EEST
-Turkey.generic.short=EET
-Turkey.standard.short=EET
-UCT.daylight.short=UTC
-UCT.generic.short=UTC
-UCT.standard.short=UTC
-Universal.daylight.short=UTC
-Universal.generic.short=UTC
-Universal.standard.short=UTC
-US/Alaska.daylight.short=AKDT
-US/Alaska.generic.short=AKT
-US/Alaska.standard.short=AKST
-US/Aleutian.daylight.short=HADT
-US/Aleutian.generic.short=HAT
-US/Aleutian.standard.short=HAST
-US/Arizona.daylight.short=MDT
-US/Arizona.generic.short=MT
-US/Arizona.standard.short=MST
-US/Central.daylight.short=CDT
-US/Central.generic.short=CT
-US/Central.standard.short=CST
-US/Eastern.daylight.short=EDT
-US/Eastern.generic.short=ET
-US/Eastern.standard.short=EST
-US/East-Indiana.daylight.short=EDT
-US/East-Indiana.generic.short=ET
-US/East-Indiana.standard.short=EST
-US/Hawaii.daylight.short=HDT
-US/Hawaii.generic.short=HT
-US/Hawaii.standard.short=HST
-US/Indiana-Starke.daylight.short=CDT
-US/Indiana-Starke.generic.short=CT
-US/Indiana-Starke.standard.short=CST
-US/Michigan.daylight.short=EDT
-US/Michigan.generic.short=ET
-US/Michigan.standard.short=EST
-US/Mountain.daylight.short=MDT
-US/Mountain.generic.short=MT
-US/Mountain.standard.short=MST
-US/Pacific.daylight.short=PDT
-US/Pacific.generic.short=PT
-US/Pacific-New.daylight.short=PDT
-US/Pacific-New.generic.short=PT
-US/Pacific-New.standard.short=PST
-US/Pacific.standard.short=PST
-US/Samoa.daylight.short=SDT
-US/Samoa.generic.short=ST
-US/Samoa.standard.short=SST
-UTC.daylight.short=UTC
-UTC.generic.short=UTC
-UTC.standard.short=UTC
-VST.daylight.short=ICST
-VST.generic.short=ICT
-VST.standard.short=ICT
-WET.daylight.short=WEST
-WET.generic.short=WET
-WET.standard.short=WET
-W-SU.daylight.short=MSD
-W-SU.generic.short=MT
-W-SU.standard.short=MSK
-Zulu.daylight.short=UTC
-Zulu.generic.short=UTC
-Zulu.standard.short=UTC
diff --git a/jdk/test/tools/jar/UpdateManifest.java b/jdk/test/tools/jar/UpdateManifest.java
index 6489718..7a69d96 100644
--- a/jdk/test/tools/jar/UpdateManifest.java
+++ b/jdk/test/tools/jar/UpdateManifest.java
@@ -39,6 +39,8 @@
static PrintStream err = System.err;
static boolean debug = true;
+ static final Logger JAR_LOGGER = Logger.getLogger("java.util.jar");
+
public static void realMain(String[] args) throws Throwable {
if (args.length == 0) {
debug = false;
@@ -47,7 +49,7 @@
out = new PrintStream(new FileOutputStream(tmp));
err = out;
// Attributes.read() can log a message we don't care to see.
- Logger.getLogger("java.util.jar").setLevel(Level.OFF);
+ JAR_LOGGER.setLevel(Level.OFF);
}
try { testManifestExistence(); } catch (Throwable t) { unexpected(t); }
diff --git a/jdk/test/tools/launcher/ChangeDataModel.java b/jdk/test/tools/launcher/ChangeDataModel.java
index 86909eb..31ee6f8 100644
--- a/jdk/test/tools/launcher/ChangeDataModel.java
+++ b/jdk/test/tools/launcher/ChangeDataModel.java
@@ -23,41 +23,43 @@
/**
* @test
- * @bug 4894330 4810347 6277269
+ * @bug 4894330 4810347 6277269 8029388
* @compile -XDignore.symbol.file ChangeDataModel.java
* @run main ChangeDataModel
* @summary Verify -d32 and -d64 options are accepted(rejected) on all platforms
* @author Joseph D. Darcy, ksrini
*/
import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
public class ChangeDataModel extends TestHelper {
private static final File TestJar = new File("test" + JAR_FILE_EXT);
+ private static final String OptionName = "Args";
+ private static final File TestOptionJar = new File(OptionName + JAR_FILE_EXT);
private static final String OPT_PREFIX = "ARCH_OPT:";
- public static void main(String... args) throws Exception {
+ static void createTestJar() throws Exception {
String[] code = {
" public static void main(String argv[]) {",
" System.out.println(\"" + OPT_PREFIX + "-d\" + System.getProperty(\"sun.arch.data.model\", \"none\"));",
- " }",
- };
+ " }",};
createJar(TestJar, code);
+ }
+ public static void main(String... args) throws Exception {
+ createTestJar();
+ createOptionsJar();
- // verify if data model flag for default data model is accepted
+ // verify if data model flag for default data model is accepted, also
+ // verify if the complimentary data model is rejected.
if (is32Bit) {
checkAcceptance(javaCmd, "-d32");
+ checkRejection(javaCmd, "-d64");
+ checkOption(javaCmd, "-d64");
} else if (is64Bit) {
checkAcceptance(javaCmd, "-d64");
- } else {
- throw new Error("unsupported data model");
- }
-
- // Negative tests: ensure that non-dual mode systems reject the
- // complementary (other) data model
- if (is32Bit) {
- checkRejection(javaCmd, "-d64");
- } else if (is64Bit) {
checkRejection(javaCmd, "-d32");
+ checkOption(javaCmd, "-d32");
} else {
throw new Error("unsupported data model");
}
@@ -81,4 +83,44 @@
throw new RuntimeException(message);
}
}
+
+ static void checkOption(String cmd, String dmodel) throws Exception {
+ TestResult tr = doExec(cmd, "-jar", TestOptionJar.getAbsolutePath(), dmodel);
+ verifyOption(tr, dmodel);
+
+ tr = doExec(cmd, "-cp", ".", OptionName, dmodel);
+ verifyOption(tr, dmodel);
+ }
+
+ static void verifyOption(TestResult tr, String dmodel) {
+ if (!tr.contains(OPT_PREFIX + dmodel)) {
+ System.out.println(tr);
+ String message = "app argument: " + dmodel + " not found.";
+ throw new RuntimeException(message);
+ }
+ if (!tr.isOK()) {
+ System.out.println(tr);
+ String message = "app argument: " + dmodel + " interpreted ?";
+ throw new RuntimeException(message);
+ }
+ }
+
+ static void createOptionsJar() throws Exception {
+ List<String> code = new ArrayList<>();
+ code.add("public class Args {");
+ code.add(" public static void main(String argv[]) {");
+ code.add(" for (String x : argv)");
+ code.add(" System.out.println(\"" + OPT_PREFIX + "\" + x);");
+ code.add(" }");
+ code.add("}");
+ File optionsJava = new File(OptionName + JAVA_FILE_EXT);
+ createFile(optionsJava, code);
+ File optionsClass = new File(OptionName + CLASS_FILE_EXT);
+
+ compile(optionsJava.getName());
+ createJar("cvfe",
+ TestOptionJar.getName(),
+ OptionName,
+ optionsClass.getName());
+ }
}
diff --git a/jdk/test/tools/launcher/VersionCheck.java b/jdk/test/tools/launcher/VersionCheck.java
index f43c210..a31ba57 100644
--- a/jdk/test/tools/launcher/VersionCheck.java
+++ b/jdk/test/tools/launcher/VersionCheck.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -23,7 +23,7 @@
/**
* @test
- * @bug 6545058 6611182
+ * @bug 6545058 6611182 8016209
* @summary validate and test -version, -fullversion, and internal, as well as
* sanity checks if a tool can be launched.
* @compile VersionCheck.java
diff --git a/jdk/test/tools/pack200/PackTestZip64.java b/jdk/test/tools/pack200/PackTestZip64.java
new file mode 100644
index 0000000..edfeb5a
--- /dev/null
+++ b/jdk/test/tools/pack200/PackTestZip64.java
@@ -0,0 +1,152 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+import java.io.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
+import java.util.jar.JarInputStream;
+import java.util.jar.JarOutputStream;
+import java.util.zip.ZipEntry;
+/*
+ * @test
+ * @bug 8029646
+ * @summary tests that native unpacker produces the same result as Java one
+ * @compile -XDignore.symbol.file Utils.java PackTestZip64.java
+ * @run main PackTestZip64
+ * @author kizune
+ */
+
+public class PackTestZip64 {
+ public static void main(String... args) throws Exception {
+ testPacking();
+ Utils.cleanup();
+ }
+
+ // 1KB buffer is enough to copy jar content
+ private static final byte[] BUFFER = new byte[1024];
+
+ static void testPacking() throws IOException {
+ // make a copy of the test specimen to local directory
+ File testFile = new File("tools_java.jar");
+ // Add a large number of small files to the golden jar
+ generateLargeJar(testFile, Utils.locateJar("golden.jar"));
+
+ List<String> cmdsList = new ArrayList<>();
+
+ // Repack file to get the Java-based result
+ cmdsList.add(Utils.getPack200Cmd());
+ cmdsList.add("--repack");
+ cmdsList.add(testFile.getName());
+ Utils.runExec(cmdsList);
+ cmdsList.clear();
+
+ // Pack file with pack200 and unpack in with unpack200
+ File packedFile = new File("tools.pack.gz");
+ cmdsList.add(Utils.getPack200Cmd());
+ cmdsList.add(packedFile.getName());
+ cmdsList.add(testFile.getName());
+ Utils.runExec(cmdsList);
+ cmdsList.clear();
+
+ File unpackedFile = new File("tools_native.jar");
+ cmdsList.add(Utils.getUnpack200Cmd());
+ cmdsList.add(packedFile.getName());
+ cmdsList.add(unpackedFile.getName());
+ Utils.runExec(cmdsList);
+
+ // Compare files binary
+ compareTwoFiles(testFile, unpackedFile);
+
+ // Cleaning up generated files
+ testFile.delete();
+ packedFile.delete();
+ unpackedFile.delete();
+ }
+
+ static void compareTwoFiles(File src, File dst) throws IOException {
+ if (!src.exists()) {
+ throw new IOException("File " + src.getName() + " does not exist!");
+ }
+
+ if(!dst.exists()) {
+ throw new IOException("File " + dst.getName() + " does not exist!");
+ }
+
+ BufferedInputStream srcis, dstis;
+ srcis = new BufferedInputStream(new FileInputStream(src));
+ dstis = new BufferedInputStream(new FileInputStream(dst));
+
+ int s = 0, d, pos = 0;
+ while (s != -1) { // Checking of just one result for EOF is enough
+ s = srcis.read();
+ d = dstis.read();
+
+ if (s != d) {
+ throw new IOException("Files are differ starting at position: "
+ + Integer.toHexString(pos));
+ }
+
+ pos++;
+ }
+
+ srcis.close();
+ dstis.close();
+ }
+
+ static void generateLargeJar(File result, File source) throws IOException {
+ if (result.exists()) {
+ result.delete();
+ }
+
+ try (JarOutputStream copyTo = new JarOutputStream(new FileOutputStream(result));
+ JarFile srcJar = new JarFile(source)) {
+
+ for (JarEntry je : Collections.list(srcJar.entries())) {
+ copyTo.putNextEntry(je);
+ if (!je.isDirectory()) {
+ copyStream(srcJar.getInputStream(je), copyTo);
+ }
+ copyTo.closeEntry();
+ }
+
+ int many = Short.MAX_VALUE * 2 + 2;
+
+ for (int i = 0 ; i < many ; i++) {
+ JarEntry e = new JarEntry("F-" + i + ".txt");
+ copyTo.putNextEntry(e);
+ }
+ copyTo.flush();
+ copyTo.close();
+ }
+ }
+
+ static void copyStream(InputStream in, OutputStream out) throws IOException {
+ int bytesRead;
+ while ((bytesRead = in.read(BUFFER))!= -1) {
+ out.write(BUFFER, 0, bytesRead);
+ }
+ }
+}
diff --git a/langtools/.hgtags b/langtools/.hgtags
index cb36a6e..1570b80 100644
--- a/langtools/.hgtags
+++ b/langtools/.hgtags
@@ -245,9 +245,14 @@
afe63d41c699e0e2ee910ef20c41b60603c852a1 jdk8-b121
232b9cf6303aaf451c7000c5f93dfea842e9e9ae jdk8-b122
a345cf28faca8cc49a28241a0a197fd520d25beb jdk8-b123
+d5aab8300d3b51e8043ab5fe5832ef6c6cbb5552 jdk8u20-b00
436176151e85455e74cd1441a2ba96e791c56785 jdk8-b124
+79dc4b992c0a385c1364592801781b747b85c6ca jdk8u20-b01
436176151e85455e74cd1441a2ba96e791c56785 jdk8-b125
ba24b63043626003929927f091e8b84190f39261 jdk8-b126
bb69217ed81202b1a490dc7150dc7cd073689341 jdk8-b127
09cdd3b493c0d13dc32206e5f12bb1a2f7465687 jdk8-b128
8fe7202d3c38784f3f14368e3954fc4e0394afa4 jdk8-b129
+26b33a6ea08810853af37e81c9b435465b289c98 jdk8u20-b02
+a07271bca831cf1bab35a2ffbcebd8e060b2734b jdk8u20-b03
+613c1d9930c9f650e3fc6926215931a85b679c66 jdk8u20-b04
diff --git a/langtools/.jcheck/conf b/langtools/.jcheck/conf
index 6d0dbe4..5bd24b1 100644
--- a/langtools/.jcheck/conf
+++ b/langtools/.jcheck/conf
@@ -1 +1,2 @@
project=jdk8
+bugids=dup
diff --git a/langtools/src/share/classes/com/sun/tools/classfile/Attribute.java b/langtools/src/share/classes/com/sun/tools/classfile/Attribute.java
index dc4fc9d..4271961 100644
--- a/langtools/src/share/classes/com/sun/tools/classfile/Attribute.java
+++ b/langtools/src/share/classes/com/sun/tools/classfile/Attribute.java
@@ -71,10 +71,6 @@
// defer init of standardAttributeClasses until after options set up
}
- public void setCompat(boolean compat) {
- this.compat = compat;
- }
-
public Attribute createAttribute(ClassReader cr, int name_index, byte[] data)
throws IOException {
if (standardAttributes == null) {
@@ -109,9 +105,10 @@
protected void init() {
standardAttributes = new HashMap<String,Class<? extends Attribute>>();
standardAttributes.put(AnnotationDefault, AnnotationDefault_attribute.class);
- standardAttributes.put(BootstrapMethods, BootstrapMethods_attribute.class);
+ standardAttributes.put(BootstrapMethods, BootstrapMethods_attribute.class);
standardAttributes.put(CharacterRangeTable, CharacterRangeTable_attribute.class);
standardAttributes.put(Code, Code_attribute.class);
+ standardAttributes.put(CompilationID, CompilationID_attribute.class);
standardAttributes.put(ConstantValue, ConstantValue_attribute.class);
standardAttributes.put(Deprecated, Deprecated_attribute.class);
standardAttributes.put(EnclosingMethod, EnclosingMethod_attribute.class);
@@ -120,29 +117,23 @@
standardAttributes.put(LineNumberTable, LineNumberTable_attribute.class);
standardAttributes.put(LocalVariableTable, LocalVariableTable_attribute.class);
standardAttributes.put(LocalVariableTypeTable, LocalVariableTypeTable_attribute.class);
-
- if (!compat) { // old javap does not recognize recent attributes
- standardAttributes.put(MethodParameters, MethodParameters_attribute.class);
- standardAttributes.put(CompilationID, CompilationID_attribute.class);
- standardAttributes.put(RuntimeInvisibleAnnotations, RuntimeInvisibleAnnotations_attribute.class);
- standardAttributes.put(RuntimeInvisibleParameterAnnotations, RuntimeInvisibleParameterAnnotations_attribute.class);
- standardAttributes.put(RuntimeVisibleAnnotations, RuntimeVisibleAnnotations_attribute.class);
- standardAttributes.put(RuntimeVisibleParameterAnnotations, RuntimeVisibleParameterAnnotations_attribute.class);
- standardAttributes.put(RuntimeVisibleTypeAnnotations, RuntimeVisibleTypeAnnotations_attribute.class);
- standardAttributes.put(RuntimeInvisibleTypeAnnotations, RuntimeInvisibleTypeAnnotations_attribute.class);
- standardAttributes.put(Signature, Signature_attribute.class);
- standardAttributes.put(SourceID, SourceID_attribute.class);
- }
-
+ standardAttributes.put(MethodParameters, MethodParameters_attribute.class);
+ standardAttributes.put(RuntimeInvisibleAnnotations, RuntimeInvisibleAnnotations_attribute.class);
+ standardAttributes.put(RuntimeInvisibleParameterAnnotations, RuntimeInvisibleParameterAnnotations_attribute.class);
+ standardAttributes.put(RuntimeVisibleAnnotations, RuntimeVisibleAnnotations_attribute.class);
+ standardAttributes.put(RuntimeVisibleParameterAnnotations, RuntimeVisibleParameterAnnotations_attribute.class);
+ standardAttributes.put(RuntimeVisibleTypeAnnotations, RuntimeVisibleTypeAnnotations_attribute.class);
+ standardAttributes.put(RuntimeInvisibleTypeAnnotations, RuntimeInvisibleTypeAnnotations_attribute.class);
+ standardAttributes.put(Signature, Signature_attribute.class);
standardAttributes.put(SourceDebugExtension, SourceDebugExtension_attribute.class);
standardAttributes.put(SourceFile, SourceFile_attribute.class);
+ standardAttributes.put(SourceID, SourceID_attribute.class);
standardAttributes.put(StackMap, StackMap_attribute.class);
standardAttributes.put(StackMapTable, StackMapTable_attribute.class);
standardAttributes.put(Synthetic, Synthetic_attribute.class);
}
private Map<String,Class<? extends Attribute>> standardAttributes;
- private boolean compat; // don't support recent attrs in compatibility mode
}
public static Attribute read(ClassReader cr) throws IOException {
diff --git a/langtools/src/share/classes/com/sun/tools/javac/code/Source.java b/langtools/src/share/classes/com/sun/tools/javac/code/Source.java
index fffa266..cbabdd3 100644
--- a/langtools/src/share/classes/com/sun/tools/javac/code/Source.java
+++ b/langtools/src/share/classes/com/sun/tools/javac/code/Source.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
diff --git a/langtools/src/share/classes/com/sun/tools/javac/code/Types.java b/langtools/src/share/classes/com/sun/tools/javac/code/Types.java
index 56b6a16..e1acb12 100644
--- a/langtools/src/share/classes/com/sun/tools/javac/code/Types.java
+++ b/langtools/src/share/classes/com/sun/tools/javac/code/Types.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -84,7 +84,6 @@
final boolean allowBoxing;
final boolean allowCovariantReturns;
final boolean allowObjectToPrimitiveCast;
- final boolean allowDefaultMethods;
final ClassReader reader;
final Check chk;
final Enter enter;
@@ -111,7 +110,6 @@
allowBoxing = source.allowBoxing();
allowCovariantReturns = source.allowCovariantReturns();
allowObjectToPrimitiveCast = source.allowObjectToPrimitiveCast();
- allowDefaultMethods = source.allowDefaultMethods();
reader = ClassReader.instance(context);
chk = Check.instance(context);
enter = Enter.instance(context);
diff --git a/langtools/src/share/classes/com/sun/tools/javac/comp/Attr.java b/langtools/src/share/classes/com/sun/tools/javac/comp/Attr.java
index e720f9f..d6340f3 100644
--- a/langtools/src/share/classes/com/sun/tools/javac/comp/Attr.java
+++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Attr.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -4653,10 +4653,19 @@
private void initTypeIfNeeded(JCTree that) {
if (that.type == null) {
- that.type = syms.unknownType;
+ if (that.hasTag(METHODDEF)) {
+ that.type = dummyMethodType();
+ } else {
+ that.type = syms.unknownType;
+ }
}
}
+ private Type dummyMethodType() {
+ return new MethodType(List.<Type>nil(), syms.unknownType,
+ List.<Type>nil(), syms.methodClass);
+ }
+
@Override
public void scan(JCTree tree) {
if (tree == null) return;
@@ -4712,7 +4721,8 @@
@Override
public void visitNewClass(JCNewClass that) {
if (that.constructor == null) {
- that.constructor = new MethodSymbol(0, names.init, syms.unknownType, syms.noSymbol);
+ that.constructor = new MethodSymbol(0, names.init,
+ dummyMethodType(), syms.noSymbol);
}
if (that.constructorType == null) {
that.constructorType = syms.unknownType;
@@ -4722,22 +4732,28 @@
@Override
public void visitAssignop(JCAssignOp that) {
- if (that.operator == null)
- that.operator = new OperatorSymbol(names.empty, syms.unknownType, -1, syms.noSymbol);
+ if (that.operator == null) {
+ that.operator = new OperatorSymbol(names.empty, dummyMethodType(),
+ -1, syms.noSymbol);
+ }
super.visitAssignop(that);
}
@Override
public void visitBinary(JCBinary that) {
- if (that.operator == null)
- that.operator = new OperatorSymbol(names.empty, syms.unknownType, -1, syms.noSymbol);
+ if (that.operator == null) {
+ that.operator = new OperatorSymbol(names.empty, dummyMethodType(),
+ -1, syms.noSymbol);
+ }
super.visitBinary(that);
}
@Override
public void visitUnary(JCUnary that) {
- if (that.operator == null)
- that.operator = new OperatorSymbol(names.empty, syms.unknownType, -1, syms.noSymbol);
+ if (that.operator == null) {
+ that.operator = new OperatorSymbol(names.empty, dummyMethodType(),
+ -1, syms.noSymbol);
+ }
super.visitUnary(that);
}
@@ -4753,7 +4769,8 @@
public void visitReference(JCMemberReference that) {
super.visitReference(that);
if (that.sym == null) {
- that.sym = new MethodSymbol(0, names.empty, syms.unknownType, syms.noSymbol);
+ that.sym = new MethodSymbol(0, names.empty, dummyMethodType(),
+ syms.noSymbol);
}
if (that.targets == null) {
that.targets = List.nil();
diff --git a/langtools/src/share/classes/com/sun/tools/javac/comp/Check.java b/langtools/src/share/classes/com/sun/tools/javac/comp/Check.java
index eb69735..9ae4fce 100644
--- a/langtools/src/share/classes/com/sun/tools/javac/comp/Check.java
+++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Check.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -2779,7 +2779,7 @@
validateDocumented(t.tsym, s, pos);
validateInherited(t.tsym, s, pos);
validateTarget(t.tsym, s, pos);
- validateDefault(t.tsym, s, pos);
+ validateDefault(t.tsym, pos);
}
private void validateValue(TypeSymbol container, TypeSymbol contained, DiagnosticPosition pos) {
@@ -2898,7 +2898,9 @@
/** Checks that s is a subset of t, with respect to ElementType
- * semantics, specifically {ANNOTATION_TYPE} is a subset of {TYPE}
+ * semantics, specifically {ANNOTATION_TYPE} is a subset of {TYPE},
+ * and {TYPE_USE} covers the set {ANNOTATION_TYPE, TYPE, TYPE_USE,
+ * TYPE_PARAMETER}.
*/
private boolean isTargetSubsetOf(Set<Name> s, Set<Name> t) {
// Check that all elements in s are present in t
@@ -2911,6 +2913,12 @@
} else if (n1 == names.TYPE && n2 == names.ANNOTATION_TYPE) {
currentElementOk = true;
break;
+ } else if (n1 == names.TYPE_USE &&
+ (n2 == names.TYPE ||
+ n2 == names.ANNOTATION_TYPE ||
+ n2 == names.TYPE_PARAMETER)) {
+ currentElementOk = true;
+ break;
}
}
if (!currentElementOk)
@@ -2919,7 +2927,7 @@
return true;
}
- private void validateDefault(Symbol container, Symbol contained, DiagnosticPosition pos) {
+ private void validateDefault(Symbol container, DiagnosticPosition pos) {
// validate that all other elements of containing type has defaults
Scope scope = container.members();
for(Symbol elm : scope.getElements()) {
diff --git a/langtools/src/share/classes/com/sun/tools/javac/comp/Flow.java b/langtools/src/share/classes/com/sun/tools/javac/comp/Flow.java
index 0c1b2d2..aa528a4 100644
--- a/langtools/src/share/classes/com/sun/tools/javac/comp/Flow.java
+++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Flow.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -1461,9 +1461,19 @@
this.names = names;
}
+ private boolean isInitialConstructor = false;
+
@Override
protected void markDead(JCTree tree) {
- inits.inclRange(returnadr, nextadr);
+ if (!isInitialConstructor) {
+ inits.inclRange(returnadr, nextadr);
+ } else {
+ for (int address = returnadr; address < nextadr; address++) {
+ if (!(isFinalUninitializedStaticField(vardecls[address].sym))) {
+ inits.incl(address);
+ }
+ }
+ }
uninits.inclRange(returnadr, nextadr);
}
@@ -1476,8 +1486,17 @@
return
sym.pos >= startPos &&
((sym.owner.kind == MTH ||
- ((sym.flags() & (FINAL | HASINIT | PARAMETER)) == FINAL &&
- classDef.sym.isEnclosedBy((ClassSymbol)sym.owner))));
+ isFinalUninitializedField(sym)));
+ }
+
+ boolean isFinalUninitializedField(VarSymbol sym) {
+ return sym.owner.kind == TYP &&
+ ((sym.flags() & (FINAL | HASINIT | PARAMETER)) == FINAL &&
+ classDef.sym.isEnclosedBy((ClassSymbol)sym.owner));
+ }
+
+ boolean isFinalUninitializedStaticField(VarSymbol sym) {
+ return isFinalUninitializedField(sym) && sym.isStatic();
}
/** Initialize new trackable variable by setting its address field
@@ -1731,10 +1750,9 @@
int returnadrPrev = returnadr;
Assert.check(pendingExits.isEmpty());
-
+ boolean lastInitialConstructor = isInitialConstructor;
try {
- boolean isInitialConstructor =
- TreeInfo.isInitialConstructor(tree);
+ isInitialConstructor = TreeInfo.isInitialConstructor(tree);
if (!isInitialConstructor) {
firstadr = nextadr;
@@ -1789,6 +1807,7 @@
nextadr = nextadrPrev;
firstadr = firstadrPrev;
returnadr = returnadrPrev;
+ isInitialConstructor = lastInitialConstructor;
}
}
diff --git a/langtools/src/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java b/langtools/src/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java
index 8aa6f51..242a591 100644
--- a/langtools/src/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java
+++ b/langtools/src/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -96,6 +96,9 @@
/** dump statistics about lambda code generation */
private boolean dumpLambdaToMethodStats;
+ /** force serializable representation, for stress testing **/
+ private final boolean forceSerializable;
+
/** Flag for alternate metafactories indicating the lambda object is intended to be serializable */
public static final int FLAG_SERIALIZABLE = 1 << 0;
@@ -131,6 +134,7 @@
Options options = Options.instance(context);
dumpLambdaToMethodStats = options.isSet("dumpLambdaToMethodStats");
attr = Attr.instance(context);
+ forceSerializable = options.isSet("forceSerializable");
}
// </editor-fold>
@@ -1694,6 +1698,9 @@
/** does this functional expression require serialization support? */
boolean isSerializable() {
+ if (forceSerializable) {
+ return true;
+ }
for (Type target : tree.targets) {
if (types.asSuper(target, syms.serializableType.tsym) != null) {
return true;
diff --git a/langtools/src/share/classes/com/sun/tools/javac/comp/Resolve.java b/langtools/src/share/classes/com/sun/tools/javac/comp/Resolve.java
index 2c86ce4..ea11419 100644
--- a/langtools/src/share/classes/com/sun/tools/javac/comp/Resolve.java
+++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Resolve.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -92,10 +92,9 @@
TreeInfo treeinfo;
Types types;
JCDiagnostic.Factory diags;
- public final boolean boxingEnabled; // = source.allowBoxing();
- public final boolean varargsEnabled; // = source.allowVarargs();
+ public final boolean boxingEnabled;
+ public final boolean varargsEnabled;
public final boolean allowMethodHandles;
- public final boolean allowDefaultMethods;
public final boolean allowStructuralMostSpecific;
private final boolean debugResolve;
private final boolean compactMethodDiags;
@@ -137,7 +136,6 @@
verboseResolutionMode = VerboseResolutionMode.getVerboseResolutionMode(options);
Target target = Target.instance(context);
allowMethodHandles = target.hasMethodHandles();
- allowDefaultMethods = source.allowDefaultMethods();
allowStructuralMostSpecific = source.allowStructuralMostSpecific();
polymorphicSignatureScope = new Scope(syms.noSymbol);
@@ -1681,7 +1679,6 @@
bestSoFar : methodNotFound;
for (InterfaceLookupPhase iphase2 : InterfaceLookupPhase.values()) {
- if (iphase2 == InterfaceLookupPhase.DEFAULT_OK && !allowDefaultMethods) break;
//keep searching for abstract methods
for (Type itype : itypes[iphase2.ordinal()]) {
if (!itype.isInterface()) continue; //skip j.l.Object (included by Types.closure())
@@ -1714,10 +1711,8 @@
//from superinterfaces)
if ((s.flags() & (ABSTRACT | INTERFACE | ENUM)) != 0) {
return this;
- } else if (rs.allowDefaultMethods) {
- return DEFAULT_OK;
} else {
- return null;
+ return DEFAULT_OK;
}
}
},
@@ -3341,9 +3336,9 @@
if ((env1.enclClass.sym.flags() & STATIC) != 0) staticOnly = true;
env1 = env1.outer;
}
- if (allowDefaultMethods && c.isInterface() &&
- name == names._super && !isStatic(env) &&
- types.isDirectSuperInterface(c, env.enclClass.sym)) {
+ if (c.isInterface() &&
+ name == names._super && !isStatic(env) &&
+ types.isDirectSuperInterface(c, env.enclClass.sym)) {
//this might be a default super call if one of the superinterfaces is 'c'
for (Type t : pruneInterfaces(env.enclClass.type)) {
if (t.tsym == c) {
diff --git a/langtools/src/share/classes/com/sun/tools/javac/jvm/ClassReader.java b/langtools/src/share/classes/com/sun/tools/javac/jvm/ClassReader.java
index 8dcf059..d044482 100644
--- a/langtools/src/share/classes/com/sun/tools/javac/jvm/ClassReader.java
+++ b/langtools/src/share/classes/com/sun/tools/javac/jvm/ClassReader.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -116,10 +116,6 @@
*/
boolean lintClassfile;
- /** Switch: allow default methods
- */
- boolean allowDefaultMethods;
-
/** Switch: preserve parameter names from the variable table.
*/
public boolean saveParameterNames;
@@ -307,7 +303,6 @@
allowVarargs = source.allowVarargs();
allowAnnotations = source.allowAnnotations();
allowSimplifiedVarargs = source.allowSimplifiedVarargs();
- allowDefaultMethods = source.allowDefaultMethods();
saveParameterNames = options.isSet("save-parameter-names");
cacheCompletionFailure = options.isUnset("dev");
diff --git a/langtools/src/share/classes/com/sun/tools/javac/parser/DocCommentParser.java b/langtools/src/share/classes/com/sun/tools/javac/parser/DocCommentParser.java
index b96c7c3..92c7120 100644
--- a/langtools/src/share/classes/com/sun/tools/javac/parser/DocCommentParser.java
+++ b/langtools/src/share/classes/com/sun/tools/javac/parser/DocCommentParser.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -1172,8 +1172,10 @@
DCText string = quotedString();
if (string != null) {
skipWhitespace();
- if (ch == '@')
+ if (ch == '@'
+ || ch == EOI && bp == buf.length - 1) {
return m.at(pos).See(List.<DCTree>of(string));
+ }
}
break;
diff --git a/langtools/src/share/classes/com/sun/tools/javac/processing/JavacRoundEnvironment.java b/langtools/src/share/classes/com/sun/tools/javac/processing/JavacRoundEnvironment.java
index b4b3856..3853ac0 100644
--- a/langtools/src/share/classes/com/sun/tools/javac/processing/JavacRoundEnvironment.java
+++ b/langtools/src/share/classes/com/sun/tools/javac/processing/JavacRoundEnvironment.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -26,11 +26,8 @@
package com.sun.tools.javac.processing;
import java.lang.annotation.Annotation;
-import com.sun.tools.javac.tree.JCTree.*;
import javax.annotation.processing.*;
import javax.lang.model.element.*;
-import javax.lang.model.type.DeclaredType;
-import javax.lang.model.type.TypeMirror;
import javax.lang.model.util.*;
import java.util.*;
@@ -114,58 +111,48 @@
*/
public Set<? extends Element> getElementsAnnotatedWith(TypeElement a) {
Set<Element> result = Collections.emptySet();
- Types typeUtil = processingEnv.getTypeUtils();
if (a.getKind() != ElementKind.ANNOTATION_TYPE)
throw new IllegalArgumentException(NOT_AN_ANNOTATION_TYPE + a);
- DeclaredType annotationTypeElement;
- TypeMirror tm = a.asType();
- if ( tm instanceof DeclaredType )
- annotationTypeElement = (DeclaredType) a.asType();
- else
- throw new AssertionError("Bad implementation type for " + tm);
-
- ElementScanner8<Set<Element>, DeclaredType> scanner =
- new AnnotationSetScanner(result, typeUtil);
+ ElementScanner8<Set<Element>, TypeElement> scanner =
+ new AnnotationSetScanner(result);
for (Element element : rootElements)
- result = scanner.scan(element, annotationTypeElement);
+ result = scanner.scan(element, a);
return result;
}
// Could be written as a local class inside getElementsAnnotatedWith
private class AnnotationSetScanner extends
- ElementScanner8<Set<Element>, DeclaredType> {
+ ElementScanner8<Set<Element>, TypeElement> {
// Insertion-order preserving set
Set<Element> annotatedElements = new LinkedHashSet<Element>();
- Types typeUtil;
- AnnotationSetScanner(Set<Element> defaultSet, Types typeUtil) {
+ AnnotationSetScanner(Set<Element> defaultSet) {
super(defaultSet);
- this.typeUtil = typeUtil;
}
@Override
- public Set<Element> visitType(TypeElement e, DeclaredType p) {
+ public Set<Element> visitType(TypeElement e, TypeElement p) {
// Type parameters are not considered to be enclosed by a type
scan(e.getTypeParameters(), p);
return scan(e.getEnclosedElements(), p);
}
@Override
- public Set<Element> visitExecutable(ExecutableElement e, DeclaredType p) {
+ public Set<Element> visitExecutable(ExecutableElement e, TypeElement p) {
// Type parameters are not considered to be enclosed by an executable
scan(e.getTypeParameters(), p);
return scan(e.getEnclosedElements(), p);
}
@Override
- public Set<Element> scan(Element e, DeclaredType p) {
+ public Set<Element> scan(Element e, TypeElement p) {
java.util.List<? extends AnnotationMirror> annotationMirrors =
processingEnv.getElementUtils().getAllAnnotationMirrors(e);
for (AnnotationMirror annotationMirror : annotationMirrors) {
- if (typeUtil.isSameType(annotationMirror.getAnnotationType(), p))
+ if (p.equals(annotationMirror.getAnnotationType().asElement()))
annotatedElements.add(e);
}
e.accept(this, p);
diff --git a/langtools/src/share/classes/com/sun/tools/javadoc/JavadocTool.java b/langtools/src/share/classes/com/sun/tools/javadoc/JavadocTool.java
index f30251a..b2e247a 100644
--- a/langtools/src/share/classes/com/sun/tools/javadoc/JavadocTool.java
+++ b/langtools/src/share/classes/com/sun/tools/javadoc/JavadocTool.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -30,6 +30,7 @@
import java.util.Collection;
import java.util.EnumSet;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import javax.tools.JavaFileManager.Location;
@@ -238,10 +239,13 @@
files = lb.toList();
}
+ Set<JavaFileObject> ufiles = new HashSet<>();
for (JavaFileObject fo : files) {
- // messager.notice("main.Loading_source_file", fn);
- trees.append(parse(fo));
- hasFiles = true;
+ if (ufiles.add(fo)) { // ignore duplicates
+ // messager.notice("main.Loading_source_file", fn);
+ trees.append(parse(fo));
+ hasFiles = true;
+ }
}
if (!hasFiles) {
diff --git a/langtools/src/share/classes/com/sun/tools/javap/AttributeWriter.java b/langtools/src/share/classes/com/sun/tools/javap/AttributeWriter.java
index 02795a5..33fcae7 100644
--- a/langtools/src/share/classes/com/sun/tools/javap/AttributeWriter.java
+++ b/langtools/src/share/classes/com/sun/tools/javap/AttributeWriter.java
@@ -226,10 +226,7 @@
}
public Void visitConstantValue(ConstantValue_attribute attr, Void ignore) {
- if (options.compat) // BUG 6622216 javap names some attributes incorrectly
- print("Constant value: ");
- else
- print("ConstantValue: ");
+ print("ConstantValue: ");
constantWriter.write(attr.constantvalue_index);
println();
return null;
@@ -290,20 +287,10 @@
public Void visitInnerClasses(InnerClasses_attribute attr, Void ignore) {
boolean first = true;
- if (options.compat) {
- writeInnerClassHeader();
- first = false;
- }
for (int i = 0 ; i < attr.classes.length; i++) {
InnerClasses_attribute.Info info = attr.classes[i];
//access
AccessFlags access_flags = info.inner_class_access_flags;
- if (options.compat) {
- // BUG 6622215: javap ignores certain relevant access flags
- access_flags = access_flags.ignore(ACC_STATIC | ACC_PROTECTED | ACC_PRIVATE | ACC_INTERFACE | ACC_SYNTHETIC | ACC_ENUM);
- // BUG 6622232: javap gets whitespace confused
- print(" ");
- }
if (options.checkAccess(access_flags)) {
if (first) {
writeInnerClassHeader();
@@ -345,11 +332,7 @@
}
private void writeInnerClassHeader() {
- if (options.compat) // BUG 6622216: javap names some attributes incorrectly
- print("InnerClass");
- else
- print("InnerClasses");
- println(":");
+ println("InnerClasses:");
indent(+1);
}
@@ -547,7 +530,6 @@
for (StackMapTable_attribute.stack_map_frame entry : attr.entries) {
w.write(entry);
}
- println();
indent(-1);
return null;
}
@@ -559,7 +541,6 @@
for (StackMapTable_attribute.stack_map_frame entry : attr.entries) {
w.write(entry);
}
- println();
indent(-1);
return null;
}
@@ -571,14 +552,12 @@
}
public Void visit_same_frame(StackMapTable_attribute.same_frame frame, Void p) {
- printHeader(frame);
- println(" /* same */");
+ printHeader(frame, "/* same */");
return null;
}
public Void visit_same_locals_1_stack_item_frame(StackMapTable_attribute.same_locals_1_stack_item_frame frame, Void p) {
- printHeader(frame);
- println(" /* same_locals_1_stack_item */");
+ printHeader(frame, "/* same_locals_1_stack_item */");
indent(+1);
printMap("stack", frame.stack);
indent(-1);
@@ -586,8 +565,7 @@
}
public Void visit_same_locals_1_stack_item_frame_extended(StackMapTable_attribute.same_locals_1_stack_item_frame_extended frame, Void p) {
- printHeader(frame);
- println(" /* same_locals_1_stack_item_frame_extended */");
+ printHeader(frame, "/* same_locals_1_stack_item_frame_extended */");
indent(+1);
println("offset_delta = " + frame.offset_delta);
printMap("stack", frame.stack);
@@ -596,8 +574,7 @@
}
public Void visit_chop_frame(StackMapTable_attribute.chop_frame frame, Void p) {
- printHeader(frame);
- println(" /* chop */");
+ printHeader(frame, "/* chop */");
indent(+1);
println("offset_delta = " + frame.offset_delta);
indent(-1);
@@ -605,8 +582,7 @@
}
public Void visit_same_frame_extended(StackMapTable_attribute.same_frame_extended frame, Void p) {
- printHeader(frame);
- println(" /* same_frame_extended */");
+ printHeader(frame, "/* same_frame_extended */");
indent(+1);
println("offset_delta = " + frame.offset_delta);
indent(-1);
@@ -614,21 +590,20 @@
}
public Void visit_append_frame(StackMapTable_attribute.append_frame frame, Void p) {
- printHeader(frame);
- println(" /* append */");
+ printHeader(frame, "/* append */");
indent(+1);
println("offset_delta = " + frame.offset_delta);
printMap("locals", frame.locals);
+ indent(-1);
return null;
}
public Void visit_full_frame(StackMapTable_attribute.full_frame frame, Void p) {
- printHeader(frame);
if (frame instanceof StackMap_attribute.stack_map_frame) {
+ printHeader(frame, "offset = " + frame.offset_delta);
indent(+1);
- println(" offset = " + frame.offset_delta);
} else {
- println(" /* full_frame */");
+ printHeader(frame, "/* full_frame */");
indent(+1);
println("offset_delta = " + frame.offset_delta);
}
@@ -638,8 +613,9 @@
return null;
}
- void printHeader(StackMapTable_attribute.stack_map_frame frame) {
- print(" frame_type = " + frame.frame_type);
+ void printHeader(StackMapTable_attribute.stack_map_frame frame, String extra) {
+ print("frame_type = " + frame.frame_type + " ");
+ println(extra);
}
void printMap(String name, StackMapTable_attribute.verification_type_info[] map) {
@@ -710,10 +686,7 @@
}
String toHex(byte b, int w) {
- if (options.compat) // BUG 6622260: javap prints negative bytes incorrectly in hex
- return toHex((int) b, w);
- else
- return toHex(b & 0xff, w);
+ return toHex(b & 0xff, w);
}
static String toHex(int i) {
diff --git a/langtools/src/share/classes/com/sun/tools/javap/BasicWriter.java b/langtools/src/share/classes/com/sun/tools/javap/BasicWriter.java
index 4c2d920..39a3c75 100644
--- a/langtools/src/share/classes/com/sun/tools/javap/BasicWriter.java
+++ b/langtools/src/share/classes/com/sun/tools/javap/BasicWriter.java
@@ -151,12 +151,22 @@
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
switch (c) {
+ case ' ':
+ pendingSpaces++;
+ break;
+
case '\n':
println();
break;
+
default:
if (buffer.length() == 0)
indent();
+ if (pendingSpaces > 0) {
+ for (int sp = 0; sp < pendingSpaces; sp++)
+ buffer.append(' ');
+ pendingSpaces = 0;
+ }
buffer.append(c);
}
}
@@ -164,6 +174,8 @@
}
protected void println() {
+ // ignore/discard pending spaces
+ pendingSpaces = 0;
out.println(buffer);
buffer.setLength(0);
}
@@ -173,26 +185,21 @@
}
protected void tab() {
- if (buffer.length() == 0)
- indent();
- space(indentCount * indentWidth + tabColumn - buffer.length());
+ int col = indentCount * indentWidth + tabColumn;
+ pendingSpaces += (col <= buffer.length() ? 1 : col - buffer.length());
}
private void indent() {
- space(indentCount * indentWidth);
+ pendingSpaces += (indentCount * indentWidth);
}
- private void space(int n) {
- for (int i = 0; i < n; i++)
- buffer.append(' ');
- }
-
- private PrintWriter out;
- private StringBuilder buffer;
+ private final PrintWriter out;
+ private final StringBuilder buffer;
private int indentCount;
- private int indentWidth;
- private int tabColumn;
+ private final int indentWidth;
+ private final int tabColumn;
private boolean pendingNewline;
+ private int pendingSpaces;
}
}
diff --git a/langtools/src/share/classes/com/sun/tools/javap/ClassWriter.java b/langtools/src/share/classes/com/sun/tools/javap/ClassWriter.java
index 02fec47..83b8ba8 100644
--- a/langtools/src/share/classes/com/sun/tools/javap/ClassWriter.java
+++ b/langtools/src/share/classes/com/sun/tools/javap/ClassWriter.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -120,7 +120,7 @@
public void write(ClassFile cf) {
setClassFile(cf);
- if ((options.sysInfo || options.verbose) && !options.compat) {
+ if (options.sysInfo || options.verbose) {
if (uri != null) {
if (uri.getScheme().equals("file"))
println("Classfile " + uri.getPath());
@@ -152,7 +152,7 @@
println("Compiled from \"" + getSourceFile((SourceFile_attribute) sfa) + "\"");
}
- if ((options.sysInfo || options.verbose) && !options.compat) {
+ if (options.sysInfo || options.verbose) {
indent(-1);
}
@@ -205,8 +205,7 @@
attrWriter.write(cf, cf.attributes, constant_pool);
println("minor version: " + cf.minor_version);
println("major version: " + cf.major_version);
- if (!options.compat)
- writeList("flags: ", flags.getClassFlags(), "\n");
+ writeList("flags: ", flags.getClassFlags(), "\n");
indent(-1);
constantWriter.writeConstantPool();
} else {
@@ -372,7 +371,7 @@
}
print(" ");
print(getFieldName(f));
- if (options.showConstants && !options.compat) { // BUG 4111861 print static final field contents
+ if (options.showConstants) {
Attribute a = f.attributes.get(Attribute.ConstantValue);
if (a instanceof ConstantValue_attribute) {
print(" = ");
@@ -385,21 +384,23 @@
indent(+1);
+ boolean showBlank = false;
+
if (options.showDescriptors)
println("descriptor: " + getValue(f.descriptor));
- if (options.verbose && !options.compat)
+ if (options.verbose)
writeList("flags: ", flags.getFieldFlags(), "\n");
if (options.showAllAttrs) {
for (Attribute attr: f.attributes)
attrWriter.write(f, attr, constant_pool);
- println();
+ showBlank = true;
}
indent(-1);
- if (options.showDisassembled || options.showLineAndLocalVariableTables)
+ if (showBlank || options.showDisassembled || options.showLineAndLocalVariableTables)
println();
}
@@ -485,7 +486,7 @@
println("descriptor: " + getValue(m.descriptor));
}
- if (options.verbose && !options.compat) {
+ if (options.verbose) {
writeList("flags: ", flags.getMethodFlags(), "\n");
}
@@ -498,25 +499,21 @@
report("Unexpected or invalid value for Code attribute");
}
- if (options.showDisassembled && !options.showAllAttrs) {
- if (code != null) {
- println("Code:");
- codeWriter.writeInstrs(code);
- codeWriter.writeExceptionTable(code);
- }
- }
-
- if (options.showLineAndLocalVariableTables) {
- if (code != null) {
- attrWriter.write(code, code.attributes.get(Attribute.LineNumberTable), constant_pool);
- attrWriter.write(code, code.attributes.get(Attribute.LocalVariableTable), constant_pool);
- }
- }
-
if (options.showAllAttrs) {
Attribute[] attrs = m.attributes.attrs;
for (Attribute attr: attrs)
attrWriter.write(m, attr, constant_pool);
+ } else if (code != null) {
+ if (options.showDisassembled) {
+ println("Code:");
+ codeWriter.writeInstrs(code);
+ codeWriter.writeExceptionTable(code);
+ }
+
+ if (options.showLineAndLocalVariableTables) {
+ attrWriter.write(code, code.attributes.get(Attribute.LineNumberTable), constant_pool);
+ attrWriter.write(code, code.attributes.get(Attribute.LocalVariableTable), constant_pool);
+ }
}
indent(-1);
@@ -555,13 +552,11 @@
}
Signature_attribute getSignature(Attributes attributes) {
- if (options.compat) // javap does not recognize recent attributes
- return null;
return (Signature_attribute) attributes.get(Attribute.Signature);
}
String adjustVarargs(AccessFlags flags, String params) {
- if (flags.is(ACC_VARARGS) && !options.compat) {
+ if (flags.is(ACC_VARARGS)) {
int i = params.lastIndexOf("[]");
if (i > 0)
return params.substring(0, i) + "..." + params.substring(i+2);
diff --git a/langtools/src/share/classes/com/sun/tools/javap/ConstantWriter.java b/langtools/src/share/classes/com/sun/tools/javap/ConstantWriter.java
index fad08ac..3a0813d 100644
--- a/langtools/src/share/classes/com/sun/tools/javap/ConstantWriter.java
+++ b/langtools/src/share/classes/com/sun/tools/javap/ConstantWriter.java
@@ -64,7 +64,7 @@
public Integer visitClass(CONSTANT_Class_info info, Void p) {
print("#" + info.name_index);
tab();
- println("// " + stringValue(info));
+ println("// " + stringValue(info));
return 1;
}
@@ -76,7 +76,7 @@
public Integer visitFieldref(CONSTANT_Fieldref_info info, Void p) {
print("#" + info.class_index + ".#" + info.name_and_type_index);
tab();
- println("// " + stringValue(info));
+ println("// " + stringValue(info));
return 1;
}
@@ -93,14 +93,14 @@
public Integer visitInterfaceMethodref(CONSTANT_InterfaceMethodref_info info, Void p) {
print("#" + info.class_index + ".#" + info.name_and_type_index);
tab();
- println("// " + stringValue(info));
+ println("// " + stringValue(info));
return 1;
}
public Integer visitInvokeDynamic(CONSTANT_InvokeDynamic_info info, Void p) {
print("#" + info.bootstrap_method_attr_index + ":#" + info.name_and_type_index);
tab();
- println("// " + stringValue(info));
+ println("// " + stringValue(info));
return 1;
}
@@ -112,21 +112,21 @@
public Integer visitNameAndType(CONSTANT_NameAndType_info info, Void p) {
print("#" + info.name_index + ":#" + info.type_index);
tab();
- println("// " + stringValue(info));
+ println("// " + stringValue(info));
return 1;
}
public Integer visitMethodref(CONSTANT_Methodref_info info, Void p) {
print("#" + info.class_index + ".#" + info.name_and_type_index);
tab();
- println("// " + stringValue(info));
+ println("// " + stringValue(info));
return 1;
}
public Integer visitMethodHandle(CONSTANT_MethodHandle_info info, Void p) {
print("#" + info.reference_kind.tag + ":#" + info.reference_index);
tab();
- println("// " + stringValue(info));
+ println("// " + stringValue(info));
return 1;
}
@@ -140,7 +140,7 @@
public Integer visitString(CONSTANT_String_info info, Void p) {
print("#" + info.string_index);
tab();
- println("// " + stringValue(info));
+ println("// " + stringValue(info));
return 1;
}
diff --git a/langtools/src/share/classes/com/sun/tools/javap/JavapTask.java b/langtools/src/share/classes/com/sun/tools/javap/JavapTask.java
index 0cafe02..be5c7de 100644
--- a/langtools/src/share/classes/com/sun/tools/javap/JavapTask.java
+++ b/langtools/src/share/classes/com/sun/tools/javap/JavapTask.java
@@ -195,48 +195,12 @@
}
},
-// new Option(false, "-all") {
-// void process(JavapTask task, String opt, String arg) {
-// task.options.showAllAttrs = true;
-// }
-// },
-
- new Option(false, "-h") {
- void process(JavapTask task, String opt, String arg) throws BadArgs {
- throw task.new BadArgs("err.h.not.supported");
- }
- },
-
- new Option(false, "-verify", "-verify-verbose") {
- void process(JavapTask task, String opt, String arg) throws BadArgs {
- throw task.new BadArgs("err.verify.not.supported");
- }
- },
-
new Option(false, "-sysinfo") {
void process(JavapTask task, String opt, String arg) {
task.options.sysInfo = true;
}
},
- new Option(false, "-Xold") {
- void process(JavapTask task, String opt, String arg) throws BadArgs {
- task.log.println(task.getMessage("warn.Xold.not.supported"));
- }
- },
-
- new Option(false, "-Xnew") {
- void process(JavapTask task, String opt, String arg) throws BadArgs {
- // ignore: this _is_ the new version
- }
- },
-
- new Option(false, "-XDcompat") {
- void process(JavapTask task, String opt, String arg) {
- task.options.compat = true;
- }
- },
-
new Option(false, "-XDdetails") {
void process(JavapTask task, String opt, String arg) {
task.options.details = EnumSet.allOf(InstructionDetailWriter.Kind.class);
@@ -309,7 +273,9 @@
void process(JavapTask task, String opt, String arg) throws BadArgs {
int sep = opt.indexOf(":");
try {
- task.options.indentWidth = Integer.valueOf(opt.substring(sep + 1));
+ int i = Integer.valueOf(opt.substring(sep + 1));
+ if (i > 0) // silently ignore invalid values
+ task.options.indentWidth = i;
} catch (NumberFormatException e) {
}
}
@@ -325,7 +291,9 @@
void process(JavapTask task, String opt, String arg) throws BadArgs {
int sep = opt.indexOf(":");
try {
- task.options.tabColumn = Integer.valueOf(opt.substring(sep + 1));
+ int i = Integer.valueOf(opt.substring(sep + 1));
+ if (i > 0) // silently ignore invalid values
+ task.options.tabColumn = i;
} catch (NumberFormatException e) {
}
}
@@ -466,7 +434,7 @@
} catch (BadArgs e) {
reportError(e.key, e.args);
if (e.showUsage) {
- log.println(getMessage("main.usage.summary", progname));
+ printLines(getMessage("main.usage.summary", progname));
}
return EXIT_CMDERR;
} catch (InternalError e) {
@@ -520,7 +488,7 @@
throw new BadArgs("err.unknown.option", arg).showUsage(true);
}
- if (!options.compat && options.accessOptions.size() > 1) {
+ if (options.accessOptions.size() > 1) {
StringBuilder sb = new StringBuilder();
for (String opt: options.accessOptions) {
if (sb.length() > 0)
@@ -561,8 +529,12 @@
}
}
- if (fileManager.handleOption(name, rest))
- return;
+ try {
+ if (fileManager.handleOption(name, rest))
+ return;
+ } catch (IllegalArgumentException e) {
+ throw new BadArgs("err.invalid.use.of.option", name).showUsage(true);
+ }
throw new BadArgs("err.unknown.option", name).showUsage(true);
}
@@ -581,8 +553,6 @@
SourceWriter sourceWriter = SourceWriter.instance(context);
sourceWriter.setFileManager(fileManager);
- attributeFactory.setCompat(options.compat);
-
int result = EXIT_OK;
for (String className: classes) {
@@ -878,27 +848,33 @@
}
private void showHelp() {
- log.println(getMessage("main.usage", progname));
+ printLines(getMessage("main.usage", progname));
for (Option o: recognizedOptions) {
String name = o.aliases[0].substring(1); // there must always be at least one name
if (name.startsWith("X") || name.equals("fullversion") || name.equals("h") || name.equals("verify"))
continue;
- log.println(getMessage("main.opt." + name));
+ printLines(getMessage("main.opt." + name));
}
String[] fmOptions = { "-classpath", "-cp", "-bootclasspath" };
for (String o: fmOptions) {
if (fileManager.isSupportedOption(o) == -1)
continue;
String name = o.substring(1);
- log.println(getMessage("main.opt." + name));
+ printLines(getMessage("main.opt." + name));
}
}
private void showVersion(boolean full) {
- log.println(version(full ? "full" : "release"));
+ printLines(version(full ? "full" : "release"));
}
+ private void printLines(String msg) {
+ log.println(msg.replace("\n", nl));
+ }
+
+ private static final String nl = System.getProperty("line.separator");
+
private static final String versionRBName = "com.sun.tools.javap.resources.version";
private static ResourceBundle versionRB;
diff --git a/langtools/src/share/classes/com/sun/tools/javap/Options.java b/langtools/src/share/classes/com/sun/tools/javap/Options.java
index 97e02d1..76edd81 100644
--- a/langtools/src/share/classes/com/sun/tools/javap/Options.java
+++ b/langtools/src/share/classes/com/sun/tools/javap/Options.java
@@ -86,8 +86,6 @@
public boolean showConstants;
public boolean sysInfo;
public boolean showInnerClasses;
- public int indentWidth = 2; // #spaces per indentWidth level
- public int tabColumn = 40; // column number for comments
-
- public boolean compat; // bug-for-bug compatibility mode with old javap
+ public int indentWidth = 2; // #spaces per indentWidth level; must be > 0
+ public int tabColumn = 40; // column number for comments; must be > 0
}
diff --git a/langtools/src/share/classes/com/sun/tools/javap/resources/javap.properties b/langtools/src/share/classes/com/sun/tools/javap/resources/javap.properties
index c77024f..861a676 100644
--- a/langtools/src/share/classes/com/sun/tools/javap/resources/javap.properties
+++ b/langtools/src/share/classes/com/sun/tools/javap/resources/javap.properties
@@ -6,7 +6,6 @@
err.crash=A serious internal error has occurred: {0}\nPlease file a bug report, and include the following information:\n{1}
err.end.of.file=unexpected end of file while reading {0}
err.file.not.found=file not found: {0}
-err.h.not.supported=-h is no longer available - use the 'javah' program
err.incompatible.options=bad combination of options: {0}
err.internal.error=internal error: {0} {1} {2}
err.invalid.arg.for.option=invalid argument for option: {0}
@@ -14,12 +13,11 @@
err.missing.arg=no value given for {0}
err.no.classes.specified=no classes specified
err.not.standard.file.manager=can only specify class files when using a standard file manager
+err.invalid.use.of.option=invalid use of option: {0}
err.unknown.option=unknown option: {0}
-err.verify.not.supported=-verify not supported
err.no.SourceFile.attribute=no SourceFile attribute
err.source.file.not.found=source file not found
err.bad.innerclasses.attribute=bad InnerClasses attribute for {0}
-warn.Xold.not.supported=-Xold is no longer available
main.usage.summary=\
Usage: {0} <options> <classes>\n\
@@ -80,7 +78,7 @@
\ -bootclasspath <path> Override location of bootstrap class files
main.opt.constants=\
-\ -constants Show static final constants
+\ -constants Show final constants
main.opt.sysinfo=\
diff --git a/langtools/test/tools/javac/T8030816/CrashLambdaExpressionWithNonAccessibleIdTest.java b/langtools/test/tools/javac/T8030816/CrashLambdaExpressionWithNonAccessibleIdTest.java
new file mode 100644
index 0000000..f873f2d
--- /dev/null
+++ b/langtools/test/tools/javac/T8030816/CrashLambdaExpressionWithNonAccessibleIdTest.java
@@ -0,0 +1,22 @@
+/*
+ * @test /nodynamiccopyright/
+ * @bug 8030816
+ * @summary javac can't compile program with lambda expression
+ * @compile/fail/ref=CrashLambdaExpressionWithNonAccessibleIdTest.out -XDrawDiagnostics CrashLambdaExpressionWithNonAccessibleIdTest.java
+ */
+
+/* This test must make sure that javac won't crash when compiling lambda
+ * containing an anonymous innerclass based on an unresolvable type.
+ */
+public class CrashLambdaExpressionWithNonAccessibleIdTest {
+ void m() {
+ m1(()-> {
+ new A(){
+ public void m11() {}
+ };
+ });
+
+ }
+
+ void m1(Runnable r) {}
+}
diff --git a/langtools/test/tools/javac/T8030816/CrashLambdaExpressionWithNonAccessibleIdTest.out b/langtools/test/tools/javac/T8030816/CrashLambdaExpressionWithNonAccessibleIdTest.out
new file mode 100644
index 0000000..d253b9c
--- /dev/null
+++ b/langtools/test/tools/javac/T8030816/CrashLambdaExpressionWithNonAccessibleIdTest.out
@@ -0,0 +1,3 @@
+CrashLambdaExpressionWithNonAccessibleIdTest.java:15:35: compiler.err.missing.ret.stmt
+CrashLambdaExpressionWithNonAccessibleIdTest.java:14:17: compiler.err.cant.resolve.location: kindname.class, A, , , (compiler.misc.location: kindname.class, CrashLambdaExpressionWithNonAccessibleIdTest, null)
+2 errors
diff --git a/langtools/test/tools/javac/annotations/repeatingAnnotations/8029017/TypeUseTarget.java b/langtools/test/tools/javac/annotations/repeatingAnnotations/8029017/TypeUseTarget.java
new file mode 100644
index 0000000..5af979d
--- /dev/null
+++ b/langtools/test/tools/javac/annotations/repeatingAnnotations/8029017/TypeUseTarget.java
@@ -0,0 +1,129 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/**
+ * @test
+ * @bug 8029017
+ * @summary sanity testing of ElementType validation for repeating annotations
+ * @compile TypeUseTarget.java
+ */
+
+import java.lang.annotation.*;
+
+public class TypeUseTarget {}
+
+
+// Case 1:
+@Target({
+ ElementType.TYPE_USE,
+})
+@Repeatable(Case1Container.class)
+@interface Case1 {}
+
+@Target({
+ ElementType.ANNOTATION_TYPE,
+ ElementType.TYPE,
+ ElementType.TYPE_USE,
+ ElementType.TYPE_PARAMETER,
+})
+@interface Case1Container {
+ Case1[] value();
+}
+
+
+// Case 2:
+@Target({
+ ElementType.TYPE_USE,
+})
+@Repeatable(Case2Container.class)
+@interface Case2 {}
+
+@Target({
+ ElementType.ANNOTATION_TYPE,
+ ElementType.TYPE,
+ ElementType.TYPE_USE,
+})
+@interface Case2Container {
+ Case2[] value();
+}
+
+
+// Case 3:
+@Target({
+ ElementType.TYPE_USE,
+})
+@Repeatable(Case3Container.class)
+@interface Case3 {}
+
+@Target({
+ ElementType.ANNOTATION_TYPE,
+ ElementType.TYPE,
+})
+@interface Case3Container {
+ Case3[] value();
+}
+
+
+// Case 4:
+@Target({
+ ElementType.TYPE_USE,
+})
+@Repeatable(Case4Container.class)
+@interface Case4 {}
+
+@Target({
+ ElementType.ANNOTATION_TYPE,
+})
+@interface Case4Container {
+ Case4[] value();
+}
+
+
+// Case 5:
+@Target({
+ ElementType.TYPE_USE,
+})
+@Repeatable(Case5Container.class)
+@interface Case5 {}
+
+@Target({
+ ElementType.TYPE,
+})
+@interface Case5Container {
+ Case5[] value();
+}
+
+
+// Case 6:
+@Target({
+ ElementType.TYPE_USE,
+})
+@Repeatable(Case6Container.class)
+@interface Case6 {}
+
+@Target({
+ ElementType.TYPE_PARAMETER,
+})
+@interface Case6Container {
+ Case6[] value();
+}
diff --git a/langtools/test/tools/javac/annotations/repeatingAnnotations/8029017/TypeUseTargetNeg.java b/langtools/test/tools/javac/annotations/repeatingAnnotations/8029017/TypeUseTargetNeg.java
new file mode 100644
index 0000000..02b57d0
--- /dev/null
+++ b/langtools/test/tools/javac/annotations/repeatingAnnotations/8029017/TypeUseTargetNeg.java
@@ -0,0 +1,100 @@
+/**
+ * @test /nodynamiccopyright/
+ * @bug 8029017
+ * @summary sanity testing of ElementType validation for repeating annotations
+ * @compile/fail/ref=TypeUseTargetNeg.out -XDrawDiagnostics TypeUseTargetNeg.java
+ */
+
+import java.lang.annotation.*;
+
+public class TypeUseTargetNeg {}
+
+// Case 1:
+@Target({
+ ElementType.TYPE_USE,
+})
+@Repeatable(FooContainer.class)
+@interface Foo {}
+
+@Target({
+ ElementType.ANNOTATION_TYPE,
+ ElementType.TYPE,
+ ElementType.TYPE_USE,
+ ElementType.TYPE_PARAMETER,
+ ElementType.FIELD,
+
+})
+@interface FooContainer {
+ Foo[] value();
+}
+
+
+// Case 2:
+@Target({
+ ElementType.TYPE_USE,
+})
+@Repeatable(BarContainer.class)
+@interface Bar {}
+
+@Target({
+ ElementType.ANNOTATION_TYPE,
+ ElementType.TYPE,
+ ElementType.TYPE_USE,
+ ElementType.METHOD,
+})
+@interface BarContainer {
+ Bar[] value();
+}
+
+
+// Case 3:
+@Target({
+ ElementType.TYPE_USE,
+})
+@Repeatable(BazContainer.class)
+@interface Baz {}
+
+@Target({
+ ElementType.ANNOTATION_TYPE,
+ ElementType.TYPE,
+ ElementType.PARAMETER,
+})
+@interface BazContainer {
+ Baz[] value();
+}
+
+
+// Case 4:
+@Target({
+ ElementType.TYPE_USE,
+})
+@Repeatable(QuxContainer.class)
+@interface Qux {}
+
+@interface QuxContainer {
+ Qux[] value();
+}
+
+
+// Case 5:
+@Target({})
+@Repeatable(QuuxContainer.class)
+@interface Quux {}
+
+@Target({
+ ElementType.TYPE_PARAMETER,
+})
+@interface QuuxContainer {
+ Quux[] value();
+}
+
+// Case 6:
+@Repeatable(QuuuxContainer.class)
+@interface Quuux {}
+
+@Target({
+ ElementType.TYPE_USE,
+})
+@interface QuuuxContainer {
+ Quuux[] value();
+}
diff --git a/langtools/test/tools/javac/annotations/repeatingAnnotations/8029017/TypeUseTargetNeg.out b/langtools/test/tools/javac/annotations/repeatingAnnotations/8029017/TypeUseTargetNeg.out
new file mode 100644
index 0000000..8bf4170
--- /dev/null
+++ b/langtools/test/tools/javac/annotations/repeatingAnnotations/8029017/TypeUseTargetNeg.out
@@ -0,0 +1,7 @@
+TypeUseTargetNeg.java:16:1: compiler.err.invalid.repeatable.annotation.incompatible.target: FooContainer, Foo
+TypeUseTargetNeg.java:36:1: compiler.err.invalid.repeatable.annotation.incompatible.target: BarContainer, Bar
+TypeUseTargetNeg.java:54:1: compiler.err.invalid.repeatable.annotation.incompatible.target: BazContainer, Baz
+TypeUseTargetNeg.java:71:1: compiler.err.invalid.repeatable.annotation.incompatible.target: QuxContainer, Qux
+TypeUseTargetNeg.java:81:1: compiler.err.invalid.repeatable.annotation.incompatible.target: QuuxContainer, Quux
+TypeUseTargetNeg.java:92:1: compiler.err.invalid.repeatable.annotation.incompatible.target: QuuuxContainer, Quuux
+6 errors
diff --git a/langtools/test/tools/javac/annotations/repeatingAnnotations/combo/ReflectionTest.java b/langtools/test/tools/javac/annotations/repeatingAnnotations/combo/ReflectionTest.java
index f0dbe37..d881245 100644
--- a/langtools/test/tools/javac/annotations/repeatingAnnotations/combo/ReflectionTest.java
+++ b/langtools/test/tools/javac/annotations/repeatingAnnotations/combo/ReflectionTest.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -23,7 +23,7 @@
/**
* @test
- * @bug 8001457
+ * @bug 8001457 8027477
* @author sogoel
* @summary Reflection api tests
* @build Helper
@@ -159,7 +159,12 @@
"SingleOnSuperContainerAndSingleOnSub_Inherited_Legacy",
"ContainerAndSingleOnSuperSingleOnSub_Inherited_Legacy",
"SingleAnnoWithContainer",
- "SingleOnSuperContainerAndSingleOnSub_Inherited");
+ "SingleOnSuperContainerAndSingleOnSub_Inherited",
+ "RepeatableOnSuperSingleOnSub_Inherited",
+ "SingleOnSuperRepeatableOnSub_Inherited",
+ "ContainerOnSuperSingleOnSub_Inherited",
+ "SingleOnSuperContainerOnSub_Inherited",
+ "ContainerAndSingleOnSuperSingleOnSub_Inherited");
if (orderingTestFailures.contains(testCase.toString())) {
CHECKORDERING = false;
} else
@@ -1612,323 +1617,323 @@
return files;
}
},
-// // Testcase not working as expected, JDK-8004912
-// RepeatableOnSuperSingleOnSub_Inherited(
-// "@ExpectedBase(value=Foo.class, "
-// + "getAnnotationVal = \"Foo\", "
-// + "getAnnotationsVals = {"
-// + "\"ExpectedBase\", \"ExpectedContainer\", \"Foo\", \"FooContainer\"}, "
-// + //override every annotation on superClass
-// "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"Foo\"}, "
-// + // ignores inherited annotations
-// "getDeclAnnoVal = \"Foo\", " // ignores inherited
-// + "getAnnosArgs = {\"Foo\"}, "
-// + "getDeclAnnosArgs = { \"Foo\" })", // ignores inherited
-// "@ExpectedContainer(value=FooContainer.class, "
-// + "getAnnotationVal = \"FooContainer\", "
-// + "getAnnotationsVals = {"
-// + "\"ExpectedBase\", \"ExpectedContainer\", \"Foo\", \"FooContainer\"}, "
-// + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"Foo\"}, "
-// + // ignores inherited annotations
-// "getDeclAnnoVal = \"NULL\", "
-// + "getAnnosArgs = {\"FooContainer\"}, "
-// + "getDeclAnnosArgs = {}) // ignores inherited ") {
+ // @ignore 8025924: Several test cases in repeatingAnnotations/combo/ReflectionTest
+ // fail with ordering issues
+ RepeatableOnSuperSingleOnSub_Inherited(
+ "@ExpectedBase(value=Foo.class, "
+ + "getAnnotationVal = \"@Foo(value=3)\", "
+ + "getAnnotationsVals = {"
+ + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=3)\", \"@FooContainer(value=[@Foo(value=1), @Foo(value=2)])\"}, "
+ + //override every annotation on superClass
+ "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=3)\"}, "
+ + // ignores inherited annotations
+ "getDeclAnnoVal = \"@Foo(value=3)\", " // ignores inherited
+ + "getAnnosArgs = {\"@Foo(value=3)\"}, "
+ + "getDeclAnnosArgs = { \"@Foo(value=3)\" })", // ignores inherited
+ "@ExpectedContainer(value=FooContainer.class, "
+ + "getAnnotationVal = \"@FooContainer(value=[@Foo(value=1), @Foo(value=2)])\", "
+ + "getAnnotationsVals = {"
+ + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=3)\", \"@FooContainer(value=[@Foo(value=1), @Foo(value=2)])\"}, "
+ + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=3)\"}, "
+ + // ignores inherited annotations
+ "getDeclAnnoVal = \"NULL\", "
+ + "getAnnosArgs = {\"@FooContainer(value=[@Foo(value=1), @Foo(value=2)])\"}, "
+ + "getDeclAnnosArgs = {}) // ignores inherited ") {
-// @Override
-// public Iterable<? extends JavaFileObject> getTestFiles(SrcType srcType,
-// String className) {
-// String anno = "";
-// String replaceVal = "";
-// String contents = "";
-// JavaFileObject srcFileObj = null;
-// Iterable<? extends JavaFileObject> files = null;
+ @Override
+ public Iterable<? extends JavaFileObject> getTestFiles(SrcType srcType,
+ String className) {
+ String anno = "";
+ String replaceVal = "";
+ String contents = "";
+ JavaFileObject srcFileObj = null;
+ Iterable<? extends JavaFileObject> files = null;
-// String expectedVals = "\n" + getExpectedBase() + "\n"
-// + getExpectedContainer() + "\n";
-// StringBuilder commonStmts = getCommonStmts(true);
+ String expectedVals = "\n" + getExpectedBase() + "\n"
+ + getExpectedContainer() + "\n";
+ StringBuilder commonStmts = getCommonStmts(true);
-// /*
-// Sample testSrc:
-// @Retention(RetentionPolicy.RUNTIME)
-// @Inherited
-// @Repeatable(FooContainer.class)
-// @interface Foo {int value() default Integer.MAX_VALUE;}
+ /*
+ Sample testSrc:
+ @Retention(RetentionPolicy.RUNTIME)
+ @Inherited
+ @Repeatable(FooContainer.class)
+ @interface Foo {int value() default Integer.MAX_VALUE;}
-// @Retention(RetentionPolicy.RUNTIME)
-// @Inherited
-// @interface FooContainer {
-// Foo[] value();
-// }
+ @Retention(RetentionPolicy.RUNTIME)
+ @Inherited
+ @interface FooContainer {
+ Foo[] value();
+ }
-// @Foo() @Foo
-// class SuperClass { }
+ @Foo(1) @Foo(2)
+ class SuperClass { }
-// @ExpectedBase
-// @ExpectedContainer
-// @Foo
-// class SubClass extends SuperClass { }
-// */
-// //@Inherited only works for classes, no switch cases for method, field, package
+ @ExpectedBase
+ @ExpectedContainer
+ @Foo(3)
+ class SubClass extends SuperClass { }
+ */
+ //@Inherited only works for classes, no switch cases for method, field, package
+ if (srcType == SrcType.CLASS) {
+ //Contents for SuperClass
+ anno = Helper.ContentVars.REPEATABLEANNO.getVal();
+ replaceVal = commonStmts + "\n" + anno;
+ String superClassContents = srcType.getTemplate()
+ .replace("#CN", SUPERCLASS)
+ .replace("#REPLACE", replaceVal);
-// if (srcType == SrcType.CLASS) {
-// //Contents for SuperClass
-// anno = Helper.ContentVars.REPEATABLEANNO.getVal();
-// replaceVal = commonStmts + "\n" + anno;
-// String superClassContents = srcType.getTemplate()
-// .replace("#CN", SUPERCLASS)
-// .replace("#REPLACE", replaceVal);
+ //Contents for SubClass that extends SuperClass
+ anno = "@Foo(3)";
+ replaceVal = expectedVals + "\n" + anno;
+ String subClassContents = SrcType.CLASSEXTENDS.getTemplate()
+ .replace("#CN", className)
+ .replace("#SN", SUPERCLASS)
+ .replace("#REPLACE", replaceVal);
+ contents = superClassContents + subClassContents;
+ srcFileObj = Helper.getFile(className, contents);
+ files = Arrays.asList(srcFileObj);
+ }
+ return files;
+ }
+ },
+ // @ignore 8025924: Several test cases in repeatingAnnotations/combo/ReflectionTest
+ // fail with ordering issues
+ SingleOnSuperRepeatableOnSub_Inherited(
+ "@ExpectedBase(value=Foo.class, "
+ + "getAnnotationVal = \"@Foo(value=0)\", "
+ + "getAnnotationsVals = {"
+ + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=0)\", \"@FooContainer(value=[@Foo(value=1), @Foo(value=2)])\"}, "
+ + //override every annotation on superClass
+ "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer(value=[@Foo(value=1), @Foo(value=2)])\"}, "
+ + // ignores inherited annotations
+ "getDeclAnnoVal = \"NULL\","// ignores inherited
+ + "getAnnosArgs = {\"@Foo(value=1)\", \"@Foo(value=2)\"}, "
+ + "getDeclAnnosArgs = { \"@Foo(value=1)\", \"@Foo(value=2)\"})",
+ "@ExpectedContainer(value=FooContainer.class, "
+ + "getAnnotationVal = \"@FooContainer(value=[@Foo(value=1), @Foo(value=2)])\", "
+ + "getAnnotationsVals = {"
+ + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=0)\", \"@FooContainer(value=[@Foo(value=1), @Foo(value=2)])\"}, "
+ + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer(value=[@Foo(value=1), @Foo(value=2)])\"}, "
+ + // ignores inherited annotations
+ "getDeclAnnoVal = \"@FooContainer(value=[@Foo(value=1), @Foo(value=2)])\", "// ignores inherited
+ + "getAnnosArgs = {\"@FooContainer(value=[@Foo(value=1), @Foo(value=2)])\"}, "
+ + "getDeclAnnosArgs = {\"@FooContainer(value=[@Foo(value=1), @Foo(value=2)])\"})") {
-// //Contents for SubClass that extends SuperClass
-// anno = "@Foo(0)";
-// replaceVal = expectedVals + "\n" + anno;
-// String subClassContents = SrcType.CLASSEXTENDS.getTemplate()
-// .replace("#CN", className)
-// .replace("#SN", SUPERCLASS)
-// .replace("#REPLACE", replaceVal);
-// contents = superClassContents + subClassContents;
-// srcFileObj = Helper.getFile(className, contents);
-// files = Arrays.asList(srcFileObj);
-// }
-// return files;
-// }
-// },
-// //Testcase not working as expected, JDK-8004912
-// SingleOnSuperRepeatableOnSub_Inherited(
-// "@ExpectedBase(value=Foo.class, "
-// + "getAnnotationVal = \"Foo\", "
-// + "getAnnotationsVals = {"
-// + "\"ExpectedBase\", \"ExpectedContainer\", \"Foo\", \"FooContainer\"}, "
-// + //override every annotation on superClass
-// "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"FooContainer\"}, "
-// + // ignores inherited annotations
-// "getDeclAnnoVal = \"NULL\","// ignores inherited
-// + "getAnnosArgs = {\"Foo\", \"Foo\"}, "
-// + "getDeclAnnosArgs = { \"Foo\", \"Foo\"})",
-// "@ExpectedContainer(value=FooContainer.class, "
-// + "getAnnotationVal = \"FooContainer\", "
-// + "getAnnotationsVals = {"
-// + "\"ExpectedBase\", \"ExpectedContainer\", \"Foo\", \"FooContainer\"}, "
-// + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"FooContainer\"}, "
-// + // ignores inherited annotations
-// "getDeclAnnoVal = \"FooContainer\", "// ignores inherited
-// + "getAnnosArgs = {\"FooContainer\"}, "
-// + "getDeclAnnosArgs = {\"FooContainer\"})") {
+ @Override
+ public Iterable<? extends JavaFileObject> getTestFiles(SrcType srcType,
+ String className) {
+ String anno = "";
+ String replaceVal = "";
+ String contents = "";
+ JavaFileObject srcFileObj = null;
+ Iterable<? extends JavaFileObject> files = null;
-// @Override
-// public Iterable<? extends JavaFileObject> getTestFiles(SrcType srcType,
-// String className) {
-// String anno = "";
-// String replaceVal = "";
-// String contents = "";
-// JavaFileObject srcFileObj = null;
-// Iterable<? extends JavaFileObject> files = null;
+ String expectedVals = "\n" + getExpectedBase() + "\n"
+ + getExpectedContainer() + "\n";
+ StringBuilder commonStmts = getCommonStmts(true);
-// String expectedVals = "\n" + getExpectedBase() + "\n"
-// + getExpectedContainer() + "\n";
-// StringBuilder commonStmts = getCommonStmts(true);
+ /*
+ Sample testSrc:
+ @Retention(RetentionPolicy.RUNTIME)
+ @Inherited
+ @Repeatable(FooContainer.class)
+ @interface Foo {int value() default Integer.MAX_VALUE;}
-// /*
-// Sample testSrc:
-// @Retention(RetentionPolicy.RUNTIME)
-// @Inherited
-// @Repeatable(FooContainer.class)
-// @interface Foo {int value() default Integer.MAX_VALUE;}
+ @Retention(RetentionPolicy.RUNTIME)
+ @Inherited
+ @interface FooContainer {
+ Foo[] value();
+ }
-// @Retention(RetentionPolicy.RUNTIME)
-// @Inherited
-// @interface FooContainer {
-// Foo[] value();
-// }
+ @Foo(0)
+ class SuperClass { }
-// @Foo()
-// class SuperClass { }
+ @ExpectedBase
+ @ExpectedContainer
+ @Foo(1) @Foo(2)
+ class SubClass extends SuperClass { }
+ */
+ //@Inherited only works for classes, no switch cases for method, field, package
+ if (srcType == SrcType.CLASS) {
+ //Contents for SuperClass
+ anno = Helper.ContentVars.BASEANNO.getVal();
+ replaceVal = commonStmts + "\n" + anno;
+ String superClassContents = srcType.getTemplate()
+ .replace("#CN", SUPERCLASS)
+ .replace("#REPLACE", replaceVal);
-// @ExpectedBase
-// @ExpectedContainer
-// @Foo @Foo
-// class SubClass extends SuperClass { }
-// */
+ //Contents for SubClass that extends SuperClass
+ anno = Helper.ContentVars.REPEATABLEANNO.getVal();
+ replaceVal = expectedVals + "\n" + anno;
+ String subClassContents = SrcType.CLASSEXTENDS.getTemplate()
+ .replace("#CN", className)
+ .replace("#SN", SUPERCLASS)
+ .replace("#REPLACE", replaceVal);
-// //@Inherited only works for classes, no switch cases for method, field, package
-// if (srcType == SrcType.CLASS) {
-// //Contents for SuperClass
-// anno = "@Foo(0)";
-// replaceVal = commonStmts + "\n" + anno;
-// String superClassContents = srcType.getTemplate()
-// .replace("#CN", SUPERCLASS)
-// .replace("#REPLACE", replaceVal);
+ contents = superClassContents + subClassContents;
+ srcFileObj = Helper.getFile(className, contents);
+ files = Arrays.asList(srcFileObj);
+ }
+ return files;
+ }
+ },
+ // @ignore 8025924: Several test cases in repeatingAnnotations/combo/ReflectionTest
+ // fail with ordering issues
+ ContainerOnSuperSingleOnSub_Inherited(
+ "@ExpectedBase(value=Foo.class, "
+ + "getAnnotationVal = \"@Foo(value=0)\", "
+ + "getAnnotationsVals = {"
+ + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=0)\", \"@FooContainer(value=[@Foo(value=1), @Foo(value=2)])\"}, "
+ + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=0)\"},"
+ + "getDeclAnnoVal = \"@Foo(value=0)\","
+ + "getAnnosArgs = {\"@Foo(value=0)\"},"
+ + "getDeclAnnosArgs = {\"@Foo(value=0)\"})",
+ "@ExpectedContainer(value=FooContainer.class, "
+ + "getAnnotationVal = \"@FooContainer(value=[@Foo(value=1), @Foo(value=2)])\", "
+ + "getAnnotationsVals = {"
+ + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=0)\", \"@FooContainer(value=[@Foo(value=1), @Foo(value=2)])\"}, "
+ + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=0)\"},"
+ + "getDeclAnnoVal = \"NULL\","
+ + "getAnnosArgs = {\"@FooContainer(value=[@Foo(value=1), @Foo(value=2)])\"},"
+ + "getDeclAnnosArgs = {})") {
-// //Contents for SubClass that extends SuperClass
-// anno = Helper.ContentVars.REPEATABLEANNO.getVal();
-// replaceVal = expectedVals + "\n" + anno;
-// String subClassContents = SrcType.CLASSEXTENDS.getTemplate()
-// .replace("#CN", className)
-// .replace("#SN", SUPERCLASS)
-// .replace("#REPLACE", replaceVal);
+ @Override
+ public Iterable<? extends JavaFileObject> getTestFiles(SrcType srcType,
+ String className) {
+ String anno = "";
+ String replaceVal = "";
+ String contents = "";
+ JavaFileObject srcFileObj = null;
+ Iterable<? extends JavaFileObject> files = null;
-// contents = superClassContents + subClassContents;
-// srcFileObj = Helper.getFile(className, contents);
-// files = Arrays.asList(srcFileObj);
-// }
-// return files;
-// }
-// },
-// //Testcase not working as expected, JDK-8004912
-// ContainerOnSuperSingleOnSub_Inherited(
-// "@ExpectedBase(value=Foo.class, "
-// + "getAnnotationVal = \"Foo\", "
-// + "getAnnotationsVals = {"
-// + "\"ExpectedBase\", \"ExpectedContainer\", \"Foo\", \"FooContainer\"}, "
-// + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"Foo\"},"
-// + "getDeclAnnoVal = \"Foo\","
-// + "getAnnosArgs = {\"Foo\"},"
-// + "getDeclAnnosArgs = {\"Foo\"})",
-// "@ExpectedContainer(value=FooContainer.class, "
-// + "getAnnotationVal = \"FooContainer\", "
-// + "getAnnotationsVals = {"
-// + "\"ExpectedBase\", \"ExpectedContainer\", \"Foo\", \"FooContainer\"}, "
-// + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"Foo\"},"
-// + "getDeclAnnoVal = \"NULL\","
-// + "getAnnosArgs = {\"FooContainer\"},"
-// + "getDeclAnnosArgs = {})") {
+ String expectedVals = "\n" + getExpectedBase() + "\n"
+ + getExpectedContainer() + "\n";
+ StringBuilder commonStmts = getCommonStmts(true);
-// @Override
-// public Iterable<? extends JavaFileObject> getTestFiles(SrcType srcType,
-// String className) {
-// String anno = "";
-// String replaceVal = "";
-// String contents = "";
-// JavaFileObject srcFileObj = null;
-// Iterable<? extends JavaFileObject> files = null;
+ /*
+ Sample testSrc:
+ @Retention(RetentionPolicy.RUNTIME)
+ @Inherited
+ @Repeatable(FooContainer.class)
+ @interface Foo {int value() default Integer.MAX_VALUE;}
-// String expectedVals = "\n" + getExpectedBase() + "\n"
-// + getExpectedContainer() + "\n";
-// StringBuilder commonStmts = getCommonStmts(true);
+ @Retention(RetentionPolicy.RUNTIME)
+ @Inherited
+ @interface FooContainer {
+ Foo[] value();
+ }
-// /*
-// Sample testSrc:
-// @Retention(RetentionPolicy.RUNTIME)
-// @Inherited
-// @Repeatable(FooContainer.class)
-// @interface Foo {int value() default Integer.MAX_VALUE;}
+ @FooContainer(value = {@Foo(1), @Foo(2)})
+ class SuperClass { }
-// @Retention(RetentionPolicy.RUNTIME)
-// @Inherited
-// @interface FooContainer {
-// Foo[] value();
-// }
+ @ExpectedBase
+ @ExpectedContainer
+ @Foo(0)
+ class SubClass extends SuperClass { }
+ */
+ //@Inherited only works for classes, no switch cases for method, field, package
+ if (srcType == SrcType.CLASS) {
+ //Contents for SuperClass
+ anno = Helper.ContentVars.LEGACYCONTAINER.getVal();
+ replaceVal = commonStmts + "\n" + anno;
+ String superClassContents = srcType.getTemplate()
+ .replace("#CN", SUPERCLASS)
+ .replace("#REPLACE", replaceVal);
-// @FooContainer(value = {@Foo, @Foo})
-// class SuperClass { }
+ //Contents for SubClass that extends SuperClass
+ anno = Helper.ContentVars.BASEANNO.getVal();
+ replaceVal = expectedVals + "\n" + anno;
+ String subClassContents = SrcType.CLASSEXTENDS.getTemplate()
+ .replace("#CN", className)
+ .replace("#SN", SUPERCLASS)
+ .replace("#REPLACE", replaceVal);
-// @ExpectedBase
-// @ExpectedContainer
-// @Foo
-// class SubClass extends SuperClass { }
-// */
+ contents = superClassContents + subClassContents;
+ srcFileObj = Helper.getFile(className, contents);
+ files = Arrays.asList(srcFileObj);
+ }
+ return files;
+ }
+ },
+ // @ignore 8025924: Several test cases in repeatingAnnotations/combo/ReflectionTest
+ // fail with ordering issues
+ SingleOnSuperContainerOnSub_Inherited(
+ "@ExpectedBase(value=Foo.class, "
+ + "getAnnotationVal = \"@Foo(value=0)\", "
+ + "getAnnotationsVals = {"
+ + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=0)\", \"@FooContainer(value=[@Foo(value=1), @Foo(value=2)])\"}, "
+ + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer(value=[@Foo(value=1), @Foo(value=2)])\"},"
+ + "getDeclAnnoVal = \"NULL\","
+ + "getAnnosArgs = {\"@Foo(value=1)\", \"@Foo(value=2)\"},"
+ + "getDeclAnnosArgs = {\"@Foo(value=1)\", \"@Foo(value=2)\"})",
+ "@ExpectedContainer(value=FooContainer.class, "
+ + "getAnnotationVal = \"@FooContainer(value=[@Foo(value=1), @Foo(value=2)])\", "
+ + "getAnnotationsVals = {"
+ + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=0)\", \"@FooContainer(value=[@Foo(value=1), @Foo(value=2)])\"}, "
+ + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@FooContainer(value=[@Foo(value=1), @Foo(value=2)])\"},"
+ + "getDeclAnnoVal = \"@FooContainer(value=[@Foo(value=1), @Foo(value=2)])\","
+ + "getAnnosArgs = {\"@FooContainer(value=[@Foo(value=1), @Foo(value=2)])\"},"
+ + "getDeclAnnosArgs = {\"@FooContainer(value=[@Foo(value=1), @Foo(value=2)])\"})") {
-// //@Inherited only works for classes, no switch cases for method, field, package
-// if (srcType == SrcType.CLASS) {
-// //Contents for SuperClass
-// anno = Helper.ContentVars.LEGACYCONTAINER.getVal();
-// replaceVal = commonStmts + "\n" + anno;
-// String superClassContents = srcType.getTemplate()
-// .replace("#CN", SUPERCLASS)
-// .replace("#REPLACE", replaceVal);
+ @Override
+ public Iterable<? extends JavaFileObject> getTestFiles(SrcType srcType,
+ String className) {
+ String anno = "";
+ String replaceVal = "";
+ String contents = "";
+ JavaFileObject srcFileObj = null;
+ Iterable<? extends JavaFileObject> files = null;
-// //Contents for SubClass that extends SuperClass
-// anno = "@Foo(0)";
-// replaceVal = expectedVals + "\n" + anno;
-// String subClassContents = SrcType.CLASSEXTENDS.getTemplate()
-// .replace("#CN", className)
-// .replace("#SN", SUPERCLASS)
-// .replace("#REPLACE", replaceVal);
+ String expectedVals = "\n" + getExpectedBase() + "\n"
+ + getExpectedContainer() + "\n";
+ StringBuilder commonStmts = getCommonStmts(true);
-// contents = superClassContents + subClassContents;
-// srcFileObj = Helper.getFile(className, contents);
-// files = Arrays.asList(srcFileObj);
-// }
-// return files;
-// }
-// },
-// // TestCase not working as expected, JDK-8004912
-// SingleOnSuperContainerOnSub_Inherited(
-// "@ExpectedBase(value=Foo.class, "
-// + "getAnnotationVal = \"Foo\", "
-// + "getAnnotationsVals = {"
-// + "\"ExpectedBase\", \"ExpectedContainer\", \"Foo\", \"FooContainer\"}, "
-// + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"FooContainer\"},"
-// + "getDeclAnnoVal = \"NULL\","
-// + "getAnnosArgs = {\"Foo\", \"Foo\"},"
-// + "getDeclAnnosArgs = {\"Foo\", \"Foo\"})",
-// "@ExpectedContainer(value=FooContainer.class, "
-// + "getAnnotationVal = \"FooContainer\", "
-// + "getAnnotationsVals = {"
-// + "\"ExpectedBase\", \"ExpectedContainer\", \"Foo\", \"FooContainer\"}, "
-// + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"FooContainer\"},"
-// + "getDeclAnnoVal = \"FooContainer\","
-// + "getAnnosArgs = {\"FooContainer\"},"
-// + "getDeclAnnosArgs = {\"FooContainer\"})") {
+ /*
+ Sample testSrc:
+ @Retention(RetentionPolicy.RUNTIME)
+ @Inherited
+ @Repeatable(FooContainer.class)
+ @interface Foo {int value() default Integer.MAX_VALUE;}
-// @Override
-// public Iterable<? extends JavaFileObject> getTestFiles(SrcType srcType,
-// String className) {
-// String anno = "";
-// String replaceVal = "";
-// String contents = "";
-// JavaFileObject srcFileObj = null;
-// Iterable<? extends JavaFileObject> files = null;
+ @Retention(RetentionPolicy.RUNTIME)
+ @Inherited
+ @interface FooContainer {
+ Foo[] value();
+ }
-// String expectedVals = "\n" + getExpectedBase() + "\n"
-// + getExpectedContainer() + "\n";
-// StringBuilder commonStmts = getCommonStmts(true);
+ @Foo(0)
+ class SuperClass { }
-// /*
-// Sample testSrc:
-// @Retention(RetentionPolicy.RUNTIME)
-// @Inherited
-// @Repeatable(FooContainer.class)
-// @interface Foo {int value() default Integer.MAX_VALUE;}
+ @ExpectedBase
+ @ExpectedContainer
+ @FooContainer(value = {@Foo(1), @Foo(2)})
+ class SubClass extends SuperClass { }
+ */
+ //@Inherited only works for classes, no switch cases for method, field, package
+ if (srcType == SrcType.CLASS) {
+ //Contents for SuperClass
+ anno = Helper.ContentVars.BASEANNO.getVal();
+ replaceVal = commonStmts + "\n" + anno;
+ String superClassContents = srcType.getTemplate()
+ .replace("#CN", SUPERCLASS)
+ .replace("#REPLACE", replaceVal);
-// @Retention(RetentionPolicy.RUNTIME)
-// @Inherited
-// @interface FooContainer {
-// Foo[] value();
-// }
+ //Contents for SubClass that extends SuperClass
+ anno = Helper.ContentVars.LEGACYCONTAINER.getVal();
+ replaceVal = expectedVals + "\n" + anno;
+ String subClassContents = SrcType.CLASSEXTENDS.getTemplate()
+ .replace("#CN", className)
+ .replace("#SN", SUPERCLASS)
+ .replace("#REPLACE", replaceVal);
-// @Foo
-// class SuperClass { }
-
-// @ExpectedBase
-// @ExpectedContainer
-// @FooContainer(value = {@Foo, @Foo})
-// class SubClass extends SuperClass { }
-// */
-
-// //@Inherited only works for classes, no switch cases for method, field, package
-// if (srcType == SrcType.CLASS) {
-// //Contents for SuperClass
-// anno = "@Foo(0)";
-// replaceVal = commonStmts + "\n" + anno;
-// String superClassContents = srcType.getTemplate()
-// .replace("#CN", SUPERCLASS)
-// .replace("#REPLACE", replaceVal);
-
-// //Contents for SubClass that extends SuperClass
-// anno = Helper.ContentVars.LEGACYCONTAINER.getVal();
-// replaceVal = expectedVals + "\n" + anno;
-// String subClassContents = SrcType.CLASSEXTENDS.getTemplate()
-// .replace("#CN", className)
-// .replace("#SN", SUPERCLASS)
-// .replace("#REPLACE", replaceVal);
-
-// contents = superClassContents + subClassContents;
-// srcFileObj = Helper.getFile(className, contents);
-// files = Arrays.asList(srcFileObj);
-// }
-// return files;
-// }
-// },
+ contents = superClassContents + subClassContents;
+ srcFileObj = Helper.getFile(className, contents);
+ files = Arrays.asList(srcFileObj);
+ }
+ return files;
+ }
+ },
// @ignore 8025924: Several test cases in repeatingAnnotations/combo/ReflectionTest
// fail with ordering issues
SingleOnSuperContainerAndSingleOnSub_Inherited(
@@ -2009,87 +2014,88 @@
return files;
}
},
-// // TestCase not working as expected, JDK-8004912
-// ContainerAndSingleOnSuperSingleOnSub_Inherited(
-// "@ExpectedBase(value=Foo.class, "
-// + "getAnnotationVal = \"Foo\", "
-// + "getAnnotationsVals = {"
-// + "\"ExpectedBase\", \"ExpectedContainer\", \"Foo\", \"FooContainer\"}, "
-// + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"Foo\"},"
-// + "getDeclAnnoVal = \"Foo\","
-// + "getAnnosArgs = {\"Foo\"},"
-// + "getDeclAnnosArgs = {\"Foo\"})",
-// "@ExpectedContainer(value=FooContainer.class, "
-// + "getAnnotationVal = \"FooContainer\", "
-// + "getAnnotationsVals = {"
-// + "\"ExpectedBase\", \"ExpectedContainer\", \"Foo\", \"FooContainer\"}, "
-// + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"Foo\"},"
-// + "getDeclAnnoVal = \"NULL\","
-// + "getAnnosArgs = {\"FooContainer\"},"
-// + "getDeclAnnosArgs = {})") {
+ // @ignore 8025924: Several test cases in repeatingAnnotations/combo/ReflectionTest
+ // fail with ordering issues
+ ContainerAndSingleOnSuperSingleOnSub_Inherited(
+ "@ExpectedBase(value=Foo.class, "
+ + "getAnnotationVal = \"@Foo(value=0)\", "
+ + "getAnnotationsVals = {"
+ + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=0)\", \"@FooContainer(value=[@Foo(value=1), @Foo(value=2)])\"}, "
+ + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=0)\"},"
+ + "getDeclAnnoVal = \"@Foo(value=0)\","
+ + "getAnnosArgs = {\"@Foo(value=0)\"},"
+ + "getDeclAnnosArgs = {\"@Foo(value=0)\"})",
+ "@ExpectedContainer(value=FooContainer.class, "
+ + "getAnnotationVal = \"@FooContainer(value=[@Foo(value=1), @Foo(value=2)])\", "
+ + "getAnnotationsVals = {"
+ + "\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=0)\", \"@FooContainer(value=[@Foo(value=1), @Foo(value=2)])\"}, "
+ + "getDeclAnnosVals = {\"ExpectedBase\", \"ExpectedContainer\", \"@Foo(value=0)\"},"
+ + "getDeclAnnoVal = \"NULL\","
+ + "getAnnosArgs = {\"@FooContainer(value=[@Foo(value=1), @Foo(value=2)])\"},"
+ + "getDeclAnnosArgs = {})") {
-// @Override
-// public Iterable<? extends JavaFileObject> getTestFiles(SrcType srcType,
-// String className) {
-// String anno = "";
-// String replaceVal = "";
-// String contents = "";
-// JavaFileObject srcFileObj = null;
-// Iterable<? extends JavaFileObject> files = null;
+ @Override
+ public Iterable<? extends JavaFileObject> getTestFiles(SrcType srcType,
+ String className) {
+ String anno = "";
+ String replaceVal = "";
+ String contents = "";
+ JavaFileObject srcFileObj = null;
+ Iterable<? extends JavaFileObject> files = null;
-// String expectedVals = "\n" + getExpectedBase() + "\n"
-// + getExpectedContainer() + "\n";
-// StringBuilder commonStmts = getCommonStmts(true);
+ String expectedVals = "\n" + getExpectedBase() + "\n"
+ + getExpectedContainer() + "\n";
+ StringBuilder commonStmts = getCommonStmts(true);
-// /*
-// Sample testSrc:
-// @Retention(RetentionPolicy.RUNTIME)
-// @Inherited
-// @Repeatable(FooContainer.class)
-// @interface Foo {int value() default Integer.MAX_VALUE;}
+ /*
+ Sample testSrc:
+ @Retention(RetentionPolicy.RUNTIME)
+ @Inherited
+ @Repeatable(FooContainer.class)
+ @interface Foo {int value() default Integer.MAX_VALUE;}
-// @Retention(RetentionPolicy.RUNTIME)
-// @Inherited
-// @interface FooContainer {
-// Foo[] value();
-// }
+ @Retention(RetentionPolicy.RUNTIME)
+ @Inherited
+ @interface FooContainer {
+ Foo[] value();
+ }
-// @FooContainer(value = {@Foo, @Foo})
-// @Foo
-// class SuperClass { }
+ @FooContainer(value = {@Foo(1), @Foo(2)})
+ @Foo(3)
+ class SuperClass { }
-// @ExpectedBase
-// @ExpectedContainer
-// @Foo
-// class SubClass extends SuperClass { }
-// */
+ @ExpectedBase
+ @ExpectedContainer
+ @Foo(0)
+ class SubClass extends SuperClass { }
+ */
-// //@Inherited only works for classes, no switch cases for method, field, package
-// if (srcType == SrcType.CLASS) {
-// //Contents for SuperClass
-// anno = Helper.ContentVars.LEGACYCONTAINER.getVal()
-// + Helper.ContentVars.BASEANNO.getVal();
-// replaceVal = commonStmts + "\n" + anno;
-// String superClassContents = srcType.getTemplate()
-// .replace("#CN", SUPERCLASS)
-// .replace("#REPLACE", replaceVal);
+ //@Inherited only works for classes, no switch cases for method, field, package
+ if (srcType == SrcType.CLASS) {
+ //Contents for SuperClass
+ anno = Helper.ContentVars.LEGACYCONTAINER.getVal()
+ + "@Foo(3)" ;
+ replaceVal = commonStmts + "\n" + anno;
+ String superClassContents = srcType.getTemplate()
+ .replace("#CN", SUPERCLASS)
+ .replace("#REPLACE", replaceVal);
-// //Contents for SubClass that extends SuperClass
-// anno = "@Foo(0)";
-// replaceVal = expectedVals + "\n" + anno;
-// String subClassContents = SrcType.CLASSEXTENDS.getTemplate()
-// .replace("#CN", className)
-// .replace("#SN", SUPERCLASS)
-// .replace("#REPLACE", replaceVal);
+ //Contents for SubClass that extends SuperClass
+ anno = Helper.ContentVars.BASEANNO.getVal();
+ replaceVal = expectedVals + "\n" + anno;
+ String subClassContents = SrcType.CLASSEXTENDS.getTemplate()
+ .replace("#CN", className)
+ .replace("#SN", SUPERCLASS)
+ .replace("#REPLACE", replaceVal);
-// contents = superClassContents + subClassContents;
-// srcFileObj = Helper.getFile(className, contents);
-// files = Arrays.asList(srcFileObj);
-// }
-// return files;
-// }
-// }
- ;
+ contents = superClassContents + subClassContents;
+ srcFileObj = Helper.getFile(className, contents);
+ files = Arrays.asList(srcFileObj);
+ }
+ return files;
+ }
+ };
+
private String expectedBase, expectedContainer;
private TestCase(String expectedBase, String expectedContainer) {
@@ -2942,7 +2948,7 @@
System.out.print("Actual Arr Values: ");
for (Annotation a : actualAnnos) {
if (a != null && a.annotationType() != null) {
- System.out.print("[" + a.annotationType().getSimpleName() + "]");
+ System.out.print("[" + a.toString() + "]");
} else {
System.out.println("[null]");
}
diff --git a/langtools/test/tools/javac/annotations/repeatingAnnotations/combo/TargetAnnoCombo.java b/langtools/test/tools/javac/annotations/repeatingAnnotations/combo/TargetAnnoCombo.java
index 058b489..66e1c14 100644
--- a/langtools/test/tools/javac/annotations/repeatingAnnotations/combo/TargetAnnoCombo.java
+++ b/langtools/test/tools/javac/annotations/repeatingAnnotations/combo/TargetAnnoCombo.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -23,7 +23,7 @@
/*
* @test
- * @bug 7151010 8006547 8007766
+ * @bug 7151010 8006547 8007766 8029017
* @summary Default test cases for running combinations for Target values
* @build Helper
* @run main TargetAnnoCombo
@@ -145,11 +145,19 @@
Set<ElementType> tempBaseSet = EnumSet.noneOf(ElementType.class);
tempBaseSet.addAll(baseAnnotations);
+
// If BaseAnno has TYPE, then ANNOTATION_TYPE is allowed by default.
if (baseAnnotations.contains(TYPE)) {
tempBaseSet.add(ANNOTATION_TYPE);
}
+ // If BaseAnno has TYPE_USE, then add the extra allowed types
+ if (baseAnnotations.contains(TYPE_USE)) {
+ tempBaseSet.add(ANNOTATION_TYPE);
+ tempBaseSet.add(TYPE);
+ tempBaseSet.add(TYPE_PARAMETER);
+ }
+
// If containerAnno has no @Target, only valid case if baseAnnoTarget has
// all targets defined else invalid set.
if (containerAnnotations == null) {
diff --git a/langtools/test/tools/javac/api/TestJavacTaskScanner.java b/langtools/test/tools/javac/api/TestJavacTaskScanner.java
index 7103ba7..a02ca67 100644
--- a/langtools/test/tools/javac/api/TestJavacTaskScanner.java
+++ b/langtools/test/tools/javac/api/TestJavacTaskScanner.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -23,7 +23,7 @@
/*
* @test
- * @bug 4813736
+ * @bug 4813736 8013256
* @summary Additional functionality test of task and JSR 269
* @author Peter von der Ah\u00e9
* @library ./lib
diff --git a/langtools/test/tools/javac/defaultMethodsVisibility/DefaultMethodsNotVisibleForSourceLessThan8Test.java b/langtools/test/tools/javac/defaultMethodsVisibility/DefaultMethodsNotVisibleForSourceLessThan8Test.java
new file mode 100644
index 0000000..ea12893
--- /dev/null
+++ b/langtools/test/tools/javac/defaultMethodsVisibility/DefaultMethodsNotVisibleForSourceLessThan8Test.java
@@ -0,0 +1,180 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8029240 8030855
+ * @summary Default methods not always visible under -source 7
+ * Default methods should be visible under source previous to 8
+ * @library /tools/javac/lib
+ * @build ToolBox
+ * @run main DefaultMethodsNotVisibleForSourceLessThan8Test
+ */
+
+import java.nio.file.Files;
+import java.nio.file.Paths;
+
+public class DefaultMethodsNotVisibleForSourceLessThan8Test {
+ // common definitions
+
+ // this one should be compiled with source 8, the rest with source < 8
+ static final String ISrc =
+ "interface I {\n" +
+ " default void m() {}\n" +
+ "}";
+
+ static final String JSrc =
+ "interface J extends I {}";
+
+ static final String ASrc =
+ "abstract class A implements I {}";
+
+ static final String BSrc =
+ "class B implements I {}";
+
+ // test legacy implementations
+ static final String C1Src =
+ "class C1 implements I {\n" +
+ " public void m() {}\n" +
+ "}";
+
+ static final String C2Src =
+ "class C2 implements J {\n" +
+ " public void m() {}\n" +
+ "}";
+
+ static final String C3Src =
+ "class C3 extends A {\n" +
+ " public void m() {}\n" +
+ "}";
+
+ static final String C4Src =
+ "class C4 extends B {\n" +
+ " public void m() {}\n" +
+ "}";
+
+ //test legacy invocations
+ static final String LegacyInvocationSrc =
+ "class LegacyInvocation {\n" +
+ " public static void test(I i, J j, A a, B b) {\n" +
+ " i.m();\n" +
+ " j.m();\n" +
+ " a.m();\n" +
+ " b.m();\n" +
+ " }\n" +
+ "}";
+
+ //test case super invocations
+ static final String SubASrc =
+ "class SubA extends A {\n" +
+ " public void test() {\n" +
+ " super.m();\n" +
+ " }\n" +
+ "}";
+
+ static final String SubBSrc =
+ "class SubB extends B {\n" +
+ " public void test() {\n" +
+ " super.m();\n" +
+ " }\n" +
+ "}";
+
+ public static void main(String[] args) throws Exception {
+ String[] sources = new String[] {
+ "1.2",
+ "1.3",
+ "1.4",
+ "1.5",
+ "1.6",
+ "1.7",
+ };
+ for (String source : sources) {
+ new DefaultMethodsNotVisibleForSourceLessThan8Test().run(source);
+ }
+ }
+
+ String outDir;
+ String source;
+
+ void run(String source) throws Exception {
+ this.source = source;
+ outDir = "out" + source.replace('.', '_');
+ testsPreparation();
+ testLegacyImplementations();
+ testLegacyInvocations();
+ testSuperInvocations();
+ }
+
+ void testsPreparation() throws Exception {
+ Files.createDirectory(Paths.get(outDir));
+
+ /* as an extra check let's make sure that interface 'I' can't be compiled
+ * with source < 8
+ */
+ ToolBox.JavaToolArgs javacArgs =
+ new ToolBox.JavaToolArgs(ToolBox.Expect.FAIL)
+ .setOptions("-d", outDir, "-source", source)
+ .setSources(ISrc);
+ ToolBox.javac(javacArgs);
+
+ //but it should compile with source >= 8
+ javacArgs =
+ new ToolBox.JavaToolArgs()
+ .setOptions("-d", outDir)
+ .setSources(ISrc);
+ ToolBox.javac(javacArgs);
+
+ javacArgs =
+ new ToolBox.JavaToolArgs()
+ .setOptions("-cp", outDir, "-d", outDir, "-source", source)
+ .setSources(JSrc, ASrc, BSrc);
+ ToolBox.javac(javacArgs);
+ }
+
+ void testLegacyImplementations() throws Exception {
+ //compile C1-4
+ ToolBox.JavaToolArgs javacArgs =
+ new ToolBox.JavaToolArgs()
+ .setOptions("-cp", outDir, "-d", outDir, "-source", source)
+ .setSources(C1Src, C2Src, C3Src, C4Src);
+ ToolBox.javac(javacArgs);
+ }
+
+ void testLegacyInvocations() throws Exception {
+ //compile LegacyInvocation
+ ToolBox.JavaToolArgs javacArgs =
+ new ToolBox.JavaToolArgs()
+ .setOptions("-cp", outDir, "-d", outDir, "-source", source)
+ .setSources(LegacyInvocationSrc);
+ ToolBox.javac(javacArgs);
+ }
+
+ void testSuperInvocations() throws Exception {
+ //compile SubA, SubB
+ ToolBox.JavaToolArgs javacArgs =
+ new ToolBox.JavaToolArgs()
+ .setOptions("-cp", outDir, "-d", outDir, "-source", source)
+ .setSources(SubASrc, SubBSrc);
+ ToolBox.javac(javacArgs);
+ }
+}
diff --git a/langtools/test/tools/javac/doctree/SeeTest.java b/langtools/test/tools/javac/doctree/SeeTest.java
index bb27348..6927788 100644
--- a/langtools/test/tools/javac/doctree/SeeTest.java
+++ b/langtools/test/tools/javac/doctree/SeeTest.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -23,7 +23,7 @@
/*
* @test
- * @bug 7021614
+ * @bug 7021614 8031212
* @summary extend com.sun.source API to support parsing javadoc comments
* @build DocCommentTester
* @run main DocCommentTester SeeTest.java
@@ -41,9 +41,9 @@
Text[TEXT, pos:1, abc.]
body: empty
block tags: 1
- Erroneous[ERRONEOUS, pos:7
- code: compiler.err.dc.unexpected.content
- body: @see_"String"
+ See[SEE, pos:7
+ reference: 1
+ Text[TEXT, pos:12, "String"]
]
]
*/
diff --git a/langtools/test/tools/javac/flow/T8030218/CompileTimeErrorForNonAssignedStaticFieldTest.java b/langtools/test/tools/javac/flow/T8030218/CompileTimeErrorForNonAssignedStaticFieldTest.java
new file mode 100644
index 0000000..e139fb7
--- /dev/null
+++ b/langtools/test/tools/javac/flow/T8030218/CompileTimeErrorForNonAssignedStaticFieldTest.java
@@ -0,0 +1,29 @@
+/*
+ * @test /nodynamiccopyright/
+ * @bug 8030218
+ * @summary javac, compile time error isn't shown when final static field is not assigned, follow-up
+ * @compile/fail/ref=CompileTimeErrorForNonAssignedStaticFieldTest.out -XDrawDiagnostics CompileTimeErrorForNonAssignedStaticFieldTest.java
+ */
+
+public class CompileTimeErrorForNonAssignedStaticFieldTest {
+ private final static int i;
+
+ public CompileTimeErrorForNonAssignedStaticFieldTest()
+ throws InstantiationException {
+ throw new InstantiationException("Can't instantiate");
+ }
+
+ static class Inner {
+ private final int j;
+ public Inner(int x)
+ throws InstantiationException {
+ if (x == 0) {
+ throw new InstantiationException("Can't instantiate");
+ } else {
+ j = 1;
+ }
+ System.out.println(j);
+ }
+ }
+
+}
diff --git a/langtools/test/tools/javac/flow/T8030218/CompileTimeErrorForNonAssignedStaticFieldTest.out b/langtools/test/tools/javac/flow/T8030218/CompileTimeErrorForNonAssignedStaticFieldTest.out
new file mode 100644
index 0000000..7821299
--- /dev/null
+++ b/langtools/test/tools/javac/flow/T8030218/CompileTimeErrorForNonAssignedStaticFieldTest.out
@@ -0,0 +1,2 @@
+CompileTimeErrorForNonAssignedStaticFieldTest.java:14:5: compiler.err.var.might.not.have.been.initialized: i
+1 error
diff --git a/langtools/test/tools/javac/lambda/InnerConstructor.java b/langtools/test/tools/javac/lambda/InnerConstructor.java
index 3675020..28a3390 100644
--- a/langtools/test/tools/javac/lambda/InnerConstructor.java
+++ b/langtools/test/tools/javac/lambda/InnerConstructor.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -23,7 +23,7 @@
/*
* @test
- * @bug 8003280
+ * @bug 8003280 8003306
* @summary Add lambda tests
* Regression test JDK-8003306 inner class constructor in lambda
* @author Robert Field
diff --git a/langtools/test/tools/javac/lambda/intersection/IntersectionTargetTypeTest.java b/langtools/test/tools/javac/lambda/intersection/IntersectionTargetTypeTest.java
index 36e1861..4b8ec20 100644
--- a/langtools/test/tools/javac/lambda/intersection/IntersectionTargetTypeTest.java
+++ b/langtools/test/tools/javac/lambda/intersection/IntersectionTargetTypeTest.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -23,7 +23,7 @@
/*
* @test
- * @bug 8002099
+ * @bug 8002099 8010822
* @summary Add support for intersection types in cast expression
*/
diff --git a/langtools/test/tools/javac/lambda/separate/Test.java b/langtools/test/tools/javac/lambda/separate/Test.java
index 7aa6b2c..14bfd49 100644
--- a/langtools/test/tools/javac/lambda/separate/Test.java
+++ b/langtools/test/tools/javac/lambda/separate/Test.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -23,6 +23,7 @@
/*
* @test
+ * @bug 8008708
* @compile Foo.java
* @compile Test.java
*/
diff --git a/langtools/test/tools/javac/processing/environment/round/BuriedAnnotations.java b/langtools/test/tools/javac/processing/environment/round/BuriedAnnotations.java
index fe52282..f122d92 100644
--- a/langtools/test/tools/javac/processing/environment/round/BuriedAnnotations.java
+++ b/langtools/test/tools/javac/processing/environment/round/BuriedAnnotations.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2006, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2006, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -22,7 +22,7 @@
*/
/**
- * Class to hold annotations for ElementsAnnotatedWithTest.
+ * Class to hold annotations for TestElementsAnnotatedWith.
*/
@AnnotatedElementInfo(annotationName="java.lang.SuppressWarnings",
diff --git a/langtools/test/tools/javac/processing/environment/round/ErroneousAnnotations.java b/langtools/test/tools/javac/processing/environment/round/ErroneousAnnotations.java
new file mode 100644
index 0000000..156b88d
--- /dev/null
+++ b/langtools/test/tools/javac/processing/environment/round/ErroneousAnnotations.java
@@ -0,0 +1,12 @@
+/** /nodynamiccopyright/
+ * Class to hold annotations for TestElementsAnnotatedWith.
+ */
+
+@AnnotatedElementInfo(annotationName="java.lang.SuppressWarnings",
+ expectedSize=0,
+ names={})
+@Undefined
+public class ErroneousAnnotations {
+ @Undefined
+ private void foo() {return;}
+}
diff --git a/langtools/test/tools/javac/processing/environment/round/ErroneousAnnotations.out b/langtools/test/tools/javac/processing/environment/round/ErroneousAnnotations.out
new file mode 100644
index 0000000..923c4ef
--- /dev/null
+++ b/langtools/test/tools/javac/processing/environment/round/ErroneousAnnotations.out
@@ -0,0 +1,4 @@
+ErroneousAnnotations.java:8:2: compiler.err.cant.resolve: kindname.class, Undefined, ,
+ErroneousAnnotations.java:10:6: compiler.err.cant.resolve.location: kindname.class, Undefined, , , (compiler.misc.location: kindname.class, ErroneousAnnotations, null)
+2 errors
+Results: []
diff --git a/langtools/test/tools/javac/processing/environment/round/Part1.java b/langtools/test/tools/javac/processing/environment/round/Part1.java
index ffb9d20..5d050e9 100644
--- a/langtools/test/tools/javac/processing/environment/round/Part1.java
+++ b/langtools/test/tools/javac/processing/environment/round/Part1.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2006, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -22,7 +22,7 @@
*/
/**
- * Class to hold annotations for ElementsAnnotatedWithTest.
+ * Class to hold annotations for TestElementsAnnotatedWith.
*/
@AnnotatedElementInfo(annotationName="java.lang.SuppressWarnings",
diff --git a/langtools/test/tools/javac/processing/environment/round/Part2.java b/langtools/test/tools/javac/processing/environment/round/Part2.java
index 2047b87..db9f44d 100644
--- a/langtools/test/tools/javac/processing/environment/round/Part2.java
+++ b/langtools/test/tools/javac/processing/environment/round/Part2.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2006, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -22,7 +22,7 @@
*/
/**
- * Class to hold annotations for ElementsAnnotatedWithTest.
+ * Class to hold annotations for TestElementsAnnotatedWith.
*/
@SuppressWarnings("")
public class Part2 {
diff --git a/langtools/test/tools/javac/processing/environment/round/SurfaceAnnotations.java b/langtools/test/tools/javac/processing/environment/round/SurfaceAnnotations.java
index ce351a2..a7c6058 100644
--- a/langtools/test/tools/javac/processing/environment/round/SurfaceAnnotations.java
+++ b/langtools/test/tools/javac/processing/environment/round/SurfaceAnnotations.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2006, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -22,7 +22,7 @@
*/
/**
- * Class to hold annotations for ElementsAnnotatedWithTest.
+ * Class to hold annotations for TestElementsAnnotatedWith.
*/
@AnnotatedElementInfo(annotationName="java.lang.SuppressWarnings",
diff --git a/langtools/test/tools/javac/processing/environment/round/TestElementsAnnotatedWith.java b/langtools/test/tools/javac/processing/environment/round/TestElementsAnnotatedWith.java
index e658e2a..3a02006 100644
--- a/langtools/test/tools/javac/processing/environment/round/TestElementsAnnotatedWith.java
+++ b/langtools/test/tools/javac/processing/environment/round/TestElementsAnnotatedWith.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2006, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2006, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -23,7 +23,7 @@
/*
* @test
- * @bug 6397298 6400986 6425592 6449798 6453386 6508401 6498938 6911854
+ * @bug 6397298 6400986 6425592 6449798 6453386 6508401 6498938 6911854 8030049
* @summary Tests that getElementsAnnotatedWith works properly.
* @author Joseph D. Darcy
* @library /tools/javac/lib
@@ -37,23 +37,18 @@
* @compile -processor TestElementsAnnotatedWith -proc:only C2.java
* @compile -processor TestElementsAnnotatedWith -proc:only Foo.java
* @compile -processor TestElementsAnnotatedWith -proc:only TypeParameterAnnotations.java
+ * @compile/fail/ref=ErroneousAnnotations.out -processor TestElementsAnnotatedWith -proc:only -XDrawDiagnostics ErroneousAnnotations.java
* @compile Foo.java
* @compile/process -processor TestElementsAnnotatedWith -proc:only Foo
*/
import java.lang.annotation.Annotation;
-import java.io.*;
import java.util.Collections;
import java.util.Set;
import java.util.HashSet;
-import java.util.List;
-import java.util.ArrayList;
import java.util.Arrays;
import javax.annotation.processing.*;
-import javax.tools.*;
-import javax.lang.model.SourceVersion;
import javax.lang.model.element.*;
-import javax.lang.model.util.*;
import static javax.lang.model.util.ElementFilter.*;
/**
diff --git a/langtools/test/tools/javac/processing/environment/round/TypeParameterAnnotations.java b/langtools/test/tools/javac/processing/environment/round/TypeParameterAnnotations.java
index 0b3ef05..ecefb3b 100644
--- a/langtools/test/tools/javac/processing/environment/round/TypeParameterAnnotations.java
+++ b/langtools/test/tools/javac/processing/environment/round/TypeParameterAnnotations.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -22,7 +22,7 @@
*/
/**
- * Class to hold annotations for ElementsAnnotatedWithTest.
+ * Class to hold annotations for TestElementsAnnotatedWith.
*/
@AnnotatedElementInfo(annotationName="TpAnno",
diff --git a/langtools/test/tools/javac/resolve/ResolveHarness.java b/langtools/test/tools/javac/resolve/ResolveHarness.java
index 2512f54..7d79f1c 100644
--- a/langtools/test/tools/javac/resolve/ResolveHarness.java
+++ b/langtools/test/tools/javac/resolve/ResolveHarness.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -23,7 +23,7 @@
/*
* @test
- * @bug 7098660
+ * @bug 7098660 8014649
* @summary Write better overload resolution/inference tests
* @library /tools/javac/lib
* @build JavacTestingAbstractProcessor ResolveHarness
diff --git a/langtools/test/tools/javac/scope/7046348/EagerInterfaceCompletionTest.java b/langtools/test/tools/javac/scope/7046348/EagerInterfaceCompletionTest.java
index 304f858..44eb4dd 100644
--- a/langtools/test/tools/javac/scope/7046348/EagerInterfaceCompletionTest.java
+++ b/langtools/test/tools/javac/scope/7046348/EagerInterfaceCompletionTest.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -181,7 +181,7 @@
case FIELD:
case SUPER: return true;
case METHOD: return hk != HierarchyKind.INTERFACE || ak == ActionKind.REMOVE_B ||
- (hk == HierarchyKind.INTERFACE && ak == ActionKind.REMOVE_A && vk == VersionKind.LAMBDA);
+ (hk == HierarchyKind.INTERFACE && ak == ActionKind.REMOVE_A);
default: throw new AssertionError("Unexpected test kind " + this);
}
}
diff --git a/langtools/test/tools/javadoc/parser/7091528/T7091528.java b/langtools/test/tools/javadoc/parser/7091528/T7091528.java
index 4e06a3b..b491073 100644
--- a/langtools/test/tools/javadoc/parser/7091528/T7091528.java
+++ b/langtools/test/tools/javadoc/parser/7091528/T7091528.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -23,8 +23,8 @@
/**
* @test
- * @bug 7091528
- * @summary javadoc attempts to parse .class files
+ * @bug 7091528 8029145
+ * @summary ensures javadoc parses unique source files and ignores all class files
* @compile p/C1.java p/q/C2.java
* @run main T7091528
*/
@@ -37,17 +37,22 @@
public static void main(String... args) {
new T7091528().run();
}
-
void run() {
File testSrc = new File(System.getProperty("test.src"));
File testClasses = new File(System.getProperty("test.classes"));
- String[] args = {
- "-d", ".",
+ // 7091528, tests if class files are being ignored
+ runTest("-d", ".",
"-sourcepath", testClasses + File.pathSeparator + testSrc,
"-subpackages",
- "p"
- };
+ "p");
+ // 8029145, tests if unique source files are parsed
+ runTest("-d", ".",
+ "-sourcepath", testSrc.getAbsolutePath(),
+ "-subpackages",
+ "p:p.q");
+ }
+ void runTest(String... args) {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
String doclet = com.sun.tools.doclets.standard.Standard.class.getName();
diff --git a/langtools/test/tools/javap/InvalidOptions.java b/langtools/test/tools/javap/InvalidOptions.java
index d92f644..95d299d 100644
--- a/langtools/test/tools/javap/InvalidOptions.java
+++ b/langtools/test/tools/javap/InvalidOptions.java
@@ -24,7 +24,7 @@
/*
* @test
* @bug 8027411
- * @summary test invalid options -h and -b
+ * @summary test an invalid option
*/
import java.io.*;
@@ -39,7 +39,6 @@
}
void run() throws Exception {
- test(2, "-h", "Error: -h is no longer available - use the javah program");
test(2, "-b", "Error: unknown option: -b",
"Usage: javap <options> <classes>",
"use -help for a list of possible options");
diff --git a/langtools/test/tools/javap/MethodParameters.java b/langtools/test/tools/javap/MethodParameters.java
index 940724b..d9c4278 100644
--- a/langtools/test/tools/javap/MethodParameters.java
+++ b/langtools/test/tools/javap/MethodParameters.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -44,24 +44,24 @@
static final String Init0_expected =
(" Foo();\n" +
" descriptor: ()V\n" +
- " flags: \n" +
+ " flags:\n" +
" Code:\n" +
" stack=1, locals=1, args_size=1\n" +
- " 0: aload_0 \n" +
+ " 0: aload_0\n" +
" 1: invokespecial #1 // Method java/lang/Object.\"<init>\":()V\n" +
- " 4: return \n" +
+ " 4: return\n" +
" LineNumberTable:\n" +
" line 2: 0").replaceAll(" +", " ");
static final String Init1_expected =
(" Foo(int);\n" +
" descriptor: (I)V\n" +
- " flags: \n" +
+ " flags:\n" +
" Code:\n" +
" stack=1, locals=2, args_size=2\n" +
- " 0: aload_0 \n" +
+ " 0: aload_0\n" +
" 1: invokespecial #1 // Method java/lang/Object.\"<init>\":()V\n" +
- " 4: return \n" +
+ " 4: return\n" +
" LineNumberTable:\n" +
" line 3: 0\n" +
" MethodParameters:\n" +
@@ -71,25 +71,25 @@
static final String foo0_expected =
(" void foo0();\n" +
" descriptor: ()V\n" +
- " flags: \n" +
+ " flags:\n" +
" Code:\n" +
" stack=0, locals=1, args_size=1\n" +
- " 0: return \n" +
+ " 0: return\n" +
" LineNumberTable:\n" +
" line 4: 0").replaceAll(" +", " ");
static final String foo2_expected =
(" void foo2(int, int);\n" +
" descriptor: (II)V\n" +
- " flags: \n" +
+ " flags:\n" +
" Code:\n" +
" stack=0, locals=3, args_size=3\n" +
- " 0: return \n" +
+ " 0: return\n" +
" LineNumberTable:\n" +
" line 5: 0\n" +
" MethodParameters:\n" +
" Name Flags\n" +
- " j \n" +
+ " j\n" +
" k").replaceAll(" +", " ");
static final File classesdir = new File("methodparameters");
diff --git a/langtools/test/tools/javap/StackMapTableTest.java b/langtools/test/tools/javap/StackMapTableTest.java
new file mode 100644
index 0000000..97e19ac
--- /dev/null
+++ b/langtools/test/tools/javap/StackMapTableTest.java
@@ -0,0 +1,92 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8033930 8033913
+ * @summary bad formatting of StackMapTable entries
+ */
+
+import java.io.*;
+import java.util.*;
+
+public class StackMapTableTest {
+ public static void main(String... args) throws Exception {
+ new StackMapTableTest().run();
+ }
+
+ void run() throws Exception {
+ String testClasses = System.getProperty("test.classes");
+ String out = javap("-v", "-classpath", testClasses, A.class.getName());
+
+ String nl = System.getProperty("line.separator");
+ out = out.replaceAll(nl, "\n");
+
+ if (out.contains("\n\n\n"))
+ error("double blank line found");
+
+ String expect =
+ " StackMapTable: number_of_entries = 2\n" +
+ " frame_type = 252 /* append */\n" +
+ " offset_delta = 2\n" +
+ " locals = [ int ]\n" +
+ " frame_type = 250 /* chop */\n" +
+ " offset_delta = 18\n";
+ if (!out.contains(expect))
+ error("expected text not found");
+
+ if (errors > 0)
+ throw new Exception(errors + " errors found");
+ }
+
+ String javap(String... args) throws Exception {
+ StringWriter sw = new StringWriter();
+ PrintWriter out = new PrintWriter(sw);
+ int rc = com.sun.tools.javap.Main.run(args, out);
+ out.close();
+ System.out.println(sw.toString());
+ if (rc < 0)
+ throw new Exception("javap exited, rc=" + rc);
+ return sw.toString();
+ }
+
+ void error(String msg) {
+ System.out.println("Error: " + msg);
+ errors++;
+ }
+
+ int errors;
+
+ /** Simple test class to run through javap. */
+ public class A {
+ public void a() {
+ for (int i = 0; i < 10; i++) {
+ System.out.println(i);
+ }
+ }
+ public void b() {
+ }
+ public void c() {
+ }
+ }
+}
diff --git a/langtools/test/tools/javap/T6868539.java b/langtools/test/tools/javap/T6868539.java
index 3971ea0..7040d53 100644
--- a/langtools/test/tools/javap/T6868539.java
+++ b/langtools/test/tools/javap/T6868539.java
@@ -23,7 +23,7 @@
/*
* @test
- * @bug 6868539 6868548
+ * @bug 6868539 6868548 8035364
* @summary javap should use current names for constant pool entries,
* remove spurious ';' from constant pool entries
*/
@@ -41,17 +41,17 @@
void run() {
String output = javap("T6868539");
verify(output, "Utf8 +java/lang/String"); // 1: Utf8
- // 2: currently unused
+ // 2: currently unused
verify(output, "Integer +123456"); // 3: Integer
verify(output, "Float +123456.0f"); // 4: Float
verify(output, "Long +123456l"); // 5: Long
verify(output, "Double +123456.0d"); // 6: Double
- verify(output, "Class +#[0-9]+ +// + T6868539"); // 7: Class
- verify(output, "String +#[0-9]+ +// + not found"); // 8: String
+ verify(output, "Class +#[0-9]+ +// +T6868539"); // 7: Class
+ verify(output, "String +#[0-9]+ +// +not found"); // 8: String
verify(output, "Fieldref +#[0-9]+\\.#[0-9]+ +// +T6868539.errors:I"); // 9: Fieldref
verify(output, "Methodref +#[0-9]+\\.#[0-9]+ +// +T6868539.run:\\(\\)V"); // 10: Methodref
verify(output, "InterfaceMethodref +#[0-9]+\\.#[0-9]+ +// +java/lang/Runnable\\.run:\\(\\)V");
- // 11: InterfaceMethodref
+ // 11: InterfaceMethodref
verify(output, "NameAndType +#[0-9]+:#[0-9]+ +// +run:\\(\\)V"); // 12: NameAndType
if (errors > 0)
throw new Error(errors + " found.");
diff --git a/langtools/test/tools/javap/T8032814.java b/langtools/test/tools/javap/T8032814.java
new file mode 100644
index 0000000..d9ee2d1
--- /dev/null
+++ b/langtools/test/tools/javap/T8032814.java
@@ -0,0 +1,93 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8032814
+ * @summary LineNumberTable/LocalVariableTable tables duplication for the
+ * "-v -l" combination of options
+ * @compile -g T8032814.java
+ * @run main T8032814
+ */
+
+import java.io.*;
+import java.util.*;
+
+public class T8032814 {
+ public static void main(String... args) throws Exception {
+ new T8032814().run();
+ }
+
+ void run() throws Exception {
+ Class<?> clazz = T8032814.class;
+ int count = clazz.getDeclaredConstructors().length
+ + clazz.getDeclaredMethods().length;
+ test(clazz, 0);
+ test(clazz, count, "-v");
+ test(clazz, count, "-l");
+ test(clazz, count, "-v", "-l");
+
+ if (errors > 0)
+ throw new Exception(errors + " errors occurred");
+ }
+
+ void test(Class<?> clazz, int expectedCount, String... opts) throws Exception {
+ System.err.println("test class " + clazz.getName() + " " + Arrays.asList(opts) + ": expect: " + expectedCount);
+ List<String> args = new ArrayList<String>();
+ args.addAll(Arrays.asList(opts));
+ args.addAll(Arrays.asList("-classpath", System.getProperty("test.classes")));
+ args.add(clazz.getName());
+ StringWriter sw = new StringWriter();
+ PrintWriter pw = new PrintWriter(sw);
+ int rc = com.sun.tools.javap.Main.run(args.toArray(new String[args.size()]), pw);
+ pw.close();
+ String out = sw.toString();
+ if (rc != 0)
+ throw new Exception("javap failed unexpectedly: rc=" + rc);
+
+ int lntCount = 0, lvtCount = 0;
+ for (String line: out.split("[\r\n]+")) {
+ if (line.matches("^ *LineNumberTable:$"))
+ lntCount++;
+ if (line.matches("^ *LocalVariableTable:$"))
+ lvtCount++;
+ }
+ checkEqual("LineNumberTable", lntCount, expectedCount);
+ checkEqual("LocalVariableTable", lvtCount, expectedCount);
+ }
+
+ void checkEqual(String attr, int found, int expect) {
+ if (found != expect) {
+ error("Unexpected number of occurrences of " + attr + "\n" +
+ "found: " + found + ", expected: " + expect);
+ }
+ }
+
+ void error(String msg) {
+ System.err.println("Error: " + msg);
+ errors++;
+ }
+
+ int errors = 0;
+}
+
diff --git a/langtools/test/tools/javap/T8032819.java b/langtools/test/tools/javap/T8032819.java
new file mode 100644
index 0000000..9c5eeb4
--- /dev/null
+++ b/langtools/test/tools/javap/T8032819.java
@@ -0,0 +1,95 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8032819
+ * @summary Extra empty line between field declarations for the "-v -c" and "-v -l" combination of options
+ * @compile -g T8032819.java
+ * @run main T8032819
+ */
+
+import java.io.*;
+import java.util.*;
+
+public class T8032819 {
+ static class Fields {
+ int f1;
+ int f2;
+ }
+
+ public static void main(String... args) throws Exception {
+ new T8032819().run();
+ }
+
+ void run() throws Exception {
+ Class<?> clazz = Fields.class;
+ test(clazz);
+ test(clazz, "-c");
+ test(clazz, "-l");
+ test(clazz, "-l", "-c");
+ test(clazz, "-v");
+ test(clazz, "-v", "-c");
+ test(clazz, "-v", "-l");
+ test(clazz, "-v", "-l", "-c");
+
+ if (errors > 0)
+ throw new Exception(errors + " errors occurred");
+ }
+
+ static final String sep = System.getProperty("line.separator");
+ static final String doubleBlankLine = sep + sep + sep;
+
+ void test(Class<?> clazz, String... opts) throws Exception {
+ System.err.println("test " + Arrays.asList(opts));
+ List<String> args = new ArrayList<String>();
+ args.addAll(Arrays.asList(opts));
+ args.addAll(Arrays.asList("-classpath", System.getProperty("test.classes")));
+ args.add(clazz.getName());
+ StringWriter sw = new StringWriter();
+ PrintWriter pw = new PrintWriter(sw);
+ int rc = com.sun.tools.javap.Main.run(args.toArray(new String[args.size()]), pw);
+ pw.close();
+ String out = sw.toString();
+ if (rc != 0)
+ throw new Exception("javap failed unexpectedly: rc=" + rc);
+
+ int count = 0;
+ int i = out.indexOf(doubleBlankLine, 0);
+ while (i != -1) {
+ count++;
+ i = out.indexOf(doubleBlankLine, i + doubleBlankLine.length());
+ }
+
+ if (count > 0)
+ error(count + " double blank lines found");
+ }
+
+ void error(String msg) {
+ System.err.println("Error: " + msg);
+ errors++;
+ }
+
+ int errors = 0;
+}
+
diff --git a/langtools/test/tools/javap/T8033180.java b/langtools/test/tools/javap/T8033180.java
new file mode 100644
index 0000000..e7840ea
--- /dev/null
+++ b/langtools/test/tools/javap/T8033180.java
@@ -0,0 +1,88 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8033180
+ * @summary Bad newline characters
+ */
+
+import java.io.*;
+import java.util.*;
+
+public class T8033180 {
+
+ public static void main(String... args) throws Exception {
+ new T8033180().run();
+ }
+
+ void run() throws Exception {
+ // fast-track this case, because test cannot fail in this case
+ if (lineSep.equals(nl))
+ return;
+
+ test("-help");
+ test("-version");
+
+ if (errors > 0)
+ throw new Exception(errors + " errors occurred");
+ }
+
+ static final String lineSep = System.getProperty("line.separator");
+ static final String nl = "\n";
+
+ void test(String... opts) throws Exception {
+ System.err.println("test " + Arrays.asList(opts));
+ List<String> args = new ArrayList<String>();
+ args.addAll(Arrays.asList(opts));
+ StringWriter sw = new StringWriter();
+ PrintWriter pw = new PrintWriter(sw);
+ int rc = com.sun.tools.javap.Main.run(args.toArray(new String[args.size()]), pw);
+ pw.close();
+ String out = sw.toString();
+ if (rc != 0)
+ throw new Exception("javap failed unexpectedly: rc=" + rc);
+
+ // remove all valid platform newline sequences
+ String out2 = out.replace(lineSep, "");
+
+ // count the remaining simple newline characters
+ int count = 0;
+ int i = out2.indexOf(nl, 0);
+ while (i != -1) {
+ count++;
+ i = out2.indexOf(nl, i + nl.length());
+ }
+
+ if (count > 0)
+ error(count + " newline characters found");
+ }
+
+ void error(String msg) {
+ System.err.println("Error: " + msg);
+ errors++;
+ }
+
+ int errors = 0;
+}
+
diff --git a/langtools/test/tools/javap/T8033711.java b/langtools/test/tools/javap/T8033711.java
new file mode 100644
index 0000000..e819146
--- /dev/null
+++ b/langtools/test/tools/javap/T8033711.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8033711
+ * @summary An exception is thrown if using the "-classpath" option with no arguments
+ */
+
+
+import java.io.*;
+
+public class T8033711 {
+ public static void main(String[] args) throws Exception {
+ new T8033711().run();
+ }
+
+ public void run() throws Exception {
+ String out = javap("-classpath");
+ if (out.contains("IllegalArgumentException"))
+ throw new Exception("exception found in javap output");
+ if (!out.contains("Error: invalid use of option"))
+ throw new Exception("expected error message not found in javap output");
+ }
+
+ String javap(String... args) {
+ StringWriter sw = new StringWriter();
+ PrintWriter out = new PrintWriter(sw);
+ int rc = com.sun.tools.javap.Main.run(args, out);
+ out.close();
+ System.out.println(sw.toString());
+ System.out.println("javap exited, rc=" + rc);
+ return sw.toString();
+ }
+}
diff --git a/langtools/test/tools/javap/WhitespaceTest.java b/langtools/test/tools/javap/WhitespaceTest.java
new file mode 100644
index 0000000..83f93cc
--- /dev/null
+++ b/langtools/test/tools/javap/WhitespaceTest.java
@@ -0,0 +1,91 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8033581 8033798 8033726
+ * @summary Check whitespace in generated output
+ */
+
+import java.io.*;
+import java.util.*;
+
+public class WhitespaceTest {
+ public static void main(String... args) throws Exception {
+ new WhitespaceTest().run();
+ }
+
+ void run() throws Exception {
+ test("-v", "java.lang.String");
+ test("-XDtab:1", "-v", "java.lang.String");
+
+ String testClasses = System.getProperty("test.classes");
+ for (int i = 10; i < 40; i++)
+ test("-XDtab:" + i, "-v", "-classpath", testClasses, "WhitespaceTest$HelloWorld");
+
+ if (errors > 0)
+ throw new Exception(errors + " errors found");
+ }
+
+ void test(String... args) throws Exception {
+ // need to avoid "//" appearing as a constant in the constant pool
+ String slash = "/";
+ String doubleSlash = slash + slash;
+ System.out.println("test: " + Arrays.asList(args));
+ String out = javap(args);
+ for (String line: out.split("[\r\n]+")) {
+ if (line.endsWith(" "))
+ error("line has trailing whitespace: " + line);
+ int comment = line.indexOf(doubleSlash);
+ if (comment > 0 && line.charAt(comment - 1) != ' ')
+ error("no space before comment: " + line);
+ if (line.matches(" +}"))
+ error("bad indentation: " + line);
+ }
+ }
+
+ String javap(String... args) throws Exception {
+ StringWriter sw = new StringWriter();
+ PrintWriter out = new PrintWriter(sw);
+ int rc = com.sun.tools.javap.Main.run(args, out);
+ out.close();
+ System.out.println(sw.toString());
+ if (rc < 0)
+ throw new Exception("javap exited, rc=" + rc);
+ return sw.toString();
+ }
+
+ void error(String msg) {
+ System.out.println("Error: " + msg);
+ errors++;
+ }
+
+ int errors;
+
+ // small class to test repeatedly with different tab values
+ static class HelloWorld {
+ public static void main(String... args) {
+ System.out.println("Hello World!");
+ }
+ }
+}
diff --git a/make/common/JavaCompilation.gmk b/make/common/JavaCompilation.gmk
index 6180327..9415c10 100644
--- a/make/common/JavaCompilation.gmk
+++ b/make/common/JavaCompilation.gmk
@@ -527,16 +527,16 @@
# When building in batch, put headers in a temp dir to filter out those that actually
# changed before copying them to the real header dir.
ifneq (,$$($1_HEADERS))
- $1_HEADERS_ARG := -h $$($1_HEADERS).tmp
+ $1_HEADERS_ARG := -h $$($1_HEADERS).$1.tmp
$$($1_HEADERS)/_the.$1_headers: $$($1_BIN)/_the.$1_batch
$(MKDIR) -p $$(@D)
- for f in `ls $$($1_HEADERS).tmp`; do \
- if [ ! -f "$$($1_HEADERS)/$$$$f" ] || [ "`$(DIFF) $$($1_HEADERS)/$$$$f $$($1_HEADERS).tmp/$$$$f`" != "" ]; then \
- $(CP) -f $$($1_HEADERS).tmp/$$$$f $$($1_HEADERS)/$$$$f; \
+ for f in `ls $$($1_HEADERS).$1.tmp`; do \
+ if [ ! -f "$$($1_HEADERS)/$$$$f" ] || [ "`$(DIFF) $$($1_HEADERS)/$$$$f $$($1_HEADERS).$1.tmp/$$$$f`" != "" ]; then \
+ $(CP) -f $$($1_HEADERS).$1.tmp/$$$$f $$($1_HEADERS)/$$$$f; \
fi; \
done
- $(RM) -r $$($1_HEADERS).tmp
+ $(RM) -r $$($1_HEADERS).$1.tmp
$(TOUCH) $$@
$1 += $$($1_HEADERS)/_the.$1_headers
diff --git a/nashorn/.hgtags b/nashorn/.hgtags
index a00ea12..8bf7895 100644
--- a/nashorn/.hgtags
+++ b/nashorn/.hgtags
@@ -233,9 +233,14 @@
32631eed0fad2b31346eb41b29a50227bd29e2ec jdk8-b121
9d112a0e7df737f3b1fa2a021d5bb350ed56c1b7 jdk8-b122
688f4167f92188482b0d80e315c72f726c6d5ff6 jdk8-b123
+0b4301c792254c890811e5b8e32c23338d715928 jdk8u20-b00
7346abe2ea03134e1aee3b3d0fccb047235bd221 jdk8-b124
+d39eb6ab87581becb8efbb5e3a95c99d5e228328 jdk8u20-b01
7346abe2ea03134e1aee3b3d0fccb047235bd221 jdk8-b125
095263db862da23fa04d57c7e93e553831132449 jdk8-b126
fdfbb745caf0e54775a44e66e39d3025785e0528 jdk8-b127
73cbad0c5d28b8f6e12f634aceeb2b3b4ad09553 jdk8-b128
9cc3fd32fbabdd8b06771d11a319c9802e118612 jdk8-b129
+43a1183d2ab0ee3dbffd8bc47606e88dbe0c6116 jdk8u20-b02
+9d69311869d513deecfebe767cc5f01502c9c01e jdk8u20-b03
+e70dd55986e085185d976f2a78843a7d7eb87afd jdk8u20-b04
diff --git a/nashorn/.jcheck/conf b/nashorn/.jcheck/conf
index 6d0dbe4..5bd24b1 100644
--- a/nashorn/.jcheck/conf
+++ b/nashorn/.jcheck/conf
@@ -1 +1,2 @@
project=jdk8
+bugids=dup