changeset 5075:907555f6191a icedtea-2.2-branchpoint

Merge
author andrew
date Wed, 02 May 2012 15:06:35 +0100
parents 3634a288dd89 (current diff) c929e96aa059 (diff)
children 9b7558b91244
files .hgtags src/macosx/bin/universal/jvm.cfg src/share/classes/com/sun/management/DiagnosticCommandArgumentInfo.java src/share/classes/com/sun/management/DiagnosticCommandInfo.java src/share/classes/java/awt/KeyboardFocusManager.java src/share/classes/sun/java2d/SunGraphics2D.java src/share/classes/sun/net/httpserver/Request.java src/share/classes/sun/security/provider/certpath/ForwardBuilder.java src/share/classes/sun/security/provider/certpath/PKIXCertPathValidator.java src/share/native/java/util/zip/zip_util.c src/solaris/native/java/lang/java_props_md.c src/solaris/native/sun/nio/fs/UnixNativeDispatcher.c test/com/sun/management/HotSpotDiagnosticMXBean/ExecuteDiagnosticCommand.java test/com/sun/management/HotSpotDiagnosticMXBean/GetDiagnosticCommandInfo.java test/com/sun/management/HotSpotDiagnosticMXBean/GetDiagnosticCommands.java
diffstat 142 files changed, 7597 insertions(+), 1335 deletions(-) [+]
line wrap: on
line diff
--- a/.hgtags	Wed May 02 14:00:06 2012 +0100
+++ b/.hgtags	Wed May 02 15:06:35 2012 +0100
@@ -146,6 +146,9 @@
 fb2980d7c9439e3d62ab12f40506a2a2db2df0f4 jdk7u2-b13
 24e42f1f9029f9f5a9b1481d523facaf09452e5b jdk7u2-b21
 a75913596199fbb8583f9d74021f54dc76f87b14 icedtea-2.1-branchpoint
+e3790f3ce50aa4e2a1b03089ac0bcd48f9d1d2c2 jdk7u3-b02
+7e8351342f0b22b694bd3c2db979643529f32e71 jdk7u3-b03
+fc6b7b6ac837c9e867b073e13fc14e643f771028 jdk7u3-b04
 c0b98811b1fce5f479d487fe69db742874b22129 jdk7u4-b200
 6f7af0f0e7db448bb6c21a08b3aadc461d9e2456 jdk7u4-b04
 b97711a217859410d2724b8fdc90ef5937faa11b jdk7u4-b02
@@ -157,3 +160,5 @@
 2e4258236920ffd9b30799d817fadf88254e16b6 jdk7u4-b227
 0e394800a961634c95f208f11c0282a1515181c9 jdk7u4-b09
 6485e842d7f736b6ca3d7e4a7cdc5de6bbdd870c jdk7u4-b10
+d568e85567ccfdd75f3f0c42aa0d75c440422827 jdk7u4-b11
+16781e84dcdb5f82c287a3b5387dde9f8aaf74e0 jdk7u4-b12
--- a/make/common/Defs-macosx.gmk	Wed May 02 14:00:06 2012 +0100
+++ b/make/common/Defs-macosx.gmk	Wed May 02 15:06:35 2012 +0100
@@ -53,6 +53,8 @@
   PLATFORM_SRC = $(BUILDDIR)/../src/solaris
 endif # PLATFORM_SRC
 
+PLATFORM_SRC_MACOS = $(BUILDDIR)/../src/macosx
+
 # BSD build pulls its platform sources from the solaris tree.
 JAVA_SRCDIR_LIST = src/$(PLATFORM) src/solaris src/share
 NATIVE_SRCDIR_LIST = src/$(PLATFORM) src/solaris src/share
--- a/make/common/Release-macosx.gmk	Wed May 02 14:00:06 2012 +0100
+++ b/make/common/Release-macosx.gmk	Wed May 02 15:06:35 2012 +0100
@@ -38,16 +38,16 @@
 BUNLDE_ID_JRE ?= $(BUNDLE_ID).jre
 BUNLDE_ID_JDK ?= $(BUNDLE_ID).jdk
 
-BUNDLE_NAME ?= OpenJDK 7
+BUNDLE_NAME ?= OpenJDK $(JDK_MINOR_VERSION)
 BUNDLE_NAME_JRE ?= $(BUNDLE_NAME)
 BUNDLE_NAME_JDK ?= $(BUNDLE_NAME)
 
-BUNDLE_INFO ?= OpenJDK (1.7.0)
+BUNDLE_INFO ?= OpenJDK ($(JDK_VERSION))
 BUNDLE_INFO_JRE ?= $(BUNDLE_INFO)
 BUNDLE_INFO_JDK ?= $(BUNDLE_INFO)
 
-BUNDLE_PLATFORM_VERSION ?= 1.7
-BUNDLE_VERSION ?= 1.7.0
+BUNDLE_PLATFORM_VERSION ?= $(JDK_MAJOR_VERSION).$(JDK_MINOR_VERSION)
+BUNDLE_VERSION ?= $(JDK_VERSION)
 BUNDLE_VENDOR ?= UNDEFINED
 
 jre-bundle-setup:
@@ -59,18 +59,16 @@
 jre-bundle-files:
 	$(MKDIR) -p $(JRE_BUNDLE_DIR)/MacOS
 	ln -s ../Home/lib/jli/libjli.dylib $(JRE_BUNDLE_DIR)/MacOS/
-	$(MV) $(JRE_IMAGE_DIR) $(JRE_BUNDLE_DIR)/Home
+	$(CP) -r $(JRE_IMAGE_DIR) $(JRE_BUNDLE_DIR)/Home
 	$(SED) -e "s/@@ID@@/$(BUNDLE_ID_JRE)/g" -e "s/@@NAME@@/$(BUNDLE_NAME_JRE)/g" -e "s/@@INFO@@/$(BUNDLE_INFO_JRE)/g" -e "s/@@PLATFORM_VERSION@@/$(BUNDLE_PLATFORM_VERSION)/g" -e "s/@@VERSION@@/$(BUNDLE_VERSION)/g" -e "s/@@VENDOR@@/$(BUNDLE_VENDOR)/g" < $(MACOSX_SRC)/bundle/JRE-Info.plist > $(JRE_BUNDLE_DIR)/Info.plist
 	/usr/bin/SetFile -a B $(JRE_BUNDLE_DIR)/../
-	$(MV) $(ABS_OUTPUTDIR)/j2re-bundle $(JRE_IMAGE_DIR)
 
 jdk-bundle-files:
 	$(MKDIR) -p $(JDK_BUNDLE_DIR)/MacOS
 	ln -s ../Home/jre/lib/jli/libjli.dylib $(JDK_BUNDLE_DIR)/MacOS/
-	$(MV) $(JDK_IMAGE_DIR) $(JDK_BUNDLE_DIR)/Home
+	$(CP) -r $(JDK_IMAGE_DIR) $(JDK_BUNDLE_DIR)/Home
 	$(SED) -e "s/@@ID@@/$(BUNDLE_ID_JDK)/g" -e "s/@@NAME@@/$(BUNDLE_NAME_JDK)/g" -e "s/@@INFO@@/$(BUNDLE_INFO_JDK)/g" -e "s/@@PLATFORM_VERSION@@/$(BUNDLE_PLATFORM_VERSION)/g" -e "s/@@VERSION@@/$(BUNDLE_VERSION)/g" -e "s/@@VENDOR@@/$(BUNDLE_VENDOR)/g" < $(MACOSX_SRC)/bundle/JDK-Info.plist > $(JDK_BUNDLE_DIR)/Info.plist
 	/usr/bin/SetFile -a B $(JDK_BUNDLE_DIR)/../
-	$(MV) $(ABS_OUTPUTDIR)/j2sdk-bundle $(JDK_IMAGE_DIR)
 
 EXTRA_IMAGE_TARGETS += jre-bundle-setup jdk-bundle-setup jre-bundle-files jdk-bundle-files
 
--- a/make/java/fdlibm/Makefile	Wed May 02 14:00:06 2012 +0100
+++ b/make/java/fdlibm/Makefile	Wed May 02 15:06:35 2012 +0100
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 1998, 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
@@ -60,6 +60,12 @@
   FASTDEBUG_OPTIMIZATION_LEVEL = NONE
 endif
 
+ifeq ($(PLATFORM),macosx)
+  # Turn all optimizations off
+  OPTIMIZATION_LEVEL = NONE
+  FASTDEBUG_OPTIMIZATION_LEVEL = NONE
+endif
+
 #
 # Include path.
 #
--- a/make/java/jobjc/Makefile	Wed May 02 14:00:06 2012 +0100
+++ b/make/java/jobjc/Makefile	Wed May 02 15:06:35 2012 +0100
@@ -59,10 +59,13 @@
 
 $(STABLE_METADATA_FILES): stabilize
 
+ABS_OUTPUTDIR=$(realpath $(OUTPUTDIR))
+ABS_STABLE_GEN_DIR=$(realpath $(STABLE_GEN_DIR))
+
 $(BUILT_DYLIB) $(BUILT_JAR): $(STABLE_METADATA_FILES) $(CORE_SRC) $(GENERATOR_SRC) $(ADDITIONS_SRC) $(BUILD_SRC)
 	@echo JObjC dylib or jar out of data wrt FRAMEWORKS '(' $(FRAMEWORKS) ')' or JObjC source '(' core, generator, additions, build ')'
 	@echo Running ant with java_home set to ${ALT_BOOTDIR}
-	(cd $(SRCDIR); OBJROOT="$(OUTPUTDIR)/JObjC.build" DSTROOT="$(OUTPUTDIR)/JObjC.dst" JAVA_HOME=${ALT_BOOTDIR} STABLE_GEN_DIR="$(STABLE_GEN_DIR)" /usr/bin/ant -verbose all)
+	(cd $(SRCDIR); OBJROOT="$(ABS_OUTPUTDIR)/JObjC.build" DSTROOT="$(ABS_OUTPUTDIR)/JObjC.dst" JAVA_HOME=${ALT_BOOTDIR} STABLE_GEN_DIR="$(ABS_STABLE_GEN_DIR)" /usr/bin/ant -verbose all)
 
 all: $(BUILD_DYLIB) $(BUILT_JAR)
 	$(CP) $(BUILT_DYLIB) $(LIB_LOCATION)/libJObjC.dylib
--- a/make/java/jvm/Makefile	Wed May 02 14:00:06 2012 +0100
+++ b/make/java/jvm/Makefile	Wed May 02 15:06:35 2012 +0100
@@ -43,12 +43,6 @@
 $(PLATFORM_INCLUDE)/%.h: $(PLATFORM_SRC)/javavm/export/%.h
 	$(install-file)
 
-ifeq ($(PLATFORM),macosx)
-  JVMCFG_DIR = $(LIBDIR)
-else
-  JVMCFG_DIR = $(LIBDIR)/$(LIBARCH)
-endif
-
 JVMCFG = $(JVMCFG_DIR)/jvm.cfg
 
 #
@@ -60,6 +54,14 @@
 JVMCFG_ARCH = $(ARCH)
 endif
 
+ifeq ($(PLATFORM),macosx)
+  JVMCFG_SRC = $(PLATFORM_SRC_MACOS)/bin/$(JVMCFG_ARCH)/jvm.cfg
+  JVMCFG_DIR = $(LIBDIR)
+else
+  JVMCFG_SRC = $(PLATFORM_SRC)/bin/$(JVMCFG_ARCH)/jvm.cfg
+  JVMCFG_DIR = $(LIBDIR)/$(LIBARCH)
+endif
+
 ifdef BUILD_CLIENT_ONLY
 $(JVMCFG)::
 	$(MKDIR) -p $(JVMCFG_DIR)
@@ -72,7 +74,7 @@
 	$(ECHO) "-native ERROR">>$(JVMCFG)
 	$(ECHO) "-green ERROR">>$(JVMCFG)
 else
-$(JVMCFG): $(PLATFORM_SRC)/bin/$(JVMCFG_ARCH)/jvm.cfg
+$(JVMCFG): $(JVMCFG_SRC)
 	$(install-file)
 endif
 
--- a/make/java/management/mapfile-vers	Wed May 02 14:00:06 2012 +0100
+++ b/make/java/management/mapfile-vers	Wed May 02 15:06:35 2012 +0100
@@ -54,9 +54,6 @@
 	    Java_sun_management_GcInfoBuilder_getLastGcInfo0;
 	    Java_sun_management_GcInfoBuilder_getNumGcExtAttributes;
 	    Java_sun_management_HotSpotDiagnostic_dumpHeap;
-	    Java_sun_management_HotSpotDiagnostic_executeDiagnosticCommand0;
-	    Java_sun_management_HotSpotDiagnostic_getDiagnosticCommandInfo0;
-	    Java_sun_management_HotSpotDiagnostic_getDiagnosticCommands0;
 	    Java_sun_management_HotspotThread_getInternalThreadCount;
 	    Java_sun_management_HotspotThread_getInternalThreadTimes0;
 	    Java_sun_management_MemoryImpl_getMemoryManagers0;
--- a/make/javax/sound/Makefile	Wed May 02 14:00:06 2012 +0100
+++ b/make/javax/sound/Makefile	Wed May 02 15:06:35 2012 +0100
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 1999, 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
@@ -123,7 +123,7 @@
 
   LDFLAGS += -framework CoreAudio -framework CoreFoundation \
              -framework CoreServices -framework AudioUnit -lstdc++ \
-             -framework CoreMIDI
+             -framework CoreMIDI -framework AudioToolbox
   CXXFLAGS += -I`xcode-select -print-path`/Extras/CoreAudio/PublicUtility
 endif
 
--- a/make/jprt.properties	Wed May 02 14:00:06 2012 +0100
+++ b/make/jprt.properties	Wed May 02 15:06:35 2012 +0100
@@ -64,19 +64,32 @@
 
 # Default jdk test targets (testset=default)
 jprt.make.rule.default.test.targets=				\
-    ${jprt.my.test.target.set:TESTNAME=jdk_beans1},             \
-    ${jprt.my.test.target.set:TESTNAME=jdk_io},                 \
     ${jprt.my.test.target.set:TESTNAME=jdk_lang},               \
-    ${jprt.my.test.target.set:TESTNAME=jdk_math},               \
-    ${jprt.my.test.target.set:TESTNAME=jdk_misc},               \
-    ${jprt.my.test.target.set:TESTNAME=jdk_net},                \
-    ${jprt.my.test.target.set:TESTNAME=jdk_nio1},               \
-    ${jprt.my.test.target.set:TESTNAME=jdk_nio2},               \
-    ${jprt.my.test.target.set:TESTNAME=jdk_nio3},               \
-    ${jprt.my.test.target.set:TESTNAME=jdk_security1},          \
-    ${jprt.my.test.target.set:TESTNAME=jdk_text},               \
-    ${jprt.my.test.target.set:TESTNAME=jdk_tools1},             \
-    ${jprt.my.test.target.set:TESTNAME=jdk_util}
+    ${jprt.my.test.target.set:TESTNAME=jdk_math}
+
+# Core vm test targets (testset=core)
+jprt.vm.core.test.targets=					\
+    ${jprt.vm.default.test.target}
+
+# Core jdk test targets (testset=core)
+jprt.make.rule.core.test.targets=				\
+    ${jprt.make.rule.default.test.targets},			\
+    ${jprt.my.test.target.set:TESTNAME=jdk_util},		\
+    ${jprt.my.test.target.set:TESTNAME=jdk_io},			\
+    ${jprt.my.test.target.set:TESTNAME=jdk_net},		\
+    ${jprt.my.test.target.set:TESTNAME=jdk_nio1},		\
+    ${jprt.my.test.target.set:TESTNAME=jdk_nio2},		\
+    ${jprt.my.test.target.set:TESTNAME=jdk_nio3},		\
+    ${jprt.my.test.target.set:TESTNAME=jdk_security1},		\
+    ${jprt.my.test.target.set:TESTNAME=jdk_security2},		\
+    ${jprt.my.test.target.set:TESTNAME=jdk_security3},		\
+    ${jprt.my.test.target.set:TESTNAME=jdk_rmi},		\
+    ${jprt.my.test.target.set:TESTNAME=jdk_management1},	\
+    ${jprt.my.test.target.set:TESTNAME=jdk_management2},	\
+    ${jprt.my.test.target.set:TESTNAME=jdk_text},		\
+    ${jprt.my.test.target.set:TESTNAME=jdk_tools1},		\
+    ${jprt.my.test.target.set:TESTNAME=jdk_tools2},		\
+    ${jprt.my.test.target.set:TESTNAME=jdk_misc}
 
 # All vm test targets (testset=all)
 jprt.vm.all.test.targets=                                       \
@@ -88,15 +101,10 @@
 jprt.make.rule.all.test.targets=    				\
     ${jprt.make.rule.default.test.targets}, 			\
     ${jprt.my.test.target.set:TESTNAME=jdk_awt},                \
+    ${jprt.my.test.target.set:TESTNAME=jdk_beans1},		\
     ${jprt.my.test.target.set:TESTNAME=jdk_beans2},             \
     ${jprt.my.test.target.set:TESTNAME=jdk_beans3},             \
-    ${jprt.my.test.target.set:TESTNAME=jdk_management1},        \
-    ${jprt.my.test.target.set:TESTNAME=jdk_management2},        \
-    ${jprt.my.test.target.set:TESTNAME=jdk_rmi},                \
-    ${jprt.my.test.target.set:TESTNAME=jdk_security2},          \
-    ${jprt.my.test.target.set:TESTNAME=jdk_security3},          \
-    ${jprt.my.test.target.set:TESTNAME=jdk_swing},              \
-    ${jprt.my.test.target.set:TESTNAME=jdk_tools2}
+    ${jprt.my.test.target.set:TESTNAME=jdk_swing}
 
 # JCK test targets in test/Makefile (no windows)
 jprt.my.jck.test.target.set=					\
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/macosx/bin/amd64/jvm.cfg	Wed May 02 15:06:35 2012 +0100
@@ -0,0 +1,38 @@
+# Copyright (c) 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.  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.
+#
+# List of JVMs that can be used as an option to java, javac, etc.
+# Order is important -- first in this list is the default JVM.
+# NOTE that this both this file and its format are UNSUPPORTED and
+# WILL GO AWAY in a future release.
+#
+# You may also select a JVM in an arbitrary location with the
+# "-XXaltjvm=<jvm_dir>" option, but that too is unsupported
+# and may not be available in a future release.
+#
+-server KNOWN
+-client IGNORE
+-hotspot ERROR
+-classic WARN
+-native ERROR
+-green ERROR
--- a/src/macosx/bin/universal/jvm.cfg	Wed May 02 14:00:06 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,38 +0,0 @@
-# Copyright (c) 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.  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.
-#
-# List of JVMs that can be used as an option to java, javac, etc.
-# Order is important -- first in this list is the default JVM.
-# NOTE that this both this file and its format are UNSUPPORTED and
-# WILL GO AWAY in a future release.
-#
-# You may also select a JVM in an arbitrary location with the
-# "-XXaltjvm=<jvm_dir>" option, but that too is unsupported
-# and may not be available in a future release.
-#
--server KNOWN
--client KNOWN
--hotspot ERROR
--classic WARN
--native ERROR
--green ERROR
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/macosx/bundle/appbundler/native/main.m	Wed May 02 15:06:35 2012 +0100
@@ -0,0 +1,187 @@
+/*
+ * Copyright 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.  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.
+ */
+
+#import <Cocoa/Cocoa.h>
+#include <jni.h>
+
+#define JAVA_LAUNCH_ERROR "JavaLaunchError"
+
+#define JAVA_VM_KEY "JavaVM"
+#define RUNTIME_KEY "Runtime"
+#define MAIN_CLASS_NAME_KEY "MainClassName"
+#define OPTIONS_KEY "Options"
+#define ARGUMENTS_KEY "Arguments"
+
+// TODO Remove these; they are defined by the makefile
+#define FULL_VERSION "1.7.0"
+#define DOT_VERSION "1.7.0"
+#define DEFAULT_POLICY 0
+
+typedef int (JNICALL *JLI_Launch_t)(int argc, char ** argv,
+                                    int jargc, const char** jargv,
+                                    int appclassc, const char** appclassv,
+                                    const char* fullversion,
+                                    const char* dotversion,
+                                    const char* pname,
+                                    const char* lname,
+                                    jboolean javaargs,
+                                    jboolean cpwildcard,
+                                    jboolean javaw,
+                                    jint ergo);
+
+int launch(char *);
+int jli_launch(char *, NSURL *, NSString *, NSString *, NSString *, NSArray *, NSArray *);
+
+int main(int argc, char *argv[]) {
+    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+
+    int result;
+    @try {
+        launch(argv[0]);
+        result = 0;
+    } @catch (NSException *exception) {
+        NSLog(@"%@: %@", exception, [exception callStackSymbols]);
+        result = 1;
+    }
+
+    [pool drain];
+
+    return result;
+}
+
+int launch(char *commandName) {
+    // Get the main bundle
+    NSBundle *mainBundle = [NSBundle mainBundle];
+    NSDictionary *infoDictionary = [mainBundle infoDictionary];
+
+    NSString *javaVMPath = [[mainBundle bundlePath] stringByAppendingString:@"/Contents/JavaVM"];
+
+    // Get the Java dictionary
+    NSDictionary *javaVMDictionary = [infoDictionary objectForKey:@JAVA_VM_KEY];
+    if (javaVMDictionary == nil) {
+        [NSException raise:@JAVA_LAUNCH_ERROR format:@"%@ is required.", @JAVA_VM_KEY];
+    }
+
+    // Get the runtime bundle URL
+    NSString *runtime = [javaVMDictionary objectForKey:@RUNTIME_KEY];
+
+    // TODO If unspecified, use default runtime location
+
+    NSURL *runtimeBundleURL = [[mainBundle builtInPlugInsURL] URLByAppendingPathComponent:runtime];
+
+    // Get the main class name
+    NSString *mainClassName = [javaVMDictionary objectForKey:@MAIN_CLASS_NAME_KEY];
+    if (mainClassName == nil) {
+        [NSException raise:@JAVA_LAUNCH_ERROR format:@"%@ is required.", @MAIN_CLASS_NAME_KEY];
+    }
+
+    // Set the class path
+    NSString *classPathFormat = @"-Djava.class.path=%@/Classes";
+    NSMutableString *classPath = [[NSString stringWithFormat:classPathFormat, javaVMPath] mutableCopy];
+
+    NSFileManager *defaultFileManager = [NSFileManager defaultManager];
+    NSArray *javaDirectoryContents = [defaultFileManager contentsOfDirectoryAtPath:javaVMPath error:nil];
+    if (javaDirectoryContents == nil) {
+        [NSException raise:@JAVA_LAUNCH_ERROR format:@"Could not enumerate Java directory contents."];
+    }
+
+    for (NSString *file in javaDirectoryContents) {
+        if ([file hasSuffix:@".jar"]) {
+            [classPath appendFormat:@":%@/%@", javaVMPath, file];
+        }
+    }
+
+    // Set the library path
+    NSString *libraryPathFormat = @"-Djava.library.path=%@";
+    NSString *libraryPath = [NSString stringWithFormat:libraryPathFormat, javaVMPath];
+
+    // Get the VM options
+    NSArray *options = [javaVMDictionary objectForKey:@OPTIONS_KEY];
+    if (options == nil) {
+        options = [NSArray array];
+    }
+
+    // Get the application arguments
+    NSArray *arguments = [javaVMDictionary objectForKey:@ARGUMENTS_KEY];
+    if (arguments == nil) {
+        arguments = [NSArray array];
+    }
+
+    return jli_launch(commandName, runtimeBundleURL,
+                      mainClassName, classPath, libraryPath,
+                      options, arguments);
+}
+
+int jli_launch(char *commandName, NSURL *runtimeBundleURL,
+               NSString *mainClassName, NSString *classPath, NSString *libraryPath,
+               NSArray *options, NSArray *arguments) {
+    // Load the runtime bundle
+    CFBundleRef runtimeBundle = CFBundleCreate(NULL, (CFURLRef)runtimeBundleURL);
+
+    NSError *bundleLoadError = nil;
+    Boolean runtimeBundleLoaded = CFBundleLoadExecutableAndReturnError(runtimeBundle, (CFErrorRef *)&bundleLoadError);
+    if (bundleLoadError != nil || !runtimeBundleLoaded) {
+        [NSException raise:@JAVA_LAUNCH_ERROR format:@"Could not load JRE from %@.", bundleLoadError];
+    }
+
+    // Get the JLI_Launch() function pointer
+    JLI_Launch_t JLI_LaunchFxnPtr = CFBundleGetFunctionPointerForName(runtimeBundle, CFSTR("JLI_Launch"));
+    if (JLI_LaunchFxnPtr == NULL) {
+        [NSException raise:@JAVA_LAUNCH_ERROR format:@"Could not get function pointer for JLI_Launch."];
+    }
+
+    // Initialize the arguments to JLI_Launch()
+    int argc = 1 + [options count] + 2 + [arguments count] + 1;
+    char *argv[argc];
+
+    int i = 0;
+    argv[i++] = commandName;
+    argv[i++] = strdup([classPath UTF8String]);
+    argv[i++] = strdup([libraryPath UTF8String]);
+
+    for (NSString *option in options) {
+        argv[i++] = strdup([option UTF8String]);
+    }
+
+    argv[i++] = strdup([mainClassName UTF8String]);
+
+    for (NSString *argument in arguments) {
+        argv[i++] = strdup([argument UTF8String]);
+    }
+
+    // Invoke JLI_Launch()
+    return JLI_LaunchFxnPtr(argc, argv,
+                            0, NULL,
+                            0, NULL,
+                            FULL_VERSION,
+                            DOT_VERSION,
+                            "java",
+                            "java",
+                            FALSE,
+                            FALSE,
+                            FALSE,
+                            DEFAULT_POLICY);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/macosx/bundle/appbundler/src/com/oracle/appbundler/AppBundlerTask.java	Wed May 02 15:06:35 2012 +0100
@@ -0,0 +1,485 @@
+/*
+ * Copyright 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.  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 com.oracle.appbundler;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Writer;
+import java.net.URL;
+import java.nio.file.Files;
+import java.nio.file.LinkOption;
+import java.nio.file.Path;
+import java.nio.file.StandardCopyOption;
+import java.util.ArrayList;
+
+import javax.xml.stream.XMLOutputFactory;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamWriter;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.DirectoryScanner;
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.types.FileSet;
+
+/**
+ * App bundler Ant task.
+ */
+public class AppBundlerTask extends Task {
+    // Output folder for generated bundle
+    private File outputDirectory = null;
+
+    // General bundle properties
+    private String name = null;
+    private String displayName = null;
+    private String identifier = null;
+    private File icon = null;
+
+    private String shortVersion = "1.0";
+    private String signature = "????";
+    private String copyright = "";
+
+    // JVM info properties
+    private File runtime = null;
+    private String mainClassName = null;
+    private ArrayList<File> classPath = new ArrayList<>();
+    private ArrayList<File> nativeLibraries = new ArrayList<>();
+    private ArrayList<String> options = new ArrayList<>();
+    private ArrayList<String> arguments = new ArrayList<>();
+
+    public static final String EXECUTABLE_NAME = "JavaAppLauncher";
+    public static final String DEFAULT_ICON_NAME = "GenericApp.icns";
+    public static final String OS_TYPE_CODE = "APPL";
+    public static final String CLASS_EXTENSION = ".class";
+
+    public static final String PLIST_DTD = "<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">";
+    public static final String PLIST_TAG = "plist";
+    public static final String PLIST_VERSION_ATTRIBUTE = "version";
+    public static final String DICT_TAG = "dict";
+    public static final String KEY_TAG = "key";
+    public static final String ARRAY_TAG = "array";
+    public static final String STRING_TAG = "string";
+
+    public static final int BUFFER_SIZE = 1024;
+
+    public void setOutputDirectory(File outputDirectory) {
+        this.outputDirectory = outputDirectory;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public void setDisplayName(String displayName) {
+        this.displayName = displayName;
+    }
+
+    public void setIdentifier(String identifier) {
+        this.identifier = identifier;
+    }
+
+    public void setIcon(File icon) {
+        this.icon = icon;
+    }
+
+    public void setShortVersion(String shortVersion) {
+        this.shortVersion = shortVersion;
+    }
+
+    public void setSignature(String signature) {
+        this.signature = signature;
+    }
+
+    public void setCopyright(String copyright) {
+        this.copyright = copyright;
+    }
+
+    public File getRuntime() {
+        return runtime;
+    }
+
+    public void setRuntime(File runtime) {
+        this.runtime = runtime;
+    }
+
+    public void setMainClassName(String mainClassName) {
+        this.mainClassName = mainClassName;
+    }
+
+    public void addConfiguredClassPath(FileSet classPath) {
+        File parent = classPath.getDir();
+
+        DirectoryScanner directoryScanner = classPath.getDirectoryScanner(getProject());
+        String[] includedFiles = directoryScanner.getIncludedFiles();
+
+        for (int i = 0; i < includedFiles.length; i++) {
+            this.classPath.add(new File(parent, includedFiles[i]));
+        }
+    }
+
+    public void addNativeLibrary(File nativeLibrary) throws BuildException {
+        if (nativeLibrary.isDirectory()) {
+            throw new BuildException("Native library cannot be a directory.");
+        }
+
+        nativeLibraries.add(nativeLibrary);
+    }
+
+    public void addConfiguredOption(Option option) throws BuildException {
+        String value = option.getValue();
+
+        if (value == null) {
+            throw new BuildException("Value is required.");
+        }
+
+        options.add(value);
+    }
+
+    public void addConfiguredArgument(Argument argument) throws BuildException {
+        String value = argument.getValue();
+
+        if (value == null) {
+            throw new BuildException("Value is required.");
+        }
+
+        arguments.add(value);
+    }
+
+    @Override
+    public void execute() throws BuildException {
+        // Validate required properties
+        if (outputDirectory == null) {
+            throw new IllegalStateException("Destination directory is required.");
+        }
+
+        if (!outputDirectory.exists()) {
+            throw new IllegalStateException("Destination directory does not exist.");
+        }
+
+        if (!outputDirectory.isDirectory()) {
+            throw new IllegalStateException("Invalid destination directory.");
+        }
+
+        if (name == null) {
+            throw new IllegalStateException("Name is required.");
+        }
+
+        if (displayName == null) {
+            throw new IllegalStateException("Display name is required.");
+        }
+
+        if (identifier == null) {
+            throw new IllegalStateException("Identifier is required.");
+        }
+
+        if (icon != null) {
+            if (!icon.exists()) {
+                throw new IllegalStateException("Icon does not exist.");
+            }
+
+            if (icon.isDirectory()) {
+                throw new IllegalStateException("Invalid icon.");
+            }
+        }
+
+        if (shortVersion == null) {
+            throw new IllegalStateException("Short version is required.");
+        }
+
+        if (signature == null) {
+            throw new IllegalStateException("Signature is required.");
+        }
+
+        if (signature.length() != 4) {
+            throw new IllegalStateException("Invalid signature.");
+        }
+
+        if (copyright == null) {
+            throw new IllegalStateException("Copyright is required.");
+        }
+
+        if (runtime != null) {
+            if (!runtime.exists()) {
+                throw new IllegalStateException("Runtime does not exist.");
+            }
+
+            if (!runtime.isDirectory()) {
+                throw new IllegalStateException("Invalid runtime.");
+            }
+        }
+
+        if (mainClassName == null) {
+            throw new IllegalStateException("Main class name is required.");
+        }
+
+        if (classPath.isEmpty()) {
+            throw new IllegalStateException("Class path is required.");
+        }
+
+        // Create directory structure
+        try {
+            System.out.println("Creating app bundle: " + name);
+
+            File rootDirectory = new File(outputDirectory, name + ".app");
+            delete(rootDirectory);
+            rootDirectory.mkdir();
+
+            File contentsDirectory = new File(rootDirectory, "Contents");
+            contentsDirectory.mkdir();
+
+            File macOSDirectory = new File(contentsDirectory, "MacOS");
+            macOSDirectory.mkdir();
+
+            File javaDirectory = new File(contentsDirectory, "JavaVM");
+            javaDirectory.mkdir();
+
+            File classesDirectory = new File(javaDirectory, "Classes");
+            classesDirectory.mkdir();
+
+            File plugInsDirectory = new File(contentsDirectory, "PlugIns");
+            plugInsDirectory.mkdir();
+
+            File resourcesDirectory = new File(contentsDirectory, "Resources");
+            resourcesDirectory.mkdir();
+
+            // Generate Info.plist
+            File infoPlistFile = new File(contentsDirectory, "Info.plist");
+            infoPlistFile.createNewFile();
+            writeInfoPlist(infoPlistFile);
+
+            // Generate PkgInfo
+            File pkgInfoFile = new File(contentsDirectory, "PkgInfo");
+            pkgInfoFile.createNewFile();
+            writePkgInfo(pkgInfoFile);
+
+            // Copy executable to MacOS folder
+            File executableFile = new File(macOSDirectory, EXECUTABLE_NAME);
+            copy(getClass().getResource(EXECUTABLE_NAME), executableFile);
+
+            executableFile.setExecutable(true);
+
+            // Copy runtime to PlugIns folder (if specified)
+            if (runtime != null) {
+                copy(runtime, new File(plugInsDirectory, runtime.getName()));
+            }
+
+            // Copy class path entries to Java folder
+            for (File entry : classPath) {
+                String name = entry.getName();
+
+                if (entry.isDirectory() || name.endsWith(CLASS_EXTENSION)) {
+                    copy(entry, new File(classesDirectory, name));
+                } else {
+                    copy(entry, new File(javaDirectory, name));
+                }
+            }
+
+            // Copy native libraries to Java folder
+            for (File nativeLibrary : nativeLibraries) {
+                copy(nativeLibrary, new File(javaDirectory, nativeLibrary.getName()));
+            }
+
+            // Copy icon to Resources folder
+            if (icon == null) {
+                copy(getClass().getResource(DEFAULT_ICON_NAME), new File(resourcesDirectory,
+                    DEFAULT_ICON_NAME));
+            } else {
+                copy(icon, new File(resourcesDirectory, icon.getName()));
+            }
+        } catch (IOException exception) {
+            throw new BuildException(exception);
+        }
+    }
+
+    private void writeInfoPlist(File file) throws IOException {
+        Writer out = new BufferedWriter(new FileWriter(file));
+        XMLOutputFactory output = XMLOutputFactory.newInstance();
+
+        try {
+            XMLStreamWriter xout = output.createXMLStreamWriter(out);
+
+            // Write XML declaration
+            xout.writeStartDocument();
+            xout.writeCharacters("\n");
+
+            // Write plist DTD declaration
+            xout.writeDTD(PLIST_DTD);
+            xout.writeCharacters("\n");
+
+            // Begin root element
+            xout.writeStartElement(PLIST_TAG);
+            xout.writeAttribute(PLIST_VERSION_ATTRIBUTE, "1.0");
+            xout.writeCharacters("\n");
+
+            // Begin root dictionary
+            xout.writeStartElement(DICT_TAG);
+            xout.writeCharacters("\n");
+
+            // Write bundle properties
+            writeProperty(xout, "CFBundleDevelopmentRegion", "English");
+            writeProperty(xout, "CFBundleExecutable", EXECUTABLE_NAME);
+            writeProperty(xout, "CFBundleIconFile", (icon == null) ? DEFAULT_ICON_NAME : icon.getName());
+            writeProperty(xout, "CFBundleIdentifier", identifier);
+            writeProperty(xout, "CFBundleDisplayName", displayName);
+            writeProperty(xout, "CFBundleInfoDictionaryVersion", "6.0");
+            writeProperty(xout, "CFBundleName", name);
+            writeProperty(xout, "CFBundlePackageType", OS_TYPE_CODE);
+            writeProperty(xout, "CFBundleShortVersionString", shortVersion);
+            writeProperty(xout, "CFBundleSignature", signature);
+            writeProperty(xout, "CFBundleVersion", "1");
+            writeProperty(xout, "NSHumanReadableCopyright", copyright);
+
+            // Start Java properties
+            writeKey(xout, "JavaVM");
+            xout.writeStartElement(DICT_TAG);
+
+            // Write runtime
+            writeProperty(xout, "Runtime", runtime.getName());
+
+            // Write main class name
+            writeProperty(xout, "MainClassName", mainClassName);
+
+            // Write options
+            writeKey(xout, "Options");
+
+            xout.writeStartElement(ARRAY_TAG);
+            xout.writeCharacters("\n");
+
+            for (String option : options) {
+                writeString(xout, option);
+            }
+
+            xout.writeEndElement();
+            xout.writeCharacters("\n");
+
+            // Write arguments
+            writeKey(xout, "Arguments");
+
+            xout.writeStartElement(ARRAY_TAG);
+            xout.writeCharacters("\n");
+
+            for (String argument : arguments) {
+                writeString(xout, argument);
+            }
+
+            xout.writeEndElement();
+            xout.writeCharacters("\n");
+
+            // End Java properties
+            xout.writeEndElement();
+            xout.writeCharacters("\n");
+
+            // End root dictionary
+            xout.writeEndElement();
+            xout.writeCharacters("\n");
+
+            // End root element
+            xout.writeEndElement();
+            xout.writeCharacters("\n");
+
+            // Close document
+            xout.writeEndDocument();
+            xout.writeCharacters("\n");
+
+            out.flush();
+        } catch (XMLStreamException exception) {
+            throw new IOException(exception);
+        } finally {
+            out.close();
+        }
+    }
+
+    private void writeKey(XMLStreamWriter xout, String key) throws XMLStreamException {
+        xout.writeStartElement(KEY_TAG);
+        xout.writeCharacters(key);
+        xout.writeEndElement();
+        xout.writeCharacters("\n");
+    }
+
+    private void writeString(XMLStreamWriter xout, String value) throws XMLStreamException {
+        xout.writeStartElement(STRING_TAG);
+        xout.writeCharacters(value);
+        xout.writeEndElement();
+        xout.writeCharacters("\n");
+    }
+
+    private void writeProperty(XMLStreamWriter xout, String key, String value) throws XMLStreamException {
+        writeKey(xout, key);
+        writeString(xout, value);
+    }
+
+    private void writePkgInfo(File file) throws IOException {
+        Writer out = new BufferedWriter(new FileWriter(file));
+
+        try {
+            out.write(OS_TYPE_CODE + signature);
+            out.flush();
+        } finally {
+            out.close();
+        }
+    }
+
+    private static void delete(File file) throws IOException {
+        Path filePath = file.toPath();
+
+        if (Files.exists(filePath, LinkOption.NOFOLLOW_LINKS)) {
+            if (Files.isDirectory(filePath, LinkOption.NOFOLLOW_LINKS)) {
+                File[] files = file.listFiles();
+
+                for (int i = 0; i < files.length; i++) {
+                    delete(files[i]);
+                }
+            }
+
+            Files.delete(filePath);
+        }
+    }
+
+    private static void copy(URL location, File file) throws IOException {
+        try (InputStream in = location.openStream()) {
+            Files.copy(in, file.toPath(), StandardCopyOption.REPLACE_EXISTING);
+        }
+    }
+
+    private static void copy(File source, File destination) throws IOException {
+        Path sourcePath = source.toPath();
+        Path destinationPath = destination.toPath();
+
+        Files.copy(sourcePath, destinationPath, StandardCopyOption.REPLACE_EXISTING, LinkOption.NOFOLLOW_LINKS);
+
+        if (Files.isDirectory(sourcePath, LinkOption.NOFOLLOW_LINKS)) {
+            String[] files = source.list();
+
+            for (int i = 0; i < files.length; i++) {
+                String file = files[i];
+                copy(new File(source, file), new File(destination, file));
+            }
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/macosx/bundle/appbundler/src/com/oracle/appbundler/Argument.java	Wed May 02 15:06:35 2012 +0100
@@ -0,0 +1,48 @@
+/*
+ * Copyright 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.  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 com.oracle.appbundler;
+
+/**
+ * Class representing an argument that will be passed to the Java application
+ * at startup.
+ */
+public class Argument {
+    private String value = null;
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    @Override
+    public String toString() {
+        return value;
+    }
+}
Binary file src/macosx/bundle/appbundler/src/com/oracle/appbundler/GenericApp.icns has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/macosx/bundle/appbundler/src/com/oracle/appbundler/Option.java	Wed May 02 15:06:35 2012 +0100
@@ -0,0 +1,47 @@
+/*
+ * Copyright 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.  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 com.oracle.appbundler;
+
+/**
+ * Class representing an option that will be passed to the JVM at startup.
+ */
+public class Option {
+    private String value = null;
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    @Override
+    public String toString() {
+        return value;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/macosx/bundle/appbundler/test/Test.java	Wed May 02 15:06:35 2012 +0100
@@ -0,0 +1,35 @@
+/*
+ * Copyright 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.  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.
+ */
+
+public class Test {
+    public static void main(String[] args) {
+        System.out.println("Hello, World!");
+
+        for (int i = 0; i < args.length; i++) {
+            System.out.println("arg[" + i + "] = " + args[i]);
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/macosx/bundle/build.properties	Wed May 02 15:06:35 2012 +0100
@@ -0,0 +1,24 @@
+# Copyright 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.  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.
+version=1.0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/macosx/bundle/build.xml	Wed May 02 15:06:35 2012 +0100
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Copyright 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.  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.
+-->
+
+<project name="appbundler" default="package">
+    <property environment="env"/>
+
+    <property file="build.properties"/>
+
+    <property name="folder.src" value="src"/>
+    <property name="folder.test" value="test"/>
+    <property name="folder.native" value="native"/>
+    <property name="folder.bin" value="bin"/>
+    <property name="folder.classes" value="${folder.bin}/classes"/>
+
+    <!-- Compile target -->
+    <target name="compile">
+        <mkdir dir="${ant.project.name}/${folder.classes}"/>
+        <javac destDir="${ant.project.name}/${folder.classes}"
+            includejavaruntime="true"
+            includeantruntime="true"
+            deprecation="true"
+            debug="true"
+            encoding="UTF-8"
+            failonerror="true">
+            <src>
+                <dirset dir="${ant.project.name}">
+                    <include name="${folder.src}"/>
+                    <include name="${folder.test}"/>
+                </dirset>
+            </src>
+            <compilerarg line="-Xlint:all"/>
+            <classpath>
+                <dirset dir="${basedir}" includes="**/${folder.classes}"/>
+                <fileset dir="${ant.project.name}" includes="lib/**/*.jar"/>
+            </classpath>
+        </javac>
+        <copy todir="${ant.project.name}/${folder.classes}" includeEmptyDirs="false">
+            <fileset dir="${ant.project.name}/${folder.src}">
+                <exclude name="**/*.java"/>
+                <exclude name="**/package.html"/>
+            </fileset>
+            <fileset dir="${ant.project.name}/${folder.test}" erroronmissingdir="false">
+                <exclude name="**/*.java"/>
+                <exclude name="**/package.html"/>
+            </fileset>
+        </copy>
+
+        <!-- TODO Move this to a makefile so we can reference the defines required by JLI_Launch() -->
+        <exec executable="gcc">
+            <arg value="-I"/>
+            <arg value="${env.JAVA_HOME}/include"/>
+            <arg value="-I"/>
+            <arg value="${env.JAVA_HOME}/include/darwin"/>
+            <arg value="-o"/>
+            <arg value="${ant.project.name}/${folder.classes}/com/oracle/appbundler/JavaAppLauncher"/>
+            <arg value="-framework"/>
+            <arg value="Cocoa"/>
+            <arg value="-F"/>
+            <arg value="${env.JAVA_HOME}/../.."/>
+            <arg value="-m64"/>
+            <arg value="-std=c99"/>
+            <arg value="appbundler/native/main.m"/>
+        </exec>
+    </target>
+
+    <!-- Clean target -->
+    <target name="clean">
+        <delete dir="${ant.project.name}/${folder.classes}"/>
+        <delete file="${ant.project.name}/${folder.bin}/${ant.project.name}-${version}.jar"/>
+        <delete dir="HelloWorld.app"/>
+        <delete dir="SwingSet2.app"/>
+    </target>
+
+    <!-- Package target -->
+    <target name="package" depends="compile">
+        <property name="destfile" value="${ant.project.name}/${folder.bin}/${ant.project.name}-${version}.jar"/>
+
+        <delete file="${destfile}"/>
+        <jar destfile="${destfile}" index="true">
+            <manifest>
+                <attribute name="Implementation-Vendor-Id" value="com.oracle"/>
+                <attribute name="Implementation-Vendor" value="Oracle"/>
+                <attribute name="Implementation-Title" value="App Bundler Ant Task"/>
+                <attribute name="Implementation-Version" value="${version}"/>
+            </manifest>
+            <fileset dir="${ant.project.name}/${folder.classes}">
+                <exclude name="**/${folder.test}/**"/>
+            </fileset>
+            <fileset dir="${ant.project.name}/${folder.bin}">
+                <include name="JavaAppLauncher"/>
+            </fileset>
+        </jar>
+    </target>
+
+    <!-- Test targets -->
+    <target name="test-hello" depends="package">
+        <taskdef name="bundleapp" classname="com.oracle.appbundler.AppBundlerTask"
+            classpath="${ant.project.name}/${folder.bin}/${ant.project.name}-${version}.jar"/>
+
+        <bundleapp outputdirectory="."
+            name="HelloWorld"
+            displayname="Hello World Test"
+            identifier="com.oracle.appbundler.Test"
+            shortversion="1.0"
+            runtime="${env.JAVA_HOME}/../.."
+            mainclassname="Test">
+            <classpath dir="${ant.project.name}/${folder.classes}" includes="Test.class"/>
+            <option value="-Xms32M"/>
+            <option value="-Xmx256M"/>
+            <argument value="foo=bar"/>
+        </bundleapp>
+    </target>
+
+    <target name="test-swingset" depends="package">
+        <taskdef name="bundleapp" classname="com.oracle.appbundler.AppBundlerTask"
+            classpath="${ant.project.name}/${folder.bin}/${ant.project.name}-${version}.jar"/>
+
+        <bundleapp outputdirectory="."
+            name="SwingSet2"
+            displayname="SwingSet 2"
+            identifier="com.oracle.javax.swing.SwingSet2"
+            shortversion="1.0"
+            runtime="${env.JAVA_HOME}/../.."
+            mainclassname="SwingSet2">
+            <classpath file="/Library/Java/Demos/JFC/SwingSet2/SwingSet2.jar"/>
+            <option value="-Xms32M"/>
+            <option value="-Xmx256M"/>
+            <option value="-Dapple.laf.useScreenMenuBar=true"/>
+            <argument value="foo=bar"/>
+        </bundleapp>
+    </target>
+
+    <!-- Trim whitespace target -->
+    <target name="trim-whitespace">
+        <fileset id="trimfiles" dir=".">
+            <include name="**/*.h"/>
+            <include name="**/*.html"/>
+            <include name="**/*.java"/>
+            <include name="**/*.m"/>
+            <include name="**/*.properties"/>
+            <include name="**/*.xml"/>
+        </fileset>
+        <replaceregexp match="[\t]" replace="    " flags="gm" byline="true">
+            <fileset refid="trimfiles"/>
+        </replaceregexp>
+        <replaceregexp match="[\t ]+$" replace="" flags="gm" byline="true">
+            <fileset refid="trimfiles"/>
+        </replaceregexp>
+    </target>
+</project>
--- a/src/macosx/classes/com/apple/laf/AquaScrollPaneUI.java	Wed May 02 14:00:06 2012 +0100
+++ b/src/macosx/classes/com/apple/laf/AquaScrollPaneUI.java	Wed May 02 15:06:35 2012 +0100
@@ -60,6 +60,10 @@
             if (wasVisible) {
                 vScrollBar.setVisible(true);
             }
+
+            // Consume the event even when the scrollBar is invisible
+            // see #7124320
+            e.consume();
         }
     }
 }
--- a/src/macosx/classes/com/apple/laf/AquaSliderUI.java	Wed May 02 14:00:06 2012 +0100
+++ b/src/macosx/classes/com/apple/laf/AquaSliderUI.java	Wed May 02 15:06:35 2012 +0100
@@ -344,6 +344,12 @@
         public void mousePressed(final MouseEvent e) {
             if (!slider.isEnabled()) return;
 
+            // We should recalculate geometry just before
+            // calculation of the thumb movement direction.
+            // It is important for the case, when JSlider
+            // is a cell editor in JTable. See 6348946.
+            calculateGeometry();
+
             final boolean firstClick = (currentMouseX == -1) && (currentMouseY == -1);
 
             currentMouseX = e.getX();
--- a/src/macosx/classes/com/apple/laf/AquaSpinnerUI.java	Wed May 02 14:00:06 2012 +0100
+++ b/src/macosx/classes/com/apple/laf/AquaSpinnerUI.java	Wed May 02 15:06:35 2012 +0100
@@ -161,6 +161,33 @@
         return b;
     }
 
+    /**
+     * {@inheritDoc}
+     */
+    public int getBaseline(JComponent c, int width, int height) {
+        super.getBaseline(c, width, height);
+        JComponent editor = spinner.getEditor();
+        Insets insets = spinner.getInsets();
+        width = width - insets.left - insets.right;
+        height = height - insets.top - insets.bottom;
+        if (width >= 0 && height >= 0) {
+            int baseline = editor.getBaseline(width, height);
+            if (baseline >= 0) {
+                return insets.top + baseline;
+            }
+        }
+        return -1;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public Component.BaselineResizeBehavior getBaselineResizeBehavior(
+            JComponent c) {
+        super.getBaselineResizeBehavior(c);
+        return spinner.getEditor().getBaselineResizeBehavior();
+    }
+
     class TransparentButton extends JButton implements SwingConstants {
         boolean interceptRepaints = false;
 
--- a/src/macosx/classes/com/apple/laf/resources/aqua.properties	Wed May 02 14:00:06 2012 +0100
+++ b/src/macosx/classes/com/apple/laf/resources/aqua.properties	Wed May 02 15:06:35 2012 +0100
@@ -125,9 +125,9 @@
 OptionPane.noButtonText=No
 OptionPane.noButtonMnemonic=78
 OptionPane.okButtonText=OK
-OptionPane.okButtonMnemonic=0
+#OptionPane.okButtonMnemonic=0
 OptionPane.cancelButtonText=Cancel
-OptionPane.cancelButtonMnemonic=0
+#OptionPane.cancelButtonMnemonic=0
 OptionPane.titleText=Select an Option
 # Title for the dialog for the showInputDialog methods. Only used if
 # the developer uses one of the variants that doesn't take a title.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/macosx/classes/com/apple/laf/resources/aqua_de.properties	Wed May 02 15:06:35 2012 +0100
@@ -0,0 +1,206 @@
+#
+# Copyright (c) 2011, 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.
+#
+
+# This properties file is used to create a PropertyResourceBundle
+# It contains Locale specific strings used in Swing
+# Currently, it contains the additional strings needed for the Aqua versions of these components:
+#
+#    FileChooser
+#
+# When this file is read in, the strings are put into the
+# defaults table.  This is an implementation detail of the current
+# workings of Swing.  DO NOT DEPEND ON THIS.
+# This may change in future versions of Swing as we improve localization
+# support.
+
+############ FILE CHOOSER STRINGS #############
+FileChooser.fileDescriptionText=Allgemeine Datei
+FileChooser.directoryDescriptionText=Verzeichnis
+FileChooser.newFolderErrorText=Bei der Erstellung des Ordners ist ein Fehler aufgetreten
+FileChooser.newFolderErrorSeparator= :
+FileChooser.acceptAllFileFilterText=Alle Dateien
+FileChooser.cancelButtonText=Abbrechen
+FileChooser.saveButtonText=Speichern
+FileChooser.openButtonText=\u00D6ffnen
+FileChooser.saveDialogTitleText=Speichern
+FileChooser.openDialogTitleText=\u00D6ffnen
+FileChooser.updateButtonText=Updaten
+FileChooser.helpButtonText=Hilfe
+FileChooser.directoryOpenButtonText=\u00D6ffnen
+
+# File Size Units
+FileChooser.fileSizeKiloBytes={0} KB
+FileChooser.fileSizeMegaBytes={0} MB
+FileChooser.fileSizeGigaBytes={0} GB
+
+// Mac-specific strings
+FileChooser.saveTitleText=Speichern
+FileChooser.openTitleText=\u00D6ffnen
+FileChooser.newFolderExistsErrorText=Dieser Name ist bereits vergeben
+FileChooser.chooseButtonText=W\u00E4hlen
+
+FileChooser.newFolderButtonText=Neuer Ordner
+FileChooser.newFolderTitleText=Neuer Ordner
+FileChooser.fileNameLabelText=Datei:
+FileChooser.saveDialogFileNameLabelText=Speichern unter:
+FileChooser.filesOfTypeLabelText=Dateiformat:
+
+FileChooser.desktopName=Desktop
+FileChooser.newFolderPromptText=Name des neuen Ordners:
+FileChooser.untitledFolderName=unbenannter Ordner
+FileChooser.untitledFileName=unbenannt
+FileChooser.createButtonText=Erstellen
+
+FileChooser.byDateText=\u00C4nderungsdatum
+FileChooser.byNameText=Name
+FileChooser.newFolderAccessibleName=Neuer Ordner
+
+FileChooser.mac.newFolder=unbenannter Ordner
+FileChooser.mac.newFolder.subsequent=unbenannter Ordner {0}
+
+
+############ COLOR CHOOSER STRINGS #############
+ColorChooser.previewText=Vorschau
+ColorChooser.okText=OK
+ColorChooser.cancelText=Abbrechen
+ColorChooser.resetText=Zur\u00FCcksetzen
+# VK_XXX constant for 'ColorChooser.resetText' button to make mnemonic
+ColorChooser.resetMnemonic=90
+ColorChooser.sampleText=Beispieltext  Beispieltext
+ColorChooser.swatchesNameText=Muster
+ColorChooser.swatchesMnemonic=77
+ColorChooser.swatchesDisplayedMnemonicIndex=0
+ColorChooser.swatchesRecentText=Aktuell:
+ColorChooser.hsbNameText=HSB
+# Each of the ColorChooser types can define a mnemonic, as a KeyEvent.VK_XXX
+# constant, and an index into the text to render the mnemonic as. The
+# mnemonic is xxxMnemonic and the index of the character to underline is
+# xxxDisplayedMnemonicIndex.
+ColorChooser.hsbMnemonic=72
+ColorChooser.hsbDisplayedMnemonicIndex=0
+ColorChooser.hsbHueText=H
+ColorChooser.hsbSaturationText=S
+ColorChooser.hsbBrightnessText=B
+ColorChooser.hsbRedText=R
+ColorChooser.hsbGreenText=G
+ColorChooser.hsbBlueText=B
+ColorChooser.rgbNameText=RGB
+ColorChooser.rgbMnemonic=71
+ColorChooser.rgbDisplayedMnemonicIndex=1
+ColorChooser.rgbRedText=Rot
+ColorChooser.rgbRedMnemonic=84
+ColorChooser.rgbGreenText=Gr\u00FCn
+ColorChooser.rgbGreenMnemonic=78
+ColorChooser.rgbBlueText=Blau
+ColorChooser.rgbBlueMnemonic=66
+
+############ OPTION PANE STRINGS #############
+# Mnemonic keys correspond to KeyEvent.VK_XXX constant
+# We only define mnemonics for YES/NO, but for completeness you can
+# define mnemonics for any of the buttons.
+OptionPane.yesButtonText=Ja
+OptionPane.yesButtonMnemonic=74
+OptionPane.noButtonText=Nein
+OptionPane.noButtonMnemonic=78
+OptionPane.okButtonText=OK
+#OptionPane.okButtonMnemonic=0
+OptionPane.cancelButtonText=Abbrechen
+#OptionPane.cancelButtonMnemonic=0
+OptionPane.titleText=Option ausw\u00E4hlen
+# Title for the dialog for the showInputDialog methods. Only used if
+# the developer uses one of the variants that doesn't take a title.
+OptionPane.inputDialogTitle=Eingabe
+# Title for the dialog for the showMessageDialog methods. Only used if
+# the developer uses one of the variants that doesn't take a title.
+OptionPane.messageDialogTitle=Meldung
+
+############ Printing Dialog Strings ############
+PrintingDialog.titleProgressText=Drucken
+PrintingDialog.titleAbortingText=Drucken (wird abgebrochen)
+
+PrintingDialog.contentInitialText=Druckvorgang l\u00E4uft...
+
+# The following string will be formatted by a MessageFormat
+# and {0} will be replaced by page number being printed
+PrintingDialog.contentProgressText=Seite {0} wurde gedruckt ...
+
+PrintingDialog.contentAbortingText=Druckvorgang wird abgebrochen ...
+
+PrintingDialog.abortButtonText=Abbruch
+PrintingDialog.abortButtonMnemonic=65
+PrintingDialog.abortButtonDisplayedMnemonicIndex=0
+PrintingDialog.abortButtonToolTipText=Druckvorgang abbrechen
+
+############ Internal Frame Strings ############
+InternalFrame.iconButtonToolTip=Minimieren
+InternalFrame.maxButtonToolTip=Maximieren
+InternalFrame.restoreButtonToolTip=Wiederherstellen
+InternalFrame.closeButtonToolTip=Schlie\u00DFen
+
+############ Internal Frame Title Pane Strings ############
+InternalFrameTitlePane.restoreButtonText=Wiederherstellen
+InternalFrameTitlePane.moveButtonText=Verschieben
+InternalFrameTitlePane.sizeButtonText=Gr\u00F6\u00DFe
+InternalFrameTitlePane.minimizeButtonText=Minimieren
+InternalFrameTitlePane.maximizeButtonText=Maximieren
+InternalFrameTitlePane.closeButtonText=Schlie\u00DFen
+
+############ Text strings #############
+# Used for html forms
+FormView.submitButtonText=Abfrage weiterleiten
+FormView.resetButtonText=Zur\u00FCcksetzen
+FormView.browseFileButtonText=Durchsuchen ...
+
+############ Abstract Document Strings ############
+AbstractDocument.styleChangeText=Formatvorlagen\u00E4nderung
+AbstractDocument.additionText=Hinzuf\u00FCgen
+AbstractDocument.deletionText=L\u00F6schen
+AbstractDocument.undoText=R\u00FCckg\u00E4ngig
+AbstractDocument.redoText=Wiederherstellen
+
+############ Abstract Button Strings ############
+AbstractButton.clickText=Klicken
+
+############ Abstract Undoable Edit Strings ############
+AbstractUndoableEdit.undoText=R\u00FCckg\u00E4ngig
+AbstractUndoableEdit.redoText=Wiederherstellen
+
+############ Combo Box Strings ############
+ComboBox.togglePopupText=togglePopup
+
+############ Progress Monitor Strings ############
+ProgressMonitor.progressText=Fortschritt ...
+
+############ Split Pane Strings ############
+SplitPane.leftButtonText=linke Schaltfl\u00E4che
+SplitPane.rightButtonText=rechte Schaltfl\u00E4che
+# Used for Isindex
+IsindexView.prompt=Dieser Index kann durchsucht werden. Geben Sie Schl\u00FCsselw\u00F6rter f\u00FCr die Suche ein:
+
+############ InternalFrameTitlePane Strings ############
+InternalFrameTitlePane.iconifyButtonAccessibleName=Als Symbol darstellen
+InternalFrameTitlePane.maximizeButtonAccessibleName=Maximieren
+InternalFrameTitlePane.closeButtonAccessibleName=Schlie\u00DFen
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/macosx/classes/com/apple/laf/resources/aqua_es.properties	Wed May 02 15:06:35 2012 +0100
@@ -0,0 +1,206 @@
+#
+# Copyright (c) 2011, 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.
+#
+
+# This properties file is used to create a PropertyResourceBundle
+# It contains Locale specific strings used in Swing
+# Currently, it contains the additional strings needed for the Aqua versions of these components:
+#
+#    FileChooser
+#
+# When this file is read in, the strings are put into the
+# defaults table.  This is an implementation detail of the current
+# workings of Swing.  DO NOT DEPEND ON THIS.
+# This may change in future versions of Swing as we improve localization
+# support.
+
+############ FILE CHOOSER STRINGS #############
+FileChooser.fileDescriptionText=Archivo Gen\u00E9rico
+FileChooser.directoryDescriptionText=Directorio
+FileChooser.newFolderErrorText=Se ha producido un error durante la creaci\u00F3n de carpetas
+FileChooser.newFolderErrorSeparator= :
+FileChooser.acceptAllFileFilterText=Todos los Archivos
+FileChooser.cancelButtonText=Cancelar
+FileChooser.saveButtonText=Guardar
+FileChooser.openButtonText=Abrir
+FileChooser.saveDialogTitleText=Guardar
+FileChooser.openDialogTitleText=Abrir
+FileChooser.updateButtonText=Actualizar
+FileChooser.helpButtonText=Ayuda
+FileChooser.directoryOpenButtonText=Abrir
+
+# File Size Units
+FileChooser.fileSizeKiloBytes={0} KB
+FileChooser.fileSizeMegaBytes={0} MB
+FileChooser.fileSizeGigaBytes={0} GB
+
+// Mac-specific strings
+FileChooser.saveTitleText=Guardar
+FileChooser.openTitleText=Abrir
+FileChooser.newFolderExistsErrorText=Ya existe ese nombre
+FileChooser.chooseButtonText=Seleccionar
+
+FileChooser.newFolderButtonText=Nueva Carpeta
+FileChooser.newFolderTitleText=Nueva Carpeta
+FileChooser.fileNameLabelText=Archivo:
+FileChooser.saveDialogFileNameLabelText=Guardar como:
+FileChooser.filesOfTypeLabelText=Formato de Archivo:
+
+FileChooser.desktopName=Escritorio
+FileChooser.newFolderPromptText=Nombre de la Nueva Carpeta:
+FileChooser.untitledFolderName=carpeta sin t\u00EDtulo
+FileChooser.untitledFileName=sin t\u00EDtulo
+FileChooser.createButtonText=Crear
+
+FileChooser.byDateText=Fecha de Modificaci\u00F3n
+FileChooser.byNameText=Nombre
+FileChooser.newFolderAccessibleName=Nueva Carpeta
+
+FileChooser.mac.newFolder=carpeta sin t\u00EDtulo
+FileChooser.mac.newFolder.subsequent=carpeta sin t\u00EDtulo {0}
+
+
+############ COLOR CHOOSER STRINGS #############
+ColorChooser.previewText=Vista Previa
+ColorChooser.okText=Aceptar
+ColorChooser.cancelText=Cancelar
+ColorChooser.resetText=Restablecer
+# VK_XXX constant for 'ColorChooser.resetText' button to make mnemonic
+ColorChooser.resetMnemonic=82
+ColorChooser.sampleText=Texto de Ejemplo  Texto de Ejemplo
+ColorChooser.swatchesNameText=Muestras
+ColorChooser.swatchesMnemonic=85
+ColorChooser.swatchesDisplayedMnemonicIndex=0
+ColorChooser.swatchesRecentText=Reciente:
+ColorChooser.hsbNameText=HSB
+# Each of the ColorChooser types can define a mnemonic, as a KeyEvent.VK_XXX
+# constant, and an index into the text to render the mnemonic as. The
+# mnemonic is xxxMnemonic and the index of the character to underline is
+# xxxDisplayedMnemonicIndex.
+ColorChooser.hsbMnemonic=72
+ColorChooser.hsbDisplayedMnemonicIndex=0
+ColorChooser.hsbHueText=H
+ColorChooser.hsbSaturationText=S
+ColorChooser.hsbBrightnessText=B
+ColorChooser.hsbRedText=R
+ColorChooser.hsbGreenText=G
+ColorChooser.hsbBlueText=B
+ColorChooser.rgbNameText=RGB
+ColorChooser.rgbMnemonic=71
+ColorChooser.rgbDisplayedMnemonicIndex=1
+ColorChooser.rgbRedText=Rojo
+ColorChooser.rgbRedMnemonic=74
+ColorChooser.rgbGreenText=Verde
+ColorChooser.rgbGreenMnemonic=86
+ColorChooser.rgbBlueText=Azul
+ColorChooser.rgbBlueMnemonic=90
+
+############ OPTION PANE STRINGS #############
+# Mnemonic keys correspond to KeyEvent.VK_XXX constant
+# We only define mnemonics for YES/NO, but for completeness you can
+# define mnemonics for any of the buttons.
+OptionPane.yesButtonText=S\u00ED
+OptionPane.yesButtonMnemonic=83
+OptionPane.noButtonText=No
+OptionPane.noButtonMnemonic=78
+OptionPane.okButtonText=OK
+#OptionPane.okButtonMnemonic=0
+OptionPane.cancelButtonText=Cancelar
+#OptionPane.cancelButtonMnemonic=0
+OptionPane.titleText=Seleccionar una Opci\u00F3n
+# Title for the dialog for the showInputDialog methods. Only used if
+# the developer uses one of the variants that doesn't take a title.
+OptionPane.inputDialogTitle=Entrada
+# Title for the dialog for the showMessageDialog methods. Only used if
+# the developer uses one of the variants that doesn't take a title.
+OptionPane.messageDialogTitle=Mensaje
+
+############ Printing Dialog Strings ############
+PrintingDialog.titleProgressText=Impresi\u00F3n
+PrintingDialog.titleAbortingText=Impresi\u00F3n (Abortando)
+
+PrintingDialog.contentInitialText=Impresi\u00F3n en curso...
+
+# The following string will be formatted by a MessageFormat
+# and {0} will be replaced by page number being printed
+PrintingDialog.contentProgressText=P\u00E1gina {0} impresa...
+
+PrintingDialog.contentAbortingText=Abortando la impresi\u00F3n...
+
+PrintingDialog.abortButtonText=Abortar
+PrintingDialog.abortButtonMnemonic=65
+PrintingDialog.abortButtonDisplayedMnemonicIndex=0
+PrintingDialog.abortButtonToolTipText=Abortar Impresi\u00F3n
+
+############ Internal Frame Strings ############
+InternalFrame.iconButtonToolTip=Minimizar
+InternalFrame.maxButtonToolTip=Maximizar
+InternalFrame.restoreButtonToolTip=Restaurar
+InternalFrame.closeButtonToolTip=Cerrar
+
+############ Internal Frame Title Pane Strings ############
+InternalFrameTitlePane.restoreButtonText=Restaurar
+InternalFrameTitlePane.moveButtonText=Mover
+InternalFrameTitlePane.sizeButtonText=Tama\u00F1o
+InternalFrameTitlePane.minimizeButtonText=Minimizar
+InternalFrameTitlePane.maximizeButtonText=Maximizar
+InternalFrameTitlePane.closeButtonText=Cerrar
+
+############ Text strings #############
+# Used for html forms
+FormView.submitButtonText=Enviar Consulta
+FormView.resetButtonText=Restablecer
+FormView.browseFileButtonText=Examinar...
+
+############ Abstract Document Strings ############
+AbstractDocument.styleChangeText=cambio de estilo
+AbstractDocument.additionText=adici\u00F3n
+AbstractDocument.deletionText=supresi\u00F3n
+AbstractDocument.undoText=Deshacer
+AbstractDocument.redoText=Rehacer
+
+############ Abstract Button Strings ############
+AbstractButton.clickText=hacer clic
+
+############ Abstract Undoable Edit Strings ############
+AbstractUndoableEdit.undoText=Deshacer
+AbstractUndoableEdit.redoText=Rehacer
+
+############ Combo Box Strings ############
+ComboBox.togglePopupText=togglePopup
+
+############ Progress Monitor Strings ############
+ProgressMonitor.progressText=Progreso...
+
+############ Split Pane Strings ############
+SplitPane.leftButtonText=bot\u00F3n: izquierda
+SplitPane.rightButtonText=bot\u00F3n: derecha
+# Used for Isindex
+IsindexView.prompt=En este \u00EDndice se pueden efectuar b\u00FAsquedas. Escriba las palabras clave de b\u00FAsqueda:
+
+############ InternalFrameTitlePane Strings ############
+InternalFrameTitlePane.iconifyButtonAccessibleName=Convertir en Icono
+InternalFrameTitlePane.maximizeButtonAccessibleName=Maximizar
+InternalFrameTitlePane.closeButtonAccessibleName=Cerrar
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/macosx/classes/com/apple/laf/resources/aqua_fr.properties	Wed May 02 15:06:35 2012 +0100
@@ -0,0 +1,206 @@
+#
+# Copyright (c) 2011, 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.
+#
+
+# This properties file is used to create a PropertyResourceBundle
+# It contains Locale specific strings used in Swing
+# Currently, it contains the additional strings needed for the Aqua versions of these components:
+#
+#    FileChooser
+#
+# When this file is read in, the strings are put into the
+# defaults table.  This is an implementation detail of the current
+# workings of Swing.  DO NOT DEPEND ON THIS.
+# This may change in future versions of Swing as we improve localization
+# support.
+
+############ FILE CHOOSER STRINGS #############
+FileChooser.fileDescriptionText=Fichier g\u00E9n\u00E9rique
+FileChooser.directoryDescriptionText=R\u00E9pertoire
+FileChooser.newFolderErrorText=Erreur lors de la cr\u00E9ation du dossier
+FileChooser.newFolderErrorSeparator= :
+FileChooser.acceptAllFileFilterText=Tous les fichiers
+FileChooser.cancelButtonText=Annuler
+FileChooser.saveButtonText=Enregistrer
+FileChooser.openButtonText=Ouvrir
+FileChooser.saveDialogTitleText=Enregistrer
+FileChooser.openDialogTitleText=Ouvrir
+FileChooser.updateButtonText=Mettre \u00E0 jour
+FileChooser.helpButtonText=Aide
+FileChooser.directoryOpenButtonText=Ouvrir
+
+# File Size Units
+FileChooser.fileSizeKiloBytes={0} KB
+FileChooser.fileSizeMegaBytes={0} MB
+FileChooser.fileSizeGigaBytes={0} GB
+
+// Mac-specific strings
+FileChooser.saveTitleText=Enregistrer
+FileChooser.openTitleText=Ouvrir
+FileChooser.newFolderExistsErrorText=Ce nom est d\u00E9j\u00E0 utilis\u00E9
+FileChooser.chooseButtonText=Choisir
+
+FileChooser.newFolderButtonText=Nouveau dossier
+FileChooser.newFolderTitleText=Nouveau dossier
+FileChooser.fileNameLabelText=Fichier :
+FileChooser.saveDialogFileNameLabelText=Enregistrer sous :
+FileChooser.filesOfTypeLabelText=Format de fichier :
+
+FileChooser.desktopName=Bureau
+FileChooser.newFolderPromptText=Nom du nouveau dossier :
+FileChooser.untitledFolderName=dossier sans titre
+FileChooser.untitledFileName=sans titre
+FileChooser.createButtonText=Cr\u00E9er
+
+FileChooser.byDateText=Date de modification
+FileChooser.byNameText=Nom
+FileChooser.newFolderAccessibleName=Nouveau dossier
+
+FileChooser.mac.newFolder=dossier sans titre
+FileChooser.mac.newFolder.subsequent=dossier {0} sans titre
+
+
+############ COLOR CHOOSER STRINGS #############
+ColorChooser.previewText=Aper\u00E7u
+ColorChooser.okText=OK
+ColorChooser.cancelText=Annuler
+ColorChooser.resetText=R\u00E9initialiser
+# VK_XXX constant for 'ColorChooser.resetText' button to make mnemonic
+ColorChooser.resetMnemonic=82
+ColorChooser.sampleText=Echantillon de texte  Echantillon de texte
+ColorChooser.swatchesNameText=Echantillons
+ColorChooser.swatchesMnemonic=69
+ColorChooser.swatchesDisplayedMnemonicIndex=0
+ColorChooser.swatchesRecentText=Dernier :
+ColorChooser.hsbNameText=TSL
+# Each of the ColorChooser types can define a mnemonic, as a KeyEvent.VK_XXX
+# constant, and an index into the text to render the mnemonic as. The
+# mnemonic is xxxMnemonic and the index of the character to underline is
+# xxxDisplayedMnemonicIndex.
+ColorChooser.hsbMnemonic=84
+ColorChooser.hsbDisplayedMnemonicIndex=0
+ColorChooser.hsbHueText=T
+ColorChooser.hsbSaturationText=S
+ColorChooser.hsbBrightnessText=L
+ColorChooser.hsbRedText=R
+ColorChooser.hsbGreenText=V
+ColorChooser.hsbBlueText=B
+ColorChooser.rgbNameText=RVB
+ColorChooser.rgbMnemonic=86
+ColorChooser.rgbDisplayedMnemonicIndex=1
+ColorChooser.rgbRedText=Rouge
+ColorChooser.rgbRedMnemonic=79
+ColorChooser.rgbGreenText=Vert
+ColorChooser.rgbGreenMnemonic=86
+ColorChooser.rgbBlueText=Bleu
+ColorChooser.rgbBlueMnemonic=66
+
+############ OPTION PANE STRINGS #############
+# Mnemonic keys correspond to KeyEvent.VK_XXX constant
+# We only define mnemonics for YES/NO, but for completeness you can
+# define mnemonics for any of the buttons.
+OptionPane.yesButtonText=Oui
+OptionPane.yesButtonMnemonic=79
+OptionPane.noButtonText=Non
+OptionPane.noButtonMnemonic=78
+OptionPane.okButtonText=OK
+#OptionPane.okButtonMnemonic=0
+OptionPane.cancelButtonText=Annuler
+#OptionPane.cancelButtonMnemonic=0
+OptionPane.titleText=S\u00E9lectionner une option
+# Title for the dialog for the showInputDialog methods. Only used if
+# the developer uses one of the variants that doesn't take a title.
+OptionPane.inputDialogTitle=Entr\u00E9e
+# Title for the dialog for the showMessageDialog methods. Only used if
+# the developer uses one of the variants that doesn't take a title.
+OptionPane.messageDialogTitle=Message
+
+############ Printing Dialog Strings ############
+PrintingDialog.titleProgressText=Impression
+PrintingDialog.titleAbortingText=Impression (abandon)
+
+PrintingDialog.contentInitialText=Impression en cours...
+
+# The following string will be formatted by a MessageFormat
+# and {0} will be replaced by page number being printed
+PrintingDialog.contentProgressText=Page {0} imprim\u00E9e...
+
+PrintingDialog.contentAbortingText=Abandon de l'impression...
+
+PrintingDialog.abortButtonText=Abandonner
+PrintingDialog.abortButtonMnemonic=65
+PrintingDialog.abortButtonDisplayedMnemonicIndex=0
+PrintingDialog.abortButtonToolTipText=Abandonner l'impression
+
+############ Internal Frame Strings ############
+InternalFrame.iconButtonToolTip=R\u00E9duire
+InternalFrame.maxButtonToolTip=Agrandir
+InternalFrame.restoreButtonToolTip=Restaurer
+InternalFrame.closeButtonToolTip=Fermer
+
+############ Internal Frame Title Pane Strings ############
+InternalFrameTitlePane.restoreButtonText=Restaurer
+InternalFrameTitlePane.moveButtonText=D\u00E9placer
+InternalFrameTitlePane.sizeButtonText=Taille
+InternalFrameTitlePane.minimizeButtonText=R\u00E9duire
+InternalFrameTitlePane.maximizeButtonText=Agrandir
+InternalFrameTitlePane.closeButtonText=Fermer
+
+############ Text strings #############
+# Used for html forms
+FormView.submitButtonText=Soumettre la requ\u00EAte
+FormView.resetButtonText=R\u00E9initialiser
+FormView.browseFileButtonText=Parcourir...
+
+############ Abstract Document Strings ############
+AbstractDocument.styleChangeText=modification de style
+AbstractDocument.additionText=ajout
+AbstractDocument.deletionText=suppression
+AbstractDocument.undoText=Annuler
+AbstractDocument.redoText=R\u00E9tablir
+
+############ Abstract Button Strings ############
+AbstractButton.clickText=cliquer
+
+############ Abstract Undoable Edit Strings ############
+AbstractUndoableEdit.undoText=Annuler
+AbstractUndoableEdit.redoText=R\u00E9tablir
+
+############ Combo Box Strings ############
+ComboBox.togglePopupText=togglePopup
+
+############ Progress Monitor Strings ############
+ProgressMonitor.progressText=Progression...
+
+############ Split Pane Strings ############
+SplitPane.leftButtonText=bouton gauche
+SplitPane.rightButtonText=bouton droit
+# Used for Isindex
+IsindexView.prompt=Ceci est un index de recherche. Tapez des mots-cl\u00E9s pour la recherche :
+
+############ InternalFrameTitlePane Strings ############
+InternalFrameTitlePane.iconifyButtonAccessibleName=R\u00E9duire
+InternalFrameTitlePane.maximizeButtonAccessibleName=Agrandir
+InternalFrameTitlePane.closeButtonAccessibleName=Fermer
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/macosx/classes/com/apple/laf/resources/aqua_it.properties	Wed May 02 15:06:35 2012 +0100
@@ -0,0 +1,206 @@
+#
+# Copyright (c) 2011, 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.
+#
+
+# This properties file is used to create a PropertyResourceBundle
+# It contains Locale specific strings used in Swing
+# Currently, it contains the additional strings needed for the Aqua versions of these components:
+#
+#    FileChooser
+#
+# When this file is read in, the strings are put into the
+# defaults table.  This is an implementation detail of the current
+# workings of Swing.  DO NOT DEPEND ON THIS.
+# This may change in future versions of Swing as we improve localization
+# support.
+
+############ FILE CHOOSER STRINGS #############
+FileChooser.fileDescriptionText=File generico
+FileChooser.directoryDescriptionText=Directory
+FileChooser.newFolderErrorText=Si \u00E8 verificato un errore durante la creazione della cartella
+FileChooser.newFolderErrorSeparator= :
+FileChooser.acceptAllFileFilterText=Tutti i file
+FileChooser.cancelButtonText=Annulla
+FileChooser.saveButtonText=Salva
+FileChooser.openButtonText=Apri
+FileChooser.saveDialogTitleText=Salva
+FileChooser.openDialogTitleText=Apri
+FileChooser.updateButtonText=Aggiorna
+FileChooser.helpButtonText=?
+FileChooser.directoryOpenButtonText=Apri
+
+# File Size Units
+FileChooser.fileSizeKiloBytes={0} KB
+FileChooser.fileSizeMegaBytes={0} MB
+FileChooser.fileSizeGigaBytes={0} GB
+
+// Mac-specific strings
+FileChooser.saveTitleText=Salva
+FileChooser.openTitleText=Apri
+FileChooser.newFolderExistsErrorText=Il nome \u00E8 gi\u00E0 stato assegnato
+FileChooser.chooseButtonText=Scegli
+
+FileChooser.newFolderButtonText=Nuova cartella
+FileChooser.newFolderTitleText=Nuova cartella
+FileChooser.fileNameLabelText=File:
+FileChooser.saveDialogFileNameLabelText=Salva con nome:
+FileChooser.filesOfTypeLabelText=Formato file:
+
+FileChooser.desktopName=Desktop
+FileChooser.newFolderPromptText=Nome nuova cartella:
+FileChooser.untitledFolderName=cartella senza titolo
+FileChooser.untitledFileName=senza titolo
+FileChooser.createButtonText=Crea
+
+FileChooser.byDateText=Data modifica
+FileChooser.byNameText=Nome
+FileChooser.newFolderAccessibleName=Nuova cartella
+
+FileChooser.mac.newFolder=cartella senza titolo
+FileChooser.mac.newFolder.subsequent=cartella senza titolo {0}
+
+
+############ COLOR CHOOSER STRINGS #############
+ColorChooser.previewText=Anteprima
+ColorChooser.okText=OK
+ColorChooser.cancelText=Annulla
+ColorChooser.resetText=Reimposta
+# VK_XXX constant for 'ColorChooser.resetText' button to make mnemonic
+ColorChooser.resetMnemonic=69
+ColorChooser.sampleText=Testo di prova          Testo di prova
+ColorChooser.swatchesNameText=Colori campione
+ColorChooser.swatchesMnemonic=77
+ColorChooser.swatchesDisplayedMnemonicIndex=0
+ColorChooser.swatchesRecentText=Recenti:
+ColorChooser.hsbNameText=HSB
+# Each of the ColorChooser types can define a mnemonic, as a KeyEvent.VK_XXX
+# constant, and an index into the text to render the mnemonic as. The
+# mnemonic is xxxMnemonic and the index of the character to underline is
+# xxxDisplayedMnemonicIndex.
+ColorChooser.hsbMnemonic=72
+ColorChooser.hsbDisplayedMnemonicIndex=0
+ColorChooser.hsbHueText=H
+ColorChooser.hsbSaturationText=S
+ColorChooser.hsbBrightnessText=B
+ColorChooser.hsbRedText=R
+ColorChooser.hsbGreenText=G
+ColorChooser.hsbBlueText=B
+ColorChooser.rgbNameText=RGB
+ColorChooser.rgbMnemonic=71
+ColorChooser.rgbDisplayedMnemonicIndex=1
+ColorChooser.rgbRedText=Rosso
+ColorChooser.rgbRedMnemonic=82
+ColorChooser.rgbGreenText=Verde
+ColorChooser.rgbGreenMnemonic=68
+ColorChooser.rgbBlueText=Blu
+ColorChooser.rgbBlueMnemonic=66
+
+############ OPTION PANE STRINGS #############
+# Mnemonic keys correspond to KeyEvent.VK_XXX constant
+# We only define mnemonics for YES/NO, but for completeness you can
+# define mnemonics for any of the buttons.
+OptionPane.yesButtonText=S\u00EC
+OptionPane.yesButtonMnemonic=83
+OptionPane.noButtonText=No
+OptionPane.noButtonMnemonic=78
+OptionPane.okButtonText=OK
+#OptionPane.okButtonMnemonic=0
+OptionPane.cancelButtonText=Annulla
+#OptionPane.cancelButtonMnemonic=0
+OptionPane.titleText=Selezionare una opzione
+# Title for the dialog for the showInputDialog methods. Only used if
+# the developer uses one of the variants that doesn't take a title.
+OptionPane.inputDialogTitle=Input
+# Title for the dialog for the showMessageDialog methods. Only used if
+# the developer uses one of the variants that doesn't take a title.
+OptionPane.messageDialogTitle=Messaggio
+
+############ Printing Dialog Strings ############
+PrintingDialog.titleProgressText=Stampa in corso
+PrintingDialog.titleAbortingText=Stampa in corso (operazione interrotta)
+
+PrintingDialog.contentInitialText=Stampa in corso...
+
+# The following string will be formatted by a MessageFormat
+# and {0} will be replaced by page number being printed
+PrintingDialog.contentProgressText=Pagina stampata {0}...
+
+PrintingDialog.contentAbortingText=Interruzione della stampa in corso...
+
+PrintingDialog.abortButtonText=Interrompi
+PrintingDialog.abortButtonMnemonic=73
+PrintingDialog.abortButtonDisplayedMnemonicIndex=0
+PrintingDialog.abortButtonToolTipText=Interrompe la stampa
+
+############ Internal Frame Strings ############
+InternalFrame.iconButtonToolTip=Riduce a icona
+InternalFrame.maxButtonToolTip=Ingrandisce
+InternalFrame.restoreButtonToolTip=Ripristina
+InternalFrame.closeButtonToolTip=Chiude
+
+############ Internal Frame Title Pane Strings ############
+InternalFrameTitlePane.restoreButtonText=Ripristina
+InternalFrameTitlePane.moveButtonText=Sposta
+InternalFrameTitlePane.sizeButtonText=Dimensiona
+InternalFrameTitlePane.minimizeButtonText=Riduci a icona
+InternalFrameTitlePane.maximizeButtonText=Ingrandisci
+InternalFrameTitlePane.closeButtonText=Chiudi
+
+############ Text strings #############
+# Used for html forms
+FormView.submitButtonText=Sottometti query
+FormView.resetButtonText=Reimposta
+FormView.browseFileButtonText=Sfoglia...
+
+############ Abstract Document Strings ############
+AbstractDocument.styleChangeText=modifica di stile
+AbstractDocument.additionText=aggiunta
+AbstractDocument.deletionText=eliminazione
+AbstractDocument.undoText=Annulla
+AbstractDocument.redoText=Ripeti
+
+############ Abstract Button Strings ############
+AbstractButton.clickText=fare clic
+
+############ Abstract Undoable Edit Strings ############
+AbstractUndoableEdit.undoText=Annulla
+AbstractUndoableEdit.redoText=Ripeti
+
+############ Combo Box Strings ############
+ComboBox.togglePopupText=togglePopup
+
+############ Progress Monitor Strings ############
+ProgressMonitor.progressText=In corso...
+
+############ Split Pane Strings ############
+SplitPane.leftButtonText=pulsante sinistro
+SplitPane.rightButtonText=pulsante destro
+# Used for Isindex
+IsindexView.prompt=Questo \u00E8 un indice di ricerca. Immettere le parole chiave:
+
+############ InternalFrameTitlePane Strings ############
+InternalFrameTitlePane.iconifyButtonAccessibleName=Riduci a icona
+InternalFrameTitlePane.maximizeButtonAccessibleName=Ingrandisci
+InternalFrameTitlePane.closeButtonAccessibleName=Chiudi
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/macosx/classes/com/apple/laf/resources/aqua_ja.properties	Wed May 02 15:06:35 2012 +0100
@@ -0,0 +1,206 @@
+#
+# Copyright (c) 2011, 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.
+#
+
+# This properties file is used to create a PropertyResourceBundle
+# It contains Locale specific strings used in Swing
+# Currently, it contains the additional strings needed for the Aqua versions of these components:
+#
+#    FileChooser
+#
+# When this file is read in, the strings are put into the
+# defaults table.  This is an implementation detail of the current
+# workings of Swing.  DO NOT DEPEND ON THIS.
+# This may change in future versions of Swing as we improve localization
+# support.
+
+############ FILE CHOOSER STRINGS #############
+FileChooser.fileDescriptionText=\u6C4E\u7528\u30D5\u30A1\u30A4\u30EB
+FileChooser.directoryDescriptionText=\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA
+FileChooser.newFolderErrorText=\u30D5\u30A9\u30EB\u30C0\u306E\u4F5C\u6210\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F
+FileChooser.newFolderErrorSeparator= :
+FileChooser.acceptAllFileFilterText=\u3059\u3079\u3066\u306E\u30D5\u30A1\u30A4\u30EB
+FileChooser.cancelButtonText=\u53D6\u6D88
+FileChooser.saveButtonText=\u4FDD\u5B58
+FileChooser.openButtonText=\u958B\u304F
+FileChooser.saveDialogTitleText=\u4FDD\u5B58
+FileChooser.openDialogTitleText=\u958B\u304F
+FileChooser.updateButtonText=\u66F4\u65B0
+FileChooser.helpButtonText=\u30D8\u30EB\u30D7
+FileChooser.directoryOpenButtonText=\u958B\u304F
+
+# File Size Units
+FileChooser.fileSizeKiloBytes={0} KB
+FileChooser.fileSizeMegaBytes={0} MB
+FileChooser.fileSizeGigaBytes={0} GB
+
+// Mac-specific strings
+FileChooser.saveTitleText=\u4FDD\u5B58
+FileChooser.openTitleText=\u958B\u304F
+FileChooser.newFolderExistsErrorText=\u305D\u306E\u540D\u524D\u306F\u3059\u3067\u306B\u4F7F\u7528\u3055\u308C\u3066\u3044\u307E\u3059
+FileChooser.chooseButtonText=\u9078\u629E
+
+FileChooser.newFolderButtonText=\u65B0\u898F\u30D5\u30A9\u30EB\u30C0
+FileChooser.newFolderTitleText=\u65B0\u898F\u30D5\u30A9\u30EB\u30C0
+FileChooser.fileNameLabelText=\u30D5\u30A1\u30A4\u30EB:
+FileChooser.saveDialogFileNameLabelText=\u5225\u540D\u4FDD\u5B58:
+FileChooser.filesOfTypeLabelText=\u30D5\u30A1\u30A4\u30EB\u5F62\u5F0F:
+
+FileChooser.desktopName=\u30C7\u30B9\u30AF\u30C8\u30C3\u30D7
+FileChooser.newFolderPromptText=\u65B0\u898F\u30D5\u30A9\u30EB\u30C0\u306E\u540D\u524D:
+FileChooser.untitledFolderName=\u7121\u984C\u306E\u30D5\u30A9\u30EB\u30C0
+FileChooser.untitledFileName=\u7121\u984C
+FileChooser.createButtonText=\u4F5C\u6210
+
+FileChooser.byDateText=\u5909\u66F4\u65E5
+FileChooser.byNameText=\u540D\u524D
+FileChooser.newFolderAccessibleName=\u65B0\u898F\u30D5\u30A9\u30EB\u30C0
+
+FileChooser.mac.newFolder=\u7121\u984C\u306E\u30D5\u30A9\u30EB\u30C0
+FileChooser.mac.newFolder.subsequent=\u7121\u984C\u306E\u30D5\u30A9\u30EB\u30C0{0}
+
+
+############ COLOR CHOOSER STRINGS #############
+ColorChooser.previewText=\u30D7\u30EC\u30D3\u30E5\u30FC
+ColorChooser.okText=OK
+ColorChooser.cancelText=\u53D6\u6D88
+ColorChooser.resetText=\u30EA\u30BB\u30C3\u30C8(R)
+# VK_XXX constant for 'ColorChooser.resetText' button to make mnemonic
+ColorChooser.resetMnemonic=82
+ColorChooser.sampleText=\u30B5\u30F3\u30D7\u30EB\u30FB\u30C6\u30AD\u30B9\u30C8  \u30B5\u30F3\u30D7\u30EB\u30FB\u30C6\u30AD\u30B9\u30C8
+ColorChooser.swatchesNameText=\u30B5\u30F3\u30D7\u30EB(S)
+ColorChooser.swatchesMnemonic=83
+ColorChooser.swatchesDisplayedMnemonicIndex=0
+ColorChooser.swatchesRecentText=\u6700\u65B0:
+ColorChooser.hsbNameText=HSB(H)
+# Each of the ColorChooser types can define a mnemonic, as a KeyEvent.VK_XXX
+# constant, and an index into the text to render the mnemonic as. The
+# mnemonic is xxxMnemonic and the index of the character to underline is
+# xxxDisplayedMnemonicIndex.
+ColorChooser.hsbMnemonic=72
+ColorChooser.hsbDisplayedMnemonicIndex=0
+ColorChooser.hsbHueText=H
+ColorChooser.hsbSaturationText=S
+ColorChooser.hsbBrightnessText=B
+ColorChooser.hsbRedText=R
+ColorChooser.hsbGreenText=G
+ColorChooser.hsbBlueText=B
+ColorChooser.rgbNameText=RGB(G)
+ColorChooser.rgbMnemonic=71
+ColorChooser.rgbDisplayedMnemonicIndex=1
+ColorChooser.rgbRedText=\u8D64(D)
+ColorChooser.rgbRedMnemonic=68
+ColorChooser.rgbGreenText=\u7DD1(N)
+ColorChooser.rgbGreenMnemonic=78
+ColorChooser.rgbBlueText=\u9752(B)
+ColorChooser.rgbBlueMnemonic=66
+
+############ OPTION PANE STRINGS #############
+# Mnemonic keys correspond to KeyEvent.VK_XXX constant
+# We only define mnemonics for YES/NO, but for completeness you can
+# define mnemonics for any of the buttons.
+OptionPane.yesButtonText=\u306F\u3044(Y)
+OptionPane.yesButtonMnemonic=89
+OptionPane.noButtonText=\u3044\u3044\u3048(N)
+OptionPane.noButtonMnemonic=78
+OptionPane.okButtonText=OK
+#OptionPane.okButtonMnemonic=0
+OptionPane.cancelButtonText=\u53D6\u6D88
+#OptionPane.cancelButtonMnemonic=0
+OptionPane.titleText=\u30AA\u30D7\u30B7\u30E7\u30F3\u306E\u9078\u629E
+# Title for the dialog for the showInputDialog methods. Only used if
+# the developer uses one of the variants that doesn't take a title.
+OptionPane.inputDialogTitle=\u5165\u529B
+# Title for the dialog for the showMessageDialog methods. Only used if
+# the developer uses one of the variants that doesn't take a title.
+OptionPane.messageDialogTitle=\u30E1\u30C3\u30BB\u30FC\u30B8
+
+############ Printing Dialog Strings ############
+PrintingDialog.titleProgressText=\u5370\u5237\u3057\u3066\u3044\u307E\u3059
+PrintingDialog.titleAbortingText=\u5370\u5237\u3092\u4E2D\u6B62\u3057\u3066\u3044\u307E\u3059
+
+PrintingDialog.contentInitialText=\u5370\u5237\u4E2D...
+
+# The following string will be formatted by a MessageFormat
+# and {0} will be replaced by page number being printed
+PrintingDialog.contentProgressText=\u30DA\u30FC\u30B8{0}\u3092\u5370\u5237\u3057\u307E\u3057\u305F...
+
+PrintingDialog.contentAbortingText=\u5370\u5237\u3092\u4E2D\u6B62\u3057\u3066\u3044\u307E\u3059...
+
+PrintingDialog.abortButtonText=\u4E2D\u6B62(A)
+PrintingDialog.abortButtonMnemonic=65
+PrintingDialog.abortButtonDisplayedMnemonicIndex=0
+PrintingDialog.abortButtonToolTipText=\u5370\u5237\u306E\u4E2D\u6B62
+
+############ Internal Frame Strings ############
+InternalFrame.iconButtonToolTip=\u6700\u5C0F\u5316
+InternalFrame.maxButtonToolTip=\u6700\u5927\u5316
+InternalFrame.restoreButtonToolTip=\u5FA9\u5143
+InternalFrame.closeButtonToolTip=\u9589\u3058\u308B
+
+############ Internal Frame Title Pane Strings ############
+InternalFrameTitlePane.restoreButtonText=\u5FA9\u5143
+InternalFrameTitlePane.moveButtonText=\u79FB\u52D5
+InternalFrameTitlePane.sizeButtonText=\u30B5\u30A4\u30BA
+InternalFrameTitlePane.minimizeButtonText=\u6700\u5C0F\u5316
+InternalFrameTitlePane.maximizeButtonText=\u6700\u5927\u5316
+InternalFrameTitlePane.closeButtonText=\u9589\u3058\u308B
+
+############ Text strings #############
+# Used for html forms
+FormView.submitButtonText=\u554F\u5408\u305B\u306E\u5B9F\u884C
+FormView.resetButtonText=\u30EA\u30BB\u30C3\u30C8
+FormView.browseFileButtonText=\u53C2\u7167...
+
+############ Abstract Document Strings ############
+AbstractDocument.styleChangeText=\u30B9\u30BF\u30A4\u30EB\u5909\u66F4
+AbstractDocument.additionText=\u8FFD\u52A0
+AbstractDocument.deletionText=\u524A\u9664
+AbstractDocument.undoText=\u5143\u306B\u623B\u3059
+AbstractDocument.redoText=\u3084\u308A\u76F4\u3057
+
+############ Abstract Button Strings ############
+AbstractButton.clickText=\u30AF\u30EA\u30C3\u30AF
+
+############ Abstract Undoable Edit Strings ############
+AbstractUndoableEdit.undoText=\u5143\u306B\u623B\u3059
+AbstractUndoableEdit.redoText=\u3084\u308A\u76F4\u3057
+
+############ Combo Box Strings ############
+ComboBox.togglePopupText=\u30C8\u30B0\u30EB\u30FB\u30DD\u30C3\u30D7\u30A2\u30C3\u30D7
+
+############ Progress Monitor Strings ############
+ProgressMonitor.progressText=\u9032\u884C\u4E2D...
+
+############ Split Pane Strings ############
+SplitPane.leftButtonText=\u5DE6\u30DC\u30BF\u30F3
+SplitPane.rightButtonText=\u53F3\u30DC\u30BF\u30F3
+# Used for Isindex
+IsindexView.prompt=\u691C\u7D22\u7528\u306E\u7D22\u5F15\u3067\u3059\u3002\u691C\u7D22\u3059\u308B\u30AD\u30FC\u30EF\u30FC\u30C9\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044:
+
+############ InternalFrameTitlePane Strings ############
+InternalFrameTitlePane.iconifyButtonAccessibleName=\u30A2\u30A4\u30B3\u30F3\u5316
+InternalFrameTitlePane.maximizeButtonAccessibleName=\u6700\u5927\u5316
+InternalFrameTitlePane.closeButtonAccessibleName=\u9589\u3058\u308B
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/macosx/classes/com/apple/laf/resources/aqua_ko.properties	Wed May 02 15:06:35 2012 +0100
@@ -0,0 +1,206 @@
+#
+# Copyright (c) 2011, 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.
+#
+
+# This properties file is used to create a PropertyResourceBundle
+# It contains Locale specific strings used in Swing
+# Currently, it contains the additional strings needed for the Aqua versions of these components:
+#
+#    FileChooser
+#
+# When this file is read in, the strings are put into the
+# defaults table.  This is an implementation detail of the current
+# workings of Swing.  DO NOT DEPEND ON THIS.
+# This may change in future versions of Swing as we improve localization
+# support.
+
+############ FILE CHOOSER STRINGS #############
+FileChooser.fileDescriptionText=\uC77C\uBC18 \uD30C\uC77C
+FileChooser.directoryDescriptionText=\uB514\uB809\uD1A0\uB9AC
+FileChooser.newFolderErrorText=\uD3F4\uB354 \uC0DD\uC131 \uC911 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4.
+FileChooser.newFolderErrorSeparator= :
+FileChooser.acceptAllFileFilterText=\uBAA8\uB4E0 \uD30C\uC77C
+FileChooser.cancelButtonText=\uCDE8\uC18C
+FileChooser.saveButtonText=\uC800\uC7A5
+FileChooser.openButtonText=\uC5F4\uAE30
+FileChooser.saveDialogTitleText=\uC800\uC7A5
+FileChooser.openDialogTitleText=\uC5F4\uAE30
+FileChooser.updateButtonText=\uAC31\uC2E0
+FileChooser.helpButtonText=\uB3C4\uC6C0\uB9D0
+FileChooser.directoryOpenButtonText=\uC5F4\uAE30
+
+# File Size Units
+FileChooser.fileSizeKiloBytes={0} KB
+FileChooser.fileSizeMegaBytes={0} MB
+FileChooser.fileSizeGigaBytes={0} GB
+
+// Mac-specific strings
+FileChooser.saveTitleText=\uC800\uC7A5
+FileChooser.openTitleText=\uC5F4\uAE30
+FileChooser.newFolderExistsErrorText=\uD574\uB2F9 \uC774\uB984\uC740 \uC774\uBBF8 \uC0AC\uC6A9 \uC911\uC785\uB2C8\uB2E4.
+FileChooser.chooseButtonText=\uC120\uD0DD
+
+FileChooser.newFolderButtonText=\uC0C8 \uD3F4\uB354
+FileChooser.newFolderTitleText=\uC0C8 \uD3F4\uB354
+FileChooser.fileNameLabelText=\uD30C\uC77C:
+FileChooser.saveDialogFileNameLabelText=\uB2E4\uB978 \uC774\uB984\uC73C\uB85C \uC800\uC7A5:
+FileChooser.filesOfTypeLabelText=\uD30C\uC77C \uD615\uC2DD:
+
+FileChooser.desktopName=\uB370\uC2A4\uD06C\uD1B1
+FileChooser.newFolderPromptText=\uC0C8 \uD3F4\uB354\uC758 \uC774\uB984:
+FileChooser.untitledFolderName=\uC81C\uBAA9 \uC5C6\uB294 \uD3F4\uB354
+FileChooser.untitledFileName=\uC81C\uBAA9 \uC5C6\uC74C
+FileChooser.createButtonText=\uC0DD\uC131
+
+FileChooser.byDateText=\uC218\uC815\uB41C \uB0A0\uC9DC
+FileChooser.byNameText=\uC774\uB984
+FileChooser.newFolderAccessibleName=\uC0C8 \uD3F4\uB354
+
+FileChooser.mac.newFolder=\uC81C\uBAA9 \uC5C6\uB294 \uD3F4\uB354
+FileChooser.mac.newFolder.subsequent=\uC81C\uBAA9 \uC5C6\uB294 \uD3F4\uB354 {0}
+
+
+############ COLOR CHOOSER STRINGS #############
+ColorChooser.previewText=\uBBF8\uB9AC\uBCF4\uAE30
+ColorChooser.okText=\uD655\uC778
+ColorChooser.cancelText=\uCDE8\uC18C
+ColorChooser.resetText=\uC7AC\uC124\uC815(R)
+# VK_XXX constant for 'ColorChooser.resetText' button to make mnemonic
+ColorChooser.resetMnemonic=82
+ColorChooser.sampleText=\uC0D8\uD50C \uD14D\uC2A4\uD2B8  \uC0D8\uD50C \uD14D\uC2A4\uD2B8
+ColorChooser.swatchesNameText=\uACAC\uBCF8(S)
+ColorChooser.swatchesMnemonic=83
+ColorChooser.swatchesDisplayedMnemonicIndex=0
+ColorChooser.swatchesRecentText=\uCD5C\uADFC \uBAA9\uB85D:
+ColorChooser.hsbNameText=HSB(H)
+# Each of the ColorChooser types can define a mnemonic, as a KeyEvent.VK_XXX
+# constant, and an index into the text to render the mnemonic as. The
+# mnemonic is xxxMnemonic and the index of the character to underline is
+# xxxDisplayedMnemonicIndex.
+ColorChooser.hsbMnemonic=72
+ColorChooser.hsbDisplayedMnemonicIndex=0
+ColorChooser.hsbHueText=H
+ColorChooser.hsbSaturationText=S
+ColorChooser.hsbBrightnessText=B
+ColorChooser.hsbRedText=R
+ColorChooser.hsbGreenText=G
+ColorChooser.hsbBlueText=B
+ColorChooser.rgbNameText=RGB(G)
+ColorChooser.rgbMnemonic=71
+ColorChooser.rgbDisplayedMnemonicIndex=1
+ColorChooser.rgbRedText=\uBE68\uAC04\uC0C9(D)
+ColorChooser.rgbRedMnemonic=68
+ColorChooser.rgbGreenText=\uB179\uC0C9(N)
+ColorChooser.rgbGreenMnemonic=78
+ColorChooser.rgbBlueText=\uD30C\uB780\uC0C9(B)
+ColorChooser.rgbBlueMnemonic=66
+
+############ OPTION PANE STRINGS #############
+# Mnemonic keys correspond to KeyEvent.VK_XXX constant
+# We only define mnemonics for YES/NO, but for completeness you can
+# define mnemonics for any of the buttons.
+OptionPane.yesButtonText=\uC608(Y)
+OptionPane.yesButtonMnemonic=89
+OptionPane.noButtonText=\uC544\uB2C8\uC624(N)
+OptionPane.noButtonMnemonic=78
+OptionPane.okButtonText=OK
+#OptionPane.okButtonMnemonic=0
+OptionPane.cancelButtonText=\uCDE8\uC18C
+#OptionPane.cancelButtonMnemonic=0
+OptionPane.titleText=\uC635\uC158 \uC120\uD0DD
+# Title for the dialog for the showInputDialog methods. Only used if
+# the developer uses one of the variants that doesn't take a title.
+OptionPane.inputDialogTitle=\uC785\uB825
+# Title for the dialog for the showMessageDialog methods. Only used if
+# the developer uses one of the variants that doesn't take a title.
+OptionPane.messageDialogTitle=\uBA54\uC2DC\uC9C0
+
+############ Printing Dialog Strings ############
+PrintingDialog.titleProgressText=\uC778\uC1C4
+PrintingDialog.titleAbortingText=\uC778\uC1C4(\uC911\uB2E8 \uC911)
+
+PrintingDialog.contentInitialText=\uC778\uC1C4 \uC9C4\uD589 \uC911...
+
+# The following string will be formatted by a MessageFormat
+# and {0} will be replaced by page number being printed
+PrintingDialog.contentProgressText=\uC778\uC1C4\uB41C \uD398\uC774\uC9C0 {0}...
+
+PrintingDialog.contentAbortingText=\uC778\uC1C4 \uC911\uB2E8 \uC911...
+
+PrintingDialog.abortButtonText=\uC911\uB2E8(A)
+PrintingDialog.abortButtonMnemonic=65
+PrintingDialog.abortButtonDisplayedMnemonicIndex=0
+PrintingDialog.abortButtonToolTipText=\uC778\uC1C4 \uC911\uB2E8
+
+############ Internal Frame Strings ############
+InternalFrame.iconButtonToolTip=\uCD5C\uC18C\uD654
+InternalFrame.maxButtonToolTip=\uCD5C\uB300\uD654
+InternalFrame.restoreButtonToolTip=\uBCF5\uC6D0
+InternalFrame.closeButtonToolTip=\uB2EB\uAE30
+
+############ Internal Frame Title Pane Strings ############
+InternalFrameTitlePane.restoreButtonText=\uBCF5\uC6D0
+InternalFrameTitlePane.moveButtonText=\uC774\uB3D9
+InternalFrameTitlePane.sizeButtonText=\uD06C\uAE30
+InternalFrameTitlePane.minimizeButtonText=\uCD5C\uC18C\uD654
+InternalFrameTitlePane.maximizeButtonText=\uCD5C\uB300\uD654
+InternalFrameTitlePane.closeButtonText=\uB2EB\uAE30
+
+############ Text strings #############
+# Used for html forms
+FormView.submitButtonText=\uC9C8\uC758 \uC81C\uCD9C
+FormView.resetButtonText=\uC7AC\uC124\uC815
+FormView.browseFileButtonText=\uCC3E\uC544\uBCF4\uAE30...
+
+############ Abstract Document Strings ############
+AbstractDocument.styleChangeText=\uC2A4\uD0C0\uC77C \uBCC0\uACBD
+AbstractDocument.additionText=\uCD94\uAC00
+AbstractDocument.deletionText=\uC0AD\uC81C
+AbstractDocument.undoText=\uC2E4\uD589 \uCDE8\uC18C
+AbstractDocument.redoText=\uC7AC\uC2E4\uD589
+
+############ Abstract Button Strings ############
+AbstractButton.clickText=\uB204\uB974\uAE30
+
+############ Abstract Undoable Edit Strings ############
+AbstractUndoableEdit.undoText=\uC2E4\uD589 \uCDE8\uC18C
+AbstractUndoableEdit.redoText=\uC7AC\uC2E4\uD589
+
+############ Combo Box Strings ############
+ComboBox.togglePopupText=togglePopup
+
+############ Progress Monitor Strings ############
+ProgressMonitor.progressText=\uC9C4\uD589...
+
+############ Split Pane Strings ############
+SplitPane.leftButtonText=\uC67C\uCABD \uB2E8\uCD94
+SplitPane.rightButtonText=\uC624\uB978\uCABD \uB2E8\uCD94
+# Used for Isindex
+IsindexView.prompt=\uB2E4\uC74C\uC740 \uAC80\uC0C9 \uAC00\uB2A5\uD55C \uC778\uB371\uC2A4\uC785\uB2C8\uB2E4. \uAC80\uC0C9 \uD0A4\uC6CC\uB4DC \uC785\uB825:
+
+############ InternalFrameTitlePane Strings ############
+InternalFrameTitlePane.iconifyButtonAccessibleName=\uC544\uC774\uCF58\uD654
+InternalFrameTitlePane.maximizeButtonAccessibleName=\uCD5C\uB300\uD654
+InternalFrameTitlePane.closeButtonAccessibleName=\uB2EB\uAE30
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/macosx/classes/com/apple/laf/resources/aqua_pt_BR.properties	Wed May 02 15:06:35 2012 +0100
@@ -0,0 +1,206 @@
+#
+# Copyright (c) 2011, 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.
+#
+
+# This properties file is used to create a PropertyResourceBundle
+# It contains Locale specific strings used in Swing
+# Currently, it contains the additional strings needed for the Aqua versions of these components:
+#
+#    FileChooser
+#
+# When this file is read in, the strings are put into the
+# defaults table.  This is an implementation detail of the current
+# workings of Swing.  DO NOT DEPEND ON THIS.
+# This may change in future versions of Swing as we improve localization
+# support.
+
+############ FILE CHOOSER STRINGS #############
+FileChooser.fileDescriptionText=Arquivo Gen\u00E9rico
+FileChooser.directoryDescriptionText=Diret\u00F3rio
+FileChooser.newFolderErrorText=Ocorreu um erro durante a cria\u00E7\u00E3o da pasta
+FileChooser.newFolderErrorSeparator= :
+FileChooser.acceptAllFileFilterText=Todos os Arquivos
+FileChooser.cancelButtonText=Cancelar
+FileChooser.saveButtonText=Salvar
+FileChooser.openButtonText=Abrir
+FileChooser.saveDialogTitleText=Salvar
+FileChooser.openDialogTitleText=Abrir
+FileChooser.updateButtonText=Atualizar
+FileChooser.helpButtonText=Ajuda
+FileChooser.directoryOpenButtonText=Abrir
+
+# File Size Units
+FileChooser.fileSizeKiloBytes={0} KB
+FileChooser.fileSizeMegaBytes={0} MB
+FileChooser.fileSizeGigaBytes={0} GB
+
+// Mac-specific strings
+FileChooser.saveTitleText=Salvar
+FileChooser.openTitleText=Abrir
+FileChooser.newFolderExistsErrorText=Este nome j\u00E1 foi utilizado
+FileChooser.chooseButtonText=Escolher
+
+FileChooser.newFolderButtonText=Nova Pasta
+FileChooser.newFolderTitleText=Nova Pasta
+FileChooser.fileNameLabelText=Arquivo:
+FileChooser.saveDialogFileNameLabelText=Salvar como:
+FileChooser.filesOfTypeLabelText=Formato do Arquivo:
+
+FileChooser.desktopName=\u00C1rea de Trabalho
+FileChooser.newFolderPromptText=Nome da nova pasta:
+FileChooser.untitledFolderName=pasta sem t\u00EDtulo
+FileChooser.untitledFileName=sem t\u00EDtulo
+FileChooser.createButtonText=Criar
+
+FileChooser.byDateText=Data da Modifica\u00E7\u00E3o
+FileChooser.byNameText=Nome
+FileChooser.newFolderAccessibleName=Nova Pasta
+
+FileChooser.mac.newFolder=pasta sem t\u00EDtulo
+FileChooser.mac.newFolder.subsequent=pasta sem t\u00EDtulo {0}
+
+
+############ COLOR CHOOSER STRINGS #############
+ColorChooser.previewText=Visualizar
+ColorChooser.okText=OK
+ColorChooser.cancelText=Cancelar
+ColorChooser.resetText=Redefinir
+# VK_XXX constant for 'ColorChooser.resetText' button to make mnemonic
+ColorChooser.resetMnemonic=82
+ColorChooser.sampleText=Texto de Amostra Texto de Amostra
+ColorChooser.swatchesNameText=Amostras
+ColorChooser.swatchesMnemonic=83
+ColorChooser.swatchesDisplayedMnemonicIndex=0
+ColorChooser.swatchesRecentText=Recente:
+ColorChooser.hsbNameText=HSB
+# Each of the ColorChooser types can define a mnemonic, as a KeyEvent.VK_XXX
+# constant, and an index into the text to render the mnemonic as. The
+# mnemonic is xxxMnemonic and the index of the character to underline is
+# xxxDisplayedMnemonicIndex.
+ColorChooser.hsbMnemonic=72
+ColorChooser.hsbDisplayedMnemonicIndex=0
+ColorChooser.hsbHueText=H
+ColorChooser.hsbSaturationText=S
+ColorChooser.hsbBrightnessText=B
+ColorChooser.hsbRedText=R
+ColorChooser.hsbGreenText=G
+ColorChooser.hsbBlueText=B
+ColorChooser.rgbNameText=RGB
+ColorChooser.rgbMnemonic=71
+ColorChooser.rgbDisplayedMnemonicIndex=1
+ColorChooser.rgbRedText=Vermelho
+ColorChooser.rgbRedMnemonic=86
+ColorChooser.rgbGreenText=Verde
+ColorChooser.rgbGreenMnemonic=86
+ColorChooser.rgbBlueText=Azul
+ColorChooser.rgbBlueMnemonic=65
+
+############ OPTION PANE STRINGS #############
+# Mnemonic keys correspond to KeyEvent.VK_XXX constant
+# We only define mnemonics for YES/NO, but for completeness you can
+# define mnemonics for any of the buttons.
+OptionPane.yesButtonText=Sim
+OptionPane.yesButtonMnemonic=83
+OptionPane.noButtonText=N\u00E3o
+OptionPane.noButtonMnemonic=78
+OptionPane.okButtonText=OK
+#OptionPane.okButtonMnemonic=0
+OptionPane.cancelButtonText=Cancelar
+#OptionPane.cancelButtonMnemonic=0
+OptionPane.titleText=Selecionar uma Op\u00E7\u00E3o
+# Title for the dialog for the showInputDialog methods. Only used if
+# the developer uses one of the variants that doesn't take a title.
+OptionPane.inputDialogTitle=Entrada
+# Title for the dialog for the showMessageDialog methods. Only used if
+# the developer uses one of the variants that doesn't take a title.
+OptionPane.messageDialogTitle=Mensagem
+
+############ Printing Dialog Strings ############
+PrintingDialog.titleProgressText=Impress\u00E3o
+PrintingDialog.titleAbortingText=Impress\u00E3o (Abortando)
+
+PrintingDialog.contentInitialText=Impress\u00E3o em andamento...
+
+# The following string will be formatted by a MessageFormat
+# and {0} will be replaced by page number being printed
+PrintingDialog.contentProgressText=P\u00E1gina impressa {0}...
+
+PrintingDialog.contentAbortingText=Abortando impress\u00E3o...
+
+PrintingDialog.abortButtonText=Abortar
+PrintingDialog.abortButtonMnemonic=65
+PrintingDialog.abortButtonDisplayedMnemonicIndex=0
+PrintingDialog.abortButtonToolTipText=Abortar Impress\u00E3o
+
+############ Internal Frame Strings ############
+InternalFrame.iconButtonToolTip=Minimizar
+InternalFrame.maxButtonToolTip=Maximizar
+InternalFrame.restoreButtonToolTip=Restaurar
+InternalFrame.closeButtonToolTip=Fechar
+
+############ Internal Frame Title Pane Strings ############
+InternalFrameTitlePane.restoreButtonText=Restaurar
+InternalFrameTitlePane.moveButtonText=Mover
+InternalFrameTitlePane.sizeButtonText=Tamanho
+InternalFrameTitlePane.minimizeButtonText=Minimizar
+InternalFrameTitlePane.maximizeButtonText=Maximizar
+InternalFrameTitlePane.closeButtonText=Fechar
+
+############ Text strings #############
+# Used for html forms
+FormView.submitButtonText=Submeter Consulta
+FormView.resetButtonText=Redefinir
+FormView.browseFileButtonText=Procurar...
+
+############ Abstract Document Strings ############
+AbstractDocument.styleChangeText=altera\u00E7\u00E3o de estilo
+AbstractDocument.additionText=adi\u00E7\u00E3o
+AbstractDocument.deletionText=dele\u00E7\u00E3o
+AbstractDocument.undoText=Desfazer
+AbstractDocument.redoText=Refazer
+
+############ Abstract Button Strings ############
+AbstractButton.clickText=clicar
+
+############ Abstract Undoable Edit Strings ############
+AbstractUndoableEdit.undoText=Desfazer
+AbstractUndoableEdit.redoText=Refazer
+
+############ Combo Box Strings ############
+ComboBox.togglePopupText=togglePopup
+
+############ Progress Monitor Strings ############
+ProgressMonitor.progressText=Andamento...
+
+############ Split Pane Strings ############
+SplitPane.leftButtonText=bot\u00E3o esquerdo
+SplitPane.rightButtonText=bot\u00E3o direito
+# Used for Isindex
+IsindexView.prompt=Trata-se de um \u00EDndice pesquis\u00E1vel. Informe as palavras-chave de pesquisa:
+
+############ InternalFrameTitlePane Strings ############
+InternalFrameTitlePane.iconifyButtonAccessibleName=Iconizar
+InternalFrameTitlePane.maximizeButtonAccessibleName=Maximizar
+InternalFrameTitlePane.closeButtonAccessibleName=Fechar
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/macosx/classes/com/apple/laf/resources/aqua_sv.properties	Wed May 02 15:06:35 2012 +0100
@@ -0,0 +1,206 @@
+#
+# Copyright (c) 2011, 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.
+#
+
+# This properties file is used to create a PropertyResourceBundle
+# It contains Locale specific strings used in Swing
+# Currently, it contains the additional strings needed for the Aqua versions of these components:
+#
+#    FileChooser
+#
+# When this file is read in, the strings are put into the
+# defaults table.  This is an implementation detail of the current
+# workings of Swing.  DO NOT DEPEND ON THIS.
+# This may change in future versions of Swing as we improve localization
+# support.
+
+############ FILE CHOOSER STRINGS #############
+FileChooser.fileDescriptionText=Generisk fil
+FileChooser.directoryDescriptionText=Katalog
+FileChooser.newFolderErrorText=Ett fel intr\u00E4ffade n\u00E4r en mapp skulle skapas
+FileChooser.newFolderErrorSeparator= :
+FileChooser.acceptAllFileFilterText=Alla filer
+FileChooser.cancelButtonText=Avbryt
+FileChooser.saveButtonText=Spara
+FileChooser.openButtonText=\u00D6ppna
+FileChooser.saveDialogTitleText=Spara
+FileChooser.openDialogTitleText=\u00D6ppna
+FileChooser.updateButtonText=Uppdatera
+FileChooser.helpButtonText=Hj\u00E4lp
+FileChooser.directoryOpenButtonText=\u00D6ppna
+
+# File Size Units
+FileChooser.fileSizeKiloBytes={0} KB
+FileChooser.fileSizeMegaBytes={0} MB
+FileChooser.fileSizeGigaBytes={0} GB
+
+// Mac-specific strings
+FileChooser.saveTitleText=Spara
+FileChooser.openTitleText=\u00D6ppna
+FileChooser.newFolderExistsErrorText=Namnet finns redan
+FileChooser.chooseButtonText=V\u00E4lj
+
+FileChooser.newFolderButtonText=Ny mapp
+FileChooser.newFolderTitleText=Ny mapp
+FileChooser.fileNameLabelText=Fil:
+FileChooser.saveDialogFileNameLabelText=Spara som:
+FileChooser.filesOfTypeLabelText=Filformat:
+
+FileChooser.desktopName=Klientdator
+FileChooser.newFolderPromptText=Namn p\u00E5 ny mapp:
+FileChooser.untitledFolderName=namnl\u00F6s mapp
+FileChooser.untitledFileName=namnl\u00F6s
+FileChooser.createButtonText=Skapa
+
+FileChooser.byDateText=\u00C4ndringsdatum
+FileChooser.byNameText=Namn
+FileChooser.newFolderAccessibleName=Ny mapp
+
+FileChooser.mac.newFolder=namnl\u00F6s mapp
+FileChooser.mac.newFolder.subsequent=namnl\u00F6s mapp {0}
+
+
+############ COLOR CHOOSER STRINGS #############
+ColorChooser.previewText=F\u00F6rhandsgranska
+ColorChooser.okText=OK
+ColorChooser.cancelText=Avbryt
+ColorChooser.resetText=\u00C5terst\u00E4ll
+# VK_XXX constant for 'ColorChooser.resetText' button to make mnemonic
+ColorChooser.resetMnemonic=84
+ColorChooser.sampleText=Exempeltext  Exempeltext
+ColorChooser.swatchesNameText=Prov
+ColorChooser.swatchesMnemonic=80
+ColorChooser.swatchesDisplayedMnemonicIndex=0
+ColorChooser.swatchesRecentText=Senaste:
+ColorChooser.hsbNameText=HSB
+# Each of the ColorChooser types can define a mnemonic, as a KeyEvent.VK_XXX
+# constant, and an index into the text to render the mnemonic as. The
+# mnemonic is xxxMnemonic and the index of the character to underline is
+# xxxDisplayedMnemonicIndex.
+ColorChooser.hsbMnemonic=72
+ColorChooser.hsbDisplayedMnemonicIndex=0
+ColorChooser.hsbHueText=H
+ColorChooser.hsbSaturationText=S
+ColorChooser.hsbBrightnessText=B
+ColorChooser.hsbRedText=R
+ColorChooser.hsbGreenText=G
+ColorChooser.hsbBlueText=B
+ColorChooser.rgbNameText=RGB
+ColorChooser.rgbMnemonic=71
+ColorChooser.rgbDisplayedMnemonicIndex=1
+ColorChooser.rgbRedText=R\u00F6d
+ColorChooser.rgbRedMnemonic=68
+ColorChooser.rgbGreenText=Gr\u00F6n
+ColorChooser.rgbGreenMnemonic=78
+ColorChooser.rgbBlueText=Bl\u00E5
+ColorChooser.rgbBlueMnemonic=66
+
+############ OPTION PANE STRINGS #############
+# Mnemonic keys correspond to KeyEvent.VK_XXX constant
+# We only define mnemonics for YES/NO, but for completeness you can
+# define mnemonics for any of the buttons.
+OptionPane.yesButtonText=Ja
+OptionPane.yesButtonMnemonic=74
+OptionPane.noButtonText=Nej
+OptionPane.noButtonMnemonic=78
+OptionPane.okButtonText=OK
+#OptionPane.okButtonMnemonic=0
+OptionPane.cancelButtonText=Avbryt
+#OptionPane.cancelButtonMnemonic=0
+OptionPane.titleText=V\u00E4lj ett alternativ
+# Title for the dialog for the showInputDialog methods. Only used if
+# the developer uses one of the variants that doesn't take a title.
+OptionPane.inputDialogTitle=Indata
+# Title for the dialog for the showMessageDialog methods. Only used if
+# the developer uses one of the variants that doesn't take a title.
+OptionPane.messageDialogTitle=Meddelande
+
+############ Printing Dialog Strings ############
+PrintingDialog.titleProgressText=Skriver ut
+PrintingDialog.titleAbortingText=Skriver ut (avbryter)
+
+PrintingDialog.contentInitialText=Utskrift p\u00E5g\u00E5r...
+
+# The following string will be formatted by a MessageFormat
+# and {0} will be replaced by page number being printed
+PrintingDialog.contentProgressText=Utskriven sida {0}...
+
+PrintingDialog.contentAbortingText=Utskriften avbryts...
+
+PrintingDialog.abortButtonText=Avbryt
+PrintingDialog.abortButtonMnemonic=65
+PrintingDialog.abortButtonDisplayedMnemonicIndex=0
+PrintingDialog.abortButtonToolTipText=Avbryt utskrift
+
+############ Internal Frame Strings ############
+InternalFrame.iconButtonToolTip=Minimera
+InternalFrame.maxButtonToolTip=Maximera
+InternalFrame.restoreButtonToolTip=\u00C5terst\u00E4ll
+InternalFrame.closeButtonToolTip=St\u00E4ng
+
+############ Internal Frame Title Pane Strings ############
+InternalFrameTitlePane.restoreButtonText=\u00C5terst\u00E4ll
+InternalFrameTitlePane.moveButtonText=Flytta
+InternalFrameTitlePane.sizeButtonText=Storlek
+InternalFrameTitlePane.minimizeButtonText=Minimera
+InternalFrameTitlePane.maximizeButtonText=Maximera
+InternalFrameTitlePane.closeButtonText=St\u00E4ng
+
+############ Text strings #############
+# Used for html forms
+FormView.submitButtonText=Skicka fr\u00E5ga
+FormView.resetButtonText=\u00C5terst\u00E4ll
+FormView.browseFileButtonText=Bl\u00E4ddra...
+
+############ Abstract Document Strings ############
+AbstractDocument.styleChangeText=format\u00E4ndring
+AbstractDocument.additionText=till\u00E4gg
+AbstractDocument.deletionText=borttagning
+AbstractDocument.undoText=\u00C5ngra
+AbstractDocument.redoText=G\u00F6r om
+
+############ Abstract Button Strings ############
+AbstractButton.clickText=klicka
+
+############ Abstract Undoable Edit Strings ############
+AbstractUndoableEdit.undoText=\u00C5ngra
+AbstractUndoableEdit.redoText=G\u00F6r om
+
+############ Combo Box Strings ############
+ComboBox.togglePopupText=v\u00E4xlaPopup
+
+############ Progress Monitor Strings ############
+ProgressMonitor.progressText=P\u00E5g\u00E5r...
+
+############ Split Pane Strings ############
+SplitPane.leftButtonText=v\u00E4nster knapp
+SplitPane.rightButtonText=h\u00F6ger knapp
+# Used for Isindex
+IsindexView.prompt=Detta \u00E4r ett s\u00F6kbart index. Ange s\u00F6kord:
+
+############ InternalFrameTitlePane Strings ############
+InternalFrameTitlePane.iconifyButtonAccessibleName=Minimera
+InternalFrameTitlePane.maximizeButtonAccessibleName=Maximera
+InternalFrameTitlePane.closeButtonAccessibleName=St\u00E4ng
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/macosx/classes/com/apple/laf/resources/aqua_zh_CN.properties	Wed May 02 15:06:35 2012 +0100
@@ -0,0 +1,206 @@
+#
+# Copyright (c) 2011, 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.
+#
+
+# This properties file is used to create a PropertyResourceBundle
+# It contains Locale specific strings used in Swing
+# Currently, it contains the additional strings needed for the Aqua versions of these components:
+#
+#    FileChooser
+#
+# When this file is read in, the strings are put into the
+# defaults table.  This is an implementation detail of the current
+# workings of Swing.  DO NOT DEPEND ON THIS.
+# This may change in future versions of Swing as we improve localization
+# support.
+
+############ FILE CHOOSER STRINGS #############
+FileChooser.fileDescriptionText=\u901A\u7528\u6587\u4EF6
+FileChooser.directoryDescriptionText=\u76EE\u5F55
+FileChooser.newFolderErrorText=\u521B\u5EFA\u6587\u4EF6\u5939\u65F6\u51FA\u9519
+FileChooser.newFolderErrorSeparator= :
+FileChooser.acceptAllFileFilterText=\u6240\u6709\u6587\u4EF6
+FileChooser.cancelButtonText=\u53D6\u6D88
+FileChooser.saveButtonText=\u4FDD\u5B58
+FileChooser.openButtonText=\u6253\u5F00
+FileChooser.saveDialogTitleText=\u4FDD\u5B58
+FileChooser.openDialogTitleText=\u6253\u5F00
+FileChooser.updateButtonText=\u66F4\u65B0
+FileChooser.helpButtonText=\u5E2E\u52A9
+FileChooser.directoryOpenButtonText=\u6253\u5F00
+
+# File Size Units
+FileChooser.fileSizeKiloBytes={0} KB
+FileChooser.fileSizeMegaBytes={0} MB
+FileChooser.fileSizeGigaBytes={0} GB
+
+// Mac-specific strings
+FileChooser.saveTitleText=\u4FDD\u5B58
+FileChooser.openTitleText=\u6253\u5F00
+FileChooser.newFolderExistsErrorText=\u8BE5\u540D\u79F0\u5DF2\u88AB\u4F7F\u7528
+FileChooser.chooseButtonText=\u9009\u62E9
+
+FileChooser.newFolderButtonText=\u65B0\u5EFA\u6587\u4EF6\u5939
+FileChooser.newFolderTitleText=\u65B0\u5EFA\u6587\u4EF6\u5939
+FileChooser.fileNameLabelText=\u6587\u4EF6:
+FileChooser.saveDialogFileNameLabelText=\u53E6\u5B58\u4E3A:
+FileChooser.filesOfTypeLabelText=\u6587\u4EF6\u683C\u5F0F:
+
+FileChooser.desktopName=\u684C\u9762
+FileChooser.newFolderPromptText=\u65B0\u6587\u4EF6\u5939\u7684\u540D\u79F0:
+FileChooser.untitledFolderName=\u65E0\u6807\u9898\u7684\u6587\u4EF6\u5939
+FileChooser.untitledFileName=\u65E0\u6807\u9898
+FileChooser.createButtonText=\u521B\u5EFA
+
+FileChooser.byDateText=\u4FEE\u6539\u65E5\u671F
+FileChooser.byNameText=\u540D\u79F0
+FileChooser.newFolderAccessibleName=\u65B0\u5EFA\u6587\u4EF6\u5939
+
+FileChooser.mac.newFolder=\u65E0\u6807\u9898\u7684\u6587\u4EF6\u5939
+FileChooser.mac.newFolder.subsequent=\u65E0\u6807\u9898\u7684\u6587\u4EF6\u5939 {0}
+
+
+############ COLOR CHOOSER STRINGS #############
+ColorChooser.previewText=\u9884\u89C8
+ColorChooser.okText=\u786E\u5B9A
+ColorChooser.cancelText=\u53D6\u6D88
+ColorChooser.resetText=\u91CD\u7F6E(R)
+# VK_XXX constant for 'ColorChooser.resetText' button to make mnemonic
+ColorChooser.resetMnemonic=82
+ColorChooser.sampleText=\u793A\u4F8B\u6587\u672C  \u793A\u4F8B\u6587\u672C
+ColorChooser.swatchesNameText=\u6837\u672C(S)
+ColorChooser.swatchesMnemonic=83
+ColorChooser.swatchesDisplayedMnemonicIndex=0
+ColorChooser.swatchesRecentText=\u6700\u8FD1:
+ColorChooser.hsbNameText=HSB(H)
+# Each of the ColorChooser types can define a mnemonic, as a KeyEvent.VK_XXX
+# constant, and an index into the text to render the mnemonic as. The
+# mnemonic is xxxMnemonic and the index of the character to underline is
+# xxxDisplayedMnemonicIndex.
+ColorChooser.hsbMnemonic=72
+ColorChooser.hsbDisplayedMnemonicIndex=0
+ColorChooser.hsbHueText=H
+ColorChooser.hsbSaturationText=S
+ColorChooser.hsbBrightnessText=B
+ColorChooser.hsbRedText=R
+ColorChooser.hsbGreenText=G
+ColorChooser.hsbBlueText=B
+ColorChooser.rgbNameText=RGB(G)
+ColorChooser.rgbMnemonic=71
+ColorChooser.rgbDisplayedMnemonicIndex=1
+ColorChooser.rgbRedText=\u7EA2\u8272(D)
+ColorChooser.rgbRedMnemonic=68
+ColorChooser.rgbGreenText=\u7EFF\u8272(N)
+ColorChooser.rgbGreenMnemonic=78
+ColorChooser.rgbBlueText=\u84DD\u8272(B)
+ColorChooser.rgbBlueMnemonic=66
+
+############ OPTION PANE STRINGS #############
+# Mnemonic keys correspond to KeyEvent.VK_XXX constant
+# We only define mnemonics for YES/NO, but for completeness you can
+# define mnemonics for any of the buttons.
+OptionPane.yesButtonText=\u662F(Y)
+OptionPane.yesButtonMnemonic=89
+OptionPane.noButtonText=\u5426(N)
+OptionPane.noButtonMnemonic=78
+OptionPane.okButtonText=OK
+#OptionPane.okButtonMnemonic=0
+OptionPane.cancelButtonText=\u53D6\u6D88
+#OptionPane.cancelButtonMnemonic=0
+OptionPane.titleText=\u9009\u62E9\u4E00\u4E2A\u9009\u9879
+# Title for the dialog for the showInputDialog methods. Only used if
+# the developer uses one of the variants that doesn't take a title.
+OptionPane.inputDialogTitle=\u8F93\u5165
+# Title for the dialog for the showMessageDialog methods. Only used if
+# the developer uses one of the variants that doesn't take a title.
+OptionPane.messageDialogTitle=\u6D88\u606F
+
+############ Printing Dialog Strings ############
+PrintingDialog.titleProgressText=\u6253\u5370
+PrintingDialog.titleAbortingText=\u6253\u5370 (\u6B63\u5728\u4E2D\u6B62)
+
+PrintingDialog.contentInitialText=\u6B63\u5728\u8FDB\u884C\u6253\u5370...
+
+# The following string will be formatted by a MessageFormat
+# and {0} will be replaced by page number being printed
+PrintingDialog.contentProgressText=\u5DF2\u6253\u5370\u9875 {0}...
+
+PrintingDialog.contentAbortingText=\u6B63\u5728\u4E2D\u6B62\u6253\u5370...
+
+PrintingDialog.abortButtonText=\u4E2D\u6B62(A)
+PrintingDialog.abortButtonMnemonic=65
+PrintingDialog.abortButtonDisplayedMnemonicIndex=0
+PrintingDialog.abortButtonToolTipText=\u4E2D\u6B62\u6253\u5370
+
+############ Internal Frame Strings ############
+InternalFrame.iconButtonToolTip=\u6700\u5C0F\u5316
+InternalFrame.maxButtonToolTip=\u6700\u5927\u5316
+InternalFrame.restoreButtonToolTip=\u8FD8\u539F
+InternalFrame.closeButtonToolTip=\u5173\u95ED
+
+############ Internal Frame Title Pane Strings ############
+InternalFrameTitlePane.restoreButtonText=\u8FD8\u539F
+InternalFrameTitlePane.moveButtonText=\u79FB\u52A8
+InternalFrameTitlePane.sizeButtonText=\u5927\u5C0F
+InternalFrameTitlePane.minimizeButtonText=\u6700\u5C0F\u5316
+InternalFrameTitlePane.maximizeButtonText=\u6700\u5927\u5316
+InternalFrameTitlePane.closeButtonText=\u5173\u95ED
+
+############ Text strings #############
+# Used for html forms
+FormView.submitButtonText=\u63D0\u4EA4\u67E5\u8BE2
+FormView.resetButtonText=\u91CD\u7F6E
+FormView.browseFileButtonText=\u6D4F\u89C8...
+
+############ Abstract Document Strings ############
+AbstractDocument.styleChangeText=\u6837\u5F0F\u66F4\u6539
+AbstractDocument.additionText=\u6DFB\u52A0
+AbstractDocument.deletionText=\u5220\u9664
+AbstractDocument.undoText=\u64A4\u6D88
+AbstractDocument.redoText=\u91CD\u505A
+
+############ Abstract Button Strings ############
+AbstractButton.clickText=\u5355\u51FB
+
+############ Abstract Undoable Edit Strings ############
+AbstractUndoableEdit.undoText=\u64A4\u6D88
+AbstractUndoableEdit.redoText=\u91CD\u505A
+
+############ Combo Box Strings ############
+ComboBox.togglePopupText=togglePopup
+
+############ Progress Monitor Strings ############
+ProgressMonitor.progressText=\u8FDB\u5EA6...
+
+############ Split Pane Strings ############
+SplitPane.leftButtonText=\u5DE6\u952E
+SplitPane.rightButtonText=\u53F3\u952E
+# Used for Isindex
+IsindexView.prompt=\u8FD9\u662F\u53EF\u641C\u7D22\u7D22\u5F15\u3002\u8BF7\u8F93\u5165\u641C\u7D22\u5173\u952E\u5B57:
+
+############ InternalFrameTitlePane Strings ############
+InternalFrameTitlePane.iconifyButtonAccessibleName=\u56FE\u6807\u5316
+InternalFrameTitlePane.maximizeButtonAccessibleName=\u6700\u5927\u5316
+InternalFrameTitlePane.closeButtonAccessibleName=\u5173\u95ED
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/macosx/classes/com/apple/laf/resources/aqua_zh_TW.properties	Wed May 02 15:06:35 2012 +0100
@@ -0,0 +1,206 @@
+#
+# Copyright (c) 2011, 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.
+#
+
+# This properties file is used to create a PropertyResourceBundle
+# It contains Locale specific strings used in Swing
+# Currently, it contains the additional strings needed for the Aqua versions of these components:
+#
+#    FileChooser
+#
+# When this file is read in, the strings are put into the
+# defaults table.  This is an implementation detail of the current
+# workings of Swing.  DO NOT DEPEND ON THIS.
+# This may change in future versions of Swing as we improve localization
+# support.
+
+############ FILE CHOOSER STRINGS #############
+FileChooser.fileDescriptionText=\u4E00\u822C\u6A94\u6848
+FileChooser.directoryDescriptionText=\u76EE\u9304
+FileChooser.newFolderErrorText=\u5EFA\u7ACB\u8CC7\u6599\u593E\u6642\u767C\u751F\u932F\u8AA4
+FileChooser.newFolderErrorSeparator= :
+FileChooser.acceptAllFileFilterText=\u6240\u6709\u6A94\u6848
+FileChooser.cancelButtonText=\u53D6\u6D88
+FileChooser.saveButtonText=\u5132\u5B58
+FileChooser.openButtonText=\u958B\u555F
+FileChooser.saveDialogTitleText=\u5132\u5B58
+FileChooser.openDialogTitleText=\u958B\u555F
+FileChooser.updateButtonText=\u66F4\u65B0
+FileChooser.helpButtonText=\u8AAA\u660E
+FileChooser.directoryOpenButtonText=\u958B\u555F
+
+# File Size Units
+FileChooser.fileSizeKiloBytes={0} KB
+FileChooser.fileSizeMegaBytes={0} MB
+FileChooser.fileSizeGigaBytes={0} GB
+
+// Mac-specific strings
+FileChooser.saveTitleText=\u5132\u5B58
+FileChooser.openTitleText=\u958B\u555F
+FileChooser.newFolderExistsErrorText=\u8A72\u540D\u7A31\u5DF2\u7D93\u88AB\u4F7F\u7528
+FileChooser.chooseButtonText=\u9078\u64C7
+
+FileChooser.newFolderButtonText=\u65B0\u8CC7\u6599\u593E
+FileChooser.newFolderTitleText=\u65B0\u8CC7\u6599\u593E
+FileChooser.fileNameLabelText=\u6A94\u6848:
+FileChooser.saveDialogFileNameLabelText=\u53E6\u5B58\u65B0\u6A94:
+FileChooser.filesOfTypeLabelText=\u6A94\u6848\u683C\u5F0F:
+
+FileChooser.desktopName=\u684C\u9762
+FileChooser.newFolderPromptText=\u65B0\u8CC7\u6599\u593E\u540D\u7A31:
+FileChooser.untitledFolderName=\u672A\u547D\u540D\u7684\u8CC7\u6599\u593E
+FileChooser.untitledFileName=\u672A\u547D\u540D
+FileChooser.createButtonText=\u5EFA\u7ACB
+
+FileChooser.byDateText=\u4FEE\u6539\u65E5\u671F
+FileChooser.byNameText=\u540D\u7A31
+FileChooser.newFolderAccessibleName=\u65B0\u8CC7\u6599\u593E
+
+FileChooser.mac.newFolder=\u672A\u547D\u540D\u7684\u8CC7\u6599\u593E
+FileChooser.mac.newFolder.subsequent=\u672A\u547D\u540D\u7684\u8CC7\u6599\u593E {0}
+
+
+############ COLOR CHOOSER STRINGS #############
+ColorChooser.previewText=\u9810\u89BD
+ColorChooser.okText=\u78BA\u5B9A
+ColorChooser.cancelText=\u53D6\u6D88
+ColorChooser.resetText=\u91CD\u8A2D(R)
+# VK_XXX constant for 'ColorChooser.resetText' button to make mnemonic
+ColorChooser.resetMnemonic=82
+ColorChooser.sampleText=\u7BC4\u4F8B\u6587\u5B57  \u7BC4\u4F8B\u6587\u5B57
+ColorChooser.swatchesNameText=\u8ABF\u8272\u677F(S)
+ColorChooser.swatchesMnemonic=83
+ColorChooser.swatchesDisplayedMnemonicIndex=0
+ColorChooser.swatchesRecentText=\u6700\u65B0\u9078\u64C7:
+ColorChooser.hsbNameText=HSB(H)
+# Each of the ColorChooser types can define a mnemonic, as a KeyEvent.VK_XXX
+# constant, and an index into the text to render the mnemonic as. The
+# mnemonic is xxxMnemonic and the index of the character to underline is
+# xxxDisplayedMnemonicIndex.
+ColorChooser.hsbMnemonic=72
+ColorChooser.hsbDisplayedMnemonicIndex=0
+ColorChooser.hsbHueText=H
+ColorChooser.hsbSaturationText=S
+ColorChooser.hsbBrightnessText=B
+ColorChooser.hsbRedText=R
+ColorChooser.hsbGreenText=G
+ColorChooser.hsbBlueText=B
+ColorChooser.rgbNameText=RGB(G)
+ColorChooser.rgbMnemonic=71
+ColorChooser.rgbDisplayedMnemonicIndex=1
+ColorChooser.rgbRedText=\u7D05(D)
+ColorChooser.rgbRedMnemonic=68
+ColorChooser.rgbGreenText=\u7DA0(N)
+ColorChooser.rgbGreenMnemonic=78
+ColorChooser.rgbBlueText=\u85CD(B)
+ColorChooser.rgbBlueMnemonic=66
+
+############ OPTION PANE STRINGS #############
+# Mnemonic keys correspond to KeyEvent.VK_XXX constant
+# We only define mnemonics for YES/NO, but for completeness you can
+# define mnemonics for any of the buttons.
+OptionPane.yesButtonText=\u662F(Y)
+OptionPane.yesButtonMnemonic=89
+OptionPane.noButtonText=\u5426(N)
+OptionPane.noButtonMnemonic=78
+OptionPane.okButtonText=OK
+#OptionPane.okButtonMnemonic=0
+OptionPane.cancelButtonText=\u53D6\u6D88
+#OptionPane.cancelButtonMnemonic=0
+OptionPane.titleText=\u9078\u53D6\u4E00\u500B\u9078\u9805
+# Title for the dialog for the showInputDialog methods. Only used if
+# the developer uses one of the variants that doesn't take a title.
+OptionPane.inputDialogTitle=\u8F38\u5165
+# Title for the dialog for the showMessageDialog methods. Only used if
+# the developer uses one of the variants that doesn't take a title.
+OptionPane.messageDialogTitle=\u8A0A\u606F
+
+############ Printing Dialog Strings ############
+PrintingDialog.titleProgressText=\u5217\u5370\u4E2D
+PrintingDialog.titleAbortingText=\u5217\u5370 (\u4E2D\u6B62\u4E2D)
+
+PrintingDialog.contentInitialText=\u6B63\u5728\u5217\u5370...
+
+# The following string will be formatted by a MessageFormat
+# and {0} will be replaced by page number being printed
+PrintingDialog.contentProgressText=\u5DF2\u5217\u5370\u7B2C {0} \u9801...
+
+PrintingDialog.contentAbortingText=\u6B63\u5728\u4E2D\u6B62\u5217\u5370...
+
+PrintingDialog.abortButtonText=\u4E2D\u6B62(A)
+PrintingDialog.abortButtonMnemonic=65
+PrintingDialog.abortButtonDisplayedMnemonicIndex=0
+PrintingDialog.abortButtonToolTipText=\u4E2D\u6B62\u5217\u5370
+
+############ Internal Frame Strings ############
+InternalFrame.iconButtonToolTip=\u6700\u5C0F\u5316
+InternalFrame.maxButtonToolTip=\u6700\u5927\u5316
+InternalFrame.restoreButtonToolTip=\u5FA9\u539F
+InternalFrame.closeButtonToolTip=\u95DC\u9589
+
+############ Internal Frame Title Pane Strings ############
+InternalFrameTitlePane.restoreButtonText=\u5FA9\u539F
+InternalFrameTitlePane.moveButtonText=\u79FB\u52D5
+InternalFrameTitlePane.sizeButtonText=\u5927\u5C0F
+InternalFrameTitlePane.minimizeButtonText=\u6700\u5C0F\u5316
+InternalFrameTitlePane.maximizeButtonText=\u6700\u5927\u5316
+InternalFrameTitlePane.closeButtonText=\u95DC\u9589
+
+############ Text strings #############
+# Used for html forms
+FormView.submitButtonText=\u9001\u51FA\u67E5\u8A62
+FormView.resetButtonText=\u91CD\u8A2D
+FormView.browseFileButtonText=\u700F\u89BD...
+
+############ Abstract Document Strings ############
+AbstractDocument.styleChangeText=\u6A23\u5F0F\u8B8A\u66F4
+AbstractDocument.additionText=\u9644\u52A0
+AbstractDocument.deletionText=\u522A\u9664
+AbstractDocument.undoText=\u9084\u539F
+AbstractDocument.redoText=\u91CD\u505A
+
+############ Abstract Button Strings ############
+AbstractButton.clickText=\u6309\u4E00\u4E0B
+
+############ Abstract Undoable Edit Strings ############
+AbstractUndoableEdit.undoText=\u9084\u539F
+AbstractUndoableEdit.redoText=\u91CD\u505A
+
+############ Combo Box Strings ############
+ComboBox.togglePopupText=\u5207\u63DB\u5373\u73FE\u5F0F\u8996\u7A97
+
+############ Progress Monitor Strings ############
+ProgressMonitor.progressText=\u9032\u5EA6...
+
+############ Split Pane Strings ############
+SplitPane.leftButtonText=\u5DE6\u6309\u9215
+SplitPane.rightButtonText=\u53F3\u6309\u9215
+# Used for Isindex
+IsindexView.prompt=\u9019\u662F\u4E00\u500B\u53EF\u641C\u5C0B\u7684\u7D22\u5F15\u3002\u8F38\u5165\u641C\u5C0B\u95DC\u9375\u5B57:
+
+############ InternalFrameTitlePane Strings ############
+InternalFrameTitlePane.iconifyButtonAccessibleName=\u5716\u793A\u5316
+InternalFrameTitlePane.maximizeButtonAccessibleName=\u6700\u5927\u5316
+InternalFrameTitlePane.closeButtonAccessibleName=\u95DC\u9589
+
--- a/src/macosx/classes/sun/lwawt/LWCanvasPeer.java	Wed May 02 14:00:06 2012 +0100
+++ b/src/macosx/classes/sun/lwawt/LWCanvasPeer.java	Wed May 02 15:06:35 2012 +0100
@@ -26,11 +26,17 @@
 
 package sun.lwawt;
 
+import sun.awt.CGraphicsConfig;
+
 import java.awt.BufferCapabilities;
+import java.awt.BufferCapabilities.FlipContents;
 import java.awt.Canvas;
 import java.awt.Component;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
 import java.awt.GraphicsConfiguration;
 import java.awt.Image;
+import java.awt.image.VolatileImage;
 import java.awt.peer.CanvasPeer;
 
 import javax.swing.JComponent;
@@ -38,32 +44,69 @@
 final class LWCanvasPeer extends LWComponentPeer<Component, JComponent>
         implements CanvasPeer {
 
-    LWCanvasPeer(final Canvas target, PlatformComponent platformComponent) {
+    /**
+     * The back buffer provide user with a BufferStrategy.
+     */
+    private VolatileImage backBuffer;
+
+    LWCanvasPeer(final Canvas target,
+                 final PlatformComponent platformComponent) {
         super(target, platformComponent);
     }
 
-    // ---- PEER METHODS ---- //
-
     @Override
-    public void createBuffers(int numBuffers, BufferCapabilities caps) {
-        // TODO
+    public void createBuffers(final int numBuffers,
+                              final BufferCapabilities caps) {
+        //TODO parameters should be used.
+        final CGraphicsConfig gc = (CGraphicsConfig) getGraphicsConfiguration();
+        final VolatileImage buffer = gc.createBackBufferImage(getTarget(), 0);
+        synchronized (getStateLock()) {
+            backBuffer = buffer;
+        }
     }
 
     @Override
     public Image getBackBuffer() {
-        // TODO
-        return null;
+        synchronized (getStateLock()) {
+            return backBuffer;
+        }
     }
 
     @Override
-    public void flip(int x1, int y1, int x2, int y2,
-                     BufferCapabilities.FlipContents flipAction) {
-        // TODO
+    public void flip(final int x1, final int y1, final int x2, final int y2,
+                     final FlipContents flipAction) {
+        final VolatileImage buffer = (VolatileImage) getBackBuffer();
+        if (buffer == null) {
+            throw new IllegalStateException("Buffers have not been created");
+        }
+        final Graphics g = getGraphics();
+        try {
+            g.drawImage(buffer, x1, y1, x2, y2, x1, y1, x2, y2, null);
+        } finally {
+            g.dispose();
+        }
+        if (flipAction == FlipContents.BACKGROUND) {
+            final Graphics2D bg = (Graphics2D) buffer.getGraphics();
+            try {
+                bg.setBackground(getBackground());
+                bg.clearRect(0, 0, buffer.getWidth(), buffer.getHeight());
+            } finally {
+                bg.dispose();
+            }
+        }
     }
 
     @Override
     public void destroyBuffers() {
-        // TODO
+        final Image buffer = getBackBuffer();
+        if (buffer != null) {
+            synchronized (getStateLock()) {
+                if (buffer == backBuffer) {
+                    backBuffer = null;
+                }
+            }
+            buffer.flush();
+        }
     }
 
     @Override
--- a/src/macosx/classes/sun/lwawt/LWComponentPeer.java	Wed May 02 14:00:06 2012 +0100
+++ b/src/macosx/classes/sun/lwawt/LWComponentPeer.java	Wed May 02 15:06:35 2012 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * 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
@@ -1141,9 +1141,9 @@
                     me.getModifiers(),
                     me.getX(), me.getY(),
                     me.getClickCount(),
-                    false,                       // popupTrigger
-                    MouseWheelEvent.WHEEL_UNIT_SCROLL,
-                    3, // TODO: wheel scroll amount
+                    me.isPopupTrigger(),
+                    me.getScrollType(),
+                    me.getScrollAmount(),
                     me.getWheelRotation());
         } else if (e instanceof MouseEvent) {
             MouseEvent me = (MouseEvent) e;
@@ -1199,15 +1199,14 @@
     }
 
     /**
-     * Peers with null delegates should clear background before paint.
+     * All peers should clear background before paint.
      *
      * @return false on components that DO NOT require a clearRect() before
      *         painting.
      */
     protected final boolean shouldClearRectBeforePaint() {
-        // By default, just fill the entire bounds with a bg color
         // TODO: sun.awt.noerasebackground
-        return getDelegate() == null;
+        return true;
     }
 
     /**
--- a/src/macosx/classes/sun/lwawt/LWRepaintArea.java	Wed May 02 14:00:06 2012 +0100
+++ b/src/macosx/classes/sun/lwawt/LWRepaintArea.java	Wed May 02 15:06:35 2012 +0100
@@ -39,12 +39,8 @@
     @Override
     protected void updateComponent(final Component comp, final Graphics g) {
         if (comp != null) {
-            final LWComponentPeer peer = (LWComponentPeer) comp.getPeer();
-            if (peer != null) {
-                peer.paintPeer(g);
-            }
             super.updateComponent(comp, g);
-            flushBuffers(peer);
+            flushBuffers((LWComponentPeer) comp.getPeer());
         }
     }
 
--- a/src/macosx/classes/sun/lwawt/LWTextFieldPeer.java	Wed May 02 14:00:06 2012 +0100
+++ b/src/macosx/classes/sun/lwawt/LWTextFieldPeer.java	Wed May 02 15:06:35 2012 +0100
@@ -31,6 +31,7 @@
 import java.awt.TextField;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
+import java.awt.event.FocusEvent;
 import java.awt.peer.TextFieldPeer;
 
 import javax.swing.JPasswordField;
@@ -97,6 +98,21 @@
                                   getText(), e.getWhen(), e.getModifiers()));
     }
 
+    /**
+     * Restoring native behavior. We should sets the selection range to zero,
+     * when component lost its focus.
+     *
+     * @param e the focus event
+     */
+    @Override
+    protected void handleJavaFocusEvent(final FocusEvent e) {
+        if (e.getID() == FocusEvent.FOCUS_LOST) {
+            // In order to de-select the selection
+            setCaretPosition(0);
+        }
+        super.handleJavaFocusEvent(e);
+    }
+
     private final class JTextAreaDelegate extends JPasswordField {
 
         // Empty non private constructor was added because access to this
--- a/src/macosx/classes/sun/lwawt/LWWindowPeer.java	Wed May 02 14:00:06 2012 +0100
+++ b/src/macosx/classes/sun/lwawt/LWWindowPeer.java	Wed May 02 15:06:35 2012 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * 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
@@ -162,10 +162,6 @@
 
     @Override
     public void initialize() {
-        super.initialize();
-
-        updateInsets(platformWindow.getInsets());
-
         if (getTarget() instanceof Frame) {
             setTitle(((Frame)getTarget()).getTitle());
             setState(((Frame)getTarget()).getExtendedState());
@@ -181,8 +177,9 @@
         setOpacity(getTarget().getOpacity());
         setOpaque(getTarget().isOpaque());
 
-        // Create surface data and back buffer
-        replaceSurfaceData(1, null);
+        super.initialize();
+
+        updateInsets(platformWindow.getInsets());
     }
 
     // Just a helper method
@@ -319,6 +316,7 @@
     public void flip(int x1, int y1, int x2, int y2,
                      BufferCapabilities.FlipContents flipAction)
     {
+        //Note: constraints must be applied. see applyConstrain().
         platformWindow.flip(x1, y1, x2, y2, flipAction);
     }
 
@@ -410,7 +408,11 @@
     @Override
     public void setModalBlocked(Dialog blocker, boolean blocked) {
         synchronized (getPeerTreeLock()) {
-            this.blocker = blocked ? (LWWindowPeer)blocker.getPeer() : null;
+            if(blocked && blocker.getPeer() instanceof LWWindowPeer) {
+                this.blocker = (LWWindowPeer)blocker.getPeer();
+            } else {
+                this.blocker = null;
+            }
         }
     }
 
@@ -434,18 +436,20 @@
     @Override
     public void setOpacity(float opacity) {
         getPlatformWindow().setOpacity(opacity);
+        repaintPeer();
     }
 
     @Override
-    public void setOpaque(boolean isOpaque) {
+    public final void setOpaque(final boolean isOpaque) {
         if (this.isOpaque != isOpaque) {
             this.isOpaque = isOpaque;
             getPlatformWindow().setOpaque(isOpaque);
             replaceSurfaceData();
+            repaintPeer();
         }
     }
 
-    public boolean isOpaque() {
+    public final boolean isOpaque() {
         return isOpaque;
     }
 
@@ -1048,6 +1052,7 @@
 
         if (changed) {
             replaceSurfaceData();
+            repaintPeer();
         }
 
         return changed;
--- a/src/macosx/classes/sun/lwawt/macosx/CCustomCursor.java	Wed May 02 14:00:06 2012 +0100
+++ b/src/macosx/classes/sun/lwawt/macosx/CCustomCursor.java	Wed May 02 15:06:35 2012 +0100
@@ -36,6 +36,7 @@
     }
 
     Image fImage;
+    private boolean isImageOk = false;
     Point fHotspot;
 
     public CCustomCursor(final Image cursor, final Point hotSpot, final String name) throws IndexOutOfBoundsException, HeadlessException {
@@ -64,6 +65,9 @@
         // but we need to set the hotspot inside the image here.
         if (tracker.isErrorAny() || width < 0 || height < 0) {
             fHotspot.x = fHotspot.y = 0;
+            isImageOk = false;
+        } else {
+            isImageOk = true;
         }
 
         // Scale image to nearest supported size
@@ -110,9 +114,20 @@
     // Returns long array of [NSImage ptr, x hotspot, y hotspot]
     CImage fCImage;
     long getImageData() {
-        if (fCImage == null) {
+        if (fCImage != null) {
+            return fCImage.ptr;
+        }
+
+        if (isImageOk) {
             try {
                 fCImage = CImage.getCreator().createFromImage(fImage);
+
+                if (fCImage == null) {
+                    isImageOk = false;
+                    return 0L;
+                } else {
+                    return fCImage.ptr;
+                }
             } catch (IllegalArgumentException iae) {
                 // Silently return null - we want to hide cursor by providing an empty
                 // ByteArray or just null
@@ -120,7 +135,7 @@
             }
         }
 
-        return fCImage.ptr;
+        return 0L;
     }
 
     Point getHotSpot() {
--- a/src/macosx/classes/sun/lwawt/macosx/CDataTransferer.java	Wed May 02 14:00:06 2012 +0100
+++ b/src/macosx/classes/sun/lwawt/macosx/CDataTransferer.java	Wed May 02 15:06:35 2012 +0100
@@ -273,8 +273,31 @@
 
     @Override
     protected ByteArrayOutputStream convertFileListToBytes(ArrayList<String> fileList) throws IOException {
-        // TODO Auto-generated method stub
-        return null;
+        ByteArrayOutputStream bos = new ByteArrayOutputStream();
+        for (int i = 0; i < fileList.size(); i++)
+        {
+            byte[] bytes = fileList.get(i).getBytes();
+            bos.write(bytes, 0, bytes.length);
+            bos.write(0);
+        }
+        return bos;
+    }
+
+    @Override
+    protected boolean isURIListFormat(long format) {
+        String nat = getNativeForFormat(format);
+        if (nat == null) {
+            return false;
+        }
+        try {
+            DataFlavor df = new DataFlavor(nat);
+            if (df.getPrimaryType().equals("text") && df.getSubType().equals("uri-list")) {
+                return true;
+            }
+        } catch (Exception e) {
+            // Not a MIME format.
+        }
+        return false;
     }
 }
 
--- a/src/macosx/classes/sun/lwawt/macosx/CFileDialog.java	Wed May 02 14:00:06 2012 +0100
+++ b/src/macosx/classes/sun/lwawt/macosx/CFileDialog.java	Wed May 02 15:06:35 2012 +0100
@@ -34,6 +34,7 @@
 import java.io.*;
 
 import sun.awt.CausedFocusEvent.Cause;
+import sun.awt.AWTAccessor;
 import sun.java2d.pipe.Region;
 
 class CFileDialog implements FileDialogPeer {
@@ -53,33 +54,40 @@
                     title = " ";
                 }
 
-                String userFileName = nativeRunFileDialog(title,
-                        dialogMode, navigateApps,
+                String[] userFileNames = nativeRunFileDialog(title,
+                        dialogMode,
+                        target.isMultipleMode(),
+                        navigateApps,
                         target.getFilenameFilter() != null,
                         target.getDirectory(),
                         target.getFile());
 
-                File file = null;
-                if (userFileName != null) {
+                String directory = null;
+                String file = null;
+                File[] files = null;
+
+                if (userFileNames != null) {
                     // the dialog wasn't cancelled
-                    file = new File(userFileName);
+                    int filesNumber = userFileNames.length;
+                    files = new File[filesNumber];
+                    for (int i = 0; i < filesNumber; i++) {
+                        files[i] = new File(userFileNames[i]);
+                    }
+
+                    directory = files[0].getParent();
+                    // make sure directory always ends in '/'
+                    if (!directory.endsWith(File.separator)) {
+                        directory = directory + File.separator;
+                    }
+
+                    file = files[0].getName(); // pick any file
                 }
 
-                if (file != null) {
-                    // make sure directory always ends in '/'
-                    String parent = file.getParent();
-                    if (!parent.endsWith(File.separator)) {
-                        parent = parent + File.separator;
-                    }
-
-                    // store results back in component
-                    target.setDirectory(parent);
-                    target.setFile(file.getName());
-                } else {
-                    // setting file name to null is how we tell
-                    // java client that user hit the cancel button
-                    target.setFile(null);
-                }
+                // store results back in component
+                AWTAccessor.FileDialogAccessor accessor = AWTAccessor.getFileDialogAccessor();
+                accessor.setDirectory(target, directory);
+                accessor.setFile(target, file);
+                accessor.setFiles(target, files);
             } finally {
                 // Java2 Dialog waits for hide to let show() return
                 target.dispose();
@@ -133,8 +141,8 @@
         return ret;
     }
 
-    private native String nativeRunFileDialog(String title, int mode,
-            boolean shouldNavigateApps, boolean hasFilenameFilter,
+    private native String[] nativeRunFileDialog(String title, int mode,
+            boolean multipleMode, boolean shouldNavigateApps, boolean hasFilenameFilter,
             String directory, String file);
 
     @Override
--- a/src/macosx/classes/sun/lwawt/macosx/CPlatformResponder.java	Wed May 02 14:00:06 2012 +0100
+++ b/src/macosx/classes/sun/lwawt/macosx/CPlatformResponder.java	Wed May 02 15:06:35 2012 +0100
@@ -34,33 +34,33 @@
 import java.awt.event.MouseWheelEvent;
 import java.awt.event.KeyEvent;
 
-/*
+/**
  * Translates NSEvents/NPCocoaEvents into AWT events.
  */
-public class CPlatformResponder {
+final class CPlatformResponder {
 
-    private LWWindowPeer peer;
-    private boolean isNpapiCallback;
+    private final LWWindowPeer peer;
+    private final boolean isNpapiCallback;
 
-    public CPlatformResponder(LWWindowPeer peer, boolean isNpapiCallback) {
+    CPlatformResponder(final LWWindowPeer peer, final boolean isNpapiCallback) {
         this.peer = peer;
         this.isNpapiCallback = isNpapiCallback;
     }
 
-    /*
+    /**
      * Handles mouse events.
      */
-    public void handleMouseEvent(int eventType, int modifierFlags, int buttonNumber,
-                                 int clickCount, int x, int y, int absoluteX, int absoluteY)
-    {
+    void handleMouseEvent(int eventType, int modifierFlags, int buttonNumber,
+                          int clickCount, int x, int y, int absoluteX,
+                          int absoluteY) {
         final SunToolkit tk = (SunToolkit)Toolkit.getDefaultToolkit();
         if ((buttonNumber > 2 && !tk.areExtraMouseButtonsEnabled())
                 || buttonNumber > tk.getNumberOfButtons() - 1) {
             return;
         }
 
-        int jeventType = isNpapiCallback ? NSEvent.npEventTypeToJavaEventType(eventType) :
-                                           NSEvent.nsEventTypeToJavaEventType(eventType);
+        int jeventType = isNpapiCallback ? NSEvent.npToJavaEventType(eventType) :
+                                           NSEvent.nsToJavaEventType(eventType);
 
         int jbuttonNumber = MouseEvent.NOBUTTON;
         int jclickCount = 0;
@@ -69,11 +69,12 @@
             jeventType != MouseEvent.MOUSE_ENTERED &&
             jeventType != MouseEvent.MOUSE_EXITED)
         {
-            jbuttonNumber = NSEvent.nsButtonToJavaButton(buttonNumber);
+            jbuttonNumber = NSEvent.nsToJavaButton(buttonNumber);
             jclickCount = clickCount;
         }
 
-        int jmodifiers = NSEvent.nsMouseModifiersToJavaMouseModifiers(buttonNumber, modifierFlags);
+        int jmodifiers = NSEvent.nsToJavaMouseModifiers(buttonNumber,
+                                                        modifierFlags);
         boolean jpopupTrigger = NSEvent.isPopupTrigger(jmodifiers);
 
         peer.dispatchMouseEvent(jeventType, System.currentTimeMillis(), jbuttonNumber,
@@ -81,35 +82,48 @@
                                 jpopupTrigger, null);
     }
 
-    /*
+    /**
      * Handles scroll events.
      */
-    public void handleScrollEvent(int x, int y, int modifierFlags,
-                                  double deltaX, double deltaY)
-    {
-        int buttonNumber = CocoaConstants.kCGMouseButtonCenter;
-        int jmodifiers = NSEvent.nsMouseModifiersToJavaMouseModifiers(buttonNumber, modifierFlags);
-
-        double wheelDelta = deltaY;
+    void handleScrollEvent(final int x, final int y, final int modifierFlags,
+                           final double deltaX, final double deltaY) {
+        final int buttonNumber = CocoaConstants.kCGMouseButtonCenter;
+        int jmodifiers = NSEvent.nsToJavaMouseModifiers(buttonNumber,
+                                                        modifierFlags);
+        final boolean isShift = (jmodifiers & InputEvent.SHIFT_DOWN_MASK) != 0;
 
-        // Shirt+vertical wheel scroll produces horizontal scroll
-        if ((jmodifiers & InputEvent.SHIFT_DOWN_MASK) != 0) {
-            wheelDelta = deltaX;
+        // Vertical scroll.
+        if (!isShift && deltaY != 0.0) {
+            dispatchScrollEvent(x, y, jmodifiers, deltaY);
         }
-        // Wheel amount "oriented" inside out
-        wheelDelta = -wheelDelta;
-
-        peer.dispatchMouseWheelEvent(System.currentTimeMillis(), x, y, jmodifiers,
-                                     MouseWheelEvent.WHEEL_UNIT_SCROLL, 3, // WHEEL_SCROLL_AMOUNT
-                                     (int)wheelDelta, wheelDelta, null);
+        // Horizontal scroll or shirt+vertical scroll.
+        final double delta = isShift && deltaY != 0.0 ? deltaY : deltaX;
+        if (delta != 0.0) {
+            jmodifiers |= InputEvent.SHIFT_DOWN_MASK;
+            dispatchScrollEvent(x, y, jmodifiers, delta);
+        }
     }
 
-    /*
+    private void dispatchScrollEvent(final int x, final int y,
+                                     final int modifiers, final double delta) {
+        final long when = System.currentTimeMillis();
+        final int scrollType = MouseWheelEvent.WHEEL_UNIT_SCROLL;
+        final int scrollAmount = 1;
+        int wheelRotation = (int) delta;
+        int signum = (int) Math.signum(delta);
+        if (signum * delta < 1) {
+            wheelRotation = signum;
+        }
+        // invert the wheelRotation for the peer
+        peer.dispatchMouseWheelEvent(when, x, y, modifiers, scrollType,
+                                     scrollAmount, -wheelRotation, -delta, null);
+    }
+
+    /**
      * Handles key events.
      */
-    public void handleKeyEvent(int eventType, int modifierFlags, String chars,
-                               short keyCode)
-    {
+    void handleKeyEvent(int eventType, int modifierFlags, String chars,
+                        short keyCode) {
         boolean isFlagsChangedEvent =
             isNpapiCallback ? (eventType == CocoaConstants.NPCocoaEventFlagsChanged) :
                               (eventType == CocoaConstants.NSFlagsChanged);
@@ -139,22 +153,31 @@
             int[] in = new int[] {testChar, testDeadChar, modifierFlags, keyCode};
             int[] out = new int[2]; // [jkeyCode, jkeyLocation]
 
-            postsTyped = NSEvent.nsKeyInfoToJavaKeyInfo(in, out);
+            postsTyped = NSEvent.nsToJavaKeyInfo(in, out);
             if (!postsTyped) {
                 testChar = KeyEvent.CHAR_UNDEFINED;
             }
 
             jkeyCode = out[0];
             jkeyLocation = out[1];
-            jeventType = isNpapiCallback ? NSEvent.npEventTypeToJavaEventType(eventType) :
-                                           NSEvent.nsEventTypeToJavaEventType(eventType);
+            jeventType = isNpapiCallback ? NSEvent.npToJavaEventType(eventType) :
+                                           NSEvent.nsToJavaEventType(eventType);
         }
 
-        int jmodifiers = NSEvent.nsKeyModifiersToJavaKeyModifiers(modifierFlags);
+        char javaChar = NSEvent.nsToJavaChar(testChar, modifierFlags);
+        // Some keys may generate a KEY_TYPED, but we can't determine
+        // what that character is. That's likely a bug, but for now we
+        // just check for CHAR_UNDEFINED.
+        if (javaChar == KeyEvent.CHAR_UNDEFINED) {
+            postsTyped = false;
+        }
+
+
+        int jmodifiers = NSEvent.nsToJavaKeyModifiers(modifierFlags);
         long when = System.currentTimeMillis();
 
         peer.dispatchKeyEvent(jeventType, when, jmodifiers,
-                              jkeyCode, testChar, jkeyLocation);
+                              jkeyCode, javaChar, jkeyLocation);
 
         // That's the reaction on the PRESSED (not RELEASED) event as it comes to
         // appear in MacOSX.
@@ -164,7 +187,7 @@
         boolean isMetaDown = (jmodifiers & KeyEvent.META_DOWN_MASK) != 0;
         if (jeventType == KeyEvent.KEY_PRESSED && postsTyped && !isMetaDown) {
             peer.dispatchKeyEvent(KeyEvent.KEY_TYPED, when, jmodifiers,
-                                  KeyEvent.VK_UNDEFINED, testChar,
+                                  KeyEvent.VK_UNDEFINED, javaChar,
                                   KeyEvent.KEY_LOCATION_UNKNOWN);
         }
     }
--- a/src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java	Wed May 02 14:00:06 2012 +0100
+++ b/src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java	Wed May 02 15:06:35 2012 +0100
@@ -588,11 +588,19 @@
     @Override
     public void setResizable(boolean resizable) {
         setStyleBits(RESIZABLE, resizable);
+
+        // Re-apply the size constraints and the size to ensure the space
+        // occupied by the grow box is counted properly
+        setMinimumSize(1, 1); // the method ignores its arguments
+
+        Rectangle bounds = peer.getBounds();
+        setBounds(bounds.x, bounds.y, bounds.width, bounds.height);
     }
 
     @Override
     public void setMinimumSize(int width, int height) {
         //TODO width, height should be used
+        //NOTE: setResizable() calls setMinimumSize(1,1) relaying on the logic below
         final long nsWindowPtr = getNSWindowPtr();
         final Dimension min = target.getMinimumSize();
         final Dimension max = target.getMaximumSize();
--- a/src/macosx/classes/sun/lwawt/macosx/event/NSEvent.java	Wed May 02 14:00:06 2012 +0100
+++ b/src/macosx/classes/sun/lwawt/macosx/event/NSEvent.java	Wed May 02 15:06:35 2012 +0100
@@ -28,11 +28,10 @@
 import sun.lwawt.macosx.CocoaConstants;
 import java.awt.event.*;
 
-/*
- * A class representing Cocoa NSEvent class with
- * the fields only necessary for JDK functionality.
+/**
+ * A class representing Cocoa NSEvent class with the fields only necessary for
+ * JDK functionality.
  */
-
 public final class NSEvent {
     private int type;
     private int modifierFlags;
@@ -132,7 +131,7 @@
     /*
      * Converts an NSEvent button number to a MouseEvent constant.
      */
-    public static int nsButtonToJavaButton(int buttonNumber) {
+    public static int nsToJavaButton(int buttonNumber) {
         int jbuttonNumber = buttonNumber + 1;
         switch (buttonNumber) {
             case CocoaConstants.kCGMouseButtonLeft:
@@ -151,7 +150,7 @@
     /*
      * Converts NPCocoaEvent types to AWT event types.
      */
-    public static int npEventTypeToJavaEventType(int npEventType) {
+    public static int npToJavaEventType(int npEventType) {
         int jeventType = 0;
         switch (npEventType) {
             case CocoaConstants.NPCocoaEventMouseDown:
@@ -185,7 +184,7 @@
     /*
      * Converts NSEvent types to AWT event types.
      */
-    public static int nsEventTypeToJavaEventType(int nsEventType) {
+    public static int nsToJavaEventType(int nsEventType) {
         int jeventType = 0;
         switch (nsEventType) {
             case CocoaConstants.NSLeftMouseDown:
@@ -228,24 +227,30 @@
     /*
      * Converts NSEvent mouse modifiers to AWT mouse modifiers.
      */
-    public static native int nsMouseModifiersToJavaMouseModifiers(int buttonNumber,
-                                                                  int modifierFlags);
+    public static native int nsToJavaMouseModifiers(int buttonNumber,
+                                                    int modifierFlags);
 
     /*
      * Converts NSEvent key modifiers to AWT key modifiers.
      */
-    public static native int nsKeyModifiersToJavaKeyModifiers(int modifierFlags);
+    public static native int nsToJavaKeyModifiers(int modifierFlags);
 
     /*
      * Converts NSEvent key info to AWT key info.
      */
-    public static native boolean nsKeyInfoToJavaKeyInfo(int[] in, int[] out);
+    public static native boolean nsToJavaKeyInfo(int[] in, int[] out);
 
     /*
      * Converts NSEvent key modifiers to AWT key info.
      */
     public static native void nsKeyModifiersToJavaKeyInfo(int[] in, int[] out);
 
+    /*
+     * There is a small number of NS characters that need to be converted
+     * into other characters before we pass them to AWT.
+     */
+    public static native char nsToJavaChar(char nsChar, int modifierFlags);
+
     public static boolean isPopupTrigger(int jmodifiers) {
         final boolean isRightButtonDown = ((jmodifiers & InputEvent.BUTTON3_DOWN_MASK) != 0);
         final boolean isLeftButtonDown = ((jmodifiers & InputEvent.BUTTON1_DOWN_MASK) != 0);
--- a/src/macosx/native/apple/security/KeystoreImpl.m	Wed May 02 14:00:06 2012 +0100
+++ b/src/macosx/native/apple/security/KeystoreImpl.m	Wed May 02 15:06:35 2012 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * 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
@@ -337,7 +337,6 @@
             // Call back to the Java object to create Java objects corresponding to this security object.
             jlong nativeKeyRef = ptr_to_jlong(privateKeyRef);
             JNFCallVoidMethod(env, keyStore, jm_createKeyEntry, alias, creationDate, nativeKeyRef, certRefArray, javaCertArray);
-            break;
         }
     } while (searchResult == noErr);
 
--- a/src/macosx/native/com/sun/media/sound/PLATFORM_API_MacOSX_PCM.cpp	Wed May 02 14:00:06 2012 +0100
+++ b/src/macosx/native/com/sun/media/sound/PLATFORM_API_MacOSX_PCM.cpp	Wed May 02 15:06:35 2012 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 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
@@ -29,7 +29,9 @@
 
 #include <AudioUnit/AudioUnit.h>
 #include <CoreServices/CoreServices.h>
+#include <AudioToolbox/AudioConverter.h>
 #include <pthread.h>
+#include <math.h>
 /*
 #if !defined(__COREAUDIO_USE_FLAT_INCLUDES__)
 #include <CoreAudio/CoreAudioTypes.h>
@@ -49,14 +51,14 @@
 
 
 #ifdef USE_TRACE
-static void PrintStreamDesc(AudioStreamBasicDescription *inDesc) {
+static void PrintStreamDesc(const AudioStreamBasicDescription *inDesc) {
     TRACE4("ID='%c%c%c%c'", (char)(inDesc->mFormatID >> 24), (char)(inDesc->mFormatID >> 16), (char)(inDesc->mFormatID >> 8), (char)(inDesc->mFormatID));
     TRACE2(", %f Hz, flags=0x%lX", (float)inDesc->mSampleRate, (long unsigned)inDesc->mFormatFlags);
     TRACE2(", %ld channels, %ld bits", (long)inDesc->mChannelsPerFrame, (long)inDesc->mBitsPerChannel);
     TRACE1(", %ld bytes per frame\n", (long)inDesc->mBytesPerFrame);
 }
 #else
-static inline void PrintStreamDesc(AudioStreamBasicDescription *inDesc) { }
+static inline void PrintStreamDesc(const AudioStreamBasicDescription *inDesc) { }
 #endif
 
 
@@ -130,8 +132,8 @@
     float hardwareSampleRate = GetSampleRate(audioDeviceID, isSource);
     TRACE2("  DAUDIO_GetFormats: got %d channels, sampleRate == %f\n", totalChannels, hardwareSampleRate);
 
-    // target lines support only current sample rate!
-    float sampleRate = isSource ? -1 : hardwareSampleRate;
+    // any sample rates are supported
+    float sampleRate = -1;
 
     static int sampleBits[] = {8, 16, 24};
     static int sampleBitsCount = sizeof(sampleBits)/sizeof(sampleBits[0]);
@@ -402,6 +404,202 @@
 };
 
 
+class Resampler {
+private:
+    enum {
+        kResamplerEndOfInputData = 1 // error to interrupt conversion (end of input data)
+    };
+public:
+    Resampler() : converter(NULL), outBuffer(NULL) { }
+    ~Resampler() {
+        if (converter != NULL) {
+            AudioConverterDispose(converter);
+        }
+        if (outBuffer != NULL) {
+            free(outBuffer);
+        }
+    }
+
+    // inFormat & outFormat must be interleaved!
+    bool Init(const AudioStreamBasicDescription *inFormat, const AudioStreamBasicDescription *outFormat,
+            int inputBufferSizeInBytes)
+    {
+        TRACE0(">>Resampler::Init\n");
+        TRACE0("  inFormat: ");
+        PrintStreamDesc(inFormat);
+        TRACE0("  outFormat: ");
+        PrintStreamDesc(outFormat);
+        TRACE1("  inputBufferSize: %d bytes\n", inputBufferSizeInBytes);
+        OSStatus err;
+
+        if ((outFormat->mFormatFlags & kAudioFormatFlagIsNonInterleaved) != 0 && outFormat->mChannelsPerFrame != 1) {
+            ERROR0("Resampler::Init ERROR: outFormat is non-interleaved\n");
+            return false;
+        }
+        if ((inFormat->mFormatFlags & kAudioFormatFlagIsNonInterleaved) != 0 && inFormat->mChannelsPerFrame != 1) {
+            ERROR0("Resampler::Init ERROR: inFormat is non-interleaved\n");
+            return false;
+        }
+
+        memcpy(&asbdIn, inFormat, sizeof(AudioStreamBasicDescription));
+        memcpy(&asbdOut, outFormat, sizeof(AudioStreamBasicDescription));
+
+        err = AudioConverterNew(inFormat, outFormat, &converter);
+
+        if (err || converter == NULL) {
+            OS_ERROR1(err, "Resampler::Init (AudioConverterNew), converter=%p", converter);
+            return false;
+        }
+
+        // allocate buffer for output data
+        int maximumInFrames = inputBufferSizeInBytes / inFormat->mBytesPerFrame;
+        // take into account trailingFrames
+        AudioConverterPrimeInfo primeInfo = {0, 0};
+        UInt32 sizePrime = sizeof(primeInfo);
+        err = AudioConverterGetProperty(converter, kAudioConverterPrimeInfo, &sizePrime, &primeInfo);
+        if (err) {
+            OS_ERROR0(err, "Resampler::Init (get kAudioConverterPrimeInfo)");
+            // ignore the error
+        } else {
+            // the default primeMethod is kConverterPrimeMethod_Normal, so we need only trailingFrames
+            maximumInFrames += primeInfo.trailingFrames;
+        }
+        float outBufferSizeInFrames = (outFormat->mSampleRate / inFormat->mSampleRate) * ((float)maximumInFrames);
+        // to avoid complex calculation just set outBufferSize as double of the calculated value
+        outBufferSize = (int)outBufferSizeInFrames * outFormat->mBytesPerFrame * 2;
+        // safety check - consider 256 frame as the minimum input buffer
+        int minOutSize = 256 * outFormat->mBytesPerFrame;
+        if (outBufferSize < minOutSize) {
+            outBufferSize = minOutSize;
+        }
+
+        outBuffer = malloc(outBufferSize);
+
+        if (outBuffer == NULL) {
+            ERROR1("Resampler::Init ERROR: malloc failed (%d bytes)\n", outBufferSize);
+            AudioConverterDispose(converter);
+            converter = NULL;
+            return false;
+        }
+
+        TRACE1("  allocated: %d bytes for output buffer\n", outBufferSize);
+
+        TRACE0("<<Resampler::Init: OK\n");
+        return true;
+    }
+
+    // returns size of the internal output buffer
+    int GetOutBufferSize() {
+        return outBufferSize;
+    }
+
+    // process next part of data (writes resampled data to the ringBuffer without overflow check)
+    int Process(void *srcBuffer, int len, RingBuffer *ringBuffer) {
+        int bytesWritten = 0;
+        TRACE2(">>Resampler::Process: %d bytes, converter = %p\n", len, converter);
+        if (converter == NULL) {    // sanity check
+            bytesWritten = ringBuffer->Write(srcBuffer, len, false);
+        } else {
+            InputProcData data;
+            data.pThis = this;
+            data.data = (Byte *)srcBuffer;
+            data.dataSize = len;
+
+            OSStatus err;
+            do {
+                AudioBufferList abl;    // by default it contains 1 AudioBuffer
+                abl.mNumberBuffers = 1;
+                abl.mBuffers[0].mNumberChannels = asbdOut.mChannelsPerFrame;
+                abl.mBuffers[0].mDataByteSize   = outBufferSize;
+                abl.mBuffers[0].mData           = outBuffer;
+
+                UInt32 packets = (UInt32)outBufferSize / asbdOut.mBytesPerPacket;
+
+                TRACE2(">>AudioConverterFillComplexBuffer: request %d packets, provide %d bytes buffer\n",
+                    (int)packets, (int)abl.mBuffers[0].mDataByteSize);
+
+                err = AudioConverterFillComplexBuffer(converter, ConverterInputProc, &data, &packets, &abl, NULL);
+
+                TRACE2("<<AudioConverterFillComplexBuffer: got %d packets (%d bytes)\n",
+                    (int)packets, (int)abl.mBuffers[0].mDataByteSize);
+                if (packets > 0) {
+                    int bytesToWrite = (int)(packets * asbdOut.mBytesPerPacket);
+                    bytesWritten += ringBuffer->Write(abl.mBuffers[0].mData, bytesToWrite, false);
+                }
+
+                // if outputBuffer is small to store all available frames,
+                // we get noErr here. In the case just continue the conversion
+            } while (err == noErr);
+
+            if (err != kResamplerEndOfInputData) {
+                // unexpected error
+                OS_ERROR0(err, "Resampler::Process (AudioConverterFillComplexBuffer)");
+            }
+        }
+        TRACE2("<<Resampler::Process: written %d bytes (converted from %d bytes)\n", bytesWritten, len);
+
+        return bytesWritten;
+    }
+
+    // resets internal bufferes
+    void Discontinue() {
+        TRACE0(">>Resampler::Discontinue\n");
+        if (converter != NULL) {
+            AudioConverterReset(converter);
+        }
+        TRACE0("<<Resampler::Discontinue\n");
+    }
+
+private:
+    AudioConverterRef converter;
+
+    // buffer for output data
+    // note that there is no problem if the buffer is not big enough to store
+    // all converted data - it's only performance issue
+    void *outBuffer;
+    int outBufferSize;
+
+    AudioStreamBasicDescription asbdIn;
+    AudioStreamBasicDescription asbdOut;
+
+    struct InputProcData {
+        Resampler *pThis;
+        Byte *data;     // data == NULL means we handle Discontinue(false)
+        int dataSize;   // == 0 if all data was already provided to the converted of we handle Discontinue(false)
+    };
+
+    static OSStatus ConverterInputProc(AudioConverterRef inAudioConverter, UInt32 *ioNumberDataPackets,
+            AudioBufferList *ioData, AudioStreamPacketDescription **outDataPacketDescription, void *inUserData)
+    {
+        InputProcData *data = (InputProcData *)inUserData;
+
+        TRACE3("  >>ConverterInputProc: requested %d packets, data contains %d bytes (%d packets)\n",
+            (int)*ioNumberDataPackets, (int)data->dataSize, (int)(data->dataSize / data->pThis->asbdIn.mBytesPerPacket));
+        if (data->dataSize == 0) {
+            // already called & provided all input data
+            // interrupt conversion by returning error
+            *ioNumberDataPackets = 0;
+            TRACE0("  <<ConverterInputProc: returns kResamplerEndOfInputData\n");
+            return kResamplerEndOfInputData;
+        }
+
+        ioData->mNumberBuffers = 1;
+        ioData->mBuffers[0].mNumberChannels = data->pThis->asbdIn.mChannelsPerFrame;
+        ioData->mBuffers[0].mDataByteSize   = data->dataSize;
+        ioData->mBuffers[0].mData           = data->data;
+
+        *ioNumberDataPackets = data->dataSize / data->pThis->asbdIn.mBytesPerPacket;
+
+        // all data has been provided to the converter
+        data->dataSize = 0;
+
+        TRACE1("  <<ConverterInputProc: returns %d packets\n", (int)(*ioNumberDataPackets));
+        return noErr;
+    }
+
+};
+
+
 struct OSX_DirectAudioDevice {
     AudioUnit   audioUnit;
     RingBuffer  ringBuffer;
@@ -409,14 +607,21 @@
 
     // only for target lines
     UInt32      inputBufferSizeInBytes;
+    Resampler   *resampler;
+    // to detect discontinuity (to reset resampler)
+    SInt64      lastWrittenSampleTime;
 
-    OSX_DirectAudioDevice() : audioUnit(NULL), asbd() {
+
+    OSX_DirectAudioDevice() : audioUnit(NULL), asbd(), resampler(NULL), lastWrittenSampleTime(0) {
     }
 
     ~OSX_DirectAudioDevice() {
         if (audioUnit) {
             CloseComponent(audioUnit);
         }
+        if (resampler) {
+            delete resampler;
+        }
     }
 };
 
@@ -426,15 +631,15 @@
     AudioUnit unit;
     UInt32 size;
 
-        ComponentDescription desc;
-        desc.componentType         = kAudioUnitType_Output;
-        desc.componentSubType      = (deviceID == 0 && isSource) ? kAudioUnitSubType_DefaultOutput : kAudioUnitSubType_HALOutput;
-        desc.componentManufacturer = kAudioUnitManufacturer_Apple;
-        desc.componentFlags        = 0;
-        desc.componentFlagsMask    = 0;
+    ComponentDescription desc;
+    desc.componentType         = kAudioUnitType_Output;
+    desc.componentSubType      = (deviceID == 0 && isSource) ? kAudioUnitSubType_DefaultOutput : kAudioUnitSubType_HALOutput;
+    desc.componentManufacturer = kAudioUnitManufacturer_Apple;
+    desc.componentFlags        = 0;
+    desc.componentFlagsMask    = 0;
 
     Component comp = FindNextComponent(NULL, &desc);
-        err = OpenAComponent(comp, &unit);
+    err = OpenAComponent(comp, &unit);
 
     if (err) {
         OS_ERROR0(err, "CreateOutputUnit:OpenAComponent");
@@ -538,19 +743,54 @@
     abl.mBuffers[0].mDataByteSize   = device->inputBufferSizeInBytes;   // assume this is == (inNumberFrames * device->asbd.mBytesPerFrame)
     abl.mBuffers[0].mData           = NULL;     // request for the audioUnit's buffer
 
-    // TODO: is it possible device->inputBufferSizeInBytes != inNumberFrames * device->asbd.mBytesPerFrame??
-
     OSStatus err = AudioUnitRender(device->audioUnit, ioActionFlags, inTimeStamp, inBusNumber, inNumberFrames, &abl);
     if (err) {
         OS_ERROR0(err, "<<InputCallback: AudioUnitRender");
     } else {
-        int bytesWritten = device->ringBuffer.Write(abl.mBuffers[0].mData, (int)abl.mBuffers[0].mDataByteSize, false);
-        TRACE2("<<InputCallback (saved %d bytes of %d)\n", bytesWritten, (int)abl.mBuffers[0].mDataByteSize);
+        if (device->resampler != NULL) {
+            // test for discontinuity
+            // AUHAL starts timestamps at zero, so test if the current timestamp less then the last written
+            SInt64 sampleTime = inTimeStamp->mSampleTime;
+            if (sampleTime < device->lastWrittenSampleTime) {
+                // discontinuity, reset the resampler
+                TRACE2("  InputCallback (RESAMPLED), DISCONTINUITY (%f -> %f)\n",
+                    (float)device->lastWrittenSampleTime, (float)sampleTime);
+
+                device->resampler->Discontinue();
+            } else {
+                TRACE2("  InputCallback (RESAMPLED), continuous: lastWrittenSampleTime = %f, sampleTime=%f\n",
+                    (float)device->lastWrittenSampleTime, (float)sampleTime);
+            }
+            device->lastWrittenSampleTime = sampleTime + inNumberFrames;
+
+            int bytesWritten = device->resampler->Process(abl.mBuffers[0].mData, (int)abl.mBuffers[0].mDataByteSize, &device->ringBuffer);
+            TRACE2("<<InputCallback (RESAMPLED, saved %d bytes of %d)\n", bytesWritten, (int)abl.mBuffers[0].mDataByteSize);
+        } else {
+            int bytesWritten = device->ringBuffer.Write(abl.mBuffers[0].mData, (int)abl.mBuffers[0].mDataByteSize, false);
+            TRACE2("<<InputCallback (saved %d bytes of %d)\n", bytesWritten, (int)abl.mBuffers[0].mDataByteSize);
+        }
     }
 
     return noErr;
 }
 
+
+static void FillASBDForNonInterleavedPCM(AudioStreamBasicDescription& asbd,
+    float sampleRate, int channels, int sampleSizeInBits, bool isFloat, int isSigned, bool isBigEndian)
+{
+    // FillOutASBDForLPCM cannot produce unsigned integer format
+    asbd.mSampleRate = sampleRate;
+    asbd.mFormatID = kAudioFormatLinearPCM;
+    asbd.mFormatFlags = (isFloat ? kAudioFormatFlagIsFloat : (isSigned ? kAudioFormatFlagIsSignedInteger : 0))
+        | (isBigEndian ? (kAudioFormatFlagIsBigEndian) : 0)
+        | kAudioFormatFlagIsPacked;
+    asbd.mBytesPerPacket = channels * ((sampleSizeInBits + 7) / 8);
+    asbd.mFramesPerPacket = 1;
+    asbd.mBytesPerFrame = asbd.mBytesPerPacket;
+    asbd.mChannelsPerFrame = channels;
+    asbd.mBitsPerChannel = sampleSizeInBits;
+}
+
 void* DAUDIO_Open(INT32 mixerIndex, INT32 deviceID, int isSource,
                   int encoding, float sampleRate, int sampleSizeInBits,
                   int frameSize, int channels,
@@ -580,9 +820,6 @@
         return NULL;
     }
 
-    // TODO: for target lines we should ensure that sampleRate == current device sample rate
-    // (othewise we get error -10863 (kAudioUnitErr_CannotDoInCurrentContext in AUComponent.h) from AudioUnitRender(in InputCallback))
-
     OSX_DirectAudioDevice *device = new OSX_DirectAudioDevice();
 
     AudioUnitScope scope = isSource ? kAudioUnitScope_Input : kAudioUnitScope_Output;
@@ -597,10 +834,24 @@
         return NULL;
     }
 
-    FillOutASBDForLPCM(device->asbd, sampleRate, channels, sampleSizeInBits, sampleSizeInBits, 0, isBigEndian);
-    // Workaround for FillOutASBDForLPCM - it always set kAudioFormatFlagIsSignedInteger for non-float formats
-    if (!isSigned) {
-        device->asbd.mFormatFlags &= ~(UInt32)kAudioFormatFlagIsSignedInteger;
+    if (!isSource) {
+        AudioDeviceID actualDeviceID = deviceID != 0 ? deviceID : GetDefaultDevice(isSource);
+        float hardwareSampleRate = GetSampleRate(actualDeviceID, isSource);
+        TRACE2("--DAUDIO_Open: sampleRate = %f, hardwareSampleRate=%f\n", sampleRate, hardwareSampleRate);
+
+        if (fabs(sampleRate - hardwareSampleRate) > 1) {
+            device->resampler = new Resampler();
+
+            // request HAL for Float32 with native endianess
+            FillASBDForNonInterleavedPCM(device->asbd, hardwareSampleRate, channels, 32, true, false, kAudioFormatFlagsNativeEndian != 0);
+        } else {
+            sampleRate = hardwareSampleRate;    // in case sample rates are not exactly equal
+        }
+    }
+
+    if (device->resampler == NULL) {
+        // no resampling, request HAL for the requested format
+        FillASBDForNonInterleavedPCM(device->asbd, sampleRate, channels, sampleSizeInBits, false, isSigned, isBigEndian);
     }
 
     err = AudioUnitSetProperty(device->audioUnit, kAudioUnitProperty_StreamFormat, scope, element, &device->asbd, sizeof(device->asbd));
@@ -633,7 +884,7 @@
     }
 
     if (!isSource) {
-        // for target lines we need extra bytes in the buffer
+        // for target lines we need extra bytes in the ringBuffer
         // to prevent collisions when InputCallback overrides data on overflow
         UInt32 size;
         OSStatus err;
@@ -646,10 +897,25 @@
             delete device;
             return NULL;
         }
-        device->inputBufferSizeInBytes *= device->asbd.mBytesPerFrame;  // convert frames by bytes
+        device->inputBufferSizeInBytes *= device->asbd.mBytesPerFrame;  // convert frames to bytes
         extraBufferBytes = (int)device->inputBufferSizeInBytes;
     }
 
+    if (device->resampler != NULL) {
+        // resampler output format is a user requested format (== ringBuffer format)
+        AudioStreamBasicDescription asbdOut; // ringBuffer format
+        FillASBDForNonInterleavedPCM(asbdOut, sampleRate, channels, sampleSizeInBits, false, isSigned, isBigEndian);
+
+        // set resampler input buffer size to the HAL buffer size
+        if (!device->resampler->Init(&device->asbd, &asbdOut, (int)device->inputBufferSizeInBytes)) {
+            ERROR0("<<DAUDIO_Open: resampler.Init() FAILED.\n");
+            delete device;
+            return NULL;
+        }
+        // extra bytes in the ringBuffer (extraBufferBytes) should be equal resampler output buffer size
+        extraBufferBytes = device->resampler->GetOutBufferSize();
+    }
+
     if (!device->ringBuffer.Allocate(bufferSizeInBytes, extraBufferBytes)) {
         ERROR0("<<DAUDIO_Open: Ring buffer allocation error\n");
         delete device;
--- a/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/JObjCRuntime.java	Wed May 02 14:00:06 2012 +0100
+++ b/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/JObjCRuntime.java	Wed May 02 15:06:35 2012 +0100
@@ -45,6 +45,7 @@
         if("ppc".equals(arch)) return Arch.ppc;
         if("i386".equals(arch)) return Arch.i386;
         if("x86_64".equals(arch)) return Arch.x86_64;
+        if("amd64".equals(arch)) return Arch.x86_64;
         if("universal".equals(arch)) return Arch.x86_64;
         throw new RuntimeException("Did not recognize os.arch system property: '" + arch + "'");
     }
--- a/src/macosx/native/sun/awt/AWTEvent.m	Wed May 02 14:00:06 2012 +0100
+++ b/src/macosx/native/sun/awt/AWTEvent.m	Wed May 02 15:06:35 2012 +0100
@@ -308,6 +308,9 @@
  * Almost all unicode characters just go from NS to Java with no translation.
  *  For the few exceptions, we handle it here with this small table.
  */
+#define ALL_NS_KEY_MODIFIERS_MASK \
+    (NSShiftKeyMask | NSControlKeyMask | NSAlternateKeyMask | NSCommandKeyMask)
+
 static struct _char {
     NSUInteger modifier;
     unichar nsChar;
@@ -315,17 +318,17 @@
 }
 const charTable[] = {
     // map enter on keypad to same as return key
-    {0,              NSEnterCharacter,          NSNewlineCharacter},
+    {0,                         NSEnterCharacter,          NSNewlineCharacter},
 
     // [3134616] return newline instead of carriage return
-    {0,              NSCarriageReturnCharacter, NSNewlineCharacter},
+    {0,                         NSCarriageReturnCharacter, NSNewlineCharacter},
 
     // "delete" means backspace in Java
-    {0,              NSDeleteCharacter,         NSBackspaceCharacter},
-    {0,              NSDeleteFunctionKey,     NSDeleteCharacter},
+    {ALL_NS_KEY_MODIFIERS_MASK, NSDeleteCharacter,         NSBackspaceCharacter},
+    {ALL_NS_KEY_MODIFIERS_MASK, NSDeleteFunctionKey,       NSDeleteCharacter},
 
     // back-tab is only differentiated from tab by Shift flag
-    {NSShiftKeyMask, NSBackTabCharacter,     NSTabCharacter},
+    {NSShiftKeyMask,            NSBackTabCharacter,        NSTabCharacter},
 
     {0, 0, 0}
 };
@@ -334,12 +337,8 @@
 NsCharToJavaChar(unichar nsChar, NSUInteger modifiers)
 {
     const struct _char *cur;
-    NSUInteger keyModifierFlags =
-        NSShiftKeyMask | NSControlKeyMask |
-        NSAlternateKeyMask | NSCommandKeyMask;
-
     // Mask off just the keyboard modifiers from the event modifier mask.
-    NSUInteger testableFlags = (modifiers & keyModifierFlags);
+    NSUInteger testableFlags = (modifiers & ALL_NS_KEY_MODIFIERS_MASK);
 
     // walk through table & find the match
     for (cur = charTable; cur->nsChar != 0 ; cur++) {
@@ -954,11 +953,11 @@
 
 /*
  * Class:     sun_lwawt_macosx_event_NSEvent
- * Method:    nsMouseModifiersToJavaMouseModifiers
+ * Method:    nsToJavaMouseModifiers
  * Signature: (II)I
  */
 JNIEXPORT jint JNICALL
-Java_sun_lwawt_macosx_event_NSEvent_nsMouseModifiersToJavaMouseModifiers
+Java_sun_lwawt_macosx_event_NSEvent_nsToJavaMouseModifiers
 (JNIEnv *env, jclass cls, jint buttonNumber, jint modifierFlags)
 {
     jint jmodifiers = 0;
@@ -974,11 +973,11 @@
 
 /*
  * Class:     sun_lwawt_macosx_event_NSEvent
- * Method:    nsKeyModifiersToJavaKeyModifiers
+ * Method:    nsToJavaKeyModifiers
  * Signature: (I)I
  */
 JNIEXPORT jint JNICALL
-Java_sun_lwawt_macosx_event_NSEvent_nsKeyModifiersToJavaKeyModifiers
+Java_sun_lwawt_macosx_event_NSEvent_nsToJavaKeyModifiers
 (JNIEnv *env, jclass cls, jint modifierFlags)
 {
     jint jmodifiers = 0;
@@ -994,11 +993,11 @@
 
 /*
  * Class:     sun_lwawt_macosx_event_NSEvent
- * Method:    nsKeyInfoToJavaKeyInfo
+ * Method:    nsToJavaKeyInfo
  * Signature: ([I[I)Z
  */
 JNIEXPORT jboolean JNICALL
-Java_sun_lwawt_macosx_event_NSEvent_nsKeyInfoToJavaKeyInfo
+Java_sun_lwawt_macosx_event_NSEvent_nsToJavaKeyInfo
 (JNIEnv *env, jclass cls, jintArray inData, jintArray outData)
 {
     BOOL postsTyped = NO;
@@ -1069,3 +1068,23 @@
     
 JNF_COCOA_EXIT(env);
 }
+
+/*
+ * Class:     sun_lwawt_macosx_event_NSEvent
+ * Method:    nsToJavaChar
+ * Signature: (CI)C
+ */
+JNIEXPORT jint JNICALL
+Java_sun_lwawt_macosx_event_NSEvent_nsToJavaChar
+(JNIEnv *env, jclass cls, char nsChar, jint modifierFlags)
+{
+    jchar javaChar = 0;
+    
+JNF_COCOA_ENTER(env);
+    
+    javaChar = NsCharToJavaChar(nsChar, modifierFlags);
+
+JNF_COCOA_EXIT(env);
+    
+    return javaChar;
+}
--- a/src/macosx/native/sun/awt/AWTView.m	Wed May 02 14:00:06 2012 +0100
+++ b/src/macosx/native/sun/awt/AWTView.m	Wed May 02 15:06:35 2012 +0100
@@ -48,7 +48,6 @@
 //#define IM_DEBUG TRUE
 //#define EXTRA_DEBUG
 
-
 static BOOL shouldUsePressAndHold() {
     static int shouldUsePressAndHold = -1;
     if (shouldUsePressAndHold != -1) return shouldUsePressAndHold;
@@ -373,6 +372,13 @@
 }
 
 -(void) deliverJavaKeyEventHelper: (NSEvent *) event {
+    static id sUnretainedLastKeyEvent = nil;    
+    if (event == sUnretainedLastKeyEvent) {
+        // The event is repeatedly delivered by keyDown: after performKeyEquivalent:
+        return;
+    }
+    sUnretainedLastKeyEvent = event;	
+	
     [AWTToolkit eventCountPlusPlus];
     JNIEnv *env = [ThreadUtilities getJNIEnv];
 
--- a/src/macosx/native/sun/awt/AWTWindow.m	Wed May 02 14:00:06 2012 +0100
+++ b/src/macosx/native/sun/awt/AWTWindow.m	Wed May 02 15:06:35 2012 +0100
@@ -40,6 +40,7 @@
 #import "ThreadUtilities.h"
 #import "OSVersion.h"
 
+static const float GROW_BOX_SIZE = 12.f;
 
 #define MASK(KEY) \
     (sun_lwawt_macosx_CPlatformWindow_ ## KEY)
@@ -50,7 +51,6 @@
 #define SET(BITS, KEY, VALUE) \
     BITS = VALUE ? BITS | MASK(KEY) : BITS & ~MASK(KEY)
 
-
 static JNF_CLASS_CACHE(jc_CPlatformWindow, "sun/lwawt/macosx/CPlatformWindow");
 
 @interface JavaResizeGrowBoxOverlayWindow : NSWindow { }
@@ -158,13 +158,13 @@
 }
 
 - (NSImage *) createGrowBoxImage {
-    NSImage *image = [[NSImage alloc] initWithSize:NSMakeSize(12, 12)];
+    NSImage *image = [[NSImage alloc] initWithSize:NSMakeSize(GROW_BOX_SIZE, GROW_BOX_SIZE)];
     JRSUIControlRef growBoxWidget = JRSUIControlCreate(FALSE);
     JRSUIControlSetWidget(growBoxWidget, kJRSUI_Widget_growBoxTextured);
     JRSUIControlSetWindowType(growBoxWidget, kJRSUI_WindowType_utility);
     JRSUIRendererRef renderer = JRSUIRendererCreate();
     [image lockFocus]; // sets current graphics context to that of the image
-    JRSUIControlDraw(renderer, growBoxWidget, [[NSGraphicsContext currentContext] graphicsPort], CGRectMake(0, 1, 11, 11));
+    JRSUIControlDraw(renderer, growBoxWidget, [[NSGraphicsContext currentContext] graphicsPort], CGRectMake(0, 1, GROW_BOX_SIZE - 1, GROW_BOX_SIZE - 1));
     [image unlockFocus];
     JRSUIRendererRelease(renderer);
     JRSUIControlRelease(growBoxWidget);
@@ -547,6 +547,36 @@
         }
         [super sendEvent:event];
 }
+
+- (void)constrainSize:(NSSize*)size {
+    float minWidth = 0.f, minHeight = 0.f;
+
+    if (IS(self.styleBits, DECORATED)) {
+        NSRect frame = [self frame];
+        NSRect contentRect = [NSWindow contentRectForFrameRect:frame styleMask:[self styleMask]];
+
+        float top = frame.size.height - contentRect.size.height;
+        float left = contentRect.origin.x - frame.origin.x;
+        float bottom = contentRect.origin.y - frame.origin.y;
+        float right = frame.size.width - (contentRect.size.width + left);
+
+        // Speculative estimation: 80 - enough for window decorations controls
+        minWidth += left + right + 80;
+        minHeight += top + bottom;
+    }
+
+    if ([self shouldShowGrowBox]) {
+        minWidth = MAX(minWidth, GROW_BOX_SIZE);
+        minHeight += GROW_BOX_SIZE;
+    }
+
+    minWidth = MAX(1.f, minWidth);
+    minHeight = MAX(1.f, minHeight);
+
+    size->width = MAX(size->width, minWidth);
+    size->height = MAX(size->height, minHeight);
+}
+
 @end // AWTWindow
 
 
@@ -702,6 +732,8 @@
         AWT_ASSERT_APPKIT_THREAD;
 
         NSRect rect = ConvertNSScreenRect(NULL, jrect);
+        [window constrainSize:&rect.size];
+
         [window setFrame:rect display:YES];
 
         // only start tracking events if pointer is above the toplevel
@@ -733,13 +765,16 @@
     if (maxW < 1) maxW = 1;
     if (maxH < 1) maxH = 1;
 
-    NSSize min = { minW, minH };
-    NSSize max = { maxW, maxH };
-
     AWTWindow *window = OBJC(windowPtr);
     [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){
         AWT_ASSERT_APPKIT_THREAD;
 
+        NSSize min = { minW, minH };
+        NSSize max = { maxW, maxH };
+
+        [window constrainSize:&min];
+        [window constrainSize:&max];
+
         window.javaMinSize = min;
         window.javaMaxSize = max;
         [window updateMinMaxSize:IS(window.styleBits, RESIZABLE)];
--- a/src/macosx/native/sun/awt/CFileDialog.h	Wed May 02 14:00:06 2012 +0100
+++ b/src/macosx/native/sun/awt/CFileDialog.h	Wed May 02 15:06:35 2012 +0100
@@ -46,11 +46,14 @@
     // File dialog's mode
     jint fMode;
 
+    // Indicates whether the user can select multiple files
+    BOOL fMultipleMode;
+
     // Should we navigate into apps?
     BOOL fNavigateApps;
 
-    // panel's filename
-    NSString *fReturnedFilename;
+    // Contains the absolute paths of the selected files as URLs
+    NSArray *fURLs;
 }
 
 // Allocator
@@ -60,6 +63,7 @@
             directory:(NSString *)inPath
                  file:(NSString *)inFile
                  mode:(jint)inMode
+         multipleMode:(BOOL)inMultipleMode
        shouldNavigate:(BOOL)inNavigateApps
               withEnv:(JNIEnv*)env;
 
@@ -69,7 +73,7 @@
 // Get dialog return value
 - (BOOL) userClickedOK;
 
-// Filename user chose
-- (NSString *) filename;
+// Returns the absolute paths of the selected files as URLs
+- (NSArray *) URLs;
 
 @end
--- a/src/macosx/native/sun/awt/CFileDialog.m	Wed May 02 14:00:06 2012 +0100
+++ b/src/macosx/native/sun/awt/CFileDialog.m	Wed May 02 15:06:35 2012 +0100
@@ -41,6 +41,7 @@
            directory:(NSString *)inPath
                 file:(NSString *)inFile
                 mode:(jint)inMode
+        multipleMode:(BOOL)inMultipleMode
       shouldNavigate:(BOOL)inNavigateApps
              withEnv:(JNIEnv*)env;
 {
@@ -54,6 +55,7 @@
         fTitle = inTitle;
         [fTitle retain];
         fMode = inMode;
+        fMultipleMode = inMultipleMode;
         fNavigateApps = inNavigateApps;
         fPanelResult = NSCancelButton;
     }
@@ -79,8 +81,8 @@
     [fTitle release];
     fTitle = nil;
 
-    [fReturnedFilename release];
-    fReturnedFilename = nil;
+    [fURLs release];
+    fURLs = nil;
 
     [super dealloc];
 }
@@ -105,7 +107,7 @@
 
         if (fMode == java_awt_FileDialog_LOAD) {
             NSOpenPanel *openPanel = (NSOpenPanel *)thePanel;
-            [openPanel setAllowsMultipleSelection:NO];
+            [openPanel setAllowsMultipleSelection:fMultipleMode];
             [openPanel setCanChooseFiles:YES];
             [openPanel setCanChooseDirectories:NO];
             [openPanel setCanCreateDirectories:YES];
@@ -114,8 +116,14 @@
         [thePanel setDelegate:self];
         fPanelResult = [thePanel runModalForDirectory:fDirectory file:fFile];
         [thePanel setDelegate:nil];
-        fReturnedFilename = [thePanel filename];
-        [fReturnedFilename retain];
+
+        if (fMode == java_awt_FileDialog_LOAD) {
+            NSOpenPanel *openPanel = (NSOpenPanel *)thePanel;
+            fURLs = [openPanel URLs];
+        } else {
+            fURLs = [NSArray arrayWithObject:[thePanel URL]];
+        }
+        [fURLs retain];
     }
 
     [self disposer];
@@ -158,8 +166,8 @@
     return fPanelResult == NSOKButton;
 }
 
-- (NSString *)filename {
-    return [[fReturnedFilename retain] autorelease];
+- (NSArray *)URLs {
+    return [[fURLs retain] autorelease];
 }
 @end
 
@@ -167,13 +175,14 @@
  * Class:     sun_lwawt_macosx_CFileDialog
  * Method:    nativeRunFileDialog
  * Signature: (Ljava/lang/String;ILjava/io/FilenameFilter;
- *             Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+ *             Ljava/lang/String;Ljava/lang/String;)[Ljava/lang/String;
  */
-JNIEXPORT jstring JNICALL
+JNIEXPORT jobjectArray JNICALL
 Java_sun_lwawt_macosx_CFileDialog_nativeRunFileDialog
-(JNIEnv *env, jobject peer, jstring title, jint mode, jboolean navigateApps, jboolean hasFilter, jstring directory, jstring file)
+(JNIEnv *env, jobject peer, jstring title, jint mode, jboolean multipleMode,
+ jboolean navigateApps, jboolean hasFilter, jstring directory, jstring file)
 {
-    jstring returnValue = NULL;
+    jobjectArray returnValue = NULL;
 
 JNF_COCOA_ENTER(env);
     NSString *dialogTitle = JNFJavaToNSString(env, title);
@@ -187,6 +196,7 @@
                                                             directory:JNFJavaToNSString(env, directory)
                                                                  file:JNFJavaToNSString(env, file)
                                                                  mode:mode
+                                                         multipleMode:multipleMode
                                                        shouldNavigate:navigateApps
                                                               withEnv:env];
 
@@ -196,8 +206,19 @@
                       waitUntilDone:YES];
 
     if ([dialogDelegate userClickedOK]) {
-        NSString *filename = [dialogDelegate filename];
-        returnValue = JNFNSToJavaString(env, filename);
+        NSArray *urls = [dialogDelegate URLs];
+        jsize count = [urls count];
+
+        jclass stringClass = (*env)->FindClass(env, "java/lang/String");
+        returnValue = (*env)->NewObjectArray(env, count, stringClass, NULL);
+        (*env)->DeleteLocalRef(env, stringClass);
+
+        NSUInteger i;
+        for (i = 0; i < count; i++) {
+            jstring filename = JNFNSToJavaString(env, [[urls objectAtIndex:i] absoluteString]);
+            (*env)->SetObjectArrayElement(env, returnValue, i, filename);
+            (*env)->DeleteLocalRef(env, filename);
+        }
     }
 
     [dialogDelegate release];
--- a/src/macosx/native/sun/awt/splashscreen/splashscreen_sys.m	Wed May 02 14:00:06 2012 +0100
+++ b/src/macosx/native/sun/awt/splashscreen/splashscreen_sys.m	Wed May 02 15:06:35 2012 +0100
@@ -45,10 +45,14 @@
 #include <dlfcn.h>
 
 
+static NSScreen* SplashNSScreen()
+{
+    return [[NSScreen screens] objectAtIndex: 0];
+}
+
 static void SplashCenter(Splash * splash)
 {
-    // otherwise could use screens[0] to select the menu-bar screen
-    NSRect screenFrame = [[NSScreen mainScreen] visibleFrame];
+    NSRect screenFrame = [SplashNSScreen() frame];
 
     splash->x = (screenFrame.size.width - splash->width) / 2;
     splash->y = (screenFrame.size.height - splash->height) / 2 + screenFrame.origin.y;
@@ -337,7 +341,8 @@
             initWithContentRect: NSMakeRect(splash->x, splash->y, splash->width, splash->height)
                       styleMask: NSBorderlessWindowMask
                         backing: NSBackingStoreBuffered
-                          defer: NO];
+                          defer: NO
+                         screen: SplashNSScreen()];
 
         [splash->window setOpaque: NO];
         [splash->window setBackgroundColor: [NSColor clearColor]];
--- a/src/share/classes/com/sun/crypto/provider/PBEKey.java	Wed May 02 14:00:06 2012 +0100
+++ b/src/share/classes/com/sun/crypto/provider/PBEKey.java	Wed May 02 15:06:35 2012 +0100
@@ -56,9 +56,12 @@
             // Should allow an empty password.
             passwd = new char[0];
         }
-        for (int i=0; i<passwd.length; i++) {
-            if ((passwd[i] < '\u0020') || (passwd[i] > '\u007E')) {
-                throw new InvalidKeySpecException("Password is not ASCII");
+        // Accept "\0" to signify "zero-length password with no terminator".
+        if (!(passwd.length == 1 && passwd[0] == 0)) {
+            for (int i=0; i<passwd.length; i++) {
+                if ((passwd[i] < '\u0020') || (passwd[i] > '\u007E')) {
+                    throw new InvalidKeySpecException("Password is not ASCII");
+                }
             }
         }
         this.key = new byte[passwd.length];
--- a/src/share/classes/com/sun/crypto/provider/PKCS12PBECipherCore.java	Wed May 02 14:00:06 2012 +0100
+++ b/src/share/classes/com/sun/crypto/provider/PKCS12PBECipherCore.java	Wed May 02 15:06:35 2012 +0100
@@ -60,11 +60,16 @@
 
     static byte[] derive(char[] chars, byte[] salt,
                          int ic, int n, int type) {
-        // Add in trailing NULL terminator.
+        // Add in trailing NULL terminator.  Special case:
+        // no terminator if password is "\0".
         int length = chars.length*2;
-        if (length != 0) {
+        if (length == 2 && chars[0] == 0) {
+            chars = new char[0];
+            length = 0;
+        } else {
             length += 2;
         }
+
         byte[] passwd = new byte[length];
         for (int i = 0, j = 0; i < chars.length; i++, j+=2) {
             passwd[j] = (byte) ((chars[i] >>> 8) & 0xFF);
@@ -133,6 +138,9 @@
     }
 
     private static void concat(byte[] src, byte[] dst, int start, int len) {
+        if (src.length == 0) {
+            return;
+        }
         int loop = len / src.length;
         int off, i;
         for (i = 0, off = 0; i < loop; i++, off += src.length)
--- a/src/share/classes/com/sun/management/DiagnosticCommandArgumentInfo.java	Wed May 02 14:00:06 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,151 +0,0 @@
-/*
- * Copyright (c) 2011, 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 com.sun.management;
-
-import java.beans.ConstructorProperties;
-
-/**
- * Diagnostic Command Argument information. It contains the description
- * of one parameter of the diagnostic command. A parameter can either be an
- * option or an argument. Options are identified by the option name while
- * arguments are identified by their position in the command line. The generic
- * syntax of a diagnostic command is:
- *  <blockquote>
- *    &lt;command name&gt; [&lt;option&gt;=&lt;value&gt;] [&lt;argument_value&gt;]
- * </blockquote>
- * Example:
- * <blockquote>
- * command_name option1=value1 option2=value argumentA argumentB argumentC
- * </blockquote>
- * In this command line, the diagnostic command receives five parameters, two
- * options named {@code option1} and {@code option2}, and three arguments.
- * argumentA's position is 0, argumentB's position is 1 and argumentC's
- * position is 2.
- *
- * @author  Frederic Parain
- * @since   7u4
- */
-
-public class DiagnosticCommandArgumentInfo {
-    private final String name;
-    private final String description;
-    private final String type;
-    private final String defaultValue;
-    private final boolean mandatory;
-    private final boolean option;
-    private final int position;
-
-    /**
-     * Returns the argument name
-     *
-     * @return the argument name
-     */
-    public String getName() {
-        return name;
-    }
-
-   /**
-     * Returns the argument description
-     *
-     * @return the argument description
-     */
-    public String getDescription() {
-        return description;
-    }
-
-    /**
-     * Returns the argument type
-     *
-     * @return the argument type
-     */
-    public String getType() {
-        return type;
-    }
-
-    /**
-     * Returns the default value as a String if a default value
-     * is defined, null otherwise.
-     *
-     * @return the default value as a String if a default value
-     * is defined, null otherwise.
-     */
-    public String getDefault() {
-        return defaultValue;
-    }
-
-    /**
-     * Returns {@code true} if the argument is mandatory,
-     *         {@code false} otherwise
-     *
-     * @return {@code true} if the argument is mandatory,
-     *         {@code false} otherwise
-     */
-    public boolean isMandatory() {
-        return mandatory;
-    }
-
-    /**
-     * Returns {@code true} if the argument is an option,
-     *         {@code false} otherwise. Options have to be specified using the
-     *         &lt;key&gt;=&lt;value&gt; syntax on the command line, while other
-     *         arguments are specified with a single &lt;value&gt; field and are
-     *         identified by their position on command line.
-     *
-     * @return {@code true} if the argument is an option,
-     *         {@code false} otherwise
-     */
-    public boolean isOption() {
-        return option;
-    }
-
-    /**
-     * Returns the expected position of this argument if it is not an option,
-     *         -1 otherwise. Argument position if defined from left to right,
-     *         starting at zero and ignoring the diagnostic command name and
-     *         options.
-     *
-     * @return the expected position of this argument if it is not an option,
-     *         -1 otherwise.
-     */
-    public int getPosition() {
-        return position;
-    }
-
-    @ConstructorProperties({"name","description","type","default",
-                "mandatory","option","position"})
-    public DiagnosticCommandArgumentInfo(String name, String description,
-                                         String type, String defaultValue,
-                                         boolean mandatory, boolean option,
-                                         int position) {
-        this.name = name;
-        this.description = description;
-        this.type = type;
-        this.defaultValue = defaultValue;
-        this.mandatory = mandatory;
-        this.option = option;
-        this.position = position;
-    }
-}
--- a/src/share/classes/com/sun/management/DiagnosticCommandInfo.java	Wed May 02 14:00:06 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,110 +0,0 @@
-/*
- * Copyright (c) 2011, 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 com.sun.management;
-
-import java.beans.ConstructorProperties;
-import java.util.List;
-
-/**
- * Diagnostic command information. It contains the description of a
- * diagnostic command.
- *
- * @author  Frederic Parain
- * @since   7u4
- */
-
-public class DiagnosticCommandInfo {
-    private final String name;
-    private final String description;
-    private final String impact;
-    private final boolean enabled;
-    private final List<DiagnosticCommandArgumentInfo> arguments;
-
-    /**
-     * Returns the diagnostic command name
-     *
-     * @return the diagnostic command name
-     */
-    public String getName() {
-        return name;
-    }
-
-   /**
-     * Returns the diagnostic command description
-     *
-     * @return the diagnostic command description
-     */
-    public String getDescription() {
-        return description;
-    }
-
-     /**
-     * Returns the potential impact of the diagnostic command execution
-     *         on the Java virtual machine behavior
-     *
-     * @return the potential impact of the diagnostic command execution
-     *         on the Java virtual machine behavior
-     */
-    public String getImpact() {
-        return impact;
-    }
-
-    /**
-     * Returns {@code true} if the diagnostic command is enabled,
-     *         {@code false} otherwise. The enabled/disabled
-     *         status of a diagnostic command can evolve during
-     *         the lifetime of the Java virtual machine.
-     *
-     * @return {@code true} if the diagnostic command is enabled,
-     *         {@code false} otherwise
-     */
-    public boolean isEnabled() {
-        return enabled;
-    }
-
-    /**
-     * Returns the list of the diagnostic command arguments description.
-     * If the diagnostic command has no arguments, it returns an empty list.
-     *
-     * @return a list of the diagnostic command arguments description
-     */
-    public List<DiagnosticCommandArgumentInfo> getArgumentsInfo() {
-        return arguments;
-    }
-
-    @ConstructorProperties({"name", "description","impact","enabled",
-                "argumentsInfo"})
-    public DiagnosticCommandInfo(String name, String description,
-                                 String impact, boolean enabled,
-                                 List<DiagnosticCommandArgumentInfo> arguments)
-    {
-        this.name = name;
-        this.description = description;
-        this.impact = impact;
-        this.enabled = enabled;
-        this.arguments = arguments;
-    }
-}
--- a/src/share/classes/com/sun/management/HotSpotDiagnosticMXBean.java	Wed May 02 14:00:06 2012 +0100
+++ b/src/share/classes/com/sun/management/HotSpotDiagnosticMXBean.java	Wed May 02 15:06:35 2012 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 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
@@ -31,11 +31,6 @@
 /**
  * Diagnostic management interface for the HotSpot Virtual Machine.
  *
- * <p>{@linkplain #getDiagnosticCommands Diagnostic commands}
- * are actions that can be invoked dynamically and
- * executed in a target Java virtual machine, mainly for troubleshooting
- * and diagnosis.
- *
  * <p>The diagnostic MBean is registered to the platform MBeanServer
  * as are other platform MBeans.
  *
@@ -116,108 +111,4 @@
      *     ManagementPermission("control").
      */
     public void setVMOption(String name, String value);
-
-    /**
-     * Returns the {@linkplain DiagnosticCommandInfo#getName() names}
-     * of all diagnostic commands.
-     * A diagnostic command is an action that can be invoked dynamically
-     * mainly for troubleshooting and diagnosis.  The list of diagnostic
-     * commands may change at runtime.  A diagnostic command may be
-     * {@linkplain DiagnosticCommandInfo#isEnabled disabled} but will
-     * not be removed from a previously returned list.
-     *
-     * @return the names of all diagnostic commands.
-     *
-     * @since 7u4
-     */
-    public List<String> getDiagnosticCommands();
-
-    /**
-     * Returns a {@code DiagnosticCommandInfo} object describing the
-     * diagnostic command of the specified name {@code command}
-     *
-     * @param command a diagnostic command name
-     * @return a {@code DiagnosticCommandInfo} object
-     * @throws java.lang.IllegalArgumentException if the {@code command}
-     *         doesn't match any diagnostic command registered in the
-     *         targeted Java virtual machine.
-     *
-     * @since 7u4
-     */
-    public DiagnosticCommandInfo getDiagnosticCommandInfo(String command);
-
-    /**
-     * Returns a list of {@code DiagnosticCommandInfo} object describing
-     * all diagnostic commands available on the targeted Java virtual machine
-     *
-     * @return a list of {@code DiagnosticCommandInfo} objects
-     *
-     * @since 7u4
-     */
-    public List<DiagnosticCommandInfo> getDiagnosticCommandInfo();
-
-    /**
-     * Returns a list of {@code DiagnosticCommandInfo} object describing
-     * all diagnostic commands specified in the {@code commands} list.
-     *
-     * @param commands {@code List} of {@code String} containing diagnostic
-     *        command names
-     * @return a {@code List} of {@code DiagnosticCommandInfo} objects
-     *
-     * @throws java.lang.IllegalArgumentException if at least one
-     *         command specified in the {@code commands } list
-     *         doesn't match any diagnostic command registered in the
-     *         targeted Java virtual machine.
-     *
-     * @since 7u4
-     */
-    public List<DiagnosticCommandInfo> getDiagnosticCommandInfo(List<String> commands);
-
-    /**
-     * Executes the command line {@code commandLine}. The command line must
-     * start with a diagnostic command name, optionally followed by parameters.
-     * Each command has its own syntax but the generic syntax for a diagnostic
-     * command line is:
-     * <blockquote>
-     *    &lt;command name&gt; [&lt;option&gt;=&lt;value&gt;] [&lt;argument_value&gt;]
-     * </blockquote>
-     *
-     * @param commandLine command line to execute
-     * @return a {@code String} object containing the diagnostic command
-     *         output.
-     *
-     * @throws java.lang.IllegalArgumentException if the command line doesn't
-     *         match any diagnostic command registered in the virtual machine
-     *         of if the parameters don't match the diagnostic command syntax.
-     * @throws java.lang.SecurityException
-     *         if a security manager exists and the caller does not have
-     *         ManagementPermission("control").
-     *
-     * @since 7u4
-     */
-    public String execute(String commandLine);
-
-    /**
-     * Invokes the diagnostic command named {@code cmd} with the parameters
-     * specified in {@code args}. Each command has its own syntax but
-     * the generic syntax for parameters is:
-     * <blockquote>
-     *    [&lt;option&gt;=&lt;value&gt;] [&lt;argument_value&gt;]
-     * </blockquote>
-     *
-     * @param cmd a diagnostic command name
-     * @param args the command parameters
-     * @return a {@code String} object containing the diagnostic command
-     *         output.
-     *
-     * @throws java.lang.IllegalArgumentException if the command line doesn't
-     *         match any diagnostic command registered in the virtual machine
-     *         of if the parameters don't match the diagnostic command syntax.
-     * @throws java.lang.SecurityException
-     *         if a security manager exists and the caller does not have
-     *         ManagementPermission("control").
-     *
-     * @since 7u4
-     */
-    public String execute(String cmd, String... args);
 }
--- a/src/share/classes/java/awt/FileDialog.java	Wed May 02 14:00:06 2012 +0100
+++ b/src/share/classes/java/awt/FileDialog.java	Wed May 02 15:06:35 2012 +0100
@@ -147,8 +147,8 @@
     static {
         AWTAccessor.setFileDialogAccessor(
             new AWTAccessor.FileDialogAccessor() {
-                public void setFiles(FileDialog fileDialog, String directory, String files[]) {
-                    fileDialog.setFiles(directory, files);
+                public void setFiles(FileDialog fileDialog, File files[]) {
+                    fileDialog.setFiles(files);
                 }
                 public void setFile(FileDialog fileDialog, String file) {
                     fileDialog.file = ("".equals(file)) ? null : file;
@@ -446,13 +446,9 @@
      * @see #getFiles
      * @since 1.7
      */
-    private void setFiles(String directory, String files[]) {
+    private void setFiles(File files[]) {
         synchronized (getObjectLock()) {
-            int filesNumber = (files != null) ? files.length : 0;
-            this.files = new File[filesNumber];
-            for (int i = 0; i < filesNumber; i++) {
-                this.files[i] = new File(directory, files[i]);
-            }
+            this.files = files;
         }
     }
 
--- a/src/share/classes/java/util/concurrent/ScheduledThreadPoolExecutor.java	Wed May 02 14:00:06 2012 +0100
+++ b/src/share/classes/java/util/concurrent/ScheduledThreadPoolExecutor.java	Wed May 02 15:06:35 2012 +0100
@@ -330,7 +330,7 @@
                 remove(task))
                 task.cancel(false);
             else
-                prestartCoreThread();
+                ensurePrestart();
         }
     }
 
@@ -346,7 +346,7 @@
             if (!canRunInCurrentRunState(true) && remove(task))
                 task.cancel(false);
             else
-                prestartCoreThread();
+                ensurePrestart();
         }
     }
 
--- a/src/share/classes/java/util/concurrent/ThreadPoolExecutor.java	Wed May 02 14:00:06 2012 +0100
+++ b/src/share/classes/java/util/concurrent/ThreadPoolExecutor.java	Wed May 02 15:06:35 2012 +0100
@@ -1546,6 +1546,18 @@
     }
 
     /**
+     * Same as prestartCoreThread except arranges that at least one
+     * thread is started even if corePoolSize is 0.
+     */
+    void ensurePrestart() {
+        int wc = workerCountOf(ctl.get());
+        if (wc < corePoolSize)
+            addWorker(null, true);
+        else if (wc == 0)
+            addWorker(null, false);
+    }
+
+    /**
      * Starts all core threads, causing them to idly wait for work. This
      * overrides the default policy of starting core threads only when
      * new tasks are executed.
--- a/src/share/classes/javax/crypto/CipherSpi.java	Wed May 02 14:00:06 2012 +0100
+++ b/src/share/classes/javax/crypto/CipherSpi.java	Wed May 02 15:06:35 2012 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 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
@@ -775,7 +775,7 @@
             int outOfs = output.arrayOffset() + outPos;
             byte[] inArray = new byte[getTempArraySize(inLen)];
             int total = 0;
-            while (inLen > 0) {
+            do {
                 int chunk = Math.min(inLen, inArray.length);
                 input.get(inArray, 0, chunk);
                 int n;
@@ -787,7 +787,7 @@
                 total += n;
                 outOfs += n;
                 inLen -= chunk;
-            }
+            } while (inLen > 0);
             output.position(outPos + total);
             return total;
         } else { // output is not backed by an accessible byte[]
@@ -804,7 +804,7 @@
             int outSize = outArray.length;
             int total = 0;
             boolean resized = false;
-            while (inLen > 0) {
+            do {
                 int chunk = Math.min(inLen, outSize);
                 if ((a1 == false) && (resized == false)) {
                     input.get(inArray, 0, chunk);
@@ -834,7 +834,7 @@
                     int newOut = engineGetOutputSize(chunk);
                     outArray = new byte[newOut];
                 }
-            }
+            } while (inLen > 0);
             input.position(inLimit);
             return total;
         }
--- a/src/share/classes/javax/net/ssl/ExtendedSSLSession.java	Wed May 02 14:00:06 2012 +0100
+++ b/src/share/classes/javax/net/ssl/ExtendedSSLSession.java	Wed May 02 15:06:35 2012 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 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
@@ -43,7 +43,7 @@
      * The signature algorithm name must be a standard Java Security
      * name (such as "SHA1withRSA", "SHA256withECDSA", and so on).
      * See Appendix A in the <a href=
-     * "../../../technotes/guides/security/crypto/CryptoSpec.html#AppA">
+     * "{@docRoot}/../technotes/guides/security/crypto/CryptoSpec.html#AppA">
      * Java Cryptography Architecture API Specification &amp; Reference </a>
      * for information about standard algorithm names.
      * <p>
@@ -71,7 +71,7 @@
      * The signature algorithm name must be a standard Java Security
      * name (such as "SHA1withRSA", "SHA256withECDSA", and so on).
      * See Appendix A in the <a href=
-     * "../../../technotes/guides/security/crypto/CryptoSpec.html#AppA">
+     * "{@docRoot}/../technotes/guides/security/crypto/CryptoSpec.html#AppA">
      * Java Cryptography Architecture API Specification &amp; Reference </a>
      * for information about standard algorithm names.
      *
--- a/src/share/classes/javax/net/ssl/SSLParameters.java	Wed May 02 14:00:06 2012 +0100
+++ b/src/share/classes/javax/net/ssl/SSLParameters.java	Wed May 02 15:06:35 2012 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 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
@@ -242,7 +242,7 @@
      *
      * @param algorithm The standard string name of the endpoint
      *     identification algorithm (or null).  See Appendix A in the <a href=
-     *     "../../../technotes/guides/security/crypto/CryptoSpec.html#AppA">
+     *   "{@docRoot}/../technotes/guides/security/crypto/CryptoSpec.html#AppA">
      *     Java Cryptography Architecture API Specification &amp; Reference </a>
      *     for information about standard algorithm names.
      *
--- a/src/share/classes/javax/swing/JOptionPane.java	Wed May 02 14:00:06 2012 +0100
+++ b/src/share/classes/javax/swing/JOptionPane.java	Wed May 02 15:06:35 2012 +0100
@@ -34,7 +34,6 @@
 import java.awt.Frame;
 import java.awt.Point;
 import java.awt.HeadlessException;
-import java.awt.Toolkit;
 import java.awt.Window;
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
@@ -994,8 +993,7 @@
                 // if the user closed the window without selecting a button
                 // (newValue = null in that case).  Otherwise, close the dialog.
                 if (dialog.isVisible() && event.getSource() == JOptionPane.this &&
-                        (event.getPropertyName().equals(VALUE_PROPERTY) ||
-                                event.getPropertyName().equals(INPUT_VALUE_PROPERTY)) &&
+                        (event.getPropertyName().equals(VALUE_PROPERTY)) &&
                         event.getNewValue() != null &&
                         event.getNewValue() != JOptionPane.UNINITIALIZED_VALUE) {
                     dialog.setVisible(false);
--- a/src/share/classes/javax/swing/plaf/basic/BasicOptionPaneUI.java	Wed May 02 14:00:06 2012 +0100
+++ b/src/share/classes/javax/swing/plaf/basic/BasicOptionPaneUI.java	Wed May 02 15:06:35 2012 +0100
@@ -1236,6 +1236,7 @@
                 int       index = list.locationToIndex(e.getPoint());
 
                 optionPane.setInputValue(list.getModel().getElementAt(index));
+                optionPane.setValue(JOptionPane.OK_OPTION);
             }
         }
 
--- a/src/share/classes/javax/swing/plaf/synth/SynthTreeUI.java	Wed May 02 14:00:06 2012 +0100
+++ b/src/share/classes/javax/swing/plaf/synth/SynthTreeUI.java	Wed May 02 15:06:35 2012 +0100
@@ -434,6 +434,8 @@
 
         // Empty out the renderer pane, allowing renderers to be gc'ed.
         rendererPane.removeAll();
+
+        paintContext = null;
     }
 
     private void configureRenderer(SynthContext context) {
--- a/src/share/classes/sun/awt/AWTAccessor.java	Wed May 02 14:00:06 2012 +0100
+++ b/src/share/classes/sun/awt/AWTAccessor.java	Wed May 02 15:06:35 2012 +0100
@@ -37,6 +37,8 @@
 import java.security.AccessController;
 import java.security.AccessControlContext;
 
+import java.io.File;
+
 /**
  * The AWTAccessor utility class.
  * The main purpose of this class is to enable accessing
@@ -458,7 +460,7 @@
         /*
          * Sets the files the user selects
          */
-        void setFiles(FileDialog fileDialog, String directory, String files[]);
+        void setFiles(FileDialog fileDialog, File files[]);
 
         /*
          * Sets the file the user selects
--- a/src/share/classes/sun/java2d/SunGraphics2D.java	Wed May 02 14:00:06 2012 +0100
+++ b/src/share/classes/sun/java2d/SunGraphics2D.java	Wed May 02 15:06:35 2012 +0100
@@ -1815,7 +1815,12 @@
             width += x;
             height += y;
         }
-        if (!getCompClip().intersectsQuickCheckXYXY(x, y, width, height)) {
+
+        try {
+            if (!getCompClip().intersectsQuickCheckXYXY(x, y, width, height)) {
+                return false;
+            }
+        } catch (InvalidPipeException e) {
             return false;
         }
         // REMIND: We could go one step further here and examine the
@@ -1999,8 +2004,8 @@
         try {
             doCopyArea(x, y, w, h, dx, dy);
         } catch (InvalidPipeException e) {
-            revalidateAll();
             try {
+                revalidateAll();
                 doCopyArea(x, y, w, h, dx, dy);
             } catch (InvalidPipeException e2) {
                 // Still catching the exception; we are not yet ready to
@@ -2131,8 +2136,8 @@
         try {
             drawpipe.drawLine(this, x1, y1, x2, y2);
         } catch (InvalidPipeException e) {
-            revalidateAll();
             try {
+                revalidateAll();
                 drawpipe.drawLine(this, x1, y1, x2, y2);
             } catch (InvalidPipeException e2) {
                 // Still catching the exception; we are not yet ready to
@@ -2148,8 +2153,8 @@
         try {
             drawpipe.drawRoundRect(this, x, y, w, h, arcW, arcH);
         } catch (InvalidPipeException e) {
-            revalidateAll();
             try {
+                revalidateAll();
                 drawpipe.drawRoundRect(this, x, y, w, h, arcW, arcH);
             } catch (InvalidPipeException e2) {
                 // Still catching the exception; we are not yet ready to
@@ -2165,8 +2170,8 @@
         try {
             fillpipe.fillRoundRect(this, x, y, w, h, arcW, arcH);
         } catch (InvalidPipeException e) {
-            revalidateAll();
             try {
+                revalidateAll();
                 fillpipe.fillRoundRect(this, x, y, w, h, arcW, arcH);
             } catch (InvalidPipeException e2) {
                 // Still catching the exception; we are not yet ready to
@@ -2182,8 +2187,8 @@
         try {
             drawpipe.drawOval(this, x, y, w, h);
         } catch (InvalidPipeException e) {
-            revalidateAll();
             try {
+                revalidateAll();
                 drawpipe.drawOval(this, x, y, w, h);
             } catch (InvalidPipeException e2) {
                 // Still catching the exception; we are not yet ready to
@@ -2199,8 +2204,8 @@
         try {
             fillpipe.fillOval(this, x, y, w, h);
         } catch (InvalidPipeException e) {
-            revalidateAll();
             try {
+                revalidateAll();
                 fillpipe.fillOval(this, x, y, w, h);
             } catch (InvalidPipeException e2) {
                 // Still catching the exception; we are not yet ready to
@@ -2217,8 +2222,8 @@
         try {
             drawpipe.drawArc(this, x, y, w, h, startAngl, arcAngl);
         } catch (InvalidPipeException e) {
-            revalidateAll();
             try {
+                revalidateAll();
                 drawpipe.drawArc(this, x, y, w, h, startAngl, arcAngl);
             } catch (InvalidPipeException e2) {
                 // Still catching the exception; we are not yet ready to
@@ -2235,8 +2240,8 @@
         try {
             fillpipe.fillArc(this, x, y, w, h, startAngl, arcAngl);
         } catch (InvalidPipeException e) {
-            revalidateAll();
             try {
+                revalidateAll();
                 fillpipe.fillArc(this, x, y, w, h, startAngl, arcAngl);
             } catch (InvalidPipeException e2) {
                 // Still catching the exception; we are not yet ready to
@@ -2252,8 +2257,8 @@
         try {
             drawpipe.drawPolyline(this, xPoints, yPoints, nPoints);
         } catch (InvalidPipeException e) {
-            revalidateAll();
             try {
+                revalidateAll();
                 drawpipe.drawPolyline(this, xPoints, yPoints, nPoints);
             } catch (InvalidPipeException e2) {
                 // Still catching the exception; we are not yet ready to
@@ -2269,8 +2274,8 @@
         try {
             drawpipe.drawPolygon(this, xPoints, yPoints, nPoints);
         } catch (InvalidPipeException e) {
-            revalidateAll();
             try {
+                revalidateAll();
                 drawpipe.drawPolygon(this, xPoints, yPoints, nPoints);
             } catch (InvalidPipeException e2) {
                 // Still catching the exception; we are not yet ready to
@@ -2286,8 +2291,8 @@
         try {
             fillpipe.fillPolygon(this, xPoints, yPoints, nPoints);
         } catch (InvalidPipeException e) {
-            revalidateAll();
             try {
+                revalidateAll();
                 fillpipe.fillPolygon(this, xPoints, yPoints, nPoints);
             } catch (InvalidPipeException e2) {
                 // Still catching the exception; we are not yet ready to
@@ -2303,8 +2308,8 @@
         try {
             drawpipe.drawRect(this, x, y, w, h);
         } catch (InvalidPipeException e) {
-            revalidateAll();
             try {
+                revalidateAll();
                 drawpipe.drawRect(this, x, y, w, h);
             } catch (InvalidPipeException e2) {
                 // Still catching the exception; we are not yet ready to
@@ -2320,8 +2325,8 @@
         try {
             fillpipe.fillRect(this, x, y, w, h);
         } catch (InvalidPipeException e) {
-            revalidateAll();
             try {
+                revalidateAll();
                 fillpipe.fillRect(this, x, y, w, h);
             } catch (InvalidPipeException e2) {
                 // Still catching the exception; we are not yet ready to
@@ -2369,7 +2374,6 @@
         Paint p = paint;
         setComposite(AlphaComposite.Src);
         setColor(getBackground());
-        validatePipe();
         fillRect(x, y, w, h);
         setPaint(p);
         setComposite(c);
@@ -2393,8 +2397,8 @@
         try {
             shapepipe.draw(this, s);
         } catch (InvalidPipeException e) {
-            revalidateAll();
             try {
+                revalidateAll();
                 shapepipe.draw(this, s);
             } catch (InvalidPipeException e2) {
                 // Still catching the exception; we are not yet ready to
@@ -2423,8 +2427,8 @@
         try {
             shapepipe.fill(this, s);
         } catch (InvalidPipeException e) {
-            revalidateAll();
             try {
+                revalidateAll();
                 shapepipe.fill(this, s);
             } catch (InvalidPipeException e2) {
                 // Still catching the exception; we are not yet ready to
@@ -2571,10 +2575,17 @@
         // Include padding for interpolation/antialiasing if necessary
         int pad = isIntegerTranslate ? 0 : 3;
 
+        Region clip;
+        try {
+            clip = getCompClip();
+        } catch (InvalidPipeException e) {
+            return;
+        }
+
         // Determine the region of the image that may contribute to
         // the clipped drawing area
         Rectangle region = getImageRegion(img,
-                                          getCompClip(),
+                                          clip,
                                           transform,
                                           xform,
                                           pad, pad);
@@ -2817,8 +2828,8 @@
         try {
             textpipe.drawString(this, str, x, y);
         } catch (InvalidPipeException e) {
-            revalidateAll();
             try {
+                revalidateAll();
                 textpipe.drawString(this, str, x, y);
             } catch (InvalidPipeException e2) {
                 // Still catching the exception; we are not yet ready to
@@ -2846,8 +2857,8 @@
         try {
             textpipe.drawString(this, str, x, y);
         } catch (InvalidPipeException e) {
-            revalidateAll();
             try {
+                revalidateAll();
                 textpipe.drawString(this, str, x, y);
             } catch (InvalidPipeException e2) {
                 // Still catching the exception; we are not yet ready to
@@ -2892,8 +2903,8 @@
         try {
             textpipe.drawGlyphVector(this, gv, x, y);
         } catch (InvalidPipeException e) {
-            revalidateAll();
             try {
+                revalidateAll();
                 textpipe.drawGlyphVector(this, gv, x, y);
             } catch (InvalidPipeException e2) {
                 // Still catching the exception; we are not yet ready to
@@ -2925,8 +2936,8 @@
         try {
             textpipe.drawChars(this, data, offset, length, x, y);
         } catch (InvalidPipeException e) {
-            revalidateAll();
             try {
+                revalidateAll();
                 textpipe.drawChars(this, data, offset, length, x, y);
             } catch (InvalidPipeException e2) {
                 // Still catching the exception; we are not yet ready to
@@ -2962,8 +2973,8 @@
         try {
             textpipe.drawChars(this, chData, 0, length, x, y);
         } catch (InvalidPipeException e) {
-            revalidateAll();
             try {
+                revalidateAll();
                 textpipe.drawChars(this, chData, 0, length, x, y);
             } catch (InvalidPipeException e2) {
                 // Still catching the exception; we are not yet ready to
@@ -2999,8 +3010,8 @@
             return imagepipe.copyImage(this, img, dx, dy, sx, sy,
                                        width, height, bgcolor, observer);
         } catch (InvalidPipeException e) {
-            revalidateAll();
             try {
+                revalidateAll();
                 return imagepipe.copyImage(this, img, dx, dy, sx, sy,
                                            width, height, bgcolor, observer);
             } catch (InvalidPipeException e2) {
@@ -3036,8 +3047,8 @@
             return imagepipe.scaleImage(this, img, x, y, width, height,
                                         bg, observer);
         } catch (InvalidPipeException e) {
-            revalidateAll();
             try {
+                revalidateAll();
                 return imagepipe.scaleImage(this, img, x, y, width, height,
                                             bg, observer);
             } catch (InvalidPipeException e2) {
@@ -3072,8 +3083,8 @@
         try {
             return imagepipe.copyImage(this, img, x, y, bg, observer);
         } catch (InvalidPipeException e) {
-            revalidateAll();
             try {
+                revalidateAll();
                 return imagepipe.copyImage(this, img, x, y, bg, observer);
             } catch (InvalidPipeException e2) {
                 // Still catching the exception; we are not yet ready to
@@ -3149,8 +3160,8 @@
                                           sx1, sy1, sx2, sy2, bgcolor,
                                           observer);
         } catch (InvalidPipeException e) {
-            revalidateAll();
             try {
+                revalidateAll();
                 return imagepipe.scaleImage(this, img, dx1, dy1, dx2, dy2,
                                               sx1, sy1, sx2, sy2, bgcolor,
                                               observer);
@@ -3198,8 +3209,8 @@
         try {
             return imagepipe.transformImage(this, img, xform, observer);
         } catch (InvalidPipeException e) {
-            revalidateAll();
             try {
+                revalidateAll();
                 return imagepipe.transformImage(this, img, xform, observer);
             } catch (InvalidPipeException e2) {
                 // Still catching the exception; we are not yet ready to
@@ -3224,8 +3235,8 @@
         try {
             imagepipe.transformImage(this, bImg, op, x, y);
         } catch (InvalidPipeException e) {
-            revalidateAll();
             try {
+                revalidateAll();
                 imagepipe.transformImage(this, bImg, op, x, y);
             } catch (InvalidPipeException e2) {
                 // Still catching the exception; we are not yet ready to
--- a/src/share/classes/sun/java2d/opengl/OGLRenderQueue.java	Wed May 02 14:00:06 2012 +0100
+++ b/src/share/classes/sun/java2d/opengl/OGLRenderQueue.java	Wed May 02 15:06:35 2012 +0100
@@ -28,6 +28,8 @@
 import sun.java2d.pipe.RenderBuffer;
 import sun.java2d.pipe.RenderQueue;
 import static sun.java2d.pipe.BufferedOpCodes.*;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
 
 /**
  * OGL-specific implementation of RenderQueue.  This class provides a
@@ -41,7 +43,19 @@
     private final QueueFlusher flusher;
 
     private OGLRenderQueue() {
-        flusher = new QueueFlusher();
+        /*
+         * The thread must be a member of a thread group
+         * which will not get GCed before VM exit.
+         */
+        flusher = AccessController.doPrivileged(new PrivilegedAction<QueueFlusher>() {
+            public QueueFlusher run() {
+                ThreadGroup rootThreadGroup = Thread.currentThread().getThreadGroup();
+                while (rootThreadGroup.getParent() != null) {
+                    rootThreadGroup = rootThreadGroup.getParent();
+                }
+                return new QueueFlusher(rootThreadGroup);
+            }
+        });
     }
 
     /**
@@ -149,8 +163,8 @@
         private Runnable task;
         private Error error;
 
-        public QueueFlusher() {
-            super("Java2D Queue Flusher");
+        public QueueFlusher(ThreadGroup threadGroup) {
+            super(threadGroup, "Java2D Queue Flusher");
             setDaemon(true);
             setPriority(Thread.MAX_PRIORITY);
             start();
--- a/src/share/classes/sun/launcher/resources/launcher_de.properties	Wed May 02 14:00:06 2012 +0100
+++ b/src/share/classes/sun/launcher/resources/launcher_de.properties	Wed May 02 15:06:35 2012 +0100
@@ -34,11 +34,14 @@
 java.launcher.ergo.message2  =\                  weil die Ausf\u00FChrung auf einem Server-Class-Rechner erfolgt.\n
 
 # Translators please note do not translate the options themselves
-java.launcher.opt.footer     =\    -cp <Class-Suchpfad von Verzeichnissen und ZIP-/JAR-Dateien>\n\    -classpath <Class-Suchpfad von Verzeichnissen und ZIP-/JAR-Dateien>\n\                  Eine durch {0} getrennte Liste mit Verzeichnissen, JAR-Archiven\n\                  und ZIP-Archiven zur Suche nach Klassendateien.\n\    -D<name>=<value>\n\                  Setzt eine Systemeigenschaft\n\    -verbose[:class|gc|jni]\n\                  Aktiviert die Verbose-Ausgabe\n\    -version      Druckt Produktversion und beendet das Programm\n\    -version:<value>\n\                  Erfordert die angegebene Version zur Ausf\u00FChrung\n\    -showversion  Druckt Produktversion und f\u00E4hrt fort\n\    -jre-restrict-search | -no-jre-restrict-search\n\                  Bezieht private JREs des Benutzers in Versionssuche ein bzw. schlie\u00DFt sie aus\n\    -? -help      Druckt diese Hilfemeldung\n\    -X            Druckt Hilfe zu Nicht-Standardoptionen\n\    -ea[:<packagename>...|:<classname>]\n\    -enableassertions[:<packagename>...|:<classname>]\n\                  Aktiviert Assertionen mit angegebener Granularit\u00E4t\n\    -da[:<packagename>...|:<classname>]\n\    -disableassertions[:<packagename>...|:<classname>]\n\                  Deaktiviert Assertionen mit angegebener Granularit\u00E4t\n\    -esa | -enablesystemassertions\n\                  Aktiviert Systemassertionen\n\    -dsa | -disablesystemassertions\n\                  Deaktiviert Systemassertionen\n\    -agentlib:<libname>[=<options>]\n\                  L\u00E4dt native Agent Library <libname>, z.B. -agentlib:hprof\n\                  siehe auch, -agentlib:jdwp=help und -agentlib:hprof=help\n\    -agentpath:<pathname>[=<options>]\n\                  L\u00E4dt native Agent Library nach vollem Pfadnamen\n\    -javaagent:<jarpath>[=<options>]\n\                  L\u00E4dt Java-Programmiersprachen-Agent, siehe java.lang.instrument\n\    -splash:<imagepath>\n\                  Zeigt Startbildschirm mit angegebenem Bild\nWeitere Einzelheiten finden Sie unter http://java.sun.com/javase/reference.
+java.launcher.opt.footer     =\    -cp <Class-Suchpfad von Verzeichnissen und .zip-/.jar-Dateien>\n\\    -classpath <Class-Suchpfad von Verzeichnissen und .zip-/.jar-Dateien>\n\\                  Eine durch {0} getrennte Liste mit Verzeichnissen, .jar-Archiven\n\\                  und .zip-Archiven zur Suche nach Klassendateien.\n\\    -D<name>=<value>\n\\                  Setzt eine Systemeigenschaft\n\\    -verbose[:class|gc|jni]\n\\                  Aktiviert die Verbose-Ausgabe\n\\    -version      Druckt Produktversion und beendet das Programm\n\\    -version:<value>\n\\                  Erfordert die angegebene Version zur Ausf\u00FChrung\n\\    -showversion  Druckt Produktversion und f\u00E4hrt fort\n\\    -jre-restrict-search | -no-jre-restrict-search\n\\                  Bezieht private JREs des Benutzers in Versionssuche ein bzw. schlie\u00DFt sie aus\n\\    -? -help      Druckt diese Hilfemeldung\n\\    -X            Druckt Hilfe zu Nicht-Standardoptionen\n\\    -ea[:<packagename>...|:<classname>]\n\\    -enableassertions[:<packagename>...|:<classname>]\n\\                  Aktiviert Assertionen mit angegebener Granularit\u00E4t\n\\    -da[:<packagename>...|:<classname>]\n\\    -disableassertions[:<packagename>...|:<classname>]\n\\                  Deaktiviert Assertionen mit angegebener Granularit\u00E4t\n\\    -esa | -enablesystemassertions\n\\                  Aktiviert Systemassertionen\n\\    -dsa | -disablesystemassertions\n\\                  Deaktiviert Systemassertionen\n\\    -agentlib:<libname>[=<options>]\n\\                  L\u00E4dt native Agent Library <libname>, z.B. -agentlib:hprof\n\\                  siehe auch, -agentlib:jdwp=help und -agentlib:hprof=help\n\\    -agentpath:<pathname>[=<options>]\n\\                  L\u00E4dt native Agent Library nach vollem Pfadnamen\n\\    -javaagent:<jarpath>[=<options>]\n\\                  L\u00E4dt Java-Programmiersprachen-Agent, siehe java.lang.instrument\n\\    -splash:<imagepath>\n\\                  Zeigt Startbildschirm mit angegebenem Bild\nWeitere Einzelheiten finden Sie unter http://www.oracle.com/technetwork/java/javase/documentation/index.html.
 
 # Translators please note do not translate the options themselves
 java.launcher.X.usage=\    -Xmixed           Ausf\u00FChrung im gemischten Modus (Standard)\n\    -Xint             Nur Ausf\u00FChrung im interpretierten Modus\n\    -Xbootclasspath:<Verzeichnisse und ZIP-/JAR-Dateien durch {0} getrennt>\n\                      Legt Suchpfad f\u00FCr Bootstrap-Klassen und Ressourcen fest\n\    -Xbootclasspath/a:<Verzeichnisse und ZIP-/JAR-Dateien durch {0} getrennt>\n\                      H\u00E4ngt an das Ende des Bootstrap Classpath an\n\    -Xbootclasspath/p:<Verzeichnisse und ZIP-/JAR-Dateien durch {0} getrennt>\n\                      Stellt Bootstrap Classpath voran\n\    -Xdiag            Zeigt zus\u00E4tzliche Diagnosemeldungen an\n\    -Xnoclassgc       Deaktiviert Klassen-Garbage Collection\n\    -Xincgc           Aktiviert inkrementelle Garbage Collection\n\    -Xloggc:<file>    Loggt GC-Status in einer Datei mit Zeitstempeln\n\    -Xbatch           Deaktiviert Hintergrundkompilierung\n\    -Xms<size>        Legt anf\u00E4ngliche Java Heap-Gr\u00F6\u00DFe fest\n\    -Xmx<size>        Legt maximale Java Heap-Gr\u00F6\u00DFe fest\n\    -Xss<size>        Legt Java-Thread-Stack-Gr\u00F6\u00DFe fest\n\    -Xprof            Gibt CPU-Profiling-Daten aus\n\    -Xfuture          Aktiviert strengste Pr\u00FCfungen, antizipiert zuk\u00FCnftigen Standardwert\n\    -Xrs              Reduziert Verwendung von BS-Signalen durch Java/VM (siehe Dokumentation)\n\    -Xcheck:jni       F\u00FChrt zus\u00E4tzliche Pr\u00FCfungen f\u00FCr JNI-Funktionen durch\n\    -Xshare:off       Kein Versuch, gemeinsame Klassendaten zu verwenden\n\    -Xshare:auto      Verwendet gemeinsame Klassendaten, wenn m\u00F6glich (Standard)\n\    -Xshare:on        Erfordert die Verwendung gemeinsamer Klassendaten, sonst verl\u00E4uft der Vorgang nicht erfolgreich.\n\    -XshowSettings    Zeigt alle Einstellungen und f\u00E4hrt fort\n\    -XshowSettings:all\n\                      Zeigt alle Einstellungen und f\u00E4hrt fort\n\    -XshowSettings:vm Zeigt alle VM-bezogenen Einstellungen und f\u00E4hrt fort\n\    -XshowSettings:properties\n\                      Zeigt alle Eigenschaftseinstellungen und f\u00E4hrt fort\n\    -XshowSettings:locale\n\                      Zeigt alle gebietsschemabezogenen Einstellungen und f\u00E4hrt fort\n\nDie -X-Optionen sind keine Standardoptionen und k\u00F6nnen ohne Vorank\u00FCndigung ge\u00E4ndert werden.\n
 
+# Translators please note do not translate the options themselves
+java.launcher.X.macosx.usage=\nDie folgenden Optionen sind f\u00FCr Mac OS X spezifisch:\n\\    -XstartOnFirstThread\n\\                      f\u00FChrt die main()-Methode f\u00FCr den ersten (AppKit) Thread aus\n\\    -Xdock:name=<Anwendungsname>"\n\\                      \u00DCberschreibt den in der Uhr angezeigten Standardanwendungsnamen\n\\    -Xdock:icon=<Pfad zu Symboldatei>\n\\                      \u00DCberschreibt das in der Uhr angezeigte Standardsymbol\n\n
+
 java.launcher.cls.error1=Fehler: Hauptklasse {0} konnte nicht gefunden oder geladen werden
 java.launcher.cls.error2=Fehler: Hauptmethode ist nicht {0} in Klasse {1}. Definieren Sie die Hauptmethode als:\n\   public static void main(String[] args)
 java.launcher.cls.error3=Fehler: Hauptmethode muss einen Wert vom Typ void in Klasse {0} zur\u00FCckgeben. Definieren Sie \ndie Hauptmethode als:\n\   public static void main(String[] args)
--- a/src/share/classes/sun/launcher/resources/launcher_es.properties	Wed May 02 14:00:06 2012 +0100
+++ b/src/share/classes/sun/launcher/resources/launcher_es.properties	Wed May 02 15:06:35 2012 +0100
@@ -34,11 +34,14 @@
 java.launcher.ergo.message2  =\                  porque la ejecuci\u00F3n se est\u00E1 llevando a cabo en una m\u00E1quina de clase de servidor.\n
 
 # Translators please note do not translate the options themselves
-java.launcher.opt.footer     =\    -cp <ruta de acceso de b\u00FAsqueda de clases de los directorios y los archivos zip/jar>\n\    -classpath <ruta de acceso de b\u00FAsqueda de clases de los directorios y los archivos zip/jar>\n\                  Una lista separada por {0} de directorios, archivos JAR,\n\                  y archivos ZIP para buscar archivos de clase.\n\    -D<nombre>=<valor>\n\                  definir una propiedad del sistema\n\    -verbose[:class|gc|jni]\n\                  activar la salida verbose\n\    -version      imprimir la versi\u00F3n del producto y salir\n\    -version:<valor>\n\                  es necesario que se ejecute la versi\u00F3n especificada\n\    -showversion  imprimir la versi\u00F3n del producto y continuar\n\    -jre-restrict-search | -no-jre-restrict-search\n\                  incluir/excluir JRE privados de usuario en la b\u00FAsqueda de versi\u00F3n\n\    -? -help      imprimir este mensaje de ayuda\n\    -X            imprimir la ayuda sobre las opciones que no sean est\u00E1ndar\n\    -ea[:<nombre_paquete>...|:<nombre_clase>]\n\    -enableassertions[:<nombre_paquete>...|:<nombre_clase>]\n\                  activar afirmaciones con la granularidad especificada\n\    -da[:<nombre_paquete>...|:<nombre_clase>]\n\    -disableassertions[:<nombre_paquete>...|:<nombre_clase>]\n\                  desactivar afirmaciones con la granularidad especificada\n\    -esa | -enablesystemassertions\n\                  activar afirmaciones del sistema\n\    -dsa | -disablesystemassertions\n\                  desactivar afirmaciones del sistema\n\    -agentlib:<nombre_bib>[=<opciones>]\n\                  cargar la biblioteca de agente nativa <nombre_bib>, como -agentlib:hprof\n\                  v\u00E9ase tambi\u00E9n -agentlib:jdwp=help y -agentlib:hprof=help\n\    -agentpath:<nombre_ruta_acceso>[=<opciones>]\n\                  cargar biblioteca de agente nativa con la ruta de acceso completa\n\    -javaagent:<ruta_acceso_jar>[=<opciones>]\n\                  cargar agente de lenguaje de programaci\u00F3n Java, v\u00E9ase java.lang.instrument\n\    -splash:<ruta_acceso_imagen>\n\                  mostrar una pantalla de presentaci\u00F3n con la imagen especificada\nConsulte http://java.sun.com/javase/reference para obtener m\u00E1s informaci\u00F3n.
+java.launcher.opt.footer     =\    -cp <ruta de acceso de b\u00FAsqueda de clases de los directorios y los archivos zip/jar>\n\\    -classpath <ruta de acceso de b\u00FAsqueda de clases de los directorios y los archivos zip/jar>\n\\                  Lista separada por {0} de directorios, archivos JAR\n\\                  y archivos ZIP para buscar archivos de clase.\n\\    -D<nombre>=<valor>\n\\                  definir una propiedad del sistema\n\\    -verbose[:class|gc|jni]\n\\                  activar la salida verbose\n\\    -version      imprimir la versi\u00F3n del producto y salir\n\\    -version:<valor>\n\\                  es necesario que se ejecute la versi\u00F3n especificada\n\\    -showversion  imprimir la versi\u00F3n del producto y continuar\n\\    -jre-restrict-search | -no-jre-restrict-search\n\\                  incluir/excluir JRE privados de usuario en la b\u00FAsqueda de versi\u00F3n\n\\    -? -help      imprimir este mensaje de ayuda\n\\    -X            imprimir la ayuda sobre las opciones que no sean est\u00E1ndar\n\\    -ea[:<nombre_paquete>...|:<nombre_clase>]\n\\    -enableassertions[:<nombre_paquete>...|:<nombre_clase>]\n\\                  activar afirmaciones con la granularidad especificada\n\\    -da[:<nombre_paquete>...|:<nombre_clase>]\n\\    -disableassertions[:<nombre_paquete>...|:<nombre_clase>]\n\\                  desactivar afirmaciones con la granularidad especificada\n\\    -esa | -enablesystemassertions\n\\                  activar afirmaciones del sistema\n\\    -dsa | -disablesystemassertions\n\\                  desactivar afirmaciones del sistema\n\\    -agentlib:<nombre_bib>[=<opciones>]\n\\                  cargar la biblioteca de agente nativa <nombre_bib>, como -agentlib:hprof\n\\                  v\u00E9ase tambi\u00E9n -agentlib:jdwp=help y -agentlib:hprof=help\n\\    -agentpath:<nombre_ruta_acceso>[=<opciones>]\n\\                  cargar biblioteca de agente nativa con el nombre de la ruta de acceso completa\n\\    -javaagent:<ruta_acceso_jar>[=<opciones>]\n\\                  cargar agente de lenguaje de programaci\u00F3n Java, v\u00E9ase java.lang.instrument\n\\    -splash:<ruta_acceso_imagen>\n\\                  mostrar una pantalla de presentaci\u00F3n con la imagen especificada\nConsulte http://www.oracle.com/technetwork/java/javase/documentation/index.html para obtener m\u00E1s informaci\u00F3n.
 
 # Translators please note do not translate the options themselves
 java.launcher.X.usage=\    -Xmixed           ejecuci\u00F3n de modo mixto (por defecto)\n\    -Xint             s\u00F3lo ejecuci\u00F3n de modo interpretado\n\    -Xbootclasspath:<directorios y archivos zip/jar separados por {0}>\n\                      definir la ruta de acceso de b\u00FAsqueda para los recursos y clases de inicializaci\u00F3n de datos\n\    -Xbootclasspath/a:<directorios y archivos zip/jar separados por {0}>\n\                      agregar al final de la ruta de acceso de la clase de inicializaci\u00F3n de datos\n\    -Xbootclasspath/p:<directorios y archivos zip/jar separados por {0}>\n\                      anteponer a la ruta de acceso de la clase de inicializaci\u00F3n de datos\n\    -Xdiag            mostrar mensajes de diagn\u00F3stico adicionales\n\    -Xnoclassgc       desactivar la recolecci\u00F3n de basura de clases\n\    -Xincgc           activar la recolecci\u00F3n de basura de clases\n\    -Xloggc:<archivo>    registrar el estado de GC en un archivo con registros de hora\n\    -Xbatch           desactivar compilaci\u00F3n en segundo plano\n\    -Xms<tama\u00F1o>        definir tama\u00F1o de pila Java inicial\n\    -Xmx<tama\u00F1o>        definir tama\u00F1o de pila Java m\u00E1ximo\n\    -Xss<tama\u00F1o>        definir tama\u00F1o de la pila del thread de Java\n\    -Xprof            datos de salida de creaci\u00F3n de perfil de CPU\n\    -Xfuture          activar las comprobaciones m\u00E1s estrictas, anticip\u00E1ndose al futuro valor por defecto\n\    -Xrs              reducir el uso de se\u00F1ales de sistema operativo por parte de Java/VM (consulte la documentaci\u00F3n)\n\    -Xcheck:jni       realizar comprobaciones adicionales para las funciones de JNI\n\    -Xshare:off       no intentar usar datos de clase compartidos\n\    -Xshare:auto      usar datos de clase compartidos si es posible (valor por defecto)\n\    -Xshare:on        es obligatorio el uso de datos de clase compartidos, de lo contrario se emitir\u00E1 un fallo.\n\    -XshowSettings    mostrar todos los valores y continuar\n\    -XshowSettings:all\n\                      mostrar todos los valores y continuar\n\    -XshowSettings:vm mostrar todos los valores de la VM y continuar\n\    -XshowSettings:properties\n\                      mostrar todos los valores de las propiedades y continuar\n\    -XshowSettings:locale\n\                      mostrar todos los valores relacionados con la configuraci\u00F3n regional y continuar\n\nLas opciones -X no son est\u00E1ndar, por lo que podr\u00EDan cambiarse sin previo aviso.\n
 
+# Translators please note do not translate the options themselves
+java.launcher.X.macosx.usage=\nLas siguientes opciones son espec\u00EDficas para Mac OS X:\n\\    -XstartOnFirstThread\n\\                      ejecuta el m\u00E9todo main() del primer thread (AppKit)\n\\    -Xdock:name=<nombre de aplicaci\u00F3n>"\n\\                      sustituye al nombre por defecto de la aplicaci\u00F3n que se muestra en el Dock\n\\    -Xdock:icon=<ruta de acceso a archivo de icono>\n\\                      sustituye al icono por defecto que se muestra en el Dock\n\n
+
 java.launcher.cls.error1=Error: no se ha encontrado o cargado la clase principal {0}
 java.launcher.cls.error2=Error: el m\u00E9todo principal no es {0} en la clase {1}, defina el m\u00E9todo principal del siguiente modo:\n\   public static void main(String[] args)
 java.launcher.cls.error3=Error: el m\u00E9todo principal debe devolver un valor del tipo void en la clase {0}, \ndefina el m\u00E9todo principal del siguiente modo:\n\   public static void main(String[] args)
--- a/src/share/classes/sun/launcher/resources/launcher_fr.properties	Wed May 02 14:00:06 2012 +0100
+++ b/src/share/classes/sun/launcher/resources/launcher_fr.properties	Wed May 02 15:06:35 2012 +0100
@@ -34,11 +34,14 @@
 java.launcher.ergo.message2  =\                  car vous ex\u00E9cutez une machine de classe de serveur.\n
 
 # Translators please note do not translate the options themselves
-java.launcher.opt.footer     =\    -cp <class search path of directories and zip/jar files>\n\    -classpath <class search path of directories and zip/jar files>\n\                  Liste de r\u00E9pertoires, d''archives JAR et\n\                   d''archives ZIP s\u00E9par\u00E9s par des {0}, dans laquelle rechercher les fichiers de classe.\n\    -D<name>=<value>\n\                  d\u00E9finition d''une propri\u00E9t\u00E9 syst\u00E8me\n\    -verbose[:class|gc|jni]\n\                  activation de la sortie en mode verbose\n\    -version      impression de la version du produit et fin de l''op\u00E9ration\n\    -version:<value>\n\                  ex\u00E9cution de la version sp\u00E9cifi\u00E9e obligatoire\n\    -showversion  impression de la version du produit et poursuite de l''op\u00E9ration\n\    -jre-restrict-search | -no-jre-restrict-search\n\                  inclusion/exclusion des environnements JRE priv\u00E9s de l''utilisateur dans la recherche de version\n\    -? -help      impression du message d''aide\n\    -X            impression de l''aide sur les options non standard\n\    -ea[:<packagename>...|:<classname>]\n\    -enableassertions[:<packagename>...|:<classname>]\n\                  activation des assertions avec la granularit\u00E9 sp\u00E9cifi\u00E9e\n\    -da[:<packagename>...|:<classname>]\n\    -disableassertions[:<packagename>...|:<classname>]\n\                  d\u00E9sactivation des assertions avec la granularit\u00E9 sp\u00E9cifi\u00E9e\n\    -esa | -enablesystemassertions\n\                  activation des assertions syst\u00E8me\n\    -dsa | -disablesystemassertions\n\                  d\u00E9sactivation des assertions syst\u00E8me\n\    -agentlib:<libname>[=<options>]\n\                  chargement de la biblioth\u00E8que d''agent natif <libname>, par exemple -agentlib:hprof\n\                  voir \u00E9galement, -agentlib:jdwp=help et -agentlib:hprof=help\n\    -agentpath:<pathname>[=<options>]\n\                  chargement de la biblioth\u00E8que d''agent natif via le chemin d''acc\u00E8s complet\n\    -javaagent:<jarpath>[=<options>]\n\                  chargement de l''agent du langage de programmation Java, voir java.lang.instrument\n\    -splash:<imagepath>\n\                  affichage de l''\u00E9cran d''accueil avec l''image sp\u00E9cifi\u00E9e\nVoir http://java.sun.com/javase/reference pour plus de d\u00E9tails.
+java.launcher.opt.footer     =\    -cp <class search path of directories and zip/jar files>\n\    -classpath <class search path of directories and zip/jar files>\n\                  Liste de r\u00E9pertoires, d''archives JAR et\n\                   d''archives ZIP s\u00E9par\u00E9s par des {0}, dans laquelle rechercher les fichiers de classe.\n\    -D<name>=<value>\n\                  d\u00E9finition d''une propri\u00E9t\u00E9 syst\u00E8me\n\    -verbose[:class|gc|jni]\n\                  activation de la sortie en mode verbose\n\    -version      impression de la version du produit et fin de l''op\u00E9ration\n\    -version:<value>\n\                  ex\u00E9cution de la version sp\u00E9cifi\u00E9e obligatoire\n\    -showversion  impression de la version du produit et poursuite de l''op\u00E9ration\n\    -jre-restrict-search | -no-jre-restrict-search\n\                  inclusion/exclusion des environnements JRE priv\u00E9s de l''utilisateur dans la recherche de version\n\    -? -help      impression du message d''aide\n\    -X            impression de l''aide sur les options non standard\n\    -ea[:<packagename>...|:<classname>]\n\    -enableassertions[:<packagename>...|:<classname>]\n\                  activation des assertions avec la granularit\u00E9 sp\u00E9cifi\u00E9e\n\    -da[:<packagename>...|:<classname>]\n\    -disableassertions[:<packagename>...|:<classname>]\n\                  d\u00E9sactivation des assertions avec la granularit\u00E9 sp\u00E9cifi\u00E9e\n\    -esa | -enablesystemassertions\n\                  activation des assertions syst\u00E8me\n\    -dsa | -disablesystemassertions\n\                  d\u00E9sactivation des assertions syst\u00E8me\n\    -agentlib:<libname>[=<options>]\n\                  chargement de la biblioth\u00E8que d''agent natif <libname>, par exemple -agentlib:hprof\n\                  voir \u00E9galement, -agentlib:jdwp=help et -agentlib:hprof=help\n\    -agentpath:<pathname>[=<options>]\n\                  chargement de la biblioth\u00E8que d''agent natif via le chemin d''acc\u00E8s complet\n\    -javaagent:<jarpath>[=<options>]\n\                  chargement de l''agent du langage de programmation Java, voir java.lang.instrument\n\    -splash:<imagepath>\n\                  affichage de l''\u00E9cran d''accueil avec l''image sp\u00E9cifi\u00E9e\nVoir http://www.oracle.com/technetwork/java/javase/documentation/index.html pour plus de d\u00E9tails.
 
 # Translators please note do not translate the options themselves
 java.launcher.X.usage=\    -Xmixed           ex\u00E9cution en mode mixte (valeur par d\u00E9faut)\n\    -Xint             ex\u00E9cution en mode interpr\u00E9t\u00E9 uniquement\n\    -Xbootclasspath:<directories and zip/jar files separated by {0}>\n\                      d\u00E9finition du chemin de recherche pour les ressources et classes bootstrap\n\    -Xbootclasspath/a:<directories and zip/jar files separated by {0}>\n\                      ajout \u00E0 la fin du chemin de classe bootstrap\n\    -Xbootclasspath/p:<directories and zip/jar files separated by {0}>\n\                      ajout au d\u00E9but du chemin de classe bootstrap\n\    -Xdiag            affichage de messages de diagnostic suppl\u00E9mentaires\n\    -Xnoclassgc       d\u00E9sactivation de l''op\u00E9ration de ramasse-miette (garbage collection) de la classe\n\    -Xincgc           activation de l''op\u00E9ration de ramasse-miette (garbage collection) incr\u00E9mentielle\n\    -Xloggc:<file>    journalisation du statut de l''op\u00E9ration de ramasse-miette (garbage collection) dans un fichier avec horodatages\n\    -Xbatch           d\u00E9sactivation de la compilation en arri\u00E8re-plan\n\    -Xms<size>        d\u00E9finition de la taille initiale des portions de m\u00E9moire Java\n\    -Xmx<size>        d\u00E9finition de la taille maximale des portions de m\u00E9moire Java\n\    -Xss<size>        d\u00E9finition de la taille de pile de thread Java\n\    -Xprof            sortie des donn\u00E9es de profilage de l''unit\u00E9 centrale\n\    -Xfuture          activation des contr\u00F4les les plus stricts en vue d''anticiper la future valeur par d\u00E9faut\n\    -Xrs              r\u00E9duction de l''utilisation des signaux OS par Java/la machine virtuelle (voir documentation)\n\    -Xcheck:jni       ex\u00E9cution de contr\u00F4les suppl\u00E9mentaires pour les fonctions JNI\n\    -Xshare:off       aucune tentative d''utilisation des donn\u00E9es de classe partag\u00E9es\n\    -Xshare:auto      utilisation des donn\u00E9es de classe partag\u00E9es si possible (valeur par d\u00E9faut)\n\    -Xshare:on        utilisation des donn\u00E9es de classe partag\u00E9es obligatoire ou \u00E9chec de l''op\u00E9ration\n\    -XshowSettings    affichage de tous les param\u00E8tres et poursuite de l''op\u00E9ration\n\    -XshowSettings:all\n\                      affichage de tous les param\u00E8tres et poursuite de l''op\u00E9ration\n\    -XshowSettings:vm affichage de tous les param\u00E8tres de machine virtuelle et poursuite de l''op\u00E9ration\n\    -XshowSettings:properties\n\                      affichage de tous les param\u00E8tres de propri\u00E9t\u00E9 et poursuite de l''op\u00E9ration\n\    -XshowSettings:locale\n\                      affichage de tous les param\u00E8tres d''environnement local et poursuite de l''op\u00E9ration\n\nLes options -X ne sont pas des options standard et peuvent faire l''objet de modifications sans pr\u00E9avis.\n
 
+# Translators please note do not translate the options themselves
+java.launcher.X.macosx.usage=\nLes options suivantes sont propres \u00E0 Mac OS X :\n\    -XstartOnFirstThread\n\                      ex\u00E9cute la m\u00E9thode main() sur le premier thread (AppKit)\n\    -Xdock:name=<application name>"\n\                      remplace le nom d'application par d\u00E9faut affich\u00E9 dans l'ancrage\n\    -Xdock:icon=<path to icon file>\n\                      remplace l'ic\u00F4ne par d\u00E9faut affich\u00E9e dans l'ancrage\n\n
+
 java.launcher.cls.error1=Erreur : impossible de trouver ou charger la classe principale {0}
 java.launcher.cls.error2=Erreur : la m\u00E9thode principale n''est pas {0} dans la classe {1}, d\u00E9finissez la m\u00E9thode principale comme suit :\n\   public static void main(String[] args)
 java.launcher.cls.error3=Erreur : la m\u00E9thode principale doit renvoyer une valeur de type void dans la classe {0}, \nd\u00E9finissez la m\u00E9thode principale comme suit :\n\   public static void main(String[] args)
--- a/src/share/classes/sun/launcher/resources/launcher_it.properties	Wed May 02 14:00:06 2012 +0100
+++ b/src/share/classes/sun/launcher/resources/launcher_it.properties	Wed May 02 15:06:35 2012 +0100
@@ -34,11 +34,14 @@
 java.launcher.ergo.message2  =\                  perch\u00E9 si utilizza un computer di classe server.\n
 
 # Translators please note do not translate the options themselves
-java.launcher.opt.footer     =\    -cp <classpath di ricerca di directory e file zip/jar>\n\    -classpath <classpath di ricerca di directory e file zip/jar>\n\                  Una lista separata da {0} di directory, archivi JAR\n\                  e archivi ZIP utilizzata per la ricerca di file di classe.\n\    -D<nome>=<valore>\n\                  imposta una propriet\u00E0 di sistema\n\    -verbose[:class|gc|jni]\n\                  abilita l''output descrittivo\n\    -version      stampa la versione del prodotto ed esce\n\    -version:<valore>\n\                  richiede l''esecuzione della versione specificata\n\    -showversion  stampa la versione del prodotto e continua\n\    -jre-restrict-search | -no-jre-restrict-search\n\                  include/esclude gli ambienti JRE privati dell''utente nella ricerca della versione\n\    -? -help      stampa questo messaggio della Guida\n\    -X            stampa la Guida sulle opzioni non standard\n\    -ea[:<nomepackage>...|:<nomeclasse>]\n\    -enableassertions[:<nomepackage>...|:<nomeclasse>]\n\                  abilita le asserzioni con la granularit\u00E0 specificata\n\    -da[:<nomepackage>...|:<nomeclasse>]\n\    -disableassertions[:<nomepackage>...|:<nomeclasse>]\n\                  disabilita le asserzioni con la granularit\u00E0 specificata\n\    -esa | -enablesystemassertions\n\                  abilita le asserzioni di sistema\n\    -dsa | -disablesystemassertions\n\                  disabilita le asserzioni di sistema\n\    -agentlib:<nomelib>[=<opzioni>]\n\                  carica la libreria agenti nativa <nomelib>, ad esempio -agentlib:hprof\n\                  vedere anche -agentlib:jdwp=help and -agentlib:hprof=help\n\    -agentpath:<nomepercorso>[=<opzioni>]\n\                  carica la libreria agenti nativa con il percorso completo\n\    -javaagent:<percorsojar>[=<opzioni>]\n\                  carica l''agente del linguaggio di programmazione Java. Vedere java.lang.instrument\n\    -splash:<percorsoimmagine>\n\                  mostra la schermata iniziale con l''immagine specificata\nVedere http://java.sun.com/javase/reference per maggiori dettagli.
+java.launcher.opt.footer     =\    -cp <classpath di ricerca di directory e file zip/jar>\n\\    -classpath <classpath di ricerca di directory e file zip/jar>\n\\                  Una lista separata da {0} di directory, archivi JAR\n\\                  e archivi ZIP utilizzata per la ricerca di file di classe.\n\\    -D<nome>=<valore>\n\\                  imposta una propriet\u00E0 di sistema\n\\    -verbose[:class|gc|jni]\n\\                  abilita l''output descrittivo\n\\    -version      stampa la versione del prodotto ed esce\n\\    -version:<valore>\n\\                  richiede l''esecuzione della versione specificata\n\\    -showversion  stampa la versione del prodotto e continua\n\\    -jre-restrict-search | -no-jre-restrict-search\n\\                  include/esclude gli ambienti JRE privati dell''utente nella ricerca della versione\n\\    -? -help      stampa questo messaggio della Guida\n\\    -X            stampa la Guida sulle opzioni non standard\n\\    -ea[:<nomepackage>...|:<nomeclasse>]\n\\    -enableassertions[:<nomepackage>...|:<nomeclasse>]\n\\                  abilita le asserzioni con la granularit\u00E0 specificata\n\\    -da[:<nomepackage>...|:<nomeclasse>]\n\\    -disableassertions[:<nomepackage>...|:<nomeclasse>]\n\\                  disabilita le asserzioni con la granularit\u00E0 specificata\n\\    -esa | -enablesystemassertions\n\\                  abilita le asserzioni di sistema\n\\    -dsa | -disablesystemassertions\n\\                  disabilita le asserzioni di sistema\n\\    -agentlib:<nomelib>[=<opzioni>]\n\\                  carica la libreria agenti nativa <nomelib>, ad esempio -agentlib:hprof\n\\                  vedere anche -agentlib:jdwp=help and -agentlib:hprof=help\n\\    -agentpath:<nomepercorso>[=<opzioni>]\n\\                  carica la libreria agenti nativa con il percorso completo\n\\    -javaagent:<percorsojar>[=<opzioni>]\n\\                  carica l''agente del linguaggio di programmazione Java. Vedere java.lang.instrument\n\\    -splash:<percorsoimmagine>\n\\                  mostra la schermata iniziale con l''immagine specificata\nVedere http://www.oracle.com/technetwork/java/javase/documentation/index.html per ulteriori dettagli.
 
 # Translators please note do not translate the options themselves
 java.launcher.X.usage=\    -Xmixed           esecuzione in modalit\u00E0 mista (impostazione predefinita)\n\    -Xint             esecuzione solo in modalit\u00E0 convertita\n\    -Xbootclasspath:<directory e file zip/jar separati da {0}>\n\                      imposta il percorso di ricerca per le classi e le risorse di bootstrap\n\    -Xbootclasspath/a:<directory e file zip/jar separati da {0}>\n\                      aggiunge alla fine del classpath di bootstrap\n\    -Xbootclasspath/p:<directory e file zip/jar separati da {0}>\n\                      antepone al classpath di bootstrap\n\    -Xdiag            mostra messaggi di diagnostica aggiuntivi\n\    -Xnoclassgc       disabilita la garbage collection della classe\n\    -Xincgc           abilita la garbage collection incrementale\n\    -Xloggc:<file>    registra lo stato GC in un file di log con indicatori orari\n\    -Xbatch           disabilita la compilazione in background\n\    -Xms<dimensione>        imposta la dimensione heap Java iniziale\n\    -Xmx<dimensione>        imposta la dimensione heap Java massima\n\    -Xss<dimensione>        imposta la dimensione dello stack di thread Java\n\    -Xprof            visualizza i dati di profilo della CPU\n\    -Xfuture          abilita i controlli pi\u00F9 limitativi anticipando le impostazioni predefinite future\n\    -Xrs              riduce l''uso di segnali del sistema operativo da Java/VM (vedere la documentazione)\n\    -Xcheck:jni       esegue controlli aggiuntivi per le funzioni JNI\n\    -Xshare:off       non tenta di utilizzare i dati della classe condivisi\n\    -Xshare:auto      utilizza i dati di classe condivisi se possibile (impostazione predefinita)\n\    -Xshare:on        richiede l''uso dei dati di classe condivisi, altrimenti l''esecuzione non riesce.\n\    -XshowSettings    mostra tutte le impostazioni e continua\n\    -XshowSettings:all\n\                      mostra tutte le impostazioni e continua\n\    -XshowSettings:vm mostra tutte le impostazioni correlate alla VM e continua\n\    -XshowSettings:properties\n\                      mostra tutte le impostazioni delle propriet\u00E0 e continua\n\    -XshowSettings:locale\n\                      mostra tutte le impostazioni correlate alle impostazioni nazionali e continua\n\nLe opzioni -X non sono opzioni standard e sono soggette a modifiche senza preavviso.\n
 
+# Translators please note do not translate the options themselves
+java.launcher.X.macosx.usage=\nLe opzioni riportate di seguito sono specifiche del sistema operativo Mac OS X:\n\\    -XstartOnFirstThread\n\\                      Esegue il metodo main() sul primo thread (AppKit).\n\\    -Xdock:name=<nome applicazione>"\n\\                      Sostituisce il nome applicazione predefinito visualizzato nel dock\n\\    -Xdock:icon=<percorso file icona>\n\\                      Sostituisce l'icona predefinita visualizzata nel dock\n\n
+
 java.launcher.cls.error1=Errore: impossibile trovare o caricare la classe principale {0}
 java.launcher.cls.error2=Errore: il metodo principale non \u00E8 {0} nella classe {1}. Definire il metodo principale come:\n\   public static void main(String[] args)
 java.launcher.cls.error3=Errore: il metodo principale deve restituire un valore di tipo void nella classe {0}. \nDefinire il metodo principale come:\n\   public static void main(String[] args)
--- a/src/share/classes/sun/launcher/resources/launcher_ja.properties	Wed May 02 14:00:06 2012 +0100
+++ b/src/share/classes/sun/launcher/resources/launcher_ja.properties	Wed May 02 15:06:35 2012 +0100
@@ -34,11 +34,14 @@
 java.launcher.ergo.message2  =\                  \u3053\u308C\u306F\u30B5\u30FC\u30D0\u30FC\u30AF\u30E9\u30B9\u306E\u30DE\u30B7\u30F3\u3067\u5B9F\u884C\u3057\u3066\u3044\u308B\u305F\u3081\u3067\u3059\u3002\n
 
 # Translators please note do not translate the options themselves
-java.launcher.opt.footer     =\    -cp <class search path of directories and zip/jar files>\n\    -classpath <class search path of directories and zip/jar files>\n\                  \u30AF\u30E9\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u3092\u691C\u7D22\u3059\u308B\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u3001\n\                  JAR\u30A2\u30FC\u30AB\u30A4\u30D6\u304A\u3088\u3073ZIP\u30A2\u30FC\u30AB\u30A4\u30D6\u306E{0}\u3067\u533A\u5207\u3089\u308C\u305F\u30EA\u30B9\u30C8\u3067\u3059\u3002\n\    -D<name>=<value>\n\                  \u30B7\u30B9\u30C6\u30E0\u30FB\u30D7\u30ED\u30D1\u30C6\u30A3\u3092\u8A2D\u5B9A\u3059\u308B\n\    -verbose[:class|gc|jni]\n\                  \u8A73\u7D30\u306A\u51FA\u529B\u3092\u884C\u3046\n\    -version      \u88FD\u54C1\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u51FA\u529B\u3057\u3066\u7D42\u4E86\u3059\u308B\n\    -version:<value>\n\                  \u6307\u5B9A\u3057\u305F\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u5B9F\u884C\u306B\u5FC5\u9808\u306B\u3059\u308B\n\    -showversion  \u88FD\u54C1\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u51FA\u529B\u3057\u3066\u7D9A\u884C\u3059\u308B\n\    -jre-restrict-search | -no-jre-restrict-search\n\                  \u30E6\u30FC\u30B6\u30FC\u306E\u30D7\u30E9\u30A4\u30D9\u30FC\u30C8JRE\u3092\u30D0\u30FC\u30B8\u30E7\u30F3\u691C\u7D22\u306B\u542B\u3081\u308B/\u9664\u5916\u3059\u308B\n\    -? -help      \u3053\u306E\u30D8\u30EB\u30D7\u30FB\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u51FA\u529B\u3059\u308B\n\    -X            \u975E\u6A19\u6E96\u30AA\u30D7\u30B7\u30E7\u30F3\u306B\u95A2\u3059\u308B\u30D8\u30EB\u30D7\u3092\u51FA\u529B\u3059\u308B\n\    -ea[:<packagename>...|:<classname>]\n\    -enableassertions[:<packagename>...|:<classname>]\n\                  \u6307\u5B9A\u3057\u305F\u7C92\u5EA6\u3067\u30A2\u30B5\u30FC\u30B7\u30E7\u30F3\u3092\u6709\u52B9\u306B\u3059\u308B\n\    -da[:<packagename>...|:<classname>]\n\    -disableassertions[:<packagename>...|:<classname>]\n\                  \u6307\u5B9A\u3057\u305F\u7C92\u5EA6\u3067\u30A2\u30B5\u30FC\u30B7\u30E7\u30F3\u3092\u7121\u52B9\u306B\u3059\u308B\n\    -esa | -enablesystemassertions\n\                  \u30B7\u30B9\u30C6\u30E0\u30FB\u30A2\u30B5\u30FC\u30B7\u30E7\u30F3\u3092\u6709\u52B9\u306B\u3059\u308B\n\    -dsa | -disablesystemassertions\n\                  \u30B7\u30B9\u30C6\u30E0\u30FB\u30A2\u30B5\u30FC\u30B7\u30E7\u30F3\u3092\u7121\u52B9\u306B\u3059\u308B\n\    -agentlib:<libname>[=<options>]\n\                  \u30CD\u30A4\u30C6\u30A3\u30D6\u30FB\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u30FB\u30E9\u30A4\u30D6\u30E9\u30EA<libname>\u3092\u30ED\u30FC\u30C9\u3059\u308B\u3002\u4F8B: -agentlib:hprof\n\                  -agentlib:jdwp=help\u3068-agentlib:hprof=help\u3082\u53C2\u7167\n\    -agentpath:<pathname>[=<options>]\n\                  \u30D5\u30EB\u30D1\u30B9\u540D\u3067\u30CD\u30A4\u30C6\u30A3\u30D6\u30FB\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u30FB\u30E9\u30A4\u30D6\u30E9\u30EA\u3092\u30ED\u30FC\u30C9\u3059\u308B\n\    -javaagent:<jarpath>[=<options>]\n\                  Java\u30D7\u30ED\u30B0\u30E9\u30DF\u30F3\u30B0\u8A00\u8A9E\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u3092\u30ED\u30FC\u30C9\u3059\u308B\u3002java.lang.instrument\u3092\u53C2\u7167\n\    -splash:<imagepath>\n\                  \u6307\u5B9A\u3057\u305F\u30A4\u30E1\u30FC\u30B8\u3067\u30B9\u30D7\u30E9\u30C3\u30B7\u30E5\u753B\u9762\u3092\u8868\u793A\u3059\u308B\n\u8A73\u7D30\u306Fhttp://java.sun.com/javase/reference\u3092\u53C2\u7167\u3057\u3066\u304F\u3060\u3055\u3044\u3002
+java.launcher.opt.footer     =\    -cp <class search path of directories and zip/jar files>\n\    -classpath <class search path of directories and zip/jar files>\n\                  \u30AF\u30E9\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u3092\u691C\u7D22\u3059\u308B\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u3001\n\                  JAR\u30A2\u30FC\u30AB\u30A4\u30D6\u304A\u3088\u3073ZIP\u30A2\u30FC\u30AB\u30A4\u30D6\u306E{0}\u3067\u533A\u5207\u3089\u308C\u305F\u30EA\u30B9\u30C8\u3067\u3059\u3002\n\    -D<name>=<value>\n\                  \u30B7\u30B9\u30C6\u30E0\u30FB\u30D7\u30ED\u30D1\u30C6\u30A3\u3092\u8A2D\u5B9A\u3059\u308B\n\    -verbose[:class|gc|jni]\n\                  \u8A73\u7D30\u306A\u51FA\u529B\u3092\u884C\u3046\n\    -version      \u88FD\u54C1\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u51FA\u529B\u3057\u3066\u7D42\u4E86\u3059\u308B\n\    -version:<value>\n\                  \u6307\u5B9A\u3057\u305F\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u5B9F\u884C\u306B\u5FC5\u9808\u306B\u3059\u308B\n\    -showversion  \u88FD\u54C1\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u51FA\u529B\u3057\u3066\u7D9A\u884C\u3059\u308B\n\    -jre-restrict-search | -no-jre-restrict-search\n\                  \u30E6\u30FC\u30B6\u30FC\u306E\u30D7\u30E9\u30A4\u30D9\u30FC\u30C8JRE\u3092\u30D0\u30FC\u30B8\u30E7\u30F3\u691C\u7D22\u306B\u542B\u3081\u308B/\u9664\u5916\u3059\u308B\n\    -? -help      \u3053\u306E\u30D8\u30EB\u30D7\u30FB\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u51FA\u529B\u3059\u308B\n\    -X            \u975E\u6A19\u6E96\u30AA\u30D7\u30B7\u30E7\u30F3\u306B\u95A2\u3059\u308B\u30D8\u30EB\u30D7\u3092\u51FA\u529B\u3059\u308B\n\    -ea[:<packagename>...|:<classname>]\n\    -enableassertions[:<packagename>...|:<classname>]\n\                  \u6307\u5B9A\u3057\u305F\u7C92\u5EA6\u3067\u30A2\u30B5\u30FC\u30B7\u30E7\u30F3\u3092\u6709\u52B9\u306B\u3059\u308B\n\    -da[:<packagename>...|:<classname>]\n\    -disableassertions[:<packagename>...|:<classname>]\n\                  \u6307\u5B9A\u3057\u305F\u7C92\u5EA6\u3067\u30A2\u30B5\u30FC\u30B7\u30E7\u30F3\u3092\u7121\u52B9\u306B\u3059\u308B\n\    -esa | -enablesystemassertions\n\                  \u30B7\u30B9\u30C6\u30E0\u30FB\u30A2\u30B5\u30FC\u30B7\u30E7\u30F3\u3092\u6709\u52B9\u306B\u3059\u308B\n\    -dsa | -disablesystemassertions\n\                  \u30B7\u30B9\u30C6\u30E0\u30FB\u30A2\u30B5\u30FC\u30B7\u30E7\u30F3\u3092\u7121\u52B9\u306B\u3059\u308B\n\    -agentlib:<libname>[=<options>]\n\                  \u30CD\u30A4\u30C6\u30A3\u30D6\u30FB\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u30FB\u30E9\u30A4\u30D6\u30E9\u30EA<libname>\u3092\u30ED\u30FC\u30C9\u3059\u308B\u3002\u4F8B: -agentlib:hprof\n\                  -agentlib:jdwp=help\u3068-agentlib:hprof=help\u3082\u53C2\u7167\n\    -agentpath:<pathname>[=<options>]\n\                  \u30D5\u30EB\u30D1\u30B9\u540D\u3067\u30CD\u30A4\u30C6\u30A3\u30D6\u30FB\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u30FB\u30E9\u30A4\u30D6\u30E9\u30EA\u3092\u30ED\u30FC\u30C9\u3059\u308B\n\    -javaagent:<jarpath>[=<options>]\n\                  Java\u30D7\u30ED\u30B0\u30E9\u30DF\u30F3\u30B0\u8A00\u8A9E\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u3092\u30ED\u30FC\u30C9\u3059\u308B\u3002java.lang.instrument\u3092\u53C2\u7167\n\    -splash:<imagepath>\n\                  \u6307\u5B9A\u3057\u305F\u30A4\u30E1\u30FC\u30B8\u3067\u30B9\u30D7\u30E9\u30C3\u30B7\u30E5\u753B\u9762\u3092\u8868\u793A\u3059\u308B\n\u8A73\u7D30\u306Fhttp://www.oracle.com/technetwork/java/javase/documentation/index.html\u3092\u53C2\u7167\u3057\u3066\u304F\u3060\u3055\u3044\u3002
 
 # Translators please note do not translate the options themselves
 java.launcher.X.usage=\    -Xmixed           \u6DF7\u5408\u30E2\u30FC\u30C9\u306E\u5B9F\u884C(\u30C7\u30D5\u30A9\u30EB\u30C8)\n\    -Xint             \u30A4\u30F3\u30BF\u30D7\u30EA\u30BF\u30FB\u30E2\u30FC\u30C9\u306E\u5B9F\u884C\u306E\u307F\n\    -Xbootclasspath:<directories and zip/jar files separated by {0}>\n\                      \u30D6\u30FC\u30C8\u30B9\u30C8\u30E9\u30C3\u30D7\u306E\u30AF\u30E9\u30B9\u3068\u30EA\u30BD\u30FC\u30B9\u306E\u691C\u7D22\u30D1\u30B9\u3092\u8A2D\u5B9A\u3059\u308B\n\    -Xbootclasspath/a:<directories and zip/jar files separated by {0}>\n\                      \u30D6\u30FC\u30C8\u30B9\u30C8\u30E9\u30C3\u30D7\u30FB\u30AF\u30E9\u30B9\u30FB\u30D1\u30B9\u306E\u6700\u5F8C\u306B\u8FFD\u52A0\u3059\u308B\n\    -Xbootclasspath/p:<directories and zip/jar files separated by {0}>\n\                      \u30D6\u30FC\u30C8\u30B9\u30C8\u30E9\u30C3\u30D7\u30FB\u30AF\u30E9\u30B9\u30FB\u30D1\u30B9\u306E\u524D\u306B\u4ED8\u52A0\u3059\u308B\n\    -Xdiag            \u8FFD\u52A0\u306E\u8A3A\u65AD\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u8868\u793A\u3059\u308B\n\    -Xnoclassgc       \u30AF\u30E9\u30B9\u306E\u30AC\u30D9\u30FC\u30B8\u30FB\u30B3\u30EC\u30AF\u30B7\u30E7\u30F3\u3092\u7121\u52B9\u306B\u3059\u308B\n\    -Xincgc           \u5897\u5206\u30AC\u30D9\u30FC\u30B8\u30FB\u30B3\u30EC\u30AF\u30B7\u30E7\u30F3\u3092\u6709\u52B9\u306B\u3059\u308B\n\    -Xloggc:<file>    \u30BF\u30A4\u30E0\u30B9\u30BF\u30F3\u30D7\u304C\u4ED8\u3044\u305F\u30D5\u30A1\u30A4\u30EB\u306BGC\u30B9\u30C6\u30FC\u30BF\u30B9\u306E\u30ED\u30B0\u3092\u8A18\u9332\u3059\u308B\n\    -Xbatch           \u30D0\u30C3\u30AF\u30B0\u30E9\u30A6\u30F3\u30C9\u306E\u30B3\u30F3\u30D1\u30A4\u30EB\u3092\u7121\u52B9\u306B\u3059\u308B\n\    -Xms<size>        Java\u306E\u521D\u671F\u30D2\u30FC\u30D7\u30FB\u30B5\u30A4\u30BA\u3092\u8A2D\u5B9A\u3059\u308B\n\    -Xmx<size>        Java\u306E\u6700\u5C0F\u30D2\u30FC\u30D7\u30FB\u30B5\u30A4\u30BA\u3092\u8A2D\u5B9A\u3059\u308B\n\    -Xss<size>        Java\u306E\u30B9\u30EC\u30C3\u30C9\u30FB\u30B9\u30BF\u30C3\u30AF\u30FB\u30B5\u30A4\u30BA\u3092\u8A2D\u5B9A\u3059\u308B\n\    -Xprof            CPU\u30D7\u30ED\u30D5\u30A1\u30A4\u30EB\u30FB\u30C7\u30FC\u30BF\u3092\u51FA\u529B\u3059\u308B\n\    -Xfuture          \u5C06\u6765\u306E\u30C7\u30D5\u30A9\u30EB\u30C8\u3092\u898B\u8D8A\u3057\u3066\u3001\u6700\u3082\u53B3\u5BC6\u306A\u30C1\u30A7\u30C3\u30AF\u3092\u6709\u52B9\u306B\u3059\u308B\n\    -Xrs              Java/VM\u306B\u3088\u308BOS\u30B7\u30B0\u30CA\u30EB\u306E\u4F7F\u7528\u3092\u524A\u6E1B\u3059\u308B(\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u3092\u53C2\u7167)\n\    -Xcheck:jni       JNI\u95A2\u6570\u306B\u5BFE\u3059\u308B\u8FFD\u52A0\u306E\u30C1\u30A7\u30C3\u30AF\u3092\u5B9F\u884C\u3059\u308B\n\    -Xshare:off       \u5171\u6709\u30AF\u30E9\u30B9\u306E\u30C7\u30FC\u30BF\u3092\u4F7F\u7528\u3057\u3088\u3046\u3068\u3057\u306A\u3044\n\    -Xshare:auto      \u53EF\u80FD\u3067\u3042\u308C\u3070\u5171\u6709\u30AF\u30E9\u30B9\u306E\u30C7\u30FC\u30BF\u3092\u4F7F\u7528\u3059\u308B(\u30C7\u30D5\u30A9\u30EB\u30C8)\n\    -Xshare:on        \u5171\u6709\u30AF\u30E9\u30B9\u30FB\u30C7\u30FC\u30BF\u306E\u4F7F\u7528\u3092\u5FC5\u9808\u306B\u3057\u3001\u3067\u304D\u306A\u3051\u308C\u3070\u5931\u6557\u3059\u308B\u3002\n\    -XshowSettings    \u3059\u3079\u3066\u306E\u8A2D\u5B9A\u3092\u8868\u793A\u3057\u3066\u7D9A\u884C\u3059\u308B\n\    -XshowSettings:all\n\                      \u3059\u3079\u3066\u306E\u8A2D\u5B9A\u3092\u8868\u793A\u3057\u3066\u7D9A\u884C\u3059\u308B\n\    -XshowSettings:vm \u3059\u3079\u3066\u306EVM\u95A2\u9023\u306E\u8A2D\u5B9A\u3092\u8868\u793A\u3057\u3066\u7D9A\u884C\u3059\u308B\n\    -XshowSettings:properties\n\                      \u3059\u3079\u3066\u306E\u30D7\u30ED\u30D1\u30C6\u30A3\u8A2D\u5B9A\u3092\u8868\u793A\u3057\u3066\u7D9A\u884C\u3059\u308B\n\    -XshowSettings:locale\n\                      \u3059\u3079\u3066\u306E\u30ED\u30B1\u30FC\u30EB\u95A2\u9023\u306E\u8A2D\u5B9A\u3092\u8868\u793A\u3057\u3066\u7D9A\u884C\u3059\u308B\n\n-X\u30AA\u30D7\u30B7\u30E7\u30F3\u306F\u975E\u6A19\u6E96\u306A\u306E\u3067\u3001\u4E88\u544A\u306A\u304F\u5909\u66F4\u3055\u308C\u308B\u5834\u5408\u304C\u3042\u308A\u307E\u3059\u3002\n
 
+# Translators please note do not translate the options themselves
+java.launcher.X.macosx.usage=\n\u6B21\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u306FMac OS X\u56FA\u6709\u3067\u3059\u3002\n\    -XstartOnFirstThread\n\                      main()\u30E1\u30BD\u30C3\u30C9\u3092\u6700\u521D(AppKit)\u306E\u30B9\u30EC\u30C3\u30C9\u3067\u5B9F\u884C\u3059\u308B\n\    -Xdock:name=<application name>"\n\                      Dock\u306B\u8868\u793A\u3055\u308C\u308B\u30C7\u30D5\u30A9\u30EB\u30C8\u30FB\u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u540D\u3092\u30AA\u30FC\u30D0\u30FC\u30E9\u30A4\u30C9\u3059\u308B\n\    -Xdock:icon=<path to icon file>\n\                      Dock\u306B\u8868\u793A\u3055\u308C\u308B\u30C7\u30D5\u30A9\u30EB\u30C8\u30FB\u30A2\u30A4\u30B3\u30F3\u3092\u30AA\u30FC\u30D0\u30FC\u30E9\u30A4\u30C9\u3059\u308B\n\n
+
 java.launcher.cls.error1=\u30A8\u30E9\u30FC: \u30E1\u30A4\u30F3\u30FB\u30AF\u30E9\u30B9{0}\u304C\u898B\u3064\u304B\u3089\u306A\u304B\u3063\u305F\u304B\u30ED\u30FC\u30C9\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F
 java.launcher.cls.error2=\u30A8\u30E9\u30FC: \u30E1\u30A4\u30F3\u30FB\u30E1\u30BD\u30C3\u30C9\u304C\u30AF\u30E9\u30B9{1}\u306E{0}\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u6B21\u306E\u3088\u3046\u306B\u30E1\u30A4\u30F3\u30FB\u30E1\u30BD\u30C3\u30C9\u3092\u5B9A\u7FA9\u3057\u3066\u304F\u3060\u3055\u3044\u3002\n\   public static void main(String[] args)
 java.launcher.cls.error3=\u30A8\u30E9\u30FC: \u30E1\u30A4\u30F3\u30FB\u30E1\u30BD\u30C3\u30C9\u306F\u30AF\u30E9\u30B9{0}\u306Evoid\u578B\u306E\u5024\u3092\u8FD4\u3059\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002\n\u6B21\u306E\u3088\u3046\u306B\u30E1\u30A4\u30F3\u30FB\u30E1\u30BD\u30C3\u30C9\u3092\u5B9A\u7FA9\u3057\u3066\u304F\u3060\u3055\u3044\u3002\n\   public static void main(String[] args)
--- a/src/share/classes/sun/launcher/resources/launcher_ko.properties	Wed May 02 14:00:06 2012 +0100
+++ b/src/share/classes/sun/launcher/resources/launcher_ko.properties	Wed May 02 15:06:35 2012 +0100
@@ -34,11 +34,14 @@
 java.launcher.ergo.message2  =\                  \uC11C\uBC84\uAE09 \uC2DC\uC2A4\uD15C\uC5D0\uC11C \uC2E4\uD589 \uC911\uC774\uAE30 \uB54C\uBB38\uC785\uB2C8\uB2E4.\n
 
 # Translators please note do not translate the options themselves
-java.launcher.opt.footer     =\    -cp <class search path of directories and zip/jar files>\n\    -classpath <class search path of directories and zip/jar files>\n\                  \uD074\uB798\uC2A4 \uD30C\uC77C\uC744 \uAC80\uC0C9\uD560 {0}(\uC73C)\uB85C \uAD6C\uBD84\uB41C \uB514\uB809\uD1A0\uB9AC,\n\                  JAR \uC544\uCE74\uC774\uBE0C \uBC0F ZIP \uC544\uCE74\uC774\uBE0C \uBAA9\uB85D\uC785\uB2C8\uB2E4.\n\    -D<name>=<value>\n\                  \uC2DC\uC2A4\uD15C \uC18D\uC131\uC744 \uC124\uC815\uD569\uB2C8\uB2E4.\n\    -verbose[:class|gc|jni]\n\                  \uC0C1\uC138 \uC815\uBCF4 \uCD9C\uB825\uC744 \uC0AC\uC6A9\uC73C\uB85C \uC124\uC815\uD569\uB2C8\uB2E4.\n\    -version      \uC81C\uD488 \uBC84\uC804\uC744 \uC778\uC1C4\uD55C \uD6C4 \uC885\uB8CC\uD569\uB2C8\uB2E4.\n\    -version:<value>\n\                  \uC2E4\uD589\uD560 \uBC84\uC804\uC744 \uC9C0\uC815\uD574\uC57C \uD569\uB2C8\uB2E4.\n\    -showversion  \uC81C\uD488 \uBC84\uC804\uC744 \uC778\uC1C4\uD55C \uD6C4 \uACC4\uC18D\uD569\uB2C8\uB2E4.\n\    -jre-restrict-search | -no-jre-restrict-search\n\                  \uBC84\uC804 \uAC80\uC0C9\uC5D0\uC11C \uC0AC\uC6A9\uC790 \uC804\uC6A9 JRE\uB97C \uD3EC\uD568/\uC81C\uC678\uD569\uB2C8\uB2E4.\n\    -? -help      \uC774 \uB3C4\uC6C0\uB9D0 \uBA54\uC2DC\uC9C0\uB97C \uC778\uC1C4\uD569\uB2C8\uB2E4.\n\    -X            \uBE44\uD45C\uC900 \uC635\uC158\uC5D0 \uB300\uD55C \uB3C4\uC6C0\uB9D0\uC744 \uC778\uC1C4\uD569\uB2C8\uB2E4.\n\    -ea[:<packagename>...|:<classname>]\n\    -enableassertions[:<packagename>...|:<classname>]\n\                  \uC138\uBD84\uC131\uC774 \uC9C0\uC815\uB41C \uAC80\uC99D\uC744 \uC0AC\uC6A9\uC73C\uB85C \uC124\uC815\uD569\uB2C8\uB2E4.\n\    -da[:<packagename>...|:<classname>]\n\    -disableassertions[:<packagename>...|:<classname>]\n\                  \uC138\uBD84\uC131\uC774 \uC9C0\uC815\uB41C \uAC80\uC99D\uC744 \uC0AC\uC6A9 \uC548\uD568\uC73C\uB85C \uC124\uC815\uD569\uB2C8\uB2E4.\n\    -esa | -enablesystemassertions\n\                  \uC2DC\uC2A4\uD15C \uAC80\uC99D\uC744 \uC0AC\uC6A9\uC73C\uB85C \uC124\uC815\uD569\uB2C8\uB2E4.\n\    -dsa | -disablesystemassertions\n\                  \uC2DC\uC2A4\uD15C \uAC80\uC99D\uC744 \uC0AC\uC6A9 \uC548\uD568\uC73C\uB85C \uC124\uC815\uD569\uB2C8\uB2E4.\n\    -agentlib:<libname>[=<options>]\n\                  <libname> \uACE0\uC720 \uC5D0\uC774\uC804\uD2B8 \uB77C\uC774\uBE0C\uB7EC\uB9AC\uB97C \uB85C\uB4DC\uD569\uB2C8\uB2E4(\uC608: -agentlib:hprof).\n\                  -agentlib:jdwp=help \uBC0F -agentlib:hprof=help\uB3C4 \uCC38\uC870\uD558\uC2ED\uC2DC\uC624.\n\    -agentpath:<pathname>[=<options>]\n\                  \uC804\uCCB4 \uACBD\uB85C\uBA85\uC744 \uC0AC\uC6A9\uD558\uC5EC \uACE0\uC720 \uC5D0\uC774\uC804\uD2B8 \uB77C\uC774\uBE0C\uB7EC\uB9AC\uB97C \uB85C\uB4DC\uD569\uB2C8\uB2E4.\n\    -javaagent:<jarpath>[=<options>]\n\                  Java \uD504\uB85C\uADF8\uB798\uBC0D \uC5B8\uC5B4 \uC5D0\uC774\uC804\uD2B8\uB97C \uB85C\uB4DC\uD569\uB2C8\uB2E4. java.lang.instrument\uB97C \uCC38\uC870\uD558\uC2ED\uC2DC\uC624.\n\    -splash:<imagepath>\n\                  \uC774\uBBF8\uC9C0\uAC00 \uC9C0\uC815\uB41C \uC2A4\uD50C\uB798\uC2DC \uD654\uBA74\uC744 \uD45C\uC2DC\uD569\uB2C8\uB2E4.\n\uC790\uC138\uD55C \uB0B4\uC6A9\uC740 http://java.sun.com/javase/reference\uB97C \uCC38\uC870\uD558\uC2ED\uC2DC\uC624.
+java.launcher.opt.footer     =\    -cp <class search path of directories and zip/jar files>\n\\    -classpath <class search path of directories and zip/jar files>\n\\                  \uD074\uB798\uC2A4 \uD30C\uC77C\uC744 \uAC80\uC0C9\uD560 {0}(\uC73C)\uB85C \uAD6C\uBD84\uB41C \uB514\uB809\uD1A0\uB9AC,\n\\                  JAR \uC544\uCE74\uC774\uBE0C \uBC0F ZIP \uC544\uCE74\uC774\uBE0C \uBAA9\uB85D\uC785\uB2C8\uB2E4.\n\\    -D<name>=<value>\n\\                  \uC2DC\uC2A4\uD15C \uC18D\uC131\uC744 \uC124\uC815\uD569\uB2C8\uB2E4.\n\\    -verbose[:class|gc|jni]\n\\                  \uC0C1\uC138 \uC815\uBCF4 \uCD9C\uB825\uC744 \uC0AC\uC6A9\uC73C\uB85C \uC124\uC815\uD569\uB2C8\uB2E4.\n\\    -version      \uC81C\uD488 \uBC84\uC804\uC744 \uC778\uC1C4\uD55C \uD6C4 \uC885\uB8CC\uD569\uB2C8\uB2E4.\n\\    -version:<value>\n\\                  \uC2E4\uD589\uD560 \uBC84\uC804\uC744 \uC9C0\uC815\uD574\uC57C \uD569\uB2C8\uB2E4.\n\\    -showversion  \uC81C\uD488 \uBC84\uC804\uC744 \uC778\uC1C4\uD55C \uD6C4 \uACC4\uC18D\uD569\uB2C8\uB2E4.\n\\    -jre-restrict-search | -no-jre-restrict-search\n\\                  \uBC84\uC804 \uAC80\uC0C9\uC5D0\uC11C \uC0AC\uC6A9\uC790 \uC804\uC6A9 JRE\uB97C \uD3EC\uD568/\uC81C\uC678\uD569\uB2C8\uB2E4.\n\\    -? -help      \uC774 \uB3C4\uC6C0\uB9D0 \uBA54\uC2DC\uC9C0\uB97C \uC778\uC1C4\uD569\uB2C8\uB2E4.\n\\    -X            \uBE44\uD45C\uC900 \uC635\uC158\uC5D0 \uB300\uD55C \uB3C4\uC6C0\uB9D0\uC744 \uC778\uC1C4\uD569\uB2C8\uB2E4.\n\\    -ea[:<packagename>...|:<classname>]\n\\    -enableassertions[:<packagename>...|:<classname>]\n\\                  \uC138\uBD84\uC131\uC774 \uC9C0\uC815\uB41C \uAC80\uC99D\uC744 \uC0AC\uC6A9\uC73C\uB85C \uC124\uC815\uD569\uB2C8\uB2E4.\n\\    -da[:<packagename>...|:<classname>]\n\\    -disableassertions[:<packagename>...|:<classname>]\n\\                  \uC138\uBD84\uC131\uC774 \uC9C0\uC815\uB41C \uAC80\uC99D\uC744 \uC0AC\uC6A9 \uC548\uD568\uC73C\uB85C \uC124\uC815\uD569\uB2C8\uB2E4.\n\\    -esa | -enablesystemassertions\n\\                  \uC2DC\uC2A4\uD15C \uAC80\uC99D\uC744 \uC0AC\uC6A9\uC73C\uB85C \uC124\uC815\uD569\uB2C8\uB2E4.\n\\    -dsa | -disablesystemassertions\n\\                  \uC2DC\uC2A4\uD15C \uAC80\uC99D\uC744 \uC0AC\uC6A9 \uC548\uD568\uC73C\uB85C \uC124\uC815\uD569\uB2C8\uB2E4.\n\\    -agentlib:<libname>[=<options>]\n\\                  <libname> \uACE0\uC720 \uC5D0\uC774\uC804\uD2B8 \uB77C\uC774\uBE0C\uB7EC\uB9AC\uB97C \uB85C\uB4DC\uD569\uB2C8\uB2E4(\uC608: -agentlib:hprof).\n\\                  -agentlib:jdwp=help \uBC0F -agentlib:hprof=help\uB3C4 \uCC38\uC870\uD558\uC2ED\uC2DC\uC624.\n\\    -agentpath:<pathname>[=<options>]\n\\                  \uC804\uCCB4 \uACBD\uB85C\uBA85\uC744 \uC0AC\uC6A9\uD558\uC5EC \uACE0\uC720 \uC5D0\uC774\uC804\uD2B8 \uB77C\uC774\uBE0C\uB7EC\uB9AC\uB97C \uB85C\uB4DC\uD569\uB2C8\uB2E4.\n\\    -javaagent:<jarpath>[=<options>]\n\\                  Java \uD504\uB85C\uADF8\uB798\uBC0D \uC5B8\uC5B4 \uC5D0\uC774\uC804\uD2B8\uB97C \uB85C\uB4DC\uD569\uB2C8\uB2E4. java.lang.instrument\uB97C \uCC38\uC870\uD558\uC2ED\uC2DC\uC624.\n\\    -splash:<imagepath>\n\\                  \uC774\uBBF8\uC9C0\uAC00 \uC9C0\uC815\uB41C \uC2A4\uD50C\uB798\uC2DC \uD654\uBA74\uC744 \uD45C\uC2DC\uD569\uB2C8\uB2E4.\n\uC790\uC138\uD55C \uB0B4\uC6A9\uC740 http://www.oracle.com/technetwork/java/javase/documentation/index.html\uC744 \uCC38\uC870\uD558\uC2ED\uC2DC\uC624.
 
 # Translators please note do not translate the options themselves
 java.launcher.X.usage=\    -Xmixed           \uD63C\uD569 \uBAA8\uB4DC\uB97C \uC2E4\uD589\uD569\uB2C8\uB2E4(\uAE30\uBCF8\uAC12).\n\    -Xint             \uD574\uC11D\uB41C \uBAA8\uB4DC\uB9CC \uC2E4\uD589\uD569\uB2C8\uB2E4.\n\    -Xbootclasspath:<directories and zip/jar files separated by {0}>\n\                      \uBD80\uD2B8\uC2A4\uD2B8\uB7A9 \uD074\uB798\uC2A4 \uBC0F \uB9AC\uC18C\uC2A4\uC5D0 \uB300\uD55C \uAC80\uC0C9 \uACBD\uB85C\uB97C \uC124\uC815\uD569\uB2C8\uB2E4.\n\    -Xbootclasspath/a:<directories and zip/jar files separated by {0}>\n\                      \uBD80\uD2B8\uC2A4\uD2B8\uB7A9 \uD074\uB798\uC2A4 \uACBD\uB85C \uB05D\uC5D0 \uCD94\uAC00\uD569\uB2C8\uB2E4.\n\    -Xbootclasspath/p:<directories and zip/jar files separated by {0}>\n\                      \uBD80\uD2B8\uC2A4\uD2B8\uB7A9 \uD074\uB798\uC2A4 \uACBD\uB85C \uC55E\uC5D0 \uCD94\uAC00\uD569\uB2C8\uB2E4.\n\    -Xdiag            \uCD94\uAC00 \uC9C4\uB2E8 \uBA54\uC2DC\uC9C0\uB97C \uD45C\uC2DC\uD569\uB2C8\uB2E4.\n\    -Xnoclassgc       \uD074\uB798\uC2A4\uC758 \uBD88\uD544\uC694\uD55C \uC815\uBCF4 \uBAA8\uC74C\uC744 \uC0AC\uC6A9 \uC548\uD568\uC73C\uB85C \uC124\uC815\uD569\uB2C8\uB2E4.\n\    -Xincgc           \uC99D\uBD84\uC801\uC778 \uBD88\uD544\uC694\uD55C \uC815\uBCF4 \uBAA8\uC74C\uC744 \uC0AC\uC6A9\uC73C\uB85C \uC124\uC815\uD569\uB2C8\uB2E4.\n\    -Xloggc:<file>    \uC2DC\uAC04 \uAE30\uB85D\uACFC \uD568\uAED8 \uD30C\uC77C\uC5D0 GC \uC0C1\uD0DC\uB97C \uAE30\uB85D\uD569\uB2C8\uB2E4.\n\    -Xbatch           \uBC31\uADF8\uB77C\uC6B4\uB4DC \uCEF4\uD30C\uC77C\uC744 \uC0AC\uC6A9 \uC548\uD568\uC73C\uB85C \uC124\uC815\uD569\uB2C8\uB2E4.\n\    -Xms<size>        \uCD08\uAE30 Java \uD799 \uD06C\uAE30\uB97C \uC124\uC815\uD569\uB2C8\uB2E4.\n\    -Xmx<size>        \uCD5C\uB300 Java \uD799 \uD06C\uAE30\uB97C \uC124\uC815\uD569\uB2C8\uB2E4.\n\    -Xss<size>        Java \uC2A4\uB808\uB4DC \uC2A4\uD0DD \uD06C\uAE30\uB97C \uC124\uC815\uD569\uB2C8\uB2E4.\n\    -Xprof            CPU \uD504\uB85C\uD30C\uC77C \uC791\uC131 \uB370\uC774\uD130\uB97C \uCD9C\uB825\uD569\uB2C8\uB2E4.\n\    -Xfuture          \uBBF8\uB798 \uAE30\uBCF8\uAC12\uC744 \uC608\uCE21\uD558\uC5EC \uAC00\uC7A5 \uC5C4\uACA9\uD55C \uAC80\uC0AC\uB97C \uC0AC\uC6A9\uC73C\uB85C \uC124\uC815\uD569\uB2C8\uB2E4.\n\    -Xrs              Java/VM\uC5D0 \uC758\uD55C OS \uC2E0\uD638 \uC0AC\uC6A9\uC744 \uC904\uC785\uB2C8\uB2E4(\uC124\uBA85\uC11C \uCC38\uC870).\n\    -Xcheck:jni       JNI \uD568\uC218\uC5D0 \uB300\uD55C \uCD94\uAC00 \uAC80\uC0AC\uB97C \uC218\uD589\uD569\uB2C8\uB2E4.\n\    -Xshare:off       \uACF5\uC720 \uD074\uB798\uC2A4 \uB370\uC774\uD130 \uC0AC\uC6A9\uC744 \uC2DC\uB3C4\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.\n\    -Xshare:auto      \uAC00\uB2A5\uD55C \uACBD\uC6B0 \uACF5\uC720 \uD074\uB798\uC2A4 \uB370\uC774\uD130\uB97C \uC0AC\uC6A9\uD569\uB2C8\uB2E4(\uAE30\uBCF8\uAC12).\n\    -Xshare:on        \uACF5\uC720 \uD074\uB798\uC2A4 \uB370\uC774\uD130\uB97C \uC0AC\uC6A9\uD574\uC57C \uD569\uB2C8\uB2E4. \uADF8\uB807\uC9C0 \uC54A\uC744 \uACBD\uC6B0 \uC2E4\uD328\uD569\uB2C8\uB2E4.\n\    -XshowSettings    \uBAA8\uB4E0 \uC124\uC815\uC744 \uD45C\uC2DC\uD55C \uD6C4 \uACC4\uC18D\uD569\uB2C8\uB2E4.\n\    -XshowSettings:all\n\                      \uBAA8\uB4E0 \uC124\uC815\uC744 \uD45C\uC2DC\uD55C \uD6C4 \uACC4\uC18D\uD569\uB2C8\uB2E4.\n\    -XshowSettings:vm \uBAA8\uB4E0 VM \uAD00\uB828 \uC124\uC815\uC744 \uD45C\uC2DC\uD55C \uD6C4 \uACC4\uC18D\uD569\uB2C8\uB2E4.\n\    -XshowSettings:properties\n\                      \uBAA8\uB4E0 \uC18D\uC131 \uC124\uC815\uC744 \uD45C\uC2DC\uD55C \uD6C4 \uACC4\uC18D\uD569\uB2C8\uB2E4.\n\    -XshowSettings:locale\n\                      \uBAA8\uB4E0 \uB85C\uCF00\uC77C \uAD00\uB828 \uC124\uC815\uC744 \uD45C\uC2DC\uD55C \uD6C4 \uACC4\uC18D\uD569\uB2C8\uB2E4.\n\n-X \uC635\uC158\uC740 \uBE44\uD45C\uC900 \uC635\uC158\uC774\uBBC0\uB85C \uD1B5\uC9C0 \uC5C6\uC774 \uBCC0\uACBD\uB420 \uC218 \uC788\uC2B5\uB2C8\uB2E4.\n
 
+# Translators please note do not translate the options themselves
+java.launcher.X.macosx.usage=\n\uB2E4\uC74C\uC740 Mac OS X\uC5D0 \uD2B9\uC815\uB41C \uC635\uC158\uC785\uB2C8\uB2E4.\n\\    -XstartOnFirstThread\n\\                      \uCCAB\uBC88\uC9F8 (AppKit) \uC2A4\uB808\uB4DC\uC5D0 main() \uBA54\uC18C\uB4DC\uB97C \uC2E4\uD589\uD569\uB2C8\uB2E4.\n\\    -Xdock:name=<application name>"\n\\                      \uACE0\uC815\uC73C\uB85C \uD45C\uC2DC\uB41C \uAE30\uBCF8 \uC751\uC6A9 \uD504\uB85C\uADF8\uB7A8 \uC774\uB984\uC744 \uBB34\uD6A8\uD654\uD569\uB2C8\uB2E4.\n\\    -Xdock:icon=<path to icon file>\n\\                      \uACE0\uC815\uC73C\uB85C \uD45C\uC2DC\uB41C \uAE30\uBCF8 \uC544\uC774\uCF58\uC744 \uBB34\uD6A8\uD654\uD569\uB2C8\uB2E4.\n\n
+
 java.launcher.cls.error1=\uC624\uB958: \uAE30\uBCF8 \uD074\uB798\uC2A4 {0}\uC744(\uB97C) \uCC3E\uAC70\uB098 \uB85C\uB4DC\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
 java.launcher.cls.error2=\uC624\uB958: {1} \uD074\uB798\uC2A4\uC5D0\uC11C \uAE30\uBCF8 \uBA54\uC18C\uB4DC\uAC00 {0}\uC774(\uAC00) \uC544\uB2D9\uB2C8\uB2E4. \uB2E4\uC74C \uD615\uC2DD\uC73C\uB85C \uAE30\uBCF8 \uBA54\uC18C\uB4DC\uB97C \uC815\uC758\uD558\uC2ED\uC2DC\uC624.\n\   public static void main(String[] args)
 java.launcher.cls.error3=\uC624\uB958: \uAE30\uBCF8 \uBA54\uC18C\uB4DC\uB294 {0} \uD074\uB798\uC2A4\uC5D0\uC11C void \uC720\uD615\uC758 \uAC12\uC744 \uBC18\uD658\uD574\uC57C \uD569\uB2C8\uB2E4. \n\uB2E4\uC74C \uD615\uC2DD\uC73C\uB85C \uAE30\uBCF8 \uBA54\uC18C\uB4DC\uB97C \uC815\uC758\uD558\uC2ED\uC2DC\uC624.\n\   public static void main(String[] args)
--- a/src/share/classes/sun/launcher/resources/launcher_pt_BR.properties	Wed May 02 14:00:06 2012 +0100
+++ b/src/share/classes/sun/launcher/resources/launcher_pt_BR.properties	Wed May 02 15:06:35 2012 +0100
@@ -34,11 +34,14 @@
 java.launcher.ergo.message2  =\                  porque a execu\u00E7\u00E3o est\u00E1 sendo feita em uma m\u00E1quina de classe de servidor.\n
 
 # Translators please note do not translate the options themselves
-java.launcher.opt.footer     =\    -cp <caminho de pesquisa da classe dos diret\u00F3rios e arquivos zip/jar>\n\    -classpath <caminho de pesquisa da classe dos diret\u00F3rios e arquivos zip/jar>\n\                  Uma lista separada por {0} de diret\u00F3rios, archives JAR\n\                  e archives ZIP nos quais ser\u00E3o procurados os arquivos de classe.\n\    -D<nome>=<valor>\n\                  define uma propriedade do sistema\n\    -verbose[:classe|gc|jni]\n\                  ativa a sa\u00EDda detalhada\n\    -version      imprime a vers\u00E3o do produto e sai do programa\n\    -version:<valor>\n\                  requer a execu\u00E7\u00E3o da vers\u00E3o especificada\n\    -showversion  imprime a vers\u00E3o do produto e continua\n\    -jre-restrict-search | -no-jre-restrict-search\n\                  inclui/exclui JREs privados do usu\u00E1rio na pesquisa de vers\u00E3o\n\    -? -help      imprime esta mensagem de ajuda\n\    -X            imprime a ajuda sobre op\u00E7\u00F5es n\u00E3o padronizadas\n\    -ea[:<nome do pacote>...|:<nome da classe>]\n\    -enableassertions[:<nome do pacote>...|:<nome da classe>]\n\                  ativa asser\u00E7\u00F5es com granularidade especificada\n\    -da[:<nome do pacote>...|:<nome da classe>]\n\    -disableassertions[:<nome do pacote>...|:<nome da classe>]\n\                  desativa asser\u00E7\u00F5es com granularidade especificada\n\    -esa | -enablesystemassertions\n\                  ativa asser\u00E7\u00F5es do sistema\n\    -dsa | -disablesystemassertions\n\                  desativa asser\u00E7\u00F5es do sistema\n\    -agentlib:<nome da biblioteca>[=<op\u00E7\u00F5es>]\n\                  carrega a biblioteca de agentes nativa <nome da biblioteca>, por exempl: -agentlib:hprof\n\                  consulte tamb\u00E9m: -agentlib:jdwp=help e -agentlib:hprof=help\n\    -agentpath:<nome do caminho>[=<op\u00E7\u00F5es>]\n\                  carrega a biblioteca de agentes nativa com base no nome do caminho completo\n\    -javaagent:<caminho do arquivo jar>[=<op\u00E7\u00F5es>]\n\                  carrega o agente da linguagem de programa\u00E7\u00E3o Java; consulte java.lang.instrument\n\    -splash:<caminho da imagem>\n\                  mostra a tela de abertura com a imagem especificada\nConsulte http://java.sun.com/javase/reference para obter mais detalhes.
+java.launcher.opt.footer     =\    -cp <caminho de pesquisa da classe dos diret\u00F3rios e arquivos zip/jar>\n\\    -classpath <caminho de pesquisa da classe dos diret\u00F3rios e arquivos zip/jar>\n\\                  Uma lista separada por {0} de diret\u00F3rios, archives JAR\n\\                  e archives ZIP nos quais ser\u00E3o procurados os arquivos de classe.\n\\    -D<nome>=<valor>\n\\                  define uma propriedade do sistema\n\\    -verbose[:class|gc|jni]\n\\                  ativa a sa\u00EDda detalhada\n\\    -version      imprime a vers\u00E3o do produto e sai do programa\n\\    -version:<valor>\n\\                  requer a execu\u00E7\u00E3o da vers\u00E3o especificada\n\\    -showversion  imprime a vers\u00E3o do produto e continua\n\\    -jre-restrict-search | -no-jre-restrict-search\n\\                  inclui/exclui JREs privados do usu\u00E1rio na pesquisa de vers\u00E3o\n\\    -? -help      imprime esta mensagem de ajuda\n\\    -X            imprime a ajuda sobre op\u00E7\u00F5es n\u00E3o padronizadas\n\\    -ea[:<nome do pacote>...|:<nome da classe>]\n\\    -enableassertions[:<nome do pacote>...|:<nome da classe>]\n\\                  ativa asser\u00E7\u00F5es com granularidade especificada\n\\    -da[:<nome do pacote>...|:<nome da classe>]\n\\    -disableassertions[:<nome do pacote>...|:<nome da classe>]\n\\                  desativa asser\u00E7\u00F5es com granularidade especificada\n\\    -esa | -enablesystemassertions\n\\                  ativa asser\u00E7\u00F5es do sistema\n\\    -dsa | -disablesystemassertions\n\\                  desativa asser\u00E7\u00F5es do sistema\n\\    -agentlib:<nome da biblioteca>[=<op\u00E7\u00F5est>]\n\\                  carrega a biblioteca de agentes nativa <nome da biblioteca>, e.g. -agentlib:hprof\n\\                  consulte tamb\u00E9m, -agentlib:jdwp=help and -agentlib:hprof=help\n\\    -agentpath:<nome do caminho>[=<op\u00E7\u00F5es>]\n\\                  carrega a biblioteca de agentes nativa com base no nome do caminho completo\n\\    -javaagent:<caminho do arquivo jar>[=<op\u00E7\u00F5es>]\n\\                  carrega o agente da linguagem de programa\u00E7\u00E3o Java; consulte java.lang.instrument\n\\    -splash:<caminho da imagem>\n\\                  mostra a tela de abertura com a imagem especificada\nConsulte http://www.oracle.com/technetwork/java/javase/documentation/index.html para ver mais detalhes.
 
 # Translators please note do not translate the options themselves
 java.launcher.X.usage=\    -Xmixed           execu\u00E7\u00E3o no modo misto (default)\n\    -Xint             execu\u00E7\u00E3o somente no modo interpretado\n\    -Xbootclasspath:<diret\u00F3rios e arquivos zip/jar separados por {0}>\n\                      define o caminho de pesquisa para classes e recursos de inicializa\u00E7\u00E3o\n\    -Xbootclasspath/a:<diret\u00F3rios e arquivos zip/jar separados por {0}>\n\                      anexa no final do caminho da classe de inicializa\u00E7\u00E3o\n\    -Xbootclasspath/p:<diret\u00F3rios e arquivos zip/jar separados por {0}>\n\                      anexa no in\u00EDcio do caminho da classe de inicializa\u00E7\u00E3o\n\    -Xdiag            mostra mensagens de diagn\u00F3stico adicionais\n\    -Xnoclassgc       desativa a coleta de lixo da classe\n\    -Xincgc           ativa a coleta de lixo incremental\n\    -Xloggc:<arquivo>    registra o status do GC status em um arquivo com marca\u00E7\u00F5es de data e hor\u00E1rio\n\    -Xbatch           desativa a compila\u00E7\u00E3o em segundo plano\n\    -Xms<tamanho>        define o tamanho inicial do heap Java\n\    -Xmx<tamanho>        define o tamanho m\u00E1ximo do heap Java\n\    -Xss<tamanho>        define o tamanho da pilha de threads java\n\    -Xprof            produz dados de perfil da cpu\n\    -Xfuture          ativa verifica\u00E7\u00F5es de n\u00EDvel m\u00E1ximo de exig\u00EAncia, prevendo o valor default futuro\n\    -Xrs              reduz o uso de sinais do SO pelo(a) Java/VM (consulte a documenta\u00E7\u00E3o)\n\    -Xcheck:jni       executa verifica\u00E7\u00F5es adicionais de fun\u00E7\u00F5es da JNI\n\    -Xshare:off       n\u00E3o tenta usar dados da classe compartilhada\n\    -Xshare:auto      se poss\u00EDvel, usa dados da classe compartilhada (default)\n\    -Xshare:on        requer o uso de dados da classe compartilhada, caso contr\u00E1rio haver\u00E1 falha.\n\    -XshowSettings    mostra todas as defini\u00E7\u00F5es e continua\n\    -XshowSettings:all\n\                      mostra todas as defini\u00E7\u00F5es e continua\n\    -XshowSettings:vm mostra todas as defini\u00E7\u00F5es relacionadas \u00E0 vm e continua\n\    -XshowSettings:properties\n\                      mostra todas as defini\u00E7\u00F5es da propriedade e continua\n\    -XshowSettings:locale\n\                      mostra todas as defini\u00E7\u00F5es relativas \u00E0s configura\u00E7\u00F5es regionais e continua\n\nAs -X options n\u00E3o s\u00E3o padronizadas e est\u00E3o sujeitas a altera\u00E7\u00F5es sem aviso.\n
 
+# Translators please note do not translate the options themselves
+java.launcher.X.macosx.usage=\nAs op\u00E7\u00F5es a seguir s\u00E3o espec\u00EDficas para o Mac OS X:\n\\    -XstartOnFirstThread\n\\                      executa o m\u00E9todo main() no primeiro thread (AppKit)\n\\    -Xdock:name=<nome da aplica\u00E7\u00E3o>"\n\\                      substitui o nome da aplica\u00E7\u00E3o default exibido no encaixe\n\\    -Xdock:icon=<caminho para o arquivo do \u00EDcone>\n\\                      substitui o \u00EDcone exibido no encaixe\n\n
+
 java.launcher.cls.error1=Erro: N\u00E3o foi poss\u00EDvel localizar nem carregar a classe principal {0}
 java.launcher.cls.error2=Erro: O m\u00E9todo principal n\u00E3o \u00E9 {0} na classe {1}; defina o m\u00E9todo principal como:\n\   public static void main(String[] args)
 java.launcher.cls.error3=Erro: O m\u00E9todo principal deve retornar um valor do tipo void na classe {0}; \ndefina o m\u00E9todo principal como:\n\   public static void main(String[] args)
--- a/src/share/classes/sun/launcher/resources/launcher_sv.properties	Wed May 02 14:00:06 2012 +0100
+++ b/src/share/classes/sun/launcher/resources/launcher_sv.properties	Wed May 02 15:06:35 2012 +0100
@@ -34,11 +34,14 @@
 java.launcher.ergo.message2  =\                  eftersom du k\u00F6r en serverklassmaskin.\n
 
 # Translators please note do not translate the options themselves
-java.launcher.opt.footer     =\    -cp <klass\u00F6kv\u00E4g f\u00F6r kataloger och zip-/jar-filer>\n\    -classpath <klass\u00F6kv\u00E4g f\u00F6r kataloger och zip-/jar-filer>\n\                  En {0}-avgr\u00E4nsad lista med kataloger, JAR-arkiv,\n\                  och ZIP-arkiv f\u00F6r s\u00F6kning efter klassfiler.\n\    -D<namn>=<v\u00E4rde>\n\                  ange en systemegenskap\n\    -verbose[:class|gc|jni]\n\                  aktivera utf\u00F6rliga utdata\n\    -version      skriv ut produktversionen och avsluta\n\    -version:<v\u00E4rde>\n\                  beg\u00E4r den specifika versionen som ska k\u00F6ras\n\    -showversion  skriv ut produktversionen och forts\u00E4tt\n\    -jre-restrict-search | -no-jre-restrict-search\n\                  inkludera/exkludera anv\u00E4ndarprivata JRE:er i versions\u00F6kningen\n\    -? -help      skriv ut det h\u00E4r hj\u00E4lpmeddelandet\n\    -X            skriv ut hj\u00E4lp f\u00F6r icke-standardalternativ\n\    -ea[:<paket>...|:<klass>]\n\    -enableassertions[:<paket>...|:<klass>]\n\                  aktivera verifiering med angiven detaljgrad\n\    -da[:<packagename>...|:<klass>]\n\    -disableassertions[:<paket>...|:<klass>]\n\                  avaktivera verifiering med angiven detaljgrad\n\    -esa | -enablesystemassertions\n\                  aktivera systemverifieringar\n\    -dsa | -disablesystemassertions\n\                  avaktivera systemverifieringar\n\    -agentlib:<bibliotek>[=<alternativ>]\n\                  ladda ursprungligt agentbibliotek <bibliotek>, e.g. -agentlib:hprof\n\                  se \u00E4ven -agentlib:jdwp=help och -agentlib:hprof=help\n\    -agentpath:<s\u00F6kv\u00E4g>[=<alternativ>]\n\                  ladda ursprungligt agentbibliotek med helt s\u00F6kv\u00E4gsnamn\n\    -javaagent:<jar-s\u00F6kv\u00E4g>[=<alternativ>]\n\                  ladda Java-programspr\u00E5ksagent, se java.lang.instrument\n\    -splash:<bilds\u00F6kv\u00E4g>\n\                  visa v\u00E4lkomstsk\u00E4rm med angiven bild\nMer information finns p\u00E5 http://java.sun.com/javase/reference.
+java.launcher.opt.footer     =\    -cp <klass\u00F6kv\u00E4g f\u00F6r kataloger och zip-/jar-filer>\n\    -classpath <klass\u00F6kv\u00E4g f\u00F6r kataloger och zip-/jar-filer>\n\                  En {0}-separerad lista med kataloger, JAR-arkiv,\n\                  och ZIP-arkiv f\u00F6r s\u00F6kning efter klassfiler.\n\    -D<name>=<value>\n\                  ange en systemegenskap\n\    -verbose[:class|gc|jni]\n\                  aktivera utf\u00F6rliga utdata\n\    -version      skriv ut produktversionen och avsluta\n\    -version:<value>\n\                  beg\u00E4r den specifika versionen som ska k\u00F6ras\n\    -showversion  skriv ut produktversionen och forts\u00E4tt\n\    -jre-restrict-search | -no-jre-restrict-search\n\                  inkludera/exkludera anv\u00E4ndarprivata JRE:er i versions\u00F6kningen\n\    -? -help      skriv ut det h\u00E4r hj\u00E4lpmeddelandet\n\    -X            skriv ut hj\u00E4lp f\u00F6r icke-standardalternativ\n\    -ea[:<packagename>...|:<classname>]\n\    -enableassertions[:<packagename>...|:<classname>]\n\                  aktivera verifiering med angiven detaljgrad\n\    -da[:<packagename>...|:<classname>]\n\    -disableassertions[:<packagename>...|:<classname>]\n\                  avaktivera verifiering med angiven detaljgrad\n\    -esa | -enablesystemassertions\n\                  aktivera systemverifieringar\n\    -dsa | -disablesystemassertions\n\                  avaktivera systemverifieringar\n\    -agentlib:<libname>[=<options>]\n\                  ladda ursprungligt agentbibliotek <libname>, e.g. -agentlib:hprof\n\                  se \u00E4ven -agentlib:jdwp=help och -agentlib:hprof=help\n\    -agentpath:<pathname>[=<options>]\n\                  ladda ursprungligt agentbibliotek med helt s\u00F6kv\u00E4gsnamn\n\    -javaagent:<jarpath>[=<options>]\n\                  ladda Java-programspr\u00E5ksagent, se java.lang.instrument\n\    -splash:<imagepath>\n\                  visa v\u00E4lkomstsk\u00E4rm med angiven bild\nMer information finns p\u00E5 http://www.oracle.com/technetwork/java/javase/documentation/index.html.
 
 # Translators please note do not translate the options themselves
 java.launcher.X.usage=\    -Xmixed           k\u00F6rning i blandat l\u00E4ge (standard)\n\    -Xint             endast k\u00F6rning i tolkat l\u00E4ge\n\    -Xbootclasspath:<kataloger och zip-/jar-filer avgr\u00E4nsas med {0}>\n\                      ange s\u00F6kv\u00E4g f\u00F6r programladdningsklasser och -resurser\n\    -Xbootclasspath/a:<kataloger och zip-/jar-filer avgr\u00E4nsas med {0}>\n\                      l\u00E4gg till i slutet av programladdningsklassens s\u00F6kv\u00E4g\n\    -Xbootclasspath/p:<kataloger och zip-/jar-filer avgr\u00E4nsas med {0}>\n\                      l\u00E4gg till i b\u00F6rjan av programladdningsklassens s\u00F6kv\u00E4g\n\    -Xdiag            visa ytterligare diagnostiska meddelanden\n\    -Xnoclassgc       avaktivera klassens skr\u00E4pinsamling\n\    -Xincgc           aktivera inkrementell skr\u00E4pinsamling\n\    -Xloggc:<fil>    logga GC-status till en fil med tidsst\u00E4mplar\n\    -Xbatch           avaktivera bakgrundskompilering\n\    -Xms<storlek>        ange ursprunglig storlek f\u00F6r Java-heap\n\    -Xmx<storlek>        ange maximal storlek f\u00F6r Java-heap\n\    -Xss<storlek>        ange storlek f\u00F6r java-tr\u00E5dsstack\n\    -Xprof            utdata f\u00F6r processorprofilering\n\    -Xfuture          aktivera str\u00E4ngaste kontroller, f\u00F6rv\u00E4ntad framtida standard\n\    -Xrs              minska OS-signalanv\u00E4ndning av Java/VM (se dokumentation)\n\    -Xcheck:jni       utf\u00F6r ytterligare kontroller f\u00F6r JNI-funktioner\n\    -Xshare:off       anv\u00E4nd inte delade klassdata\n\    -Xshare:auto      anv\u00E4nd delade klassdata om det g\u00E5r (standard)\n\    -Xshare:on        kr\u00E4v att delade klassdata anv\u00E4nds, annars slutf\u00F6r inte.\n\    -XshowSettings    visa alla inst\u00E4llningar och forts\u00E4tt\n\    -XshowSettings:all\n\                      visa alla inst\u00E4llningar och forts\u00E4tt\n\    -XshowSettings:vm visa alla vm-relaterade inst\u00E4llningar och forts\u00E4tt\n\    -XshowSettings:properties\n\                      visa alla egenskapsinst\u00E4llningar och forts\u00E4tt\n\    -XshowSettings:locale\n\                      visa alla spr\u00E5krelaterade inst\u00E4llningar och forts\u00E4tt\n\n-X-alternativen \u00E4r inte standard och kan \u00E4ndras utan f\u00F6reg\u00E5ende meddelande.\n
 
+# Translators please note do not translate the options themselves
+java.launcher.X.macosx.usage=\nF\u00F6ljande alternativ \u00E4r specifika f\u00F6r Mac OS X:\n\    -XstartOnFirstThread\n\                      k\u00F6r huvudmetoden() p\u00E5 den f\u00F6rsta (AppKit) tr\u00E5den\n\    -Xdock:name=<application name>"\n\                      \u00E5sidosatt standardapplikationsnamn visas i docka\n\    -Xdock:icon=<path to icon file>\n\                      \u00E5sidosatt standardikon visas i docka\n\n
+
 java.launcher.cls.error1=Fel: Hittar inte eller kan inte ladda huvudklassen {0}
 java.launcher.cls.error2=Fel: Huvudmetoden \u00E4r inte {0} i klassen {1}, definiera huvudmetoden som:\n\   public static void main(String[] args)
 java.launcher.cls.error3=Fel: Huvudmetoden m\u00E5ste returnera ett v\u00E4rde av typen void i klassen {0}, \ndefiniera huvudmetoden som:\n\   public static void main(String[] args)
--- a/src/share/classes/sun/launcher/resources/launcher_zh_CN.properties	Wed May 02 14:00:06 2012 +0100
+++ b/src/share/classes/sun/launcher/resources/launcher_zh_CN.properties	Wed May 02 15:06:35 2012 +0100
@@ -34,11 +34,14 @@
 java.launcher.ergo.message2  =\                  \u56E0\u4E3A\u60A8\u662F\u5728\u670D\u52A1\u5668\u7C7B\u8BA1\u7B97\u673A\u4E0A\u8FD0\u884C\u3002\n
 
 # Translators please note do not translate the options themselves
-java.launcher.opt.footer     =\    -cp <\u76EE\u5F55\u548C zip/jar \u6587\u4EF6\u7684\u7C7B\u641C\u7D22\u8DEF\u5F84>\n\    -classpath <\u76EE\u5F55\u548C zip/jar \u6587\u4EF6\u7684\u7C7B\u641C\u7D22\u8DEF\u5F84>\n\                  \u7528 {0} \u5206\u9694\u7684\u76EE\u5F55, JAR \u6863\u6848\n\                  \u548C ZIP \u6863\u6848\u5217\u8868, \u7528\u4E8E\u641C\u7D22\u7C7B\u6587\u4EF6\u3002\n\    -D<name>=<value>\n\                  \u8BBE\u7F6E\u7CFB\u7EDF\u5C5E\u6027\n\    -verbose[:class|gc|jni]\n\                  \u542F\u7528\u8BE6\u7EC6\u8F93\u51FA\n\    -version      \u8F93\u51FA\u4EA7\u54C1\u7248\u672C\u5E76\u9000\u51FA\n\    -version:<value>\n\                  \u9700\u8981\u6307\u5B9A\u7684\u7248\u672C\u624D\u80FD\u8FD0\u884C\n\    -showversion  \u8F93\u51FA\u4EA7\u54C1\u7248\u672C\u5E76\u7EE7\u7EED\n\    -jre-restrict-search | -no-jre-restrict-search\n\                  \u5728\u7248\u672C\u641C\u7D22\u4E2D\u5305\u62EC/\u6392\u9664\u7528\u6237\u4E13\u7528 JRE\n\    -? -help      \u8F93\u51FA\u6B64\u5E2E\u52A9\u6D88\u606F\n\    -X            \u8F93\u51FA\u975E\u6807\u51C6\u9009\u9879\u7684\u5E2E\u52A9\n\    -ea[:<packagename>...|:<classname>]\n\    -enableassertions[:<packagename>...|:<classname>]\n\                  \u6309\u6307\u5B9A\u7684\u7C92\u5EA6\u542F\u7528\u65AD\u8A00\n\    -da[:<packagename>...|:<classname>]\n\    -disableassertions[:<packagename>...|:<classname>]\n\                  \u7981\u7528\u5177\u6709\u6307\u5B9A\u7C92\u5EA6\u7684\u65AD\u8A00\n\    -esa | -enablesystemassertions\n\                  \u542F\u7528\u7CFB\u7EDF\u65AD\u8A00\n\    -dsa | -disablesystemassertions\n\                  \u7981\u7528\u7CFB\u7EDF\u65AD\u8A00\n\    -agentlib:<libname>[=<options>]\n\                  \u52A0\u8F7D\u672C\u673A\u4EE3\u7406\u5E93 <libname>, \u4F8B\u5982 -agentlib:hprof\n\                  \u53E6\u8BF7\u53C2\u9605 -agentlib:jdwp=help \u548C -agentlib:hprof=help\n\    -agentpath:<pathname>[=<options>]\n\                  \u6309\u5B8C\u6574\u8DEF\u5F84\u540D\u52A0\u8F7D\u672C\u673A\u4EE3\u7406\u5E93\n\    -javaagent:<jarpath>[=<options>]\n\                  \u52A0\u8F7D Java \u7F16\u7A0B\u8BED\u8A00\u4EE3\u7406, \u8BF7\u53C2\u9605 java.lang.instrument\n\    -splash:<imagepath>\n\                  \u4F7F\u7528\u6307\u5B9A\u7684\u56FE\u50CF\u663E\u793A\u542F\u52A8\u5C4F\u5E55\n\u6709\u5173\u8BE6\u7EC6\u4FE1\u606F, \u8BF7\u53C2\u9605 http://java.sun.com/javase/reference\u3002
+java.launcher.opt.footer     =\    -cp <\u76EE\u5F55\u548C zip/jar \u6587\u4EF6\u7684\u7C7B\u641C\u7D22\u8DEF\u5F84>\n\    -classpath <\u76EE\u5F55\u548C zip/jar \u6587\u4EF6\u7684\u7C7B\u641C\u7D22\u8DEF\u5F84>\n\                  \u7528 {0} \u5206\u9694\u7684\u76EE\u5F55, JAR \u6863\u6848\n\                  \u548C ZIP \u6863\u6848\u5217\u8868, \u7528\u4E8E\u641C\u7D22\u7C7B\u6587\u4EF6\u3002\n\    -D<name>=<value>\n\                  \u8BBE\u7F6E\u7CFB\u7EDF\u5C5E\u6027\n\    -verbose[:class|gc|jni]\n\                  \u542F\u7528\u8BE6\u7EC6\u8F93\u51FA\n\    -version      \u8F93\u51FA\u4EA7\u54C1\u7248\u672C\u5E76\u9000\u51FA\n\    -version:<value>\n\                  \u9700\u8981\u6307\u5B9A\u7684\u7248\u672C\u624D\u80FD\u8FD0\u884C\n\    -showversion  \u8F93\u51FA\u4EA7\u54C1\u7248\u672C\u5E76\u7EE7\u7EED\n\    -jre-restrict-search | -no-jre-restrict-search\n\                  \u5728\u7248\u672C\u641C\u7D22\u4E2D\u5305\u62EC/\u6392\u9664\u7528\u6237\u4E13\u7528 JRE\n\    -? -help      \u8F93\u51FA\u6B64\u5E2E\u52A9\u6D88\u606F\n\    -X            \u8F93\u51FA\u975E\u6807\u51C6\u9009\u9879\u7684\u5E2E\u52A9\n\    -ea[:<packagename>...|:<classname>]\n\    -enableassertions[:<packagename>...|:<classname>]\n\                  \u6309\u6307\u5B9A\u7684\u7C92\u5EA6\u542F\u7528\u65AD\u8A00\n\    -da[:<packagename>...|:<classname>]\n\    -disableassertions[:<packagename>...|:<classname>]\n\                  \u7981\u7528\u5177\u6709\u6307\u5B9A\u7C92\u5EA6\u7684\u65AD\u8A00\n\    -esa | -enablesystemassertions\n\                  \u542F\u7528\u7CFB\u7EDF\u65AD\u8A00\n\    -dsa | -disablesystemassertions\n\                  \u7981\u7528\u7CFB\u7EDF\u65AD\u8A00\n\    -agentlib:<libname>[=<options>]\n\                  \u52A0\u8F7D\u672C\u673A\u4EE3\u7406\u5E93 <libname>, \u4F8B\u5982 -agentlib:hprof\n\                  \u53E6\u8BF7\u53C2\u9605 -agentlib:jdwp=help \u548C -agentlib:hprof=help\n\    -agentpath:<pathname>[=<options>]\n\                  \u6309\u5B8C\u6574\u8DEF\u5F84\u540D\u52A0\u8F7D\u672C\u673A\u4EE3\u7406\u5E93\n\    -javaagent:<jarpath>[=<options>]\n\                  \u52A0\u8F7D Java \u7F16\u7A0B\u8BED\u8A00\u4EE3\u7406, \u8BF7\u53C2\u9605 java.lang.instrument\n\    -splash:<imagepath>\n\                  \u4F7F\u7528\u6307\u5B9A\u7684\u56FE\u50CF\u663E\u793A\u542F\u52A8\u5C4F\u5E55\n\u6709\u5173\u8BE6\u7EC6\u4FE1\u606F, \u8BF7\u53C2\u9605 http://www.oracle.com/technetwork/java/javase/documentation/index.html\u3002
 
 # Translators please note do not translate the options themselves
 java.launcher.X.usage=\    -Xmixed           \u6DF7\u5408\u6A21\u5F0F\u6267\u884C (\u9ED8\u8BA4)\n\    -Xint             \u4EC5\u89E3\u91CA\u6A21\u5F0F\u6267\u884C\n\    -Xbootclasspath:<\u7528 {0} \u5206\u9694\u7684\u76EE\u5F55\u548C zip/jar \u6587\u4EF6>\n\                      \u8BBE\u7F6E\u641C\u7D22\u8DEF\u5F84\u4EE5\u5F15\u5BFC\u7C7B\u548C\u8D44\u6E90\n\    -Xbootclasspath/a:<\u7528 {0} \u5206\u9694\u7684\u76EE\u5F55\u548C zip/jar \u6587\u4EF6>\n\                      \u9644\u52A0\u5728\u5F15\u5BFC\u7C7B\u8DEF\u5F84\u672B\u5C3E\n\    -Xbootclasspath/p:<\u7528 {0} \u5206\u9694\u7684\u76EE\u5F55\u548C zip/jar \u6587\u4EF6>\n\                      \u7F6E\u4E8E\u5F15\u5BFC\u7C7B\u8DEF\u5F84\u4E4B\u524D\n\    -Xdiag            \u663E\u793A\u9644\u52A0\u8BCA\u65AD\u6D88\u606F\n\    -Xnoclassgc       \u7981\u7528\u7C7B\u5783\u573E\u6536\u96C6\n\    -Xincgc           \u542F\u7528\u589E\u91CF\u5783\u573E\u6536\u96C6\n\    -Xloggc:<file>    \u5C06 GC \u72B6\u6001\u8BB0\u5F55\u5728\u6587\u4EF6\u4E2D (\u5E26\u65F6\u95F4\u6233)\n\    -Xbatch           \u7981\u7528\u540E\u53F0\u7F16\u8BD1\n\    -Xms<size>        \u8BBE\u7F6E\u521D\u59CB Java \u5806\u5927\u5C0F\n\    -Xmx<size>        \u8BBE\u7F6E\u6700\u5927 Java \u5806\u5927\u5C0F\n\    -Xss<size>        \u8BBE\u7F6E Java \u7EBF\u7A0B\u5806\u6808\u5927\u5C0F\n\    -Xprof            \u8F93\u51FA cpu \u914D\u7F6E\u6587\u4EF6\u6570\u636E\n\    -Xfuture          \u542F\u7528\u6700\u4E25\u683C\u7684\u68C0\u67E5, \u9884\u671F\u5C06\u6765\u7684\u9ED8\u8BA4\u503C\n\    -Xrs              \u51CF\u5C11 Java/VM \u5BF9\u64CD\u4F5C\u7CFB\u7EDF\u4FE1\u53F7\u7684\u4F7F\u7528 (\u8BF7\u53C2\u9605\u6587\u6863)\n\    -Xcheck:jni       \u5BF9 JNI \u51FD\u6570\u6267\u884C\u5176\u4ED6\u68C0\u67E5\n\    -Xshare:off       \u4E0D\u5C1D\u8BD5\u4F7F\u7528\u5171\u4EAB\u7C7B\u6570\u636E\n\    -Xshare:auto      \u5728\u53EF\u80FD\u7684\u60C5\u51B5\u4E0B\u4F7F\u7528\u5171\u4EAB\u7C7B\u6570\u636E (\u9ED8\u8BA4)\n\    -Xshare:on        \u8981\u6C42\u4F7F\u7528\u5171\u4EAB\u7C7B\u6570\u636E, \u5426\u5219\u5C06\u5931\u8D25\u3002\n\    -XshowSettings    \u663E\u793A\u6240\u6709\u8BBE\u7F6E\u5E76\u7EE7\u7EED\n\    -XshowSettings:all\n\                      \u663E\u793A\u6240\u6709\u8BBE\u7F6E\u5E76\u7EE7\u7EED\n\    -XshowSettings:vm \u663E\u793A\u6240\u6709\u4E0E vm \u76F8\u5173\u7684\u8BBE\u7F6E\u5E76\u7EE7\u7EED\n\    -XshowSettings:properties\n\                      \u663E\u793A\u6240\u6709\u5C5E\u6027\u8BBE\u7F6E\u5E76\u7EE7\u7EED\n\    -XshowSettings:locale\n\                      \u663E\u793A\u6240\u6709\u4E0E\u533A\u57DF\u8BBE\u7F6E\u76F8\u5173\u7684\u8BBE\u7F6E\u5E76\u7EE7\u7EED\n\n-X \u9009\u9879\u662F\u975E\u6807\u51C6\u9009\u9879, \u5982\u6709\u66F4\u6539, \u6055\u4E0D\u53E6\u884C\u901A\u77E5\u3002\n
 
+# Translators please note do not translate the options themselves
+java.launcher.X.macosx.usage=\n\u4EE5\u4E0B\u9009\u9879\u4E3A Mac OS X \u7279\u5B9A\u7684\u9009\u9879:\n\    -XstartOnFirstThread\n\                      \u5728\u7B2C\u4E00\u4E2A (AppKit) \u7EBF\u7A0B\u4E0A\u8FD0\u884C main() \u65B9\u6CD5\n\    -Xdock:name=<\u5E94\u7528\u7A0B\u5E8F\u540D\u79F0>"\n\                      \u8986\u76D6\u505C\u9760\u680F\u4E2D\u663E\u793A\u7684\u9ED8\u8BA4\u5E94\u7528\u7A0B\u5E8F\u540D\u79F0\n\    -Xdock:icon=<\u56FE\u6807\u6587\u4EF6\u7684\u8DEF\u5F84>\n\                      \u8986\u76D6\u505C\u9760\u680F\u4E2D\u663E\u793A\u7684\u9ED8\u8BA4\u56FE\u6807\n\n
+
 java.launcher.cls.error1=\u9519\u8BEF: \u627E\u4E0D\u5230\u6216\u65E0\u6CD5\u52A0\u8F7D\u4E3B\u7C7B {0}
 java.launcher.cls.error2=\u9519\u8BEF: \u4E3B\u65B9\u6CD5\u4E0D\u662F\u7C7B {1} \u4E2D\u7684{0}, \u8BF7\u5C06\u4E3B\u65B9\u6CD5\u5B9A\u4E49\u4E3A:\n\   public static void main(String[] args)
 java.launcher.cls.error3=\u9519\u8BEF: \u4E3B\u65B9\u6CD5\u5FC5\u987B\u8FD4\u56DE\u7C7B {0} \u4E2D\u7684\u7A7A\u7C7B\u578B\u503C, \u8BF7\n\u5C06\u4E3B\u65B9\u6CD5\u5B9A\u4E49\u4E3A:\n\   public static void main(String[] args)
--- a/src/share/classes/sun/launcher/resources/launcher_zh_TW.properties	Wed May 02 14:00:06 2012 +0100
+++ b/src/share/classes/sun/launcher/resources/launcher_zh_TW.properties	Wed May 02 15:06:35 2012 +0100
@@ -34,11 +34,14 @@
 java.launcher.ergo.message2  =\                  \u56E0\u70BA\u60A8\u6B63\u5728\u4F3A\u670D\u5668\u985E\u5225\u6A5F\u5668\u4E0A\u57F7\u884C\u3002\n
 
 # Translators please note do not translate the options themselves
-java.launcher.opt.footer     =\    -cp <class search path of directories and zip/jar files>\n\    -classpath <class search path of directories and zip/jar files>\n\                  \u641C\u5C0B\u985E\u5225\u6A94\u6848\u4E4B\u76EE\u9304\u3001JAR \u5B58\u6A94\n\                  \u548C ZIP \u5B58\u6A94\u7684\u4EE5{0}\u5206\u9694\u7684\u6E05\u55AE\u3002\n\    -D<name>=<value>\n\                  \u8A2D\u5B9A\u7CFB\u7D71\u5C6C\u6027\n\    -verbose[:class|gc|jni]\n\                  \u555F\u7528\u8A73\u7D30\u8CC7\u8A0A\u8F38\u51FA\n\    -version      \u5217\u5370\u7522\u54C1\u7248\u672C\u4E26\u7D50\u675F\n\    -version:<value>\n\                  \u9700\u8981\u6307\u5B9A\u7684\u7248\u672C\u624D\u80FD\u57F7\u884C\n\    -showversion  \u5217\u5370\u7522\u54C1\u7248\u672C\u4E26\u7E7C\u7E8C\n\    -jre-restrict-search | -no-jre-restrict-search\n\                  \u5728\u7248\u672C\u641C\u5C0B\u4E2D\u5305\u62EC/\u6392\u9664\u4F7F\u7528\u8005\u5C08\u7528 JRE\n\    -? -help      \u5217\u5370\u6B64\u8AAA\u660E\u8A0A\u606F\n\    -X            \u5217\u5370\u975E\u6A19\u6E96\u9078\u9805\u7684\u8AAA\u660E\n\    -ea[:<packagename>...|:<classname>]\n\    -enableassertions[:<packagename>...|:<classname>]\n\                  \u555F\u7528\u5177\u6709\u6307\u5B9A\u8A73\u7D30\u7A0B\u5EA6\u7684\u5BA3\u544A\n\    -da[:<packagename>...|:<classname>]\n\    -disableassertions[:<packagename>...|:<classname>]\n\                  \u505C\u7528\u5177\u6709\u6307\u5B9A\u8A73\u7D30\u7A0B\u5EA6\u7684\u5BA3\u544A\n\    -esa | -enablesystemassertions\n\                  \u555F\u7528\u7CFB\u7D71\u5BA3\u544A\n\    -dsa | -disablesystemassertions\n\                  \u505C\u7528\u7CFB\u7D71\u5BA3\u544A\n\    -agentlib:<libname>[=<options>]\n\                  \u8F09\u5165\u539F\u751F\u4EE3\u7406\u7A0B\u5F0F\u7A0B\u5F0F\u5EAB <libname>\uFF0C\u4F8B\u5982 -agentlib:hprof\n\                  \u53E6\u8ACB\u53C3\u95B1 -agentlib:jdwp=help \u8207 -agentlib:hprof=help\n\    -agentpath:<pathname>[=<options>]\n\                  \u4F7F\u7528\u5B8C\u6574\u8DEF\u5F91\u540D\u7A31\u8F09\u5165\u539F\u751F\u4EE3\u7406\u7A0B\u5F0F\u7A0B\u5F0F\u5EAB\n\    -javaagent:<jarpath>[=<options>]\n\                  \u8F09\u5165 Java \u7A0B\u5F0F\u8A9E\u8A00\u4EE3\u7406\u7A0B\u5F0F\uFF0C\u8ACB\u53C3\u95B1 java.lang.instrument\n\    -splash:<imagepath>\n\                  \u986F\u793A\u6307\u5B9A\u5F71\u50CF\u7684\u8EDF\u9AD4\u8CC7\u8A0A\u756B\u9762\n\u8ACB\u53C3\u95B1 http://java.sun.com/javase/reference\uFF0C\u66B8\u89E3\u8A73\u7D30\u8CC7\u8A0A\u3002
+java.launcher.opt.footer     =\    -cp <class search path of directories and zip/jar files>\n\    -classpath <class search path of directories and zip/jar files>\n\                  \u4F7F\u7528 {0} \u5340\u9694\u7684\u76EE\u9304\u3001JAR \u5B58\u6A94\u4EE5\u53CA\n\                  ZIP \u5B58\u6A94\u6E05\u55AE\uFF0C\u7528\u4EE5\u641C\u5C0B\u985E\u5225\u6A94\u6848\u3002\n\    -D<name>=<value>\n\                  \u8A2D\u5B9A\u7CFB\u7D71\u5C6C\u6027\n\    -verbose[:class|gc|jni]\n\                  \u555F\u7528\u8A73\u7D30\u8CC7\u8A0A\u8F38\u51FA\n\    -version      \u5217\u5370\u7522\u54C1\u7248\u672C\u4E26\u7D50\u675F\n\    -version:<value>\n\                  \u9700\u8981\u6307\u5B9A\u7684\u7248\u672C\u624D\u80FD\u57F7\u884C\n\    -showversion  \u5217\u5370\u7522\u54C1\u7248\u672C\u4E26\u7E7C\u7E8C\n\    -jre-restrict-search | -no-jre-restrict-search\n\                  \u5728\u7248\u672C\u641C\u5C0B\u4E2D\u5305\u62EC/\u6392\u9664\u4F7F\u7528\u8005\u5C08\u7528 JRE\n\    -? -help      \u5217\u5370\u6B64\u8AAA\u660E\u8A0A\u606F\n\    -X            \u5217\u5370\u975E\u6A19\u6E96\u9078\u9805\u7684\u8AAA\u660E\n\    -ea[:<packagename>...|:<classname>]\n\    -enableassertions[:<packagename>...|:<classname>]\n\                  \u555F\u7528\u542B\u6307\u5B9A\u8A73\u7D30\u7A0B\u5EA6\u7684\u5BA3\u544A\n\    -da[:<packagename>...|:<classname>]\n\    -disableassertions[:<packagename>...|:<classname>]\n\                  \u505C\u7528\u542B\u6307\u5B9A\u8A73\u7D30\u7A0B\u5EA6\u7684\u5BA3\u544A\n\    -esa | -enablesystemassertions\n\                  \u555F\u7528\u7CFB\u7D71\u5BA3\u544A\n\    -dsa | -disablesystemassertions\n\                  \u505C\u7528\u7CFB\u7D71\u5BA3\u544A\n\    -agentlib:<libname>[=<options>]\n\                  \u8F09\u5165\u539F\u751F\u4EE3\u7406\u7A0B\u5F0F\u7A0B\u5F0F\u5EAB <libname>\uFF0C\u4F8B\u5982 -agentlib:hprof\n\                  \u53E6\u8ACB\u53C3\u95B1 -agentlib:jdwp=help \u8207 -agentlib:hprof=help\n\    -agentpath:<pathname>[=<options>]\n\                  \u4F7F\u7528\u5B8C\u6574\u8DEF\u5F91\u540D\u7A31\u8F09\u5165\u539F\u751F\u4EE3\u7406\u7A0B\u5F0F\u7A0B\u5F0F\u5EAB\n\    -javaagent:<jarpath>[=<options>]\n\                  \u8F09\u5165 Java \u7A0B\u5F0F\u8A9E\u8A00\u4EE3\u7406\u7A0B\u5F0F\uFF0C\u8ACB\u53C3\u95B1 java.lang.instrument\n\    -splash:<imagepath>\n\                  \u986F\u793A\u6307\u5B9A\u5F71\u50CF\u7684\u8EDF\u9AD4\u8CC7\u8A0A\u756B\u9762\n\u8ACB\u53C3\u95B1 http://www.oracle.com/technetwork/java/javase/documentation/index.html \u66B8\u89E3\u8A73\u7D30\u8CC7\u8A0A\u3002
 
 # Translators please note do not translate the options themselves
 java.launcher.X.usage=\    -Xmixed           \u6DF7\u5408\u6A21\u5F0F\u57F7\u884C (\u9810\u8A2D)\n\    -Xint             \u50C5\u9650\u89E3\u8B6F\u6A21\u5F0F\u57F7\u884C\n\    -Xbootclasspath:<\u4EE5 {0} \u5206\u9694\u7684\u76EE\u9304\u548C zip/jar \u6A94\u6848>\n\                      \u8A2D\u5B9A\u555F\u52D5\u5B89\u88DD\u985E\u5225\u548C\u8CC7\u6E90\u7684\u641C\u5C0B\u8DEF\u5F91\n\    -Xbootclasspath/a:<\u4EE5 {0} \u5206\u9694\u7684\u76EE\u9304\u548C zip/jar \u6A94\u6848>\n\                      \u9644\u52A0\u5728\u555F\u52D5\u5B89\u88DD\u985E\u5225\u8DEF\u5F91\u7684\u7D50\u5C3E\n\    -Xbootclasspath/p:<\u4EE5 {0} \u5206\u9694\u7684\u76EE\u9304\u548C zip/jar \u6A94\u6848>\n\                      \u9644\u52A0\u5728\u555F\u52D5\u5B89\u88DD\u985E\u5225\u8DEF\u5F91\u7684\u524D\u9762\n\    -Xdiag            \u986F\u793A\u5176\u4ED6\u7684\u8A3A\u65B7\u8A0A\u606F\n\    -Xnoclassgc       \u505C\u7528\u985E\u5225\u8CC7\u6E90\u56DE\u6536\n\    -Xincgc           \u555F\u7528\u6F38\u9032\u8CC7\u6E90\u56DE\u6536\n\    -Xloggc:<file>    \u5229\u7528\u6642\u6233\u5C07 GC \u72C0\u614B\u8A18\u9304\u81F3\u6A94\u6848\u4E2D\n\    -Xbatch           \u505C\u7528\u80CC\u666F\u7DE8\u8B6F\n\    -Xms<size>        \u8A2D\u5B9A\u8D77\u59CB Java \u5806\u96C6\u5927\u5C0F\n\    -Xmx<size>        \u8A2D\u5B9A Java \u5806\u96C6\u5927\u5C0F\u4E0A\u9650\n\    -Xss<size>        \u8A2D\u5B9A Java \u57F7\u884C\u7DD2\u5806\u758A\u5927\u5C0F\n\    -Xprof            \u8F38\u51FA CPU \u5206\u6790\u8CC7\u6599\n\    -Xfuture          \u555F\u7528\u6700\u56B4\u683C\u7684\u6AA2\u67E5\uFF0C\u9810\u5148\u505A\u70BA\u5C07\u4F86\u7684\u9810\u8A2D\n\    -Xrs              \u6E1B\u5C11 Java/VM \u4F7F\u7528\u4F5C\u696D\u7CFB\u7D71\u4FE1\u865F (\u8ACB\u53C3\u95B1\u6587\u4EF6)\n\    -Xcheck:jni       \u57F7\u884C\u5176\u4ED6\u7684 JNI \u51FD\u6578\u6AA2\u67E5\n\    -Xshare:off       \u4E0D\u5617\u8A66\u4F7F\u7528\u5171\u7528\u985E\u5225\u8CC7\u6599\n\    -Xshare:auto      \u5118\u53EF\u80FD\u4F7F\u7528\u5171\u7528\u985E\u5225\u8CC7\u6599 (\u9810\u8A2D)\n\    -Xshare:on        \u9700\u8981\u4F7F\u7528\u5171\u7528\u985E\u5225\u8CC7\u6599\uFF0C\u5426\u5247\u5931\u6557\u3002\n\    -XshowSettings    \u986F\u793A\u6240\u6709\u8A2D\u5B9A\u503C\u4E26\u7E7C\u7E8C\n\    -XshowSettings:all\n\                      \u986F\u793A\u6240\u6709\u8A2D\u5B9A\u503C\u4E26\u7E7C\u7E8C\n\    -XshowSettings:vm \u986F\u793A\u6240\u6709 VM \u76F8\u95DC\u8A2D\u5B9A\u503C\u4E26\u7E7C\u7E8C\n\    -XshowSettings:properties\n\                      \u986F\u793A\u6240\u6709\u5C6C\u6027\u8A2D\u5B9A\u503C\u4E26\u7E7C\u7E8C\n\    -XshowSettings:locale\n\                      \u986F\u793A\u6240\u6709\u5730\u5340\u8A2D\u5B9A\u76F8\u95DC\u8A2D\u5B9A\u503C\u4E26\u7E7C\u7E8C\n\n -X \u9078\u9805\u4E0D\u662F\u6A19\u6E96\u9078\u9805\uFF0C\u82E5\u6709\u8B8A\u66F4\u4E0D\u53E6\u884C\u901A\u77E5\u3002\n
 
+# Translators please note do not translate the options themselves
+java.launcher.X.macosx.usage=\n\u4E0B\u5217\u662F Mac OS X \u7279\u5B9A\u9078\u9805:\n\    -XstartOnFirstThread\n\                      \u5728\u7B2C\u4E00\u500B (AppKit) \u57F7\u884C\u7DD2\u57F7\u884C main() \u65B9\u6CD5\n\    -Xdock:name=<application name>"\n\                      \u8986\u5BEB\u7D50\u5408\u8AAA\u660E\u756B\u9762\u4E2D\u986F\u793A\u7684\u9810\u8A2D\u61C9\u7528\u7A0B\u5F0F\u540D\u7A31\n\    -Xdock:icon=<path to icon file>\n\                      \u8986\u5BEB\u7D50\u5408\u8AAA\u660E\u756B\u9762\u4E2D\u986F\u793A\u7684\u9810\u8A2D\u5716\u793A\n\n
+
 java.launcher.cls.error1=\u932F\u8AA4: \u627E\u4E0D\u5230\u6216\u7121\u6CD5\u8F09\u5165\u4E3B\u8981\u985E\u5225 {0}
 java.launcher.cls.error2=\u932F\u8AA4: \u4E3B\u8981\u65B9\u6CD5\u4E0D\u662F\u985E\u5225 {1} \u4E2D\u7684 {0}\uFF0C\u8ACB\u5B9A\u7FA9\u4E3B\u8981\u65B9\u6CD5\u70BA:\n\   public static void main(String[] args)
 java.launcher.cls.error3=\u932F\u8AA4: \u4E3B\u8981\u65B9\u6CD5\u5FC5\u9808\u50B3\u56DE\u985E\u5225 {0} \u4E2D void \u985E\u578B\u7684\u503C\uFF0C \n\u8ACB\u5B9A\u7FA9\u4E3B\u8981\u65B9\u6CD5\u70BA:\n\   public static void main(String[] args)
--- a/src/share/classes/sun/management/HotSpotDiagnostic.java	Wed May 02 14:00:06 2012 +0100
+++ b/src/share/classes/sun/management/HotSpotDiagnostic.java	Wed May 02 15:06:35 2012 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 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
@@ -27,13 +27,9 @@
 
 import java.io.IOException;
 import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
 import java.util.List;
 import javax.management.ObjectName;
 
-import com.sun.management.DiagnosticCommandInfo;
-import com.sun.management.DiagnosticCommandArgumentInfo;
 import com.sun.management.HotSpotDiagnosticMXBean;
 import com.sun.management.VMOption;
 
@@ -120,54 +116,7 @@
         }
     }
 
-    public List<String> getDiagnosticCommands() {
-        String[] commands = getDiagnosticCommands0();
-        return commands == null ? Collections.<String>emptyList() :
-            Arrays.asList(commands);
-    }
-
-    public DiagnosticCommandInfo getDiagnosticCommandInfo(String command) {
-        String[] array = new String[] { command };
-        return getDiagnosticCommandInfo0(array)[0];
-    }
-
-    public List<DiagnosticCommandInfo> getDiagnosticCommandInfo() {
-        String[] commands = getDiagnosticCommands0();
-        return Arrays.asList(getDiagnosticCommandInfo0(commands));
-    }
-
-    public List<DiagnosticCommandInfo> getDiagnosticCommandInfo(
-        List<String> commands) {
-        return Arrays.asList(getDiagnosticCommandInfo0(
-            commands.toArray(new String[commands.size()])));
-    }
-
-    public String execute(String command) {
-        Util.checkControlAccess();
-        return executeDiagnosticCommand0(command);
-    }
-
-    public String execute(String cmd, String... arguments) {
-        if(cmd == null) {
-            throw new NullPointerException("Missing command name");
-        }
-        StringBuilder sb = new StringBuilder();
-        sb.append(cmd);
-        sb.append(" ");
-        for(String arg : arguments) {
-            sb.append(arg);
-            sb.append(" ");
-        }
-        return execute(sb.toString());
-    }
-
     public ObjectName getObjectName() {
         return Util.newObjectName("com.sun.management:type=HotSpotDiagnostic");
     }
-
-    private native String[] getDiagnosticCommands0();
-    private native DiagnosticCommandInfo[] getDiagnosticCommandInfo0(
-        String[] commands) throws IllegalArgumentException;
-    private native String executeDiagnosticCommand0(String command)
-        throws IllegalArgumentException;
 }
--- a/src/share/classes/sun/nio/cs/ext/ExtendedCharsets.java	Wed May 02 14:00:06 2012 +0100
+++ b/src/share/classes/sun/nio/cs/ext/ExtendedCharsets.java	Wed May 02 15:06:35 2012 +0100
@@ -1279,7 +1279,8 @@
         }
         String osName = AccessController.doPrivileged(
             new GetPropertyAction("os.name"));
-        if ("SunOS".equals(osName) || "Linux".equals(osName)) {
+        if ("SunOS".equals(osName) || "Linux".equals(osName)
+               || osName.startsWith("Mac OS")) {
             charset("x-COMPOUND_TEXT", "COMPOUND_TEXT",
                     new String[] {
                         "COMPOUND_TEXT",        // JDK historical
--- a/src/share/classes/sun/print/PathGraphics.java	Wed May 02 14:00:06 2012 +0100
+++ b/src/share/classes/sun/print/PathGraphics.java	Wed May 02 15:06:35 2012 +0100
@@ -1025,7 +1025,8 @@
                 continue;
             }
             glyph = font2D.charToGlyph(c);
-            if (glyph != missingGlyph && glyph < numGlyphs &&
+            if (glyph != missingGlyph &&
+                glyph >= 0 && glyph < numGlyphs &&
                 (glyphToCharMap[glyph] ==
                  CharToGlyphMapper.INVISIBLE_GLYPH_ID)) {
                 glyphToCharMap[glyph] = c;
--- a/src/share/classes/sun/security/pkcs12/PKCS12KeyStore.java	Wed May 02 14:00:06 2012 +0100
+++ b/src/share/classes/sun/security/pkcs12/PKCS12KeyStore.java	Wed May 02 15:06:35 2012 +0100
@@ -256,11 +256,25 @@
         }
 
         try {
-            // Use JCE
-            SecretKey skey = getPBEKey(password);
-            Cipher cipher = Cipher.getInstance(algOid.toString());
-            cipher.init(Cipher.DECRYPT_MODE, skey, algParams);
-            byte[] privateKeyInfo = cipher.doFinal(encryptedKey);
+            byte[] privateKeyInfo;
+            while (true) {
+                try {
+                    // Use JCE
+                    SecretKey skey = getPBEKey(password);
+                    Cipher cipher = Cipher.getInstance(algOid.toString());
+                    cipher.init(Cipher.DECRYPT_MODE, skey, algParams);
+                    privateKeyInfo = cipher.doFinal(encryptedKey);
+                    break;
+                } catch (Exception e) {
+                    if (password.length == 0) {
+                        // Retry using an empty password
+                        // without a NULL terminator.
+                        password = new char[1];
+                        continue;
+                    }
+                    throw e;
+                }
+            }
 
             PKCS8EncodedKeySpec kspec = new PKCS8EncodedKeySpec(privateKeyInfo);
 
@@ -1272,18 +1286,24 @@
                 ObjectIdentifier algOid = in.getOID();
                 AlgorithmParameters algParams = parseAlgParameters(in);
 
-                try {
-                    // Use JCE
-                    SecretKey skey = getPBEKey(password);
-                    Cipher cipher = Cipher.getInstance(algOid.toString());
-                    cipher.init(Cipher.DECRYPT_MODE, skey, algParams);
-                    safeContentsData = cipher.doFinal(safeContentsData);
-
-                } catch (Exception e) {
-                    IOException ioe = new IOException("failed to decrypt safe"
-                                        + " contents entry: " + e);
-                    ioe.initCause(e);
-                    throw ioe;
+                while (true) {
+                    try {
+                        // Use JCE
+                        SecretKey skey = getPBEKey(password);
+                        Cipher cipher = Cipher.getInstance(algOid.toString());
+                        cipher.init(Cipher.DECRYPT_MODE, skey, algParams);
+                        safeContentsData = cipher.doFinal(safeContentsData);
+                        break;
+                    } catch (Exception e) {
+                        if (password.length == 0) {
+                            // Retry using an empty password
+                            // without a NULL terminator.
+                            password = new char[1];
+                            continue;
+                        }
+                        throw new IOException(
+                                "failed to decrypt safe contents entry: " + e, e);
+                    }
                 }
             } else {
                 throw new IOException("public key protected PKCS12" +
--- a/src/share/classes/sun/security/provider/certpath/ForwardBuilder.java	Wed May 02 14:00:06 2012 +0100
+++ b/src/share/classes/sun/security/provider/certpath/ForwardBuilder.java	Wed May 02 15:06:35 2012 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 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
@@ -668,7 +668,10 @@
                 + "\n  Subject: " + cert.getSubjectX500Principal() + ")");
         }
 
-        ForwardState currState = (ForwardState) currentState;
+        ForwardState currState = (ForwardState)currentState;
+
+        // Don't bother to verify untrusted certificate more.
+        currState.untrustedChecker.check(cert, Collections.<String>emptySet());
 
         /*
          * check for looping - abort a loop if
--- a/src/share/classes/sun/security/provider/certpath/ForwardState.java	Wed May 02 14:00:06 2012 +0100
+++ b/src/share/classes/sun/security/provider/certpath/ForwardState.java	Wed May 02 15:06:35 2012 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 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
@@ -79,6 +79,9 @@
     /* the checker used for revocation status */
     public CrlRevocationChecker crlChecker;
 
+    /* the untrusted certificates checker */
+    UntrustedChecker untrustedChecker;
+
     /* The list of user-defined checkers that support forward checking */
     ArrayList<PKIXCertPathChecker> forwardCheckers;
 
--- a/src/share/classes/sun/security/provider/certpath/PKIXCertPathValidator.java	Wed May 02 14:00:06 2012 +0100
+++ b/src/share/classes/sun/security/provider/certpath/PKIXCertPathValidator.java	Wed May 02 15:06:35 2012 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 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
@@ -314,10 +314,12 @@
                               pkixParam.isAnyPolicyInhibited(),
                               pkixParam.getPolicyQualifiersRejected(),
                               rootNode);
+        UntrustedChecker untrustedChecker = new UntrustedChecker();
 
         ArrayList<PKIXCertPathChecker> certPathCheckers =
             new ArrayList<PKIXCertPathChecker>();
         // add standard checkers that we will be using
+        certPathCheckers.add(untrustedChecker);
         certPathCheckers.add(algorithmChecker);
         certPathCheckers.add(keyChecker);
         certPathCheckers.add(constraintsChecker);
--- a/src/share/classes/sun/security/provider/certpath/ReverseBuilder.java	Wed May 02 14:00:06 2012 +0100
+++ b/src/share/classes/sun/security/provider/certpath/ReverseBuilder.java	Wed May 02 15:06:35 2012 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 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
@@ -347,6 +347,10 @@
             return;
         }
 
+        // Don't bother to verify untrusted certificate more.
+        currentState.untrustedChecker.check(cert,
+                                    Collections.<String>emptySet());
+
         /*
          * check for looping - abort a loop if
          * ((we encounter the same certificate twice) AND
--- a/src/share/classes/sun/security/provider/certpath/ReverseState.java	Wed May 02 14:00:06 2012 +0100
+++ b/src/share/classes/sun/security/provider/certpath/ReverseState.java	Wed May 02 15:06:35 2012 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 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
@@ -99,6 +99,9 @@
     /* the algorithm checker */
     AlgorithmChecker algorithmChecker;
 
+    /* the untrusted certificates checker */
+    UntrustedChecker untrustedChecker;
+
     /* the trust anchor used to validate the path */
     TrustAnchor trustAnchor;
 
--- a/src/share/classes/sun/security/provider/certpath/SunCertPathBuilder.java	Wed May 02 14:00:06 2012 +0100
+++ b/src/share/classes/sun/security/provider/certpath/SunCertPathBuilder.java	Wed May 02 15:06:35 2012 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 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
@@ -284,6 +284,7 @@
         Iterator<TrustAnchor> iter = buildParams.getTrustAnchors().iterator();
         while (iter.hasNext()) {
             TrustAnchor anchor = iter.next();
+
             /* check if anchor satisfies target constraints */
             if (anchorIsTarget(anchor, targetSel)) {
                 this.trustAnchor = anchor;
@@ -303,6 +304,7 @@
             currentState.crlChecker =
                 new CrlRevocationChecker(null, buildParams, null, onlyEECert);
             currentState.algorithmChecker = new AlgorithmChecker(anchor);
+            currentState.untrustedChecker = new UntrustedChecker();
             try {
                 depthFirstSearchReverse(null, currentState,
                 new ReverseBuilder(buildParams, targetSubjectDN), adjacencyList,
@@ -349,6 +351,7 @@
         // init the crl checker
         currentState.crlChecker
             = new CrlRevocationChecker(null, buildParams, null, onlyEECert);
+        currentState.untrustedChecker = new UntrustedChecker();
 
         depthFirstSearchForward(targetSubjectDN, currentState,
           new ForwardBuilder
@@ -645,8 +648,8 @@
             vertex.setIndex(adjList.size() - 1);
 
             /* recursively search for matching certs at next dN */
-            depthFirstSearchForward(cert.getIssuerX500Principal(), nextState, builder,
-                adjList, certPathList);
+            depthFirstSearchForward(cert.getIssuerX500Principal(),
+                                    nextState, builder, adjList, certPathList);
 
             /*
              * If path has been completed, return ASAP!
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/share/classes/sun/security/provider/certpath/UntrustedChecker.java	Wed May 02 15:06:35 2012 +0100
@@ -0,0 +1,89 @@
+/*
+ * Copyright (c) 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.  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.security.provider.certpath;
+
+import java.security.cert.Certificate;
+import java.security.cert.X509Certificate;
+import java.security.cert.CertPathValidatorException;
+import java.security.cert.PKIXCertPathChecker;
+import java.util.Set;
+import java.util.Collection;
+import sun.security.util.Debug;
+import sun.security.util.UntrustedCertificates;
+
+/**
+ * A <code>PKIXCertPathChecker</code> implementation to check whether a
+ * specified certificate is distrusted.
+ *
+ * @see PKIXCertPathChecker
+ * @see PKIXParameters
+ */
+final public class UntrustedChecker extends PKIXCertPathChecker {
+
+    private static final Debug debug = Debug.getInstance("certpath");
+
+    /**
+     * Default Constructor
+     */
+    public UntrustedChecker() {
+        // blank
+    }
+
+    @Override
+    public void init(boolean forward) throws CertPathValidatorException {
+        // Note that this class supports both forward and reverse modes.
+    }
+
+    @Override
+    public boolean isForwardCheckingSupported() {
+        // Note that this class supports both forward and reverse modes.
+        return true;
+    }
+
+    @Override
+    public Set<String> getSupportedExtensions() {
+        return null;
+    }
+
+    @Override
+    public void check(Certificate cert,
+            Collection<String> unresolvedCritExts)
+            throws CertPathValidatorException {
+
+        X509Certificate currCert = (X509Certificate)cert;
+
+        if (UntrustedCertificates.isUntrusted(currCert)) {
+            if (debug != null) {
+                debug.println("UntrustedChecker: untrusted certificate " +
+                        currCert.getSubjectX500Principal());
+            }
+
+            throw new CertPathValidatorException(
+                "Untrusted certificate: " + currCert.getSubjectX500Principal());
+        }
+    }
+}
+
--- a/src/share/classes/sun/security/util/Resources_de.java	Wed May 02 14:00:06 2012 +0100
+++ b/src/share/classes/sun/security/util/Resources_de.java	Wed May 02 15:06:35 2012 +0100
@@ -47,8 +47,7 @@
                 "*******************************************\n\n"},
 
         // keytool: Help part
-// "Option" should be translated.
-        {".OPTION.", " [Option]..."},
+        {".OPTION.", " [OPTION]..."},
         {"Options.", "Optionen:"},
         {"Use.keytool.help.for.all.available.commands",
                  "\"keytool -help\" f\u00FCr alle verf\u00FCgbaren Befehle verwenden"},
@@ -68,7 +67,6 @@
                 "Exportiert ein Zertifikat"}, //-exportcert
         {"Generates.a.key.pair",
                 "Generiert ein Schl\u00FCsselpaar"}, //-genkeypair
-// translation of "secret" key should be different to "private" key.
         {"Generates.a.secret.key",
                 "Generiert einen Secret Key"}, //-genseckey
         {"Generates.certificate.from.a.certificate.request",
@@ -331,7 +329,7 @@
         {"Do.you.still.want.to.add.it.to.your.own.keystore.no.",
                 "M\u00F6chten Sie es trotzdem zu Ihrem eigenen Keystore hinzuf\u00FCgen? [Nein]:  "},
         {"Trust.this.certificate.no.", "Diesem Zertifikat vertrauen? [Nein]:  "},
-        {"YES", "Ja"},
+        {"YES", "JA"},
         {"New.prompt.", "Neues {0}: "},
         {"Passwords.must.differ", "Kennw\u00F6rter m\u00FCssen sich unterscheiden"},
         {"Re.enter.new.prompt.", "Neues {0} erneut eingeben: "},
@@ -368,7 +366,7 @@
                  "Alias <{0}> verweist auf einen Eintragstyp, der kein Private Key-Eintrag ist. Der Befehl -keyclone unterst\u00FCtzt nur das Clonen von Private Key-Eintr\u00E4gen"},
 
         {".WARNING.WARNING.WARNING.",
-            "*****************  Warnung Warnung Warnung  *****************"},
+            "*****************  WARNING WARNING WARNING  *****************"},
         {"Signer.d.", "Signaturgeber #%d:"},
         {"Timestamp.", "Zeitstempel:"},
         {"Signature.", "Signatur:"},
@@ -393,7 +391,7 @@
                 "Zertifikat der obersten Ebene in Antwort:\n"},
         {".is.not.trusted.", "... ist nicht vertrauensw\u00FCrdig. "},
         {"Install.reply.anyway.no.", "Antwort trotzdem installieren? [Nein]:  "},
-        {"NO", "Nein"},
+        {"NO", "NEIN"},
         {"Public.keys.in.reply.and.keystore.don.t.match",
                 "Public Keys in Antwort und Keystore stimmen nicht \u00FCberein"},
         {"Certificate.reply.and.certificate.in.keystore.are.identical",
--- a/src/share/classes/sun/security/util/Resources_es.java	Wed May 02 14:00:06 2012 +0100
+++ b/src/share/classes/sun/security/util/Resources_es.java	Wed May 02 15:06:35 2012 +0100
@@ -47,8 +47,7 @@
                 "*******************************************\n\n"},
 
         // keytool: Help part
-// "Option" should be translated.
-        {".OPTION.", " [Opci\u00F3n]..."},
+        {".OPTION.", " [OPTION]..."},
         {"Options.", "Opciones:"},
         {"Use.keytool.help.for.all.available.commands",
                  "Utilice\"keytool -help\" para todos los comandos disponibles"},
@@ -68,7 +67,6 @@
                 "Exporta el certificado"}, //-exportcert
         {"Generates.a.key.pair",
                 "Genera un par de claves"}, //-genkeypair
-// translation of "secret" key should be different to "private" key.
         {"Generates.a.secret.key",
                 "Genera un clave secreta"}, //-genseckey
         {"Generates.certificate.from.a.certificate.request",
@@ -331,7 +329,7 @@
         {"Do.you.still.want.to.add.it.to.your.own.keystore.no.",
                 "\u00BFA\u00FAn desea agregarlo a su propio almac\u00E9n de claves? [no]:  "},
         {"Trust.this.certificate.no.", "\u00BFConfiar en este certificado? [no]:  "},
-        {"YES", "S\u00ED"},
+        {"YES", "S\u00CD"},
         {"New.prompt.", "Nuevo {0}: "},
         {"Passwords.must.differ", "Las contrase\u00F1as deben ser distintas"},
         {"Re.enter.new.prompt.", "Vuelva a escribir el nuevo {0}: "},
@@ -368,7 +366,7 @@
                  "El alias <{0}> hace referencia a un tipo de entrada que no es una clave privada. El comando -keyclone s\u00F3lo permite la clonaci\u00F3n de entradas de claves privadas"},
 
         {".WARNING.WARNING.WARNING.",
-            "*****************  Advertencia Advertencia Advertencia  *****************"},
+            "*****************  WARNING WARNING WARNING  *****************"},
         {"Signer.d.", "#%d de Firmante:"},
         {"Timestamp.", "Registro de Hora:"},
         {"Signature.", "Firma:"},
@@ -393,7 +391,7 @@
                 "Certificado de nivel superior en la respuesta:\n"},
         {".is.not.trusted.", "... no es de confianza. "},
         {"Install.reply.anyway.no.", "\u00BFInstalar respuesta de todos modos? [no]:  "},
-        {"NO", "No"},
+        {"NO", "NO"},
         {"Public.keys.in.reply.and.keystore.don.t.match",
                 "Las claves p\u00FAblicas en la respuesta y en el almac\u00E9n de claves no coinciden"},
         {"Certificate.reply.and.certificate.in.keystore.are.identical",
@@ -640,7 +638,7 @@
 
         // sun.security.pkcs11.SunPKCS11
         {"PKCS11.Token.providerName.Password.",
-                "Contrase\u00F1a del Elemento PKCS11 [{0}]: "},
+                "Contrase\u00F1a del Token PKCS11 [{0}]: "},
 
         /* --- DEPRECATED --- */
         // javax.security.auth.Policy
--- a/src/share/classes/sun/security/util/Resources_fr.java	Wed May 02 14:00:06 2012 +0100
+++ b/src/share/classes/sun/security/util/Resources_fr.java	Wed May 02 15:06:35 2012 +0100
@@ -47,8 +47,7 @@
                 "*******************************************\n\n"},
 
         // keytool: Help part
-// "Option" should be translated.
-        {".OPTION.", " [Option]..."},
+        {".OPTION.", " [OPTION]..."},
         {"Options.", "Options :"},
         {"Use.keytool.help.for.all.available.commands",
                  "Utiliser \"keytool -help\" pour toutes les commandes disponibles"},
@@ -68,7 +67,6 @@
                 "Exporte le certificat"}, //-exportcert
         {"Generates.a.key.pair",
                 "G\u00E9n\u00E8re une paire de cl\u00E9s"}, //-genkeypair
-// translation of "secret" key should be different to "private" key.
         {"Generates.a.secret.key",
                 "G\u00E9n\u00E8re une cl\u00E9 secr\u00E8te"}, //-genseckey
         {"Generates.certificate.from.a.certificate.request",
@@ -331,7 +329,7 @@
         {"Do.you.still.want.to.add.it.to.your.own.keystore.no.",
                 "Voulez-vous toujours l'ajouter \u00E0 votre fichier de cl\u00E9s ? [non] :  "},
         {"Trust.this.certificate.no.", "Faire confiance \u00E0 ce certificat ? [non] :  "},
-        {"YES", "Oui"},
+        {"YES", "OUI"},
         {"New.prompt.", "Nouveau {0} : "},
         {"Passwords.must.differ", "Les mots de passe doivent diff\u00E9rer"},
         {"Re.enter.new.prompt.", "Indiquez encore le nouveau {0} : "},
@@ -368,7 +366,7 @@
                  "L''entr\u00E9e \u00E0 laquelle l''alias <{0}> fait r\u00E9f\u00E9rence n''est pas une entr\u00E9e de type cl\u00E9 priv\u00E9e. La commande -keyclone prend uniquement en charge le clonage des cl\u00E9s priv\u00E9es"},
 
         {".WARNING.WARNING.WARNING.",
-            "*****************  Avertissement Avertissement Avertissement  *****************"},
+            "*****************  WARNING WARNING WARNING  *****************"},
         {"Signer.d.", "Signataire n\u00B0%d :"},
         {"Timestamp.", "Horodatage :"},
         {"Signature.", "Signature :"},
@@ -393,7 +391,7 @@
                 "Certificat de niveau sup\u00E9rieur dans la r\u00E9ponse :\n"},
         {".is.not.trusted.", "... non s\u00E9curis\u00E9. "},
         {"Install.reply.anyway.no.", "Installer la r\u00E9ponse quand m\u00EAme ? [non] :  "},
-        {"NO", "Non"},
+        {"NO", "NON"},
         {"Public.keys.in.reply.and.keystore.don.t.match",
                 "Les cl\u00E9s publiques de la r\u00E9ponse et du fichier de cl\u00E9s ne concordent pas"},
         {"Certificate.reply.and.certificate.in.keystore.are.identical",
--- a/src/share/classes/sun/security/util/Resources_it.java	Wed May 02 14:00:06 2012 +0100
+++ b/src/share/classes/sun/security/util/Resources_it.java	Wed May 02 15:06:35 2012 +0100
@@ -47,8 +47,7 @@
                 "*******************************************\n\n"},
 
         // keytool: Help part
-// "Option" should be translated.
-        {".OPTION.", " [Opzione]..."},
+        {".OPTION.", " [OPTION]..."},
         {"Options.", "Opzioni:"},
         {"Use.keytool.help.for.all.available.commands",
                  "Utilizzare \"keytool -help\" per visualizzare tutti i comandi disponibili"},
@@ -68,7 +67,6 @@
                 "Esporta il certificato"}, //-exportcert
         {"Generates.a.key.pair",
                 "Genera una coppia di chiavi"}, //-genkeypair
-// translation of "secret" key should be different to "private" key.
         {"Generates.a.secret.key",
                 "Genera una chiave segreta"}, //-genseckey
         {"Generates.certificate.from.a.certificate.request",
@@ -368,7 +366,7 @@
                  "L''alias <{0}> fa riferimento a un tipo di voce che non \u00E8 una voce di chiave privata. Il comando -keyclone supporta solo la copia delle voci di chiave private."},
 
         {".WARNING.WARNING.WARNING.",
-            "*****************  Avvertenza Avvertenza Avvertenza  *****************"},
+            "*****************  WARNING WARNING WARNING  *****************"},
         {"Signer.d.", "Firmatario #%d:"},
         {"Timestamp.", "Indicatore orario:"},
         {"Signature.", "Firma:"},
@@ -393,7 +391,7 @@
                 "Certificato di primo livello nella risposta:\n"},
         {".is.not.trusted.", "...non \u00E8 considerato sicuro. "},
         {"Install.reply.anyway.no.", "Installare la risposta? [no]:  "},
-        {"NO", "No"},
+        {"NO", "NO"},
         {"Public.keys.in.reply.and.keystore.don.t.match",
                 "Le chiavi pubbliche nella risposta e nel keystore non corrispondono"},
         {"Certificate.reply.and.certificate.in.keystore.are.identical",
@@ -430,7 +428,7 @@
                 "Avvertenza: argomento o argomenti non validi per il costruttore {0}"},
         {"Illegal.Principal.Type.type", "Tipo principal non valido: {0}"},
         {"Illegal.option.option", "Opzione non valida: {0}"},
-        {"Usage.policytool.options.", "Utilizzo: policytool [opzioni]"},
+        {"Usage.policytool.options.", "Uso: policytool [opzioni]"},
         {".file.file.policy.file.location",
                 "  [-file <file>]    posizione del file dei criteri"},
         {"New", "Nuovo"},
--- a/src/share/classes/sun/security/util/Resources_ja.java	Wed May 02 14:00:06 2012 +0100
+++ b/src/share/classes/sun/security/util/Resources_ja.java	Wed May 02 15:06:35 2012 +0100
@@ -47,8 +47,7 @@
                 "*******************************************\n\n"},
 
         // keytool: Help part
-// "Option" should be translated.
-        {".OPTION.", " [\u30AA\u30D7\u30B7\u30E7\u30F3]..."},
+        {".OPTION.", " [OPTION]..."},
         {"Options.", "\u30AA\u30D7\u30B7\u30E7\u30F3:"},
         {"Use.keytool.help.for.all.available.commands",
                  "\u4F7F\u7528\u53EF\u80FD\u306A\u3059\u3079\u3066\u306E\u30B3\u30DE\u30F3\u30C9\u306B\u3064\u3044\u3066\u306F\"keytool -help\"\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044"},
@@ -68,7 +67,6 @@
                 "\u8A3C\u660E\u66F8\u3092\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8\u3057\u307E\u3059"}, //-exportcert
         {"Generates.a.key.pair",
                 "\u9375\u30DA\u30A2\u3092\u751F\u6210\u3057\u307E\u3059"}, //-genkeypair
-// translation of "secret" key should be different to "private" key.
         {"Generates.a.secret.key",
                 "\u79D8\u5BC6\u9375\u3092\u751F\u6210\u3057\u307E\u3059"}, //-genseckey
         {"Generates.certificate.from.a.certificate.request",
@@ -368,7 +366,7 @@
                  "\u5225\u540D<{0}>\u304C\u53C2\u7167\u3057\u3066\u3044\u308B\u30A8\u30F3\u30C8\u30EA\u30FB\u30BF\u30A4\u30D7\u306F\u79D8\u5BC6\u9375\u30A8\u30F3\u30C8\u30EA\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002-keyclone\u30B3\u30DE\u30F3\u30C9\u306F\u79D8\u5BC6\u9375\u30A8\u30F3\u30C8\u30EA\u306E\u30AF\u30ED\u30FC\u30F3\u4F5C\u6210\u306E\u307F\u3092\u30B5\u30DD\u30FC\u30C8\u3057\u307E\u3059"},
 
         {".WARNING.WARNING.WARNING.",
-            "*****************\u8B66\u544A \u8B66\u544A \u8B66\u544A*****************"},
+            "*****************  WARNING WARNING WARNING  *****************"},
         {"Signer.d.", "\u7F72\u540D\u8005\u756A\u53F7%d:"},
         {"Timestamp.", "\u30BF\u30A4\u30E0\u30B9\u30BF\u30F3\u30D7:"},
         {"Signature.", "\u7F72\u540D:"},
--- a/src/share/classes/sun/security/util/Resources_ko.java	Wed May 02 14:00:06 2012 +0100
+++ b/src/share/classes/sun/security/util/Resources_ko.java	Wed May 02 15:06:35 2012 +0100
@@ -47,8 +47,7 @@
                 "*******************************************\n\n"},
 
         // keytool: Help part
-// "Option" should be translated.
-        {".OPTION.", " [\uC635\uC158]..."},
+        {".OPTION.", " [OPTION]..."},
         {"Options.", "\uC635\uC158:"},
         {"Use.keytool.help.for.all.available.commands",
                  "\uC0AC\uC6A9 \uAC00\uB2A5\uD55C \uBAA8\uB4E0 \uBA85\uB839\uC5D0 \"keytool -help\" \uC0AC\uC6A9"},
@@ -68,7 +67,6 @@
                 "\uC778\uC99D\uC11C\uB97C \uC775\uC2A4\uD3EC\uD2B8\uD569\uB2C8\uB2E4."}, //-exportcert
         {"Generates.a.key.pair",
                 "\uD0A4 \uC30D\uC744 \uC0DD\uC131\uD569\uB2C8\uB2E4."}, //-genkeypair
-// translation of "secret" key should be different to "private" key.
         {"Generates.a.secret.key",
                 "\uBCF4\uC548 \uD0A4\uB97C \uC0DD\uC131\uD569\uB2C8\uB2E4."}, //-genseckey
         {"Generates.certificate.from.a.certificate.request",
@@ -368,7 +366,7 @@
                  "<{0}> \uBCC4\uCE6D\uC740 \uC804\uC6A9 \uD0A4 \uD56D\uBAA9\uC774 \uC544\uB2CC \uD56D\uBAA9 \uC720\uD615\uC744 \uCC38\uC870\uD569\uB2C8\uB2E4. -keyclone \uBA85\uB839\uC740 \uC804\uC6A9 \uD0A4 \uD56D\uBAA9\uC758 \uBCF5\uC81C\uB9CC \uC9C0\uC6D0\uD569\uB2C8\uB2E4."},
 
         {".WARNING.WARNING.WARNING.",
-            "*****************  \uACBD\uACE0 \uACBD\uACE0 \uACBD\uACE0  *****************"},
+            "*****************  WARNING WARNING WARNING  *****************"},
         {"Signer.d.", "\uC11C\uBA85\uC790 #%d:"},
         {"Timestamp.", "\uC2DC\uAC04 \uAE30\uB85D:"},
         {"Signature.", "\uC11C\uBA85:"},
--- a/src/share/classes/sun/security/util/Resources_pt_BR.java	Wed May 02 14:00:06 2012 +0100
+++ b/src/share/classes/sun/security/util/Resources_pt_BR.java	Wed May 02 15:06:35 2012 +0100
@@ -47,8 +47,7 @@
                 "*******************************************\n\n"},
 
         // keytool: Help part
-// "Option" should be translated.
-        {".OPTION.", " [Op\u00E7\u00E3o]..."},
+        {".OPTION.", " [OPTION]..."},
         {"Options.", "Op\u00E7\u00F5es:"},
         {"Use.keytool.help.for.all.available.commands",
                  "Use \"keytool -help\" para todos os comandos dispon\u00EDveis"},
@@ -68,9 +67,8 @@
                 "Exporta o certificado"}, //-exportcert
         {"Generates.a.key.pair",
                 "Gera um par de chaves"}, //-genkeypair
-// translation of "secret" key should be different to "private" key.
         {"Generates.a.secret.key",
-                "Gera uma chave Secreta"}, //-genseckey
+                "Gera uma chave secreta"}, //-genseckey
         {"Generates.certificate.from.a.certificate.request",
                 "Gera um certificado de uma solicita\u00E7\u00E3o de certificado"}, //-gencert
         {"Generates.CRL", "Gera CRL"}, //-gencrl
@@ -305,14 +303,14 @@
         {"Entry.type.type.", "Tipo de entrada: {0}"},
         {"Certificate.chain.length.", "Comprimento da cadeia de certificados: "},
         {"Certificate.i.1.", "Certificado[{0,number,integer}]:"},
-        {"Certificate.fingerprint.SHA1.", "Fingerprint (MD5) do certificado: "},
+        {"Certificate.fingerprint.SHA1.", "Fingerprint (SHA1) do certificado: "},
         {"Keystore.type.", "Tipo de \u00E1rea de armazenamento de chaves: "},
         {"Keystore.provider.", "Fornecedor da \u00E1rea de armazenamento de chaves: "},
         {"Your.keystore.contains.keyStore.size.entry",
                 "Sua \u00E1rea de armazenamento de chaves cont\u00E9m {0,number,integer} entrada"},
         {"Your.keystore.contains.keyStore.size.entries",
                 "Sua \u00E1rea de armazenamento de chaves cont\u00E9m {0,number,integer} entradas"},
-        {"Failed.to.parse.input", "Falha durante o parse da entrada"},
+        {"Failed.to.parse.input", "Falha durante o parsing da entrada"},
         {"Empty.input", "Entrada vazia"},
         {"Not.X.509.certificate", "N\u00E3o \u00E9 um certificado X.509"},
         {"alias.has.no.public.key", "{0} n\u00E3o tem chave p\u00FAblica"},
@@ -331,7 +329,7 @@
         {"Do.you.still.want.to.add.it.to.your.own.keystore.no.",
                 "Ainda deseja adicion\u00E1-lo \u00E0 sua \u00E1rea de armazenamento de chaves? [n\u00E3o]:  "},
         {"Trust.this.certificate.no.", "Confiar neste certificado? [n\u00E3o]:  "},
-        {"YES", "Sim"},
+        {"YES", "SIM"},
         {"New.prompt.", "Nova {0}: "},
         {"Passwords.must.differ", "As senhas devem ser diferentes"},
         {"Re.enter.new.prompt.", "Informe novamente a nova {0}: "},
@@ -368,7 +366,7 @@
                  "O alias <{0}> faz refer\u00EAncia a um tipo de entrada que n\u00E3o \u00E9 uma entrada de chave privada. O comando -keyclone oferece suporte somente \u00E0 clonagem de entradas de chave privada"},
 
         {".WARNING.WARNING.WARNING.",
-            "*****************  Advert\u00EAncia Advert\u00EAncia Advert\u00EAncia  *****************"},
+            "*****************  WARNING WARNING WARNING  *****************"},
         {"Signer.d.", "Signat\u00E1rio #%d:"},
         {"Timestamp.", "Timestamp:"},
         {"Signature.", "Assinatura:"},
@@ -393,7 +391,7 @@
                 "Certificado de n\u00EDvel superior na resposta:\n"},
         {".is.not.trusted.", "... n\u00E3o \u00E9 confi\u00E1vel. "},
         {"Install.reply.anyway.no.", "Instalar resposta assim mesmo? [n\u00E3o]:  "},
-        {"NO", "N\u00E3o"},
+        {"NO", "N\u00C3O"},
         {"Public.keys.in.reply.and.keystore.don.t.match",
                 "As chaves p\u00FAblicas da resposta e da \u00E1rea de armazenamento de chaves n\u00E3o correspondem"},
         {"Certificate.reply.and.certificate.in.keystore.are.identical",
@@ -599,7 +597,7 @@
         // sun.security.provider.PolicyFile
 
         {"java.security.policy.error.parsing.policy.message",
-                "java.security.policy: erro durante o parse de {0}:\n\t{1}"},
+                "java.security.policy: erro durante o parsing de {0}:\n\t{1}"},
         {"java.security.policy.error.adding.Permission.perm.message",
                 "java.security.policy: erro ao adicionar a permiss\u00E3o, {0}:\n\t{1}"},
         {"java.security.policy.error.adding.Entry.message",
--- a/src/share/classes/sun/security/util/Resources_sv.java	Wed May 02 14:00:06 2012 +0100
+++ b/src/share/classes/sun/security/util/Resources_sv.java	Wed May 02 15:06:35 2012 +0100
@@ -47,8 +47,7 @@
                 "*******************************************\n\n"},
 
         // keytool: Help part
-// "Option" should be translated.
-        {".OPTION.", " [Alternativ]..."},
+        {".OPTION.", " [OPTION]..."},
         {"Options.", "Alternativ:"},
         {"Use.keytool.help.for.all.available.commands",
                  "L\u00E4s \"Hj\u00E4lp - Nyckelverktyg\" f\u00F6r alla tillg\u00E4ngliga kommandon"},
@@ -68,7 +67,6 @@
                 "Exporterar certifikat"}, //-exportcert
         {"Generates.a.key.pair",
                 "Genererar nyckelpar"}, //-genkeypair
-// translation of "secret" key should be different to "private" key.
         {"Generates.a.secret.key",
                 "Genererar hemlig nyckel"}, //-genseckey
         {"Generates.certificate.from.a.certificate.request",
@@ -331,7 +329,7 @@
         {"Do.you.still.want.to.add.it.to.your.own.keystore.no.",
                 "Vill du fortfarande l\u00E4gga till det i ditt eget nyckellagret? [nej]:  "},
         {"Trust.this.certificate.no.", "Litar du p\u00E5 det h\u00E4r certifikatet? [nej]:  "},
-        {"YES", "Ja"},
+        {"YES", "JA"},
         {"New.prompt.", "Nytt {0}: "},
         {"Passwords.must.differ", "L\u00F6senorden m\u00E5ste vara olika"},
         {"Re.enter.new.prompt.", "Ange nytt {0} igen: "},
@@ -368,7 +366,7 @@
                  "Aliaset <{0}> refererar till en posttyp som inte \u00E4r n\u00E5gon privat nyckelpost. Kommandot -keyclone har endast st\u00F6d f\u00F6r kloning av privata nyckelposter"},
 
         {".WARNING.WARNING.WARNING.",
-            "*****************  Varning Varning Varning  *****************"},
+            "*****************  WARNING WARNING WARNING  *****************"},
         {"Signer.d.", "Signerare #%d:"},
         {"Timestamp.", "Tidsst\u00E4mpel:"},
         {"Signature.", "Underskrift:"},
@@ -393,7 +391,7 @@
                 "Toppniv\u00E5certifikatet i svaret:\n"},
         {".is.not.trusted.", "... \u00E4r inte betrott. "},
         {"Install.reply.anyway.no.", "Vill du installera svaret \u00E4nd\u00E5? [nej]:  "},
-        {"NO", "Nej"},
+        {"NO", "NEJ"},
         {"Public.keys.in.reply.and.keystore.don.t.match",
                 "De offentliga nycklarna i svaret och nyckellagret matchar inte varandra"},
         {"Certificate.reply.and.certificate.in.keystore.are.identical",
--- a/src/share/classes/sun/security/util/Resources_zh_CN.java	Wed May 02 14:00:06 2012 +0100
+++ b/src/share/classes/sun/security/util/Resources_zh_CN.java	Wed May 02 15:06:35 2012 +0100
@@ -47,8 +47,7 @@
                 "*******************************************\n\n"},
 
         // keytool: Help part
-// "Option" should be translated.
-        {".OPTION.", " [\u9009\u9879]..."},
+        {".OPTION.", " [OPTION]..."},
         {"Options.", "\u9009\u9879:"},
         {"Use.keytool.help.for.all.available.commands",
                  "\u4F7F\u7528 \"keytool -help\" \u83B7\u53D6\u6240\u6709\u53EF\u7528\u547D\u4EE4"},
@@ -68,9 +67,8 @@
                 "\u5BFC\u51FA\u8BC1\u4E66"}, //-exportcert
         {"Generates.a.key.pair",
                 "\u751F\u6210\u5BC6\u94A5\u5BF9"}, //-genkeypair
-// translation of "secret" key should be different to "private" key.
         {"Generates.a.secret.key",
-                "\u751F\u6210\u5BF9\u79F0\u5BC6\u94A5"}, //-genseckey
+                "\u751F\u6210\u5BC6\u94A5"}, //-genseckey
         {"Generates.certificate.from.a.certificate.request",
                 "\u6839\u636E\u8BC1\u4E66\u8BF7\u6C42\u751F\u6210\u8BC1\u4E66"}, //-gencert
         {"Generates.CRL", "\u751F\u6210 CRL"}, //-gencrl
@@ -189,7 +187,7 @@
         {"Cannot.find.file.", "\u627E\u4E0D\u5230\u6587\u4EF6: "},
         {"Command.option.flag.needs.an.argument.", "\u547D\u4EE4\u9009\u9879{0}\u9700\u8981\u4E00\u4E2A\u53C2\u6570\u3002"},
         {"Warning.Different.store.and.key.passwords.not.supported.for.PKCS12.KeyStores.Ignoring.user.specified.command.value.",
-                "\u8B66\u544A: PKCS12 KeyStore \u4E0D\u652F\u6301\u5176\u4ED6\u5B58\u50A8\u548C\u5BC6\u94A5\u53E3\u4EE4\u3002\u6B63\u5728\u5FFD\u7565\u7528\u6237\u6307\u5B9A\u7684{0}\u503C\u3002"},
+                "\u8B66\u544A: PKCS12 \u5BC6\u94A5\u5E93\u4E0D\u652F\u6301\u5176\u4ED6\u5B58\u50A8\u548C\u5BC6\u94A5\u53E3\u4EE4\u3002\u6B63\u5728\u5FFD\u7565\u7528\u6237\u6307\u5B9A\u7684{0}\u503C\u3002"},
         {".keystore.must.be.NONE.if.storetype.is.{0}",
                 "\u5982\u679C -storetype \u4E3A {0}, \u5219 -keystore \u5FC5\u987B\u4E3A NONE"},
         {"Too.many.retries.program.terminated",
@@ -210,13 +208,13 @@
                 "\u5982\u679C\u6E90\u5BC6\u94A5\u5E93\u672A\u53D7\u53E3\u4EE4\u4FDD\u62A4, \u5219\u4E0D\u80FD\u6307\u5B9A -srcstorepass \u548C -srckeypass"},
         {"Illegal.startdate.value", "\u975E\u6CD5\u5F00\u59CB\u65E5\u671F\u503C"},
         {"Validity.must.be.greater.than.zero",
-                "\u6709\u6548\u671F\u5FC5\u987B\u5927\u4E8E\u96F6"},
+                "\u6709\u6548\u6027\u5FC5\u987B\u5927\u4E8E\u96F6"},
         {"provName.not.a.provider", "{0}\u4E0D\u662F\u63D0\u4F9B\u65B9"},
         {"Usage.error.no.command.provided", "\u7528\u6CD5\u9519\u8BEF: \u6CA1\u6709\u63D0\u4F9B\u547D\u4EE4"},
         {"Source.keystore.file.exists.but.is.empty.", "\u6E90\u5BC6\u94A5\u5E93\u6587\u4EF6\u5B58\u5728, \u4F46\u4E3A\u7A7A: "},
         {"Please.specify.srckeystore", "\u8BF7\u6307\u5B9A -srckeystore"},
         {"Must.not.specify.both.v.and.rfc.with.list.command",
-                "'list' \u547D\u4EE4\u4E0D\u80FD\u540C\u65F6\u6307\u5B9A -v \u53CA -rfc"},
+                "\u4E0D\u80FD\u4F7F\u7528 'list' \u547D\u4EE4\u6765\u6307\u5B9A -v \u53CA -rfc"},
         {"Key.password.must.be.at.least.6.characters",
                 "\u5BC6\u94A5\u53E3\u4EE4\u81F3\u5C11\u5FC5\u987B\u4E3A 6 \u4E2A\u5B57\u7B26"},
         {"New.password.must.be.at.least.6.characters",
@@ -246,7 +244,7 @@
         {"Warning.Overwriting.existing.alias.alias.in.destination.keystore",
                  "\u8B66\u544A: \u6B63\u5728\u8986\u76D6\u76EE\u6807\u5BC6\u94A5\u5E93\u4E2D\u7684\u73B0\u6709\u522B\u540D {0}"},
         {"Existing.entry.alias.alias.exists.overwrite.no.",
-                 "\u5B58\u5728\u73B0\u6709\u6761\u76EE\u522B\u540D {0}, \u662F\u5426\u8986\u76D6? [no]:  "},
+                 "\u5B58\u5728\u73B0\u6709\u6761\u76EE\u522B\u540D {0}, \u662F\u5426\u8986\u76D6? [\u5426]:  "},
         {"Too.many.failures.try.later", "\u6545\u969C\u592A\u591A - \u8BF7\u7A0D\u540E\u518D\u8BD5"},
         {"Certification.request.stored.in.file.filename.",
                 "\u5B58\u50A8\u5728\u6587\u4EF6 <{0}> \u4E2D\u7684\u8BA4\u8BC1\u8BF7\u6C42"},
@@ -325,13 +323,13 @@
         {"Certificate.already.exists.in.keystore.under.alias.trustalias.",
                 "\u5728\u522B\u540D <{0}> \u4E4B\u4E0B, \u8BC1\u4E66\u5DF2\u7ECF\u5B58\u5728\u4E8E\u5BC6\u94A5\u5E93\u4E2D"},
         {"Do.you.still.want.to.add.it.no.",
-                "\u662F\u5426\u4ECD\u8981\u6DFB\u52A0? [no]:  "},
+                "\u662F\u5426\u4ECD\u8981\u6DFB\u52A0? [\u5426]:  "},
         {"Certificate.already.exists.in.system.wide.CA.keystore.under.alias.trustalias.",
                 "\u5728\u522B\u540D <{0}> \u4E4B\u4E0B, \u8BC1\u4E66\u5DF2\u7ECF\u5B58\u5728\u4E8E\u7CFB\u7EDF\u8303\u56F4\u7684 CA \u5BC6\u94A5\u5E93\u4E2D"},
         {"Do.you.still.want.to.add.it.to.your.own.keystore.no.",
-                "\u662F\u5426\u4ECD\u8981\u5C06\u5B83\u6DFB\u52A0\u5230\u81EA\u5DF1\u7684\u5BC6\u94A5\u5E93? [no]:  "},
-        {"Trust.this.certificate.no.", "\u662F\u5426\u4FE1\u4EFB\u6B64\u8BC1\u4E66? [no]:  "},
-        {"YES", "\u662F"},
+                "\u662F\u5426\u4ECD\u8981\u5C06\u5B83\u6DFB\u52A0\u5230\u81EA\u5DF1\u7684\u5BC6\u94A5\u5E93? [\u5426]:  "},
+        {"Trust.this.certificate.no.", "\u662F\u5426\u4FE1\u4EFB\u6B64\u8BC1\u4E66? [\u5426]:  "},
+        {"YES", "YES"},
         {"New.prompt.", "\u65B0{0}: "},
         {"Passwords.must.differ", "\u53E3\u4EE4\u4E0D\u80FD\u76F8\u540C"},
         {"Re.enter.new.prompt.", "\u91CD\u65B0\u8F93\u5165\u65B0{0}: "},
@@ -339,7 +337,7 @@
         {"They.don.t.match.Try.again", "\u5B83\u4EEC\u4E0D\u5339\u914D\u3002\u8BF7\u91CD\u8BD5"},
         {"Enter.prompt.alias.name.", "\u8F93\u5165{0}\u522B\u540D:  "},
         {"Enter.new.alias.name.RETURN.to.cancel.import.for.this.entry.",
-                 "\u8F93\u5165\u65B0\u7684\u522B\u540D\t(\u6309\u56DE\u8F66\u4EE5\u53D6\u6D88\u5BF9\u6B64\u6761\u76EE\u7684\u5BFC\u5165):  "},
+                 "\u5BFC\u5165\u65B0\u7684\u522B\u540D\t(\u6309\u56DE\u8F66\u4EE5\u53D6\u6D88\u5BF9\u6B64\u6761\u76EE\u7684\u5BFC\u5165):  "},
         {"Enter.alias.name.", "\u8F93\u5165\u522B\u540D:  "},
         {".RETURN.if.same.as.for.otherAlias.",
                 "\t(\u5982\u679C\u548C <{0}> \u76F8\u540C, \u5219\u6309\u56DE\u8F66)"},
@@ -368,7 +366,7 @@
                  "\u522B\u540D <{0}> \u5F15\u7528\u4E86\u4E0D\u5C5E\u4E8E\u79C1\u6709\u5BC6\u94A5\u6761\u76EE\u7684\u6761\u76EE\u7C7B\u578B\u3002-keyclone \u547D\u4EE4\u4EC5\u652F\u6301\u5BF9\u79C1\u6709\u5BC6\u94A5\u6761\u76EE\u7684\u514B\u9686"},
 
         {".WARNING.WARNING.WARNING.",
-            "*****************  \u8B66\u544A \u8B66\u544A \u8B66\u544A  *****************"},
+            "*****************  WARNING WARNING WARNING  *****************"},
         {"Signer.d.", "\u7B7E\u540D\u8005 #%d:"},
         {"Timestamp.", "\u65F6\u95F4\u6233:"},
         {"Signature.", "\u7B7E\u540D:"},
@@ -392,8 +390,8 @@
         {"Top.level.certificate.in.reply.",
                 "\u56DE\u590D\u4E2D\u7684\u9876\u7EA7\u8BC1\u4E66:\n"},
         {".is.not.trusted.", "... \u662F\u4E0D\u53EF\u4FE1\u7684\u3002"},
-        {"Install.reply.anyway.no.", "\u662F\u5426\u4ECD\u8981\u5B89\u88C5\u56DE\u590D? [no]:  "},
-        {"NO", "\u5426"},
+        {"Install.reply.anyway.no.", "\u662F\u5426\u4ECD\u8981\u5B89\u88C5\u56DE\u590D? [\u5426]:  "},
+        {"NO", "NO"},
         {"Public.keys.in.reply.and.keystore.don.t.match",
                 "\u56DE\u590D\u4E2D\u7684\u516C\u5171\u5BC6\u94A5\u4E0E\u5BC6\u94A5\u5E93\u4E0D\u5339\u914D"},
         {"Certificate.reply.and.certificate.in.keystore.are.identical",
@@ -405,7 +403,7 @@
         {"Secret.key.not.generated.alias.alias.already.exists",
                 "\u6CA1\u6709\u751F\u6210\u5BC6\u94A5, \u522B\u540D <{0}> \u5DF2\u7ECF\u5B58\u5728"},
         {"Please.provide.keysize.for.secret.key.generation",
-                "\u8BF7\u63D0\u4F9B -keysize \u4EE5\u751F\u6210\u5BF9\u79F0\u5BC6\u94A5"},
+                "\u8BF7\u63D0\u4F9B -keysize \u4EE5\u751F\u6210\u5BC6\u94A5"},
 
         {"Extensions.", "\u6269\u5C55: "},
         {".Empty.value.", "(\u7A7A\u503C)"},
@@ -424,7 +422,7 @@
 
         // policytool
         {"Warning.A.public.key.for.alias.signers.i.does.not.exist.Make.sure.a.KeyStore.is.properly.configured.",
-                "\u8B66\u544A: \u522B\u540D {0} \u7684\u516C\u5171\u5BC6\u94A5\u4E0D\u5B58\u5728\u3002\u8BF7\u786E\u4FDD\u5DF2\u6B63\u786E\u914D\u7F6E KeyStore\u3002"},
+                "\u8B66\u544A: \u522B\u540D {0} \u7684\u516C\u5171\u5BC6\u94A5\u4E0D\u5B58\u5728\u3002\u8BF7\u786E\u4FDD\u5DF2\u6B63\u786E\u914D\u7F6E\u5BC6\u94A5\u5E93\u3002"},
         {"Warning.Class.not.found.class", "\u8B66\u544A: \u627E\u4E0D\u5230\u7C7B: {0}"},
         {"Warning.Invalid.argument.s.for.constructor.arg",
                 "\u8B66\u544A: \u6784\u9020\u5668\u7684\u53C2\u6570\u65E0\u6548: {0}"},
@@ -451,7 +449,7 @@
         {"Add.Public.Key.Alias", "\u6DFB\u52A0\u516C\u5171\u5BC6\u94A5\u522B\u540D"},
         {"Remove.Public.Key.Alias", "\u5220\u9664\u516C\u5171\u5BC6\u94A5\u522B\u540D"},
         {"File", "\u6587\u4EF6"},
-        {"KeyStore", "KeyStore"},
+        {"KeyStore", "\u5BC6\u94A5\u5E93"},
         {"Policy.File.", "\u7B56\u7565\u6587\u4EF6:"},
         {"Could.not.open.policy.file.policyFile.e.toString.",
                 "\u65E0\u6CD5\u6253\u5F00\u7B56\u7565\u6587\u4EF6: {0}: {1}"},
@@ -483,10 +481,10 @@
         {".Edit.Permission", "  \u7F16\u8F91\u6743\u9650"},
         {"Remove.Permission", "\u5220\u9664\u6743\u9650"},
         {"Done", "\u5B8C\u6210"},
-        {"KeyStore.URL.", "KeyStore URL:"},
-        {"KeyStore.Type.", "KeyStore \u7C7B\u578B:"},
-        {"KeyStore.Provider.", "KeyStore \u63D0\u4F9B\u65B9:"},
-        {"KeyStore.Password.URL.", "KeyStore \u53E3\u4EE4 URL:"},
+        {"KeyStore.URL.", "\u5BC6\u94A5\u5E93 URL:"},
+        {"KeyStore.Type.", "\u5BC6\u94A5\u5E93\u7C7B\u578B:"},
+        {"KeyStore.Provider.", "\u5BC6\u94A5\u5E93\u63D0\u4F9B\u65B9:"},
+        {"KeyStore.Password.URL.", "\u5BC6\u94A5\u5E93\u53E3\u4EE4 URL:"},
         {"Principals", "\u4E3B\u7528\u6237"},
         {".Edit.Principal.", "  \u7F16\u8F91\u4E3B\u7528\u6237:"},
         {".Add.New.Principal.", "  \u6DFB\u52A0\u65B0\u4E3B\u7528\u6237:"},
@@ -512,7 +510,7 @@
         {"Save.Changes", "\u4FDD\u5B58\u66F4\u6539"},
         {"No.Policy.Entry.selected", "\u6CA1\u6709\u9009\u62E9\u7B56\u7565\u6761\u76EE"},
         {"Unable.to.open.KeyStore.ex.toString.",
-                "\u65E0\u6CD5\u6253\u5F00 KeyStore: {0}"},
+                "\u65E0\u6CD5\u6253\u5F00\u5BC6\u94A5\u5E93: {0}"},
         {"No.principal.selected", "\u672A\u9009\u62E9\u4E3B\u7528\u6237"},
         {"No.permission.selected", "\u6CA1\u6709\u9009\u62E9\u6743\u9650"},
         {"name", "\u540D\u79F0"},
@@ -525,8 +523,8 @@
         {"Principal.List", "\u4E3B\u7528\u6237\u5217\u8868"},
         {"Permission.List", "\u6743\u9650\u5217\u8868"},
         {"Code.Base", "\u4EE3\u7801\u5E93"},
-        {"KeyStore.U.R.L.", "KeyStore URL:"},
-        {"KeyStore.Password.U.R.L.", "KeyStore \u53E3\u4EE4 URL:"},
+        {"KeyStore.U.R.L.", "\u5BC6\u94A5\u5E93 URL:"},
+        {"KeyStore.Password.U.R.L.", "\u5BC6\u94A5\u5E93\u53E3\u4EE4 URL:"},
 
 
         // javax.security.auth.PrivateCredentialPermission
--- a/src/share/classes/sun/security/util/Resources_zh_TW.java	Wed May 02 14:00:06 2012 +0100
+++ b/src/share/classes/sun/security/util/Resources_zh_TW.java	Wed May 02 15:06:35 2012 +0100
@@ -47,8 +47,7 @@
                 "*******************************************\n\n"},
 
         // keytool: Help part
-// "Option" should be translated.
-        {".OPTION.", " [\u9078\u9805]..."},
+        {".OPTION.", " [OPTION]..."},
         {"Options.", "\u9078\u9805:"},
         {"Use.keytool.help.for.all.available.commands",
                  "\u4F7F\u7528 \"keytool -help\" \u53D6\u5F97\u6240\u6709\u53EF\u7528\u7684\u547D\u4EE4"},
@@ -68,7 +67,6 @@
                 "\u532F\u51FA\u6191\u8B49"}, //-exportcert
         {"Generates.a.key.pair",
                 "\u7522\u751F\u91D1\u9470\u7D44"}, //-genkeypair
-// translation of "secret" key should be different to "private" key.
         {"Generates.a.secret.key",
                 "\u7522\u751F\u79D8\u5BC6\u91D1\u9470"}, //-genseckey
         {"Generates.certificate.from.a.certificate.request",
@@ -368,7 +366,7 @@
                  "\u5225\u540D <{0}> \u6240\u53C3\u7167\u7684\u9805\u76EE\u4E0D\u662F\u79C1\u5BC6\u91D1\u9470\u985E\u578B\u3002-keyclone \u547D\u4EE4\u50C5\u652F\u63F4\u79C1\u5BC6\u91D1\u9470\u9805\u76EE\u7684\u8907\u88FD"},
 
         {".WARNING.WARNING.WARNING.",
-            "*****************  \u8B66\u544A \u8B66\u544A \u8B66\u544A  *****************"},
+            "*****************  WARNING WARNING WARNING  *****************"},
         {"Signer.d.", "\u7C3D\u7F72\u8005 #%d:"},
         {"Timestamp.", "\u6642\u6233:"},
         {"Signature.", "\u7C3D\u7AE0:"},
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/share/classes/sun/security/util/UntrustedCertificates.java	Wed May 02 15:06:35 2012 +0100
@@ -0,0 +1,741 @@
+/*
+ * Copyright (c) 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.  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.security.util;
+
+import java.io.IOException;
+import java.io.ByteArrayInputStream;
+import java.security.cert.X509Certificate;
+import java.security.cert.CertificateFactory;
+import java.security.cert.CertificateException;
+import java.util.Set;
+import java.util.HashSet;
+
+/**
+ * A utility class to check if a certificate is untrusted. This is an internal
+ * mechanism that explicitly marks a certificate as untrusted, normally in the
+ * case that a certificate is known to be used for malicious reasons.
+ *
+ * <b>Attention</b>: This check is NOT meant to replace the standard PKI-defined
+ * validation check, neither is it used as an alternative to CRL.
+ */
+public final class UntrustedCertificates {
+
+    private final static Set<X509Certificate> untrustedCerts = new HashSet<>();
+
+    /**
+     * Checks if a certificate is untrusted.
+     *
+     * @param cert the certificate to check
+     * @return true if the certificate is untrusted.
+     */
+    public static boolean isUntrusted(X509Certificate cert) {
+        return untrustedCerts.contains(cert);
+    }
+
+    private static void add(String alias, String pemCert) {
+        // generate certificate from PEM certificate
+        try (ByteArrayInputStream is =
+                new ByteArrayInputStream(pemCert.getBytes())) {
+            CertificateFactory cf = CertificateFactory.getInstance("X.509");
+            X509Certificate cert = (X509Certificate)cf.generateCertificate(is);
+
+            if (!untrustedCerts.add(cert)) {
+                throw new RuntimeException("Duplicate untrusted certificate: " +
+                    cert.getSubjectX500Principal());
+            }
+        } catch (CertificateException | IOException e) {
+            throw new RuntimeException(
+                        "Incorrect untrusted certificate: " + alias, e);
+        }
+    }
+
+    static {
+        // -----------------------------------------------------------------
+        // Compromised CAs of Digicert Malaysia
+        //
+        // Reported by Digicert in its announcement on November 05, 2011.
+        //
+
+        // Digicert Malaysia intermediate, cross-signed by CyberTrust
+        //
+        // Subject: CN=Digisign Server ID (Enrich),
+        //          OU=457608-K,
+        //          O=Digicert Sdn. Bhd.,
+        //          C=MY
+        // Issuer:  CN=GTE CyberTrust Global Root,
+        //          OU=GTE CyberTrust Solutions, Inc.,
+        //          O=GTE Corporation,
+        //          C=US
+        // Serial:  120001705 (07:27:14:a9)
+        add("digicert-server-cross-to-cybertrust-4C0E636A",
+        "-----BEGIN CERTIFICATE-----\n" +
+        "MIIDyzCCAzSgAwIBAgIEBycUqTANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQGEwJV\n" +
+        "UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU\n" +
+        "cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds\n" +
+        "b2JhbCBSb290MB4XDTA3MDcxNzE1MTc0OFoXDTEyMDcxNzE1MTY1NFowYzELMAkG\n" +
+        "A1UEBhMCTVkxGzAZBgNVBAoTEkRpZ2ljZXJ0IFNkbi4gQmhkLjERMA8GA1UECxMI\n" +
+        "NDU3NjA4LUsxJDAiBgNVBAMTG0RpZ2lzaWduIFNlcnZlciBJRCAoRW5yaWNoKTCB\n" +
+        "nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEArahkS02Hx4RZufuQRqCmicDx/tXa\n" +
+        "VII3DZkrRSYK6Fawf8qo9I5HhAGCKeOzarWR8/uVhbxyqGToCkCcxfRxrnt7agfq\n" +
+        "kBRPjYmvlKuyBtQCanuYH1m5Os1U+iDfsioK6bjdaZDAKdNO0JftZszFGUkGf/pe\n" +
+        "LHx7hRsyQt97lSUCAwEAAaOCAXgwggF0MBIGA1UdEwEB/wQIMAYBAf8CAQAwXAYD\n" +
+        "VR0gBFUwUzBIBgkrBgEEAbE+AQAwOzA5BggrBgEFBQcCARYtaHR0cDovL2N5YmVy\n" +
+        "dHJ1c3Qub21uaXJvb3QuY29tL3JlcG9zaXRvcnkuY2ZtMAcGBWCDSgEBMA4GA1Ud\n" +
+        "DwEB/wQEAwIB5jCBiQYDVR0jBIGBMH+heaR3MHUxCzAJBgNVBAYTAlVTMRgwFgYD\n" +
+        "VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv\n" +
+        "bHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJv\n" +
+        "b3SCAgGlMEUGA1UdHwQ+MDwwOqA4oDaGNGh0dHA6Ly93d3cucHVibGljLXRydXN0\n" +
+        "LmNvbS9jZ2ktYmluL0NSTC8yMDE4L2NkcC5jcmwwHQYDVR0OBBYEFMYWk04WF+wW\n" +
+        "royUdvOGbcV0boR3MA0GCSqGSIb3DQEBBQUAA4GBAHYAe6Z4K2Ydjl42xqSOBfIj\n" +
+        "knyTZ9P0wAp9iy3Z6tVvGvPhSilaIoRNUC9LDPL/hcJ7VdREgr5trGeOvLQfkpxR\n" +
+        "gBoU9m6rYYgLrRx/90tQUdZlG6ZHcRVesHHzNRTyN71jyNXwk1o0X9g96F33xR7A\n" +
+        "5c8fhiSpPAdmzcHSNmNZ\n" +
+        "-----END CERTIFICATE-----");
+
+        // Digicert Malaysia intermediate, cross-signed by Entrust
+        //
+        // Subject: CN=Digisign Server ID - (Enrich),
+        //          OU=457608-K,
+        //          O=Digicert Sdn. Bhd.,
+        //          C=MY
+        // Issuer:  CN=Entrust.net Certification Authority (2048)
+        //          OU=(c) 1999 Entrust.net Limited,
+        //          OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.),
+        //          O=Entrust.net
+        // Serial:  1184644297 (4c:0e:63:6a)
+        add("digicert-server-cross-to-entrust-ca-4C0E636A",
+        "-----BEGIN CERTIFICATE-----\n" +
+        "MIIEzjCCA7agAwIBAgIETA5jajANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML\n" +
+        "RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp\n" +
+        "bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5\n" +
+        "IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp\n" +
+        "ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw0xMDA3MTYxNzIzMzdaFw0xNTA3\n" +
+        "MTYxNzUzMzdaMGUxCzAJBgNVBAYTAk1ZMRswGQYDVQQKExJEaWdpY2VydCBTZG4u\n" +
+        "IEJoZC4xETAPBgNVBAsTCDQ1NzYwOC1LMSYwJAYDVQQDEx1EaWdpc2lnbiBTZXJ2\n" +
+        "ZXIgSUQgLSAoRW5yaWNoKTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB\n" +
+        "AMWJ5PQNBkCSWccaszXRDkwqM/n4r8qef+65p21g9FTob9Wb8xtjMQRoctE0Foy0\n" +
+        "FyyX3nPF2JAVoBor9cuzSIZE8B2ITM5BQhrv9Qze/kDaOSD3BlU6ap1GwdJvpbLI\n" +
+        "Vz4po5zg6YV3ZuiYpyR+vsBZIOVEb7ZX2L7OwmV3WMZhQdF0BMh/SULFcqlyFu6M\n" +
+        "3RJdtErU0a9Qt9iqdXZorT5dqjBtYairEFs+E78z4K9EnTgiW+9ML6ZxJhUmyiiM\n" +
+        "2fqOjqmiFDXimySItPR/hZ2DTwehthSQNsQ0HI0mYW0Tb3i+6I8nx0uElqOGaAwj\n" +
+        "vgvsjJQAqQSKE5D334VsDLECAwEAAaOCATQwggEwMA4GA1UdDwEB/wQEAwIBBjAS\n" +
+        "BgNVHRMBAf8ECDAGAQH/AgEAMCcGA1UdJQQgMB4GCCsGAQUFBwMBBggrBgEFBQcD\n" +
+        "AgYIKwYBBQUHAwQwMwYIKwYBBQUHAQEEJzAlMCMGCCsGAQUFBzABhhdodHRwOi8v\n" +
+        "b2NzcC5lbnRydXN0Lm5ldDBEBgNVHSAEPTA7MDkGBWCDSgEBMDAwLgYIKwYBBQUH\n" +
+        "AgEWImh0dHA6Ly93d3cuZGlnaWNlcnQuY29tLm15L2Nwcy5odG0wMgYDVR0fBCsw\n" +
+        "KTAnoCWgI4YhaHR0cDovL2NybC5lbnRydXN0Lm5ldC8yMDQ4Y2EuY3JsMBEGA1Ud\n" +
+        "DgQKBAhMTswlKAMpgTAfBgNVHSMEGDAWgBRV5IHREYC+2Im5CKMx+aEkCRa5cDAN\n" +
+        "BgkqhkiG9w0BAQUFAAOCAQEAl0zvSjpJrHL8MCBrtClbp8WVBJD5MtXChWreA6E3\n" +
+        "+YkAsFqsVX7bQzX/yQH4Ub7MJsrIaqTEVD4mHucMo82XZ5TdpkLrXM2POXlrM3kh\n" +
+        "Bnn6gkQVmczBtznTRmJ8snDrb84gqj4Zt+l0gpy0pUtNYQA35IfS8hQ6ZHy4qXth\n" +
+        "4JMi59WfPkfmNnagU9gAAzoPtTP+lsrT0oI6Lt3XSOHkp2nMHOmZSufKcEXXCwcO\n" +
+        "mnUb0C+Sb/akB8O9HEumhLZ9qJqp0qcp8QtXaR6XVybsK0Os1EWDBQDp4/BGQAf6\n" +
+        "6rFRc5Mcpd1TETfIKqcVJx20qsx/qjEw/LhFn0gJ7RDixQ==\n" +
+        "-----END CERTIFICATE-----");
+
+
+        // -----------------------------------------------------------------
+        //
+        // No longer used certificates
+        //
+
+        // Subject: CN=Java Media APIs,
+        //          OU=Java Signed Extensions,
+        //          OU=Corporate Object Signing,
+        //          O=Sun Microsystems Inc
+        // Issuer:  CN=Object Signing CA,
+        //          OU=Class 2 OnSite Subscriber CA,
+        //          OU=VeriSign Trust Network,
+        //          O=Sun Microsystems Inc
+        // Serial:  6a:8b:99:91:37:59:4f:89:53:e2:97:18:9f:19:1e:4e
+        add("java-media-pretrusted-9F191E4E",
+        "-----BEGIN CERTIFICATE-----\n" +
+        "MIIFdzCCBF+gAwIBAgIQaouZkTdZT4lT4pcYnxkeTjANBgkqhkiG9w0BAQUFADCB\n" +
+        "gzEdMBsGA1UEChMUU3VuIE1pY3Jvc3lzdGVtcyBJbmMxHzAdBgNVBAsTFlZlcmlT\n" +
+        "aWduIFRydXN0IE5ldHdvcmsxJTAjBgNVBAsTHENsYXNzIDIgT25TaXRlIFN1YnNj\n" +
+        "cmliZXIgQ0ExGjAYBgNVBAMTEU9iamVjdCBTaWduaW5nIENBMB4XDTA5MDUxMjAw\n" +
+        "MDAwMFoXDTEyMDUxMTIzNTk1OVowfTEdMBsGA1UEChQUU3VuIE1pY3Jvc3lzdGVt\n" +
+        "cyBJbmMxITAfBgNVBAsUGENvcnBvcmF0ZSBPYmplY3QgU2lnbmluZzEfMB0GA1UE\n" +
+        "CxQWSmF2YSBTaWduZWQgRXh0ZW5zaW9uczEYMBYGA1UEAxQPSmF2YSBNZWRpYSBB\n" +
+        "UElzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAl5blzoKTVE8y4Hpz\n" +
+        "q6E15RZz1bF5HnYEyYqgHkZXnAKedmYCoMzm1XK8s+gQWShLEvGEAvs5yqarx9gE\n" +
+        "nnC21N28aEZgIJMa2/arKxCUkS4pxdGPYGexL9UzSRkUpoBShCZKEGdmX7gfJE2K\n" +
+        "/sd9MFvGV5/yZtWXrADzvm0Kd/9mg1KRv1gfrZIq0TJbupoXPYYqb73AkI9eT2ZD\n" +
+        "q9MdwD4E5+oojsDFXt8GU/D00fUhtXpYwuplU7D667WHYdJhIah0ST6JywyqcLXG\n" +
+        "XSuFTXOgITT2idSHluZVmx3dqJ72u9kPkO4JdJTMDfaK8zgNLaRkiU8Qcj+qhLYH\n" +
+        "ytaqcwIDAQABo4IB6jCCAeYwCQYDVR0TBAIwADAOBgNVHQ8BAf8EBAMCB4AwfwYD\n" +
+        "VR0fBHgwdjB0oHKgcIZuaHR0cDovL29uc2l0ZWNybC52ZXJpc2lnbi5jb20vU3Vu\n" +
+        "TWljcm9zeXN0ZW1zSW5jQ29ycG9yYXRlT2JqZWN0U2lnbmluZ0phdmFTaWduZWRF\n" +
+        "eHRlbnNpb25zQ2xhc3NCL0xhdGVzdENSTC5jcmwwHwYDVR0jBBgwFoAUs0crgn5T\n" +
+        "tHPKuLsZt76BTQeVx+0wHQYDVR0OBBYEFKS32mVx0gNWTeS4ProHEaeSpvvIMDsG\n" +
+        "CCsGAQUFBwEBBC8wLTArBggrBgEFBQcwAYYfaHR0cDovL29uc2l0ZS1vY3NwLnZl\n" +
+        "cmlzaWduLmNvbTCBtQYDVR0gBIGtMIGqMDkGC2CGSAGG+EUBBxcCMCowKAYIKwYB\n" +
+        "BQUHAgEWHGh0dHBzOi8vd3d3LnZlcmlzaWduLmNvbS9ycGEwbQYLYIZIAYb3AIN9\n" +
+        "nD8wXjAnBggrBgEFBQcCARYbaHR0cHM6Ly93d3cuc3VuLmNvbS9wa2kvY3BzMDMG\n" +
+        "CCsGAQUFBwICMCcaJVZhbGlkYXRlZCBGb3IgU3VuIEJ1c2luZXNzIE9wZXJhdGlv\n" +
+        "bnMwEwYDVR0lBAwwCgYIKwYBBQUHAwMwDQYJKoZIhvcNAQEFBQADggEBAAe6BO4W\n" +
+        "3TSNWfezyelJs6kE3HfulT6Bdyz4UUoh9ykXcV8nRwT+kh25I5MdyG2GfkJoADPR\n" +
+        "VhC5DYo13UFpIsTNVjq+hGYe2hML93bN7ad9SxCCyjHUo3yMz2qgBbHZI3VA9ZHA\n" +
+        "aWM4Tx0saMwbcnVvlbuGh+PXvStfypJqYT6lzcdFfjNVX4FI/QQNGhBswMY51tC8\n" +
+        "GTBCL2qhJon0gSCU4zaawDOf7+XxJWirLamYL1Aal1/h2z2sFrvA/1ftxtU3kZ6I\n" +
+        "7De8DyoHeZg7pYGdrj7g+lPhCga/WvEhN152I+aP08YbFcJHYmK05ngl/Ye4c6Bd\n" +
+        "cdrdfbw6QzEUIYY=\n" +
+        "-----END CERTIFICATE-----");
+
+        // Subject: CN=JavaFX 1.0 Runtime,
+        //          OU=Java Signed Extensions,
+        //          OU=Corporate Object Signing,
+        //          O=Sun Microsystems Inc
+        // Issuer:  CN=Object Signing CA,
+        //          OU=Class 2 OnSite Subscriber CA,
+        //          OU=VeriSign Trust Network,
+        //          O=Sun Microsystems Inc
+        // Serial:  55:c0:e6:44:59:59:79:9e:d9:26:f1:b0:4a:1e:f0:27
+        add("java-fx10-pretrusted-4A1EF027",
+        "-----BEGIN CERTIFICATE-----\n" +
+        "MIIFezCCBGOgAwIBAgIQVcDmRFlZeZ7ZJvGwSh7wJzANBgkqhkiG9w0BAQUFADCB\n" +
+        "gzEdMBsGA1UEChMUU3VuIE1pY3Jvc3lzdGVtcyBJbmMxHzAdBgNVBAsTFlZlcmlT\n" +
+        "aWduIFRydXN0IE5ldHdvcmsxJTAjBgNVBAsTHENsYXNzIDIgT25TaXRlIFN1YnNj\n" +
+        "cmliZXIgQ0ExGjAYBgNVBAMTEU9iamVjdCBTaWduaW5nIENBMB4XDTA4MTAwOTAw\n" +
+        "MDAwMFoXDTExMTAwOTIzNTk1OVowgYAxHTAbBgNVBAoUFFN1biBNaWNyb3N5c3Rl\n" +
+        "bXMgSW5jMSEwHwYDVQQLFBhDb3Jwb3JhdGUgT2JqZWN0IFNpZ25pbmcxHzAdBgNV\n" +
+        "BAsUFkphdmEgU2lnbmVkIEV4dGVuc2lvbnMxGzAZBgNVBAMUEkphdmFGWCAxLjAg\n" +
+        "UnVudGltZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM+WDc6+bu+4\n" +
+        "tmAcS/lBtUc02WOt9QZpVsXg9cG2pu/8bUtmDELa8iiYBVFpIs8DU58HLrGQtCUY\n" +
+        "SIAGOVPsOJoN29UKCDWfY9j5JeVhfhMGqk9DwrWhzgsjy4cpZ1pIp+k/fJ8zT8Ul\n" +
+        "aYLpow1vg3UNddsmwz02tN7cOrMw9WYIG4CRYnY1OrtJSfe2pYzheC4zyvR+aiVl\n" +
+        "nang2OtqikSQsNFOFHsLOJFxngy9LrO8evDSu25VTKI6zlWU6/bMeqtztJPN0VOn\n" +
+        "NyUrJZvkxZ207Jg0T693BGSxNC1n+ihztXogql8950M/pEuUbDjylv5FFvlp6DSB\n" +
+        "dDT2MkutmyMCAwEAAaOCAeowggHmMAkGA1UdEwQCMAAwDgYDVR0PAQH/BAQDAgeA\n" +
+        "MH8GA1UdHwR4MHYwdKByoHCGbmh0dHA6Ly9vbnNpdGVjcmwudmVyaXNpZ24uY29t\n" +
+        "L1N1bk1pY3Jvc3lzdGVtc0luY0NvcnBvcmF0ZU9iamVjdFNpZ25pbmdKYXZhU2ln\n" +
+        "bmVkRXh0ZW5zaW9uc0NsYXNzQi9MYXRlc3RDUkwuY3JsMB8GA1UdIwQYMBaAFLNH\n" +
+        "K4J+U7Rzyri7Gbe+gU0HlcftMB0GA1UdDgQWBBTjgufVi3XJ3gx1ewsA6Rr7BR4Z\n" +
+        "zjA7BggrBgEFBQcBAQQvMC0wKwYIKwYBBQUHMAGGH2h0dHA6Ly9vbnNpdGUtb2Nz\n" +
+        "cC52ZXJpc2lnbi5jb20wgbUGA1UdIASBrTCBqjA5BgtghkgBhvhFAQcXAjAqMCgG\n" +
+        "CCsGAQUFBwIBFhxodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhMG0GC2CGSAGG\n" +
+        "9wCDfZw/MF4wJwYIKwYBBQUHAgEWG2h0dHBzOi8vd3d3LnN1bi5jb20vcGtpL2Nw\n" +
+        "czAzBggrBgEFBQcCAjAnGiVWYWxpZGF0ZWQgRm9yIFN1biBCdXNpbmVzcyBPcGVy\n" +
+        "YXRpb25zMBMGA1UdJQQMMAoGCCsGAQUFBwMDMA0GCSqGSIb3DQEBBQUAA4IBAQAB\n" +
+        "YVJTTVe7rzyTO4jc3zajErOT/COkdQTfNo0eIX1QbNynFieJvwY/jRzUZwjktIFR\n" +
+        "2p4JtbpHGAtKtjOAOTieQ8xdDOoC1djzpE7/AbMvuvlTavtUKT+F7tPdhfXgWXJV\n" +
+        "6Wbt8jryKyk3zZGiEhauIwZUkfjRkEtffEmZWLUd8c8rURJjfC/XHH2oyurscoxc\n" +
+        "CjX29c9ynxSiS/VvQp1an0HvErGh69N48wj7cj8mtZ1yHzd2XCzSSR1OfTPfk0Pt\n" +
+        "yg51p7yJaFiH21PTZegEL6zyVNOYBTKwwIi2OzpwYalD3uvK6e3OKDrfFCOxu17u\n" +
+        "4PveESbrdyrmvLe7IVez\n" +
+        "-----END CERTIFICATE-----");
+
+        // Subject: CN=JavaFX Runtime,
+        //          OU=Java Signed Extensions,
+        //          OU=Corporate Object Signing,
+        //          O=Sun Microsystems Inc
+        // Issuer:  CN=Object Signing CA,
+        //          OU=Class 2 OnSite Subscriber CA,
+        //          OU=VeriSign Trust Network,
+        //          O=Sun Microsystems Inc
+        // Serial:  47:f4:55:f1:da:4a:5e:f9:e3:f7:a8:03:62:17:c0:ff
+        add("javafx-runtime-pretrusted-6217C0FF",
+        "-----BEGIN CERTIFICATE-----\n" +
+        "MIIFdjCCBF6gAwIBAgIQR/RV8dpKXvnj96gDYhfA/zANBgkqhkiG9w0BAQUFADCB\n" +
+        "gzEdMBsGA1UEChMUU3VuIE1pY3Jvc3lzdGVtcyBJbmMxHzAdBgNVBAsTFlZlcmlT\n" +
+        "aWduIFRydXN0IE5ldHdvcmsxJTAjBgNVBAsTHENsYXNzIDIgT25TaXRlIFN1YnNj\n" +
+        "cmliZXIgQ0ExGjAYBgNVBAMTEU9iamVjdCBTaWduaW5nIENBMB4XDTA5MDEyOTAw\n" +
+        "MDAwMFoXDTEyMDEyOTIzNTk1OVowfDEdMBsGA1UEChQUU3VuIE1pY3Jvc3lzdGVt\n" +
+        "cyBJbmMxITAfBgNVBAsUGENvcnBvcmF0ZSBPYmplY3QgU2lnbmluZzEfMB0GA1UE\n" +
+        "CxQWSmF2YSBTaWduZWQgRXh0ZW5zaW9uczEXMBUGA1UEAxQOSmF2YUZYIFJ1bnRp\n" +
+        "bWUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCIzd0fAk8mI9ONc6RJ\n" +
+        "aGieioK2FLdXEwj8zL3vdGDVmBwyR1zwYkaOIFFgF9IW/8qc4iAYA5sGUY+0g8q3\n" +
+        "5DuYAxfTzBB5KdaYvbuq6GGnoHIWmTirXY+1friFp8lyXSvtuEaGB1VHaBoZchEg\n" +
+        "k+UgeVDA43dHwcT1Ov3DePczJRUes8T/QHzLX+BxUDG43vjyncCEO/AjqLZxXEz2\n" +
+        "xrNbKLcH3lGMJK7hdbfssUfF5BjC38Hn71HauYlA43b2no+2y0Sjulwzez2YPbDC\n" +
+        "0GLR3TnKtA8dqOrnl5t3DniDbfOBNtBE3VOydJO0XW57Ng1HRXD023nm9ECPY2xp\n" +
+        "0N/pAgMBAAGjggHqMIIB5jAJBgNVHRMEAjAAMA4GA1UdDwEB/wQEAwIHgDB/BgNV\n" +
+        "HR8EeDB2MHSgcqBwhm5odHRwOi8vb25zaXRlY3JsLnZlcmlzaWduLmNvbS9TdW5N\n" +
+        "aWNyb3N5c3RlbXNJbmNDb3Jwb3JhdGVPYmplY3RTaWduaW5nSmF2YVNpZ25lZEV4\n" +
+        "dGVuc2lvbnNDbGFzc0IvTGF0ZXN0Q1JMLmNybDAfBgNVHSMEGDAWgBSzRyuCflO0\n" +
+        "c8q4uxm3voFNB5XH7TAdBgNVHQ4EFgQUvOdd0cKPj+Yik/iOBwTdphh5A+gwOwYI\n" +
+        "KwYBBQUHAQEELzAtMCsGCCsGAQUFBzABhh9odHRwOi8vb25zaXRlLW9jc3AudmVy\n" +
+        "aXNpZ24uY29tMIG1BgNVHSAEga0wgaowOQYLYIZIAYb4RQEHFwIwKjAoBggrBgEF\n" +
+        "BQcCARYcaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYTBtBgtghkgBhvcAg32c\n" +
+        "PzBeMCcGCCsGAQUFBwIBFhtodHRwczovL3d3dy5zdW4uY29tL3BraS9jcHMwMwYI\n" +
+        "KwYBBQUHAgIwJxolVmFsaWRhdGVkIEZvciBTdW4gQnVzaW5lc3MgT3BlcmF0aW9u\n" +
+        "czATBgNVHSUEDDAKBggrBgEFBQcDAzANBgkqhkiG9w0BAQUFAAOCAQEAbGcf2NjL\n" +
+        "AI93HG6ny2BbepaZA1a8xa/R6uUc7xV+Qw6MgLwFD4Q4i6LWUztQDvg9l68MM2/i\n" +
+        "Y9LEi1KM4lcNbK5+D+t9x98wXBiuojXhVdp5ZmC03EyEBbriopdBsmXVLDSu/Y3+\n" +
+        "zowOO5xwpMK3dbgsSDs2Vt0UosD3FTcRaD3GNfOhXMp+o1grHNiXF9YgkmdQbPPZ\n" +
+        "DQ2KBhFPCRJXBGvyKOqno/DTg0sQ3crGH/C4/4t7mnQXWldZotmJUZ0ONc9oD+Q1\n" +
+        "JAaguUKqIwn9yZ093ie+JWHbYNid9IIIPXYgtRxmf9a376WBhqhu56uJftBJ7x9g\n" +
+        "eQ7Lot6CSWCiFw==\n" +
+        "-----END CERTIFICATE-----");
+
+        //
+        // Compromised Solaris INTERNAL DEVELOPMENT USE ONLY certificate
+        //
+
+        // Subject: CN=Solaris INTERNAL DEVELOPMENT USE ONLY,
+        //          OU=Solaris Cryptographic Framework,
+        //          OU=Corporate Object Signing,
+        //          O=Sun Microsystems Inc
+        // Issuer:  CN=Object Signing CA,
+        //          OU=Class 2 OnSite Subscriber CA,
+        //          OU=VeriSign Trust Network,
+        //          O=Sun Microsystems Inc
+        // Serial:  77:29:77:52:6a:19:7b:9a:a6:a2:c7:99:a0:e1:cd:8c
+        add("solaris-internal-dev-A0E1CD8C",
+        "-----BEGIN CERTIFICATE-----\n" +
+        "MIIFHjCCBAagAwIBAgIQdyl3UmoZe5qmoseZoOHNjDANBgkqhkiG9w0BAQUFADCB\n" +
+        "gzEdMBsGA1UEChMUU3VuIE1pY3Jvc3lzdGVtcyBJbmMxHzAdBgNVBAsTFlZlcmlT\n" +
+        "aWduIFRydXN0IE5ldHdvcmsxJTAjBgNVBAsTHENsYXNzIDIgT25TaXRlIFN1YnNj\n" +
+        "cmliZXIgQ0ExGjAYBgNVBAMTEU9iamVjdCBTaWduaW5nIENBMB4XDTA3MDEwNDAw\n" +
+        "MDAwMFoXDTEwMDEwMzIzNTk1OVowgZwxHTAbBgNVBAoUFFN1biBNaWNyb3N5c3Rl\n" +
+        "bXMgSW5jMSEwHwYDVQQLFBhDb3Jwb3JhdGUgT2JqZWN0IFNpZ25pbmcxKDAmBgNV\n" +
+        "BAsUH1NvbGFyaXMgQ3J5cHRvZ3JhcGhpYyBGcmFtZXdvcmsxLjAsBgNVBAMUJVNv\n" +
+        "bGFyaXMgSU5URVJOQUwgREVWRUxPUE1FTlQgVVNFIE9OTFkwgZ8wDQYJKoZIhvcN\n" +
+        "AQEBBQADgY0AMIGJAoGBALbNU4hf3mD5ArDI9pjgioAyvV3bjMPRQdCZniIeGJBp\n" +
+        "odFlSEH+Mh64W1DsY8coeZ7FvvGJkx9IpTMJW9k8w1oJK9UNqHyAQfaYjQyXi3xQ\n" +
+        "LJp62EvYdGfDlwOZejEcR/MbzZG+GOPMMvQj5+xyFDvLXNGfQNTnxw2qnBgCJXjj\n" +
+        "AgMBAAGjggH1MIIB8TAJBgNVHRMEAjAAMA4GA1UdDwEB/wQEAwIHgDCBiQYDVR0f\n" +
+        "BIGBMH8wfaB7oHmGd2h0dHA6Ly9vbnNpdGVjcmwudmVyaXNpZ24uY29tL1N1bk1p\n" +
+        "Y3Jvc3lzdGVtc0luY0NvcnBvcmF0ZU9iamVjdFNpZ25pbmdTb2xhcmlzQ3J5cHRv\n" +
+        "Z3JhcGhpY0ZyYW1ld29ya0NsYXNzQi9MYXRlc3RDUkwuY3JsMB8GA1UdIwQYMBaA\n" +
+        "FLNHK4J+U7Rzyri7Gbe+gU0HlcftMB0GA1UdDgQWBBRpfiGYkehTnsIzuN2H6AFb\n" +
+        "VCZG8jA7BggrBgEFBQcBAQQvMC0wKwYIKwYBBQUHMAGGH2h0dHA6Ly9vbnNpdGUt\n" +
+        "b2NzcC52ZXJpc2lnbi5jb20wgbUGA1UdIASBrTCBqjA5BgtghkgBhvhFAQcXAjAq\n" +
+        "MCgGCCsGAQUFBwIBFhxodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhMG0GC2CG\n" +
+        "SAGG9wCDfZw/MF4wJwYIKwYBBQUHAgEWG2h0dHBzOi8vd3d3LnN1bi5jb20vcGtp\n" +
+        "L2NwczAzBggrBgEFBQcCAjAnFiVWYWxpZGF0ZWQgRm9yIFN1biBCdXNpbmVzcyBP\n" +
+        "cGVyYXRpb25zMBMGA1UdJQQMMAoGCCsGAQUFBwMDMA0GCSqGSIb3DQEBBQUAA4IB\n" +
+        "AQCG5soy3LFHTFbA8/5SzDRhQoJkHUnOP0t3b6nvX6vZYRp649fje7TQOPRm1pFd\n" +
+        "CZ17J+tggdZwgzTqY4aYpJ00jZaK6pV37q/vgFC/ia6jDs8Q+ly9cEcadBZ5loYg\n" +
+        "cmxp9p57W2MNWx8VA8oFdNtKfF0jUNXbLNtvwGHmgR6YcwLrGN1b6/9Lt9bO3ODl\n" +
+        "FO+ZDwkfQz5ClUVrTx2dGBvKRYFqSG5S8JAfsgYhPvcacUQkA7ExyKvfRXLWVrce\n" +
+        "ZiPpcElbx+819H2sAPvVvparVeAruZGMAtejHZp9NFoowKen5drJp9VxePS4eM49\n" +
+        "3DepB6lKRrNRw66LNQol4ZBz\n" +
+        "-----END CERTIFICATE-----");
+
+
+        // -----------------------------------------------------------------
+        // Compromised CAs of DigiNotar
+        //
+        // Reported by Fox-IT in its interim report on September 5, 2011,
+        // "DigiNotar Certificate Authority breach 'Operation Black Tulip'".
+        //
+
+        //
+        // Compromised DigiNotar Cyber CA
+        //
+
+        // DigiNotar intermediate, cross-signed by CyberTrust
+        //
+        // Subject: EMAILADDRESS=info@diginotar.nl, CN=DigiNotar Cyber CA,
+        //          O=DigiNotar, C=NL
+        // Issuer:  CN=GTE CyberTrust Global Root,
+        //          OU=GTE CyberTrust Solutions, Inc.,
+        //          O=GTE Corporation,
+        //          C=US
+        // Serial:  120000525 (07:27:10:0D)
+        add("info-at-diginotar-cyber-ca-cross-to-gte-cybertrust-0727100D",
+        "-----BEGIN CERTIFICATE-----\n" +
+        "MIIFWjCCBMOgAwIBAgIEBycQDTANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQGEwJV\n" +
+        "UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU\n" +
+        "cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds\n" +
+        "b2JhbCBSb290MB4XDTA2MTAwNDEwNTQxMVoXDTExMTAwNDEwNTMxMVowYDELMAkG\n" +
+        "A1UEBhMCTkwxEjAQBgNVBAoTCURpZ2lOb3RhcjEbMBkGA1UEAxMSRGlnaU5vdGFy\n" +
+        "IEN5YmVyIENBMSAwHgYJKoZIhvcNAQkBFhFpbmZvQGRpZ2lub3Rhci5ubDCCAiIw\n" +
+        "DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANLOFQotqF6EZ639vu9Gx8i5z3P8\n" +
+        "9DS5+SxD52ATPXrjss87Z2yQrcC5P4RS8DVC3HTcKDu9UrSnrHJFF8bwieu0qiXy\n" +
+        "XUte0dmHutZ9fPXOMp8QM8WxSrtekTHC0OlBwpFkfglBO9uLCDdqqspS3rU5HsCI\n" +
+        "A6U/i5kTYUO1m4Kz7iBvz6FEouova0CfjytXraFTwoUiaZ2gP1HfC0GRDaXhqKpc\n" +
+        "SQhdvd5wQbEPyWNr0380dAIvNFp4dRxoeoFnivPaQPBgY/SSINcDpj2jHmfEhBtB\n" +
+        "pcmM5r3qSLYFFgizNxJa92E89zhvLpfgb1Y4VNMota0Ubi5LZLUnZbd1JQm2Bz2V\n" +
+        "VgIKgmCyc0XgMyZRdJq51FAc9k1bW1JSE1qmf6cO4ehBVGeYjIfVydNsy9NUkgYJ\n" +
+        "NEH3gW8/nsl8dVWw58Gzd+jDxAA1lUBwEEoF3iW7n1mlZLxHYL9g43aLE1Xd4XR6\n" +
+        "uc8kpmp/3mQiRFhogmoQ+T3lPhu5vfwi9GAEibtVbShV+t6OjRshFNc3izR7Tfay\n" +
+        "shDPM7F9HGKZSMsrbHaWVb8ZDR0fu2WqG46ZtcYokOWCLXhQIJr9eS8kf/CJKWn0\n" +
+        "fc1zvrPtTsHR7VJej/e4142HrbLZG1ES/1az4a80fVykeIgQnp0DxqWqoiRR90kU\n" +
+        "xbHuWUOV36toKDA/AgMBAAGjggGGMIIBgjASBgNVHRMBAf8ECDAGAQH/AgEBMFMG\n" +
+        "A1UdIARMMEowSAYJKwYBBAGxPgEAMDswOQYIKwYBBQUHAgEWLWh0dHA6Ly93d3cu\n" +
+        "cHVibGljLXRydXN0LmNvbS9DUFMvT21uaVJvb3QuaHRtbDAOBgNVHQ8BAf8EBAMC\n" +
+        "AQYwgaAGA1UdIwSBmDCBlYAUpgwdn2H/Bxe1vzhG20Mw1Y6wUgaheaR3MHUxCzAJ\n" +
+        "BgNVBAYTAlVTMRgwFgYDVQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdU\n" +
+        "RSBDeWJlclRydXN0IFNvbHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVy\n" +
+        "VHJ1c3QgR2xvYmFsIFJvb3SCAgGlMEUGA1UdHwQ+MDwwOqA4oDaGNGh0dHA6Ly93\n" +
+        "d3cucHVibGljLXRydXN0LmNvbS9jZ2ktYmluL0NSTC8yMDE4L2NkcC5jcmwwHQYD\n" +
+        "VR0OBBYEFKv5aN/PSjfXe0WMX3LeQETDZbvCMA0GCSqGSIb3DQEBBQUAA4GBAI9o\n" +
+        "a6VbB7pEZg4cqFwwezPkCiYE/O+eGjjWLqEf0JlHwnVkJP2eOyh2uSYoYZEMbSz4\n" +
+        "BJ98UAHV42mv7xXSRZskCSpmBU8lgcpdvqrBWSeuM46C9990sFWzjvjnN8huqlZE\n" +
+        "9r1TgSOWPbT6MopTZkQloiXGpjwljPDgKAYityZB\n" +
+        "-----END CERTIFICATE-----");
+
+        // DigiNotar intermediate, cross-signed by CyberTrust
+        //
+        // Subject: CN=DigiNotar Cyber CA, O=DigiNotar, C=NL
+        // Issuer:  CN=GTE CyberTrust Global Root,
+        //          OU=GTE CyberTrust Solutions, Inc.,
+        //          O=GTE Corporation,
+        //          C=US
+        // Serial:  120000505 (07:27:0F:F9)
+        add("diginotar-cyber-ca-cross-to-gte-cybertrust-07270FF9",
+        "-----BEGIN CERTIFICATE-----\n" +
+        "MIIFODCCBKGgAwIBAgIEBycP+TANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQGEwJV\n" +
+        "UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU\n" +
+        "cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds\n" +
+        "b2JhbCBSb290MB4XDTA2MDkyMDA5NDUzMloXDTEzMDkyMDA5NDQwNlowPjELMAkG\n" +
+        "A1UEBhMCTkwxEjAQBgNVBAoTCURpZ2lOb3RhcjEbMBkGA1UEAxMSRGlnaU5vdGFy\n" +
+        "IEN5YmVyIENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0s4VCi2o\n" +
+        "XoRnrf2+70bHyLnPc/z0NLn5LEPnYBM9euOyzztnbJCtwLk/hFLwNULcdNwoO71S\n" +
+        "tKesckUXxvCJ67SqJfJdS17R2Ye61n189c4ynxAzxbFKu16RMcLQ6UHCkWR+CUE7\n" +
+        "24sIN2qqylLetTkewIgDpT+LmRNhQ7WbgrPuIG/PoUSi6i9rQJ+PK1etoVPChSJp\n" +
+        "naA/Ud8LQZENpeGoqlxJCF293nBBsQ/JY2vTfzR0Ai80Wnh1HGh6gWeK89pA8GBj\n" +
+        "9JIg1wOmPaMeZ8SEG0GlyYzmvepItgUWCLM3Elr3YTz3OG8ul+BvVjhU0yi1rRRu\n" +
+        "LktktSdlt3UlCbYHPZVWAgqCYLJzReAzJlF0mrnUUBz2TVtbUlITWqZ/pw7h6EFU\n" +
+        "Z5iMh9XJ02zL01SSBgk0QfeBbz+eyXx1VbDnwbN36MPEADWVQHAQSgXeJbufWaVk\n" +
+        "vEdgv2DjdosTVd3hdHq5zySman/eZCJEWGiCahD5PeU+G7m9/CL0YASJu1VtKFX6\n" +
+        "3o6NGyEU1zeLNHtN9rKyEM8zsX0cYplIyytsdpZVvxkNHR+7Zaobjpm1xiiQ5YIt\n" +
+        "eFAgmv15LyR/8IkpafR9zXO+s+1OwdHtUl6P97jXjYetstkbURL/VrPhrzR9XKR4\n" +
+        "iBCenQPGpaqiJFH3SRTFse5ZQ5Xfq2goMD8CAwEAAaOCAYYwggGCMBIGA1UdEwEB\n" +
+        "/wQIMAYBAf8CAQEwUwYDVR0gBEwwSjBIBgkrBgEEAbE+AQAwOzA5BggrBgEFBQcC\n" +
+        "ARYtaHR0cDovL3d3dy5wdWJsaWMtdHJ1c3QuY29tL0NQUy9PbW5pUm9vdC5odG1s\n" +
+        "MA4GA1UdDwEB/wQEAwIBBjCBoAYDVR0jBIGYMIGVgBSmDB2fYf8HF7W/OEbbQzDV\n" +
+        "jrBSBqF5pHcwdTELMAkGA1UEBhMCVVMxGDAWBgNVBAoTD0dURSBDb3Jwb3JhdGlv\n" +
+        "bjEnMCUGA1UECxMeR1RFIEN5YmVyVHJ1c3QgU29sdXRpb25zLCBJbmMuMSMwIQYD\n" +
+        "VQQDExpHVEUgQ3liZXJUcnVzdCBHbG9iYWwgUm9vdIICAaUwRQYDVR0fBD4wPDA6\n" +
+        "oDigNoY0aHR0cDovL3d3dy5wdWJsaWMtdHJ1c3QuY29tL2NnaS1iaW4vQ1JMLzIw\n" +
+        "MTgvY2RwLmNybDAdBgNVHQ4EFgQUq/lo389KN9d7RYxfct5ARMNlu8IwDQYJKoZI\n" +
+        "hvcNAQEFBQADgYEACcpiD427SuDUejUrBi3RKGG2rAH7g0m8rtQvLYauGYOl1h0T\n" +
+        "4he+/jJ06XoUOMqUXvcpAWlxG5Ea/aO7qh3Ke+IW/aGjDvMMX7LhIDGUK16Sdu36\n" +
+        "6bUjpr8KOwOpb1JgVM1f6bcvfKIn/UGDdbYN+3gm87FF6TKVKho1IZXFonU=\n" +
+        "-----END CERTIFICATE-----");
+
+        // DigiNotar intermediate, cross-signed by CyberTrust
+        //
+        // Subject: CN=DigiNotar Cyber CA, O=DigiNotar, C=NL
+        // Issuer:  CN=GTE CyberTrust Global Root,
+        //          OU=GTE CyberTrust Solutions, Inc.,
+        //          O=GTE Corporation,
+        //          C=US
+        // Serial:  120000515 (07:27:10:03)
+        add("diginotar-cyber-ca-cross-to-gte-cybertrust-07271003",
+        "-----BEGIN CERTIFICATE-----\n" +
+        "MIIFODCCBKGgAwIBAgIEBycQAzANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQGEwJV\n" +
+        "UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU\n" +
+        "cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds\n" +
+        "b2JhbCBSb290MB4XDTA2MDkyNzEwNTMzMloXDTExMDkyNzEwNTIzMFowPjELMAkG\n" +
+        "A1UEBhMCTkwxEjAQBgNVBAoTCURpZ2lOb3RhcjEbMBkGA1UEAxMSRGlnaU5vdGFy\n" +
+        "IEN5YmVyIENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0s4VCi2o\n" +
+        "XoRnrf2+70bHyLnPc/z0NLn5LEPnYBM9euOyzztnbJCtwLk/hFLwNULcdNwoO71S\n" +
+        "tKesckUXxvCJ67SqJfJdS17R2Ye61n189c4ynxAzxbFKu16RMcLQ6UHCkWR+CUE7\n" +
+        "24sIN2qqylLetTkewIgDpT+LmRNhQ7WbgrPuIG/PoUSi6i9rQJ+PK1etoVPChSJp\n" +
+        "naA/Ud8LQZENpeGoqlxJCF293nBBsQ/JY2vTfzR0Ai80Wnh1HGh6gWeK89pA8GBj\n" +
+        "9JIg1wOmPaMeZ8SEG0GlyYzmvepItgUWCLM3Elr3YTz3OG8ul+BvVjhU0yi1rRRu\n" +
+        "LktktSdlt3UlCbYHPZVWAgqCYLJzReAzJlF0mrnUUBz2TVtbUlITWqZ/pw7h6EFU\n" +
+        "Z5iMh9XJ02zL01SSBgk0QfeBbz+eyXx1VbDnwbN36MPEADWVQHAQSgXeJbufWaVk\n" +
+        "vEdgv2DjdosTVd3hdHq5zySman/eZCJEWGiCahD5PeU+G7m9/CL0YASJu1VtKFX6\n" +
+        "3o6NGyEU1zeLNHtN9rKyEM8zsX0cYplIyytsdpZVvxkNHR+7Zaobjpm1xiiQ5YIt\n" +
+        "eFAgmv15LyR/8IkpafR9zXO+s+1OwdHtUl6P97jXjYetstkbURL/VrPhrzR9XKR4\n" +
+        "iBCenQPGpaqiJFH3SRTFse5ZQ5Xfq2goMD8CAwEAAaOCAYYwggGCMBIGA1UdEwEB\n" +
+        "/wQIMAYBAf8CAQEwUwYDVR0gBEwwSjBIBgkrBgEEAbE+AQAwOzA5BggrBgEFBQcC\n" +
+        "ARYtaHR0cDovL3d3dy5wdWJsaWMtdHJ1c3QuY29tL0NQUy9PbW5pUm9vdC5odG1s\n" +
+        "MA4GA1UdDwEB/wQEAwIBBjCBoAYDVR0jBIGYMIGVgBSmDB2fYf8HF7W/OEbbQzDV\n" +
+        "jrBSBqF5pHcwdTELMAkGA1UEBhMCVVMxGDAWBgNVBAoTD0dURSBDb3Jwb3JhdGlv\n" +
+        "bjEnMCUGA1UECxMeR1RFIEN5YmVyVHJ1c3QgU29sdXRpb25zLCBJbmMuMSMwIQYD\n" +
+        "VQQDExpHVEUgQ3liZXJUcnVzdCBHbG9iYWwgUm9vdIICAaUwRQYDVR0fBD4wPDA6\n" +
+        "oDigNoY0aHR0cDovL3d3dy5wdWJsaWMtdHJ1c3QuY29tL2NnaS1iaW4vQ1JMLzIw\n" +
+        "MTgvY2RwLmNybDAdBgNVHQ4EFgQUq/lo389KN9d7RYxfct5ARMNlu8IwDQYJKoZI\n" +
+        "hvcNAQEFBQADgYEAWcyGZhizJlRP1jjNupZey+yZG6oMDW4Z11boriMHbYPCndBE\n" +
+        "bVh07zmPbZsihOw9w/vm5KbVX5CgxUv4Rhzh/20Faixf3P3bpWg0qgzHVVusNVR/\n" +
+        "P50aKkpdK3hp+QLl56e+lWOddSAINIpmcuyDI1hyuzB+GJEASm9tNU/6rs8=\n" +
+        "-----END CERTIFICATE-----");
+
+        //
+        // Compromised DigiNotar Root CA
+        //
+
+        // DigiNotar intermediate, cross-signed by Entrust
+        //
+        // Subject: EMAILADDRESS=info@diginotar.nl,
+        //          CN=DigiNotar Root CA,
+        //          O=DigiNotar, C=NL
+        // Issuer:  CN=Entrust.net Secure Server Certification Authority
+        //          OU=(c) 1999 Entrust.net Limited,
+        //          OU=www.entrust.net/CPS incorp. by ref. (limits liab.),
+        //          O=Entrust.net,
+        //          C=US,
+        // Serial:  1184644297 (46:9C:3C:C9)
+        add("info-at-diginotar-root-ca-cross-to-entrust-secure-server-469C3CC9",
+        "-----BEGIN CERTIFICATE-----\n" +
+        "MIIFSDCCBLGgAwIBAgIERpw8yTANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC\n" +
+        "VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u\n" +
+        "ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc\n" +
+        "KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u\n" +
+        "ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNzA0\n" +
+        "MjYwNTAwMDBaFw0xMzA4MTQyMDEyMzZaMF8xCzAJBgNVBAYTAk5MMRIwEAYDVQQK\n" +
+        "EwlEaWdpTm90YXIxGjAYBgNVBAMTEURpZ2lOb3RhciBSb290IENBMSAwHgYJKoZI\n" +
+        "hvcNAQkBFhFpbmZvQGRpZ2lub3Rhci5ubDCCAiIwDQYJKoZIhvcNAQEBBQADggIP\n" +
+        "ADCCAgoCggIBAKywWMEAvdghCAsrmv5uVjAFnxt3kBBBXMMNhxF3joHxynzpjGrt\n" +
+        "OHQ1u9rf+bvACTe0lnOBfTMamDn3k2+Vfz25sXWHulFI6ItwPpUExdi2wxbZiLCx\n" +
+        "hx1w2oa0DxSLes8Q0XQ2ohJ7d4ZKeeZ73wIRaKVOhq40WJskE3hWIiUeAYtLUXH7\n" +
+        "gsxZlmmIWmhTxbkNAjfLS7xmSpB+KgsFB+0WX1WQddhGyRuD4gi+8SPMmR3WKg+D\n" +
+        "IBVYJ4Iu+uIiwkmxuQGBap1tnUB3aHZOISpthECFTnaZfILz87cCWdQmARuO361T\n" +
+        "BtGuGN3isjrL14g4jqxbKbkZ05j5GAPPSIKGZgsbaQ/J6ziIeiYaBUyS1yTUlvKs\n" +
+        "Ui2jR9VS9j/+zoQGcKaqPqLytlY0GFei5IFt58rwatPHkWsCg0F8Fe9rmmRe49A8\n" +
+        "5bHre12G+8vmd0nNo2Xc97mcuOQLX5PPzDAaMhzOHGOVpfnq4XSLnukrqTB7oBgf\n" +
+        "DhgL5Vup09FsHgdnj5FLqYq80maqkwGIspH6MVzVpsFSCAnNCmOi0yKm6KHZOQaX\n" +
+        "9W6NApCMFHs/gM0bnLrEWHIjr7ZWn8Z6QjMpBz+CyeYfBQ3NTCg2i9PIPhzGiO9e\n" +
+        "7olk6R3r2ol+MqZp0d3MiJ/R0MlmIdwGZ8WUepptYkx9zOBkgLKeR46jAgMBAAGj\n" +
+        "ggEmMIIBIjASBgNVHRMBAf8ECDAGAQH/AgEBMCcGA1UdJQQgMB4GCCsGAQUFBwMB\n" +
+        "BggrBgEFBQcDAgYIKwYBBQUHAwQwEQYDVR0gBAowCDAGBgRVHSAAMDMGCCsGAQUF\n" +
+        "BwEBBCcwJTAjBggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMwYD\n" +
+        "VR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5lbnRydXN0Lm5ldC9zZXJ2ZXIxLmNy\n" +
+        "bDAdBgNVHQ4EFgQUiGi/4I41xDs4a2L3KDuEgcgM100wCwYDVR0PBAQDAgEGMB8G\n" +
+        "A1UdIwQYMBaAFPAXYhNVPbP/CgBr+1CEl/PtYtAaMBkGCSqGSIb2fQdBAAQMMAob\n" +
+        "BFY3LjEDAgCBMA0GCSqGSIb3DQEBBQUAA4GBAI979rBep8tu3TeLunapgsZ0jtXp\n" +
+        "GDFjKWSk87dj1jCyYi+q/GyDyZ6ZQZNRP0sF+6twscq05lClWNy3TROMp7QeuoLO\n" +
+        "G7Utw3OJaswUtp4YglANMRTHEe3g9ltifUXRH5tSuy7u6yi4LD4WTm5ULP6r/g6l\n" +
+        "0CnjXYb0+b1Fmz6U\n" +
+        "-----END CERTIFICATE-----");
+
+        // DigiNotar intermediate, cross-signed by Entrust
+        //
+        // Subject: EMAILADDRESS=info@diginotar.nl,
+        //          CN=DigiNotar Root CA,
+        //          O=DigiNotar, C=NL
+        // Issuer:  CN=Entrust.net Secure Server Certification Authority
+        //          OU=(c) 1999 Entrust.net Limited,
+        //          OU=www.entrust.net/CPS incorp. by ref. (limits liab.),
+        //          O=Entrust.net,
+        //          C=US,
+        // Serial:  1184640175 (46:9C:2C:AF)
+        add("info-at-diginotar-root-ca-cross-to-entrust-secure-server-469C2CAF",
+        "-----BEGIN CERTIFICATE-----\n" +
+        "MIIFSDCCBLGgAwIBAgIERpwsrzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC\n" +
+        "VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u\n" +
+        "ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc\n" +
+        "KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u\n" +
+        "ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNzA3\n" +
+        "MjYxNTU3MzlaFw0xMzA4MjYxNjI3MzlaMF8xCzAJBgNVBAYTAk5MMRIwEAYDVQQK\n" +
+        "EwlEaWdpTm90YXIxGjAYBgNVBAMTEURpZ2lOb3RhciBSb290IENBMSAwHgYJKoZI\n" +
+        "hvcNAQkBFhFpbmZvQGRpZ2lub3Rhci5ubDCCAiIwDQYJKoZIhvcNAQEBBQADggIP\n" +
+        "ADCCAgoCggIBAKywWMEAvdghCAsrmv5uVjAFnxt3kBBBXMMNhxF3joHxynzpjGrt\n" +
+        "OHQ1u9rf+bvACTe0lnOBfTMamDn3k2+Vfz25sXWHulFI6ItwPpUExdi2wxbZiLCx\n" +
+        "hx1w2oa0DxSLes8Q0XQ2ohJ7d4ZKeeZ73wIRaKVOhq40WJskE3hWIiUeAYtLUXH7\n" +
+        "gsxZlmmIWmhTxbkNAjfLS7xmSpB+KgsFB+0WX1WQddhGyRuD4gi+8SPMmR3WKg+D\n" +
+        "IBVYJ4Iu+uIiwkmxuQGBap1tnUB3aHZOISpthECFTnaZfILz87cCWdQmARuO361T\n" +
+        "BtGuGN3isjrL14g4jqxbKbkZ05j5GAPPSIKGZgsbaQ/J6ziIeiYaBUyS1yTUlvKs\n" +
+        "Ui2jR9VS9j/+zoQGcKaqPqLytlY0GFei5IFt58rwatPHkWsCg0F8Fe9rmmRe49A8\n" +
+        "5bHre12G+8vmd0nNo2Xc97mcuOQLX5PPzDAaMhzOHGOVpfnq4XSLnukrqTB7oBgf\n" +
+        "DhgL5Vup09FsHgdnj5FLqYq80maqkwGIspH6MVzVpsFSCAnNCmOi0yKm6KHZOQaX\n" +
+        "9W6NApCMFHs/gM0bnLrEWHIjr7ZWn8Z6QjMpBz+CyeYfBQ3NTCg2i9PIPhzGiO9e\n" +
+        "7olk6R3r2ol+MqZp0d3MiJ/R0MlmIdwGZ8WUepptYkx9zOBkgLKeR46jAgMBAAGj\n" +
+        "ggEmMIIBIjASBgNVHRMBAf8ECDAGAQH/AgEBMCcGA1UdJQQgMB4GCCsGAQUFBwMB\n" +
+        "BggrBgEFBQcDAgYIKwYBBQUHAwQwEQYDVR0gBAowCDAGBgRVHSAAMDMGCCsGAQUF\n" +
+        "BwEBBCcwJTAjBggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMwYD\n" +
+        "VR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5lbnRydXN0Lm5ldC9zZXJ2ZXIxLmNy\n" +
+        "bDAdBgNVHQ4EFgQUiGi/4I41xDs4a2L3KDuEgcgM100wCwYDVR0PBAQDAgEGMB8G\n" +
+        "A1UdIwQYMBaAFPAXYhNVPbP/CgBr+1CEl/PtYtAaMBkGCSqGSIb2fQdBAAQMMAob\n" +
+        "BFY3LjEDAgCBMA0GCSqGSIb3DQEBBQUAA4GBAEa6RcDNcEIGUlkDJUY/pWTds4zh\n" +
+        "xbVkp3wSmpwPFhx5fxTyF4HD2L60jl3aqjTB7gPpsL2Pk5QZlNsi3t4UkCV70UOd\n" +
+        "ueJRN3o/LOtk4+bjXY2lC0qTHbN80VMLqPjmaf9ghSA9hwhskdtMgRsgfd90q5QP\n" +
+        "ZFdYf+hthc3m6IcJ\n" +
+        "-----END CERTIFICATE-----");
+
+        //
+        // Compromised DigiNotar PKIoverheid CA Organisatie - G2
+        //
+
+        // DigiNotar intermediate, cross-signed by the Dutch government
+        //
+        // Subject: CN=DigiNotar PKIoverheid CA Organisatie - G2,
+        //          O=DigiNotar B.V.,
+        //          C=NL
+        // Issuer:  CN=Staat der Nederlanden Organisatie CA - G2,
+        //          O=Staat der Nederlanden,
+        //          C=NL
+        // Serial:  20001983 (01:31:34:bf)
+        add("diginotar-pkioverheid-organisatie-cross-to-nederlanden-013134BF",
+        "-----BEGIN CERTIFICATE-----\n" +
+        "MIIGnDCCBISgAwIBAgIEATE0vzANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQGEwJO\n" +
+        "TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMTIwMAYDVQQDDClTdGFh\n" +
+        "dCBkZXIgTmVkZXJsYW5kZW4gT3JnYW5pc2F0aWUgQ0EgLSBHMjAeFw0xMDA1MTIw\n" +
+        "ODUxMzhaFw0yMDAzMjMwOTUwMDRaMFoxCzAJBgNVBAYTAk5MMRcwFQYDVQQKDA5E\n" +
+        "aWdpTm90YXIgQi5WLjEyMDAGA1UEAwwpRGlnaU5vdGFyIFBLSW92ZXJoZWlkIENB\n" +
+        "IE9yZ2FuaXNhdGllIC0gRzIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC\n" +
+        "AQCxExkPJ+Zs1FWGS9DsiYpFkXisR71HK+T8RetPtCZzWzfTw3/2497Xo/gtaMUI\n" +
+        "PkuU1uSHJTZrhLUYdPMoWHMvm2rPvAQe9t7dr/xLqvXbZmIlASWC3vKXWhBu3V2p\n" +
+        "IrEEqSNzOvhxrR3PhETrR9Gvbch8KKvH8jd6dF9fxQIUiqNa4xtsAeNdjtlo1vQJ\n" +
+        "GzLckbUs9SDrjANtJkm4k8SFXdjSm69WaswFM8ygQp40VUSca6DUEtArVM23iQ3l\n" +
+        "9uvo+4UBM096a/GdcjOWDveyhKWlJ8Qn8VFzKXe6Z27+TNy04qGhgS85SY1DOBPO\n" +
+        "0KVcwoc6AGdlQiPxNlkKHaNRyLyjlCox3+M88p0aPASw77EKMBNzttfzo0wBdRSF\n" +
+        "eMDXijlYhVD6LubFvs+LP6+PNtQlCS3SD6xyk/K/i9RQs/kVUJuZ9RTZ+4uRozIm\n" +
+        "JqD43ztggYaDeVsr6xM9KTrBbd29no6H1kquNJcF7hSm9tw4fkrpJFQHPZdoN0Zr\n" +
+        "DceoIa8TVOQJavFNRgrJXfubT73e+7dUy7g4nKc5+2otwHuNq6WnV+xKkoozxeEg\n" +
+        "XHPYkJIrgNUPhhhpfDlPhIa890xb89W0yqDC8DciynlSH1PmqvOQsDvd8ij9rOvF\n" +
+        "BiSgydQvD1j9tZ7sD8+yWdCiBHo4aq5y+73wJWKUCacFCwIDAQABo4IBYTCCAV0w\n" +
+        "SAYDVR0gBEEwPzA9BgRVHSAAMDUwMwYIKwYBBQUHAgEWJ2h0dHA6Ly93d3cuZGln\n" +
+        "aW5vdGFyLm5sL2Nwcy9wa2lvdmVyaGVpZDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud\n" +
+        "DwEB/wQEAwIBBjCBhQYDVR0jBH4wfIAUORCLSZJc22ESIM1JnRqO2pxnQLmhXqRc\n" +
+        "MFoxCzAJBgNVBAYTAk5MMR4wHAYDVQQKDBVTdGFhdCBkZXIgTmVkZXJsYW5kZW4x\n" +
+        "KzApBgNVBAMMIlN0YWF0IGRlciBOZWRlcmxhbmRlbiBSb290IENBIC0gRzKCBACY\n" +
+        "lvQwSQYDVR0fBEIwQDA+oDygOoY4aHR0cDovL2NybC5wa2lvdmVyaGVpZC5ubC9E\n" +
+        "b21PcmdhbmlzYXRpZUxhdGVzdENSTC1HMi5jcmwwHQYDVR0OBBYEFLxdlDvZq3sD\n" +
+        "JXNhwtst7vyrj2WhMA0GCSqGSIb3DQEBCwUAA4ICAQCP/C1Mt9kt1R+978v0t2gX\n" +
+        "dZ1O1ffdnPEqJu2forYcA9VTs+wIzzTi48P0tRYvyMO+19NzqwA2+RpKftZj6V5G\n" +
+        "uqW2jhW3oyrYQx3vXcgfgYWzi/f/PPTZ9EYIP5y8HaDZqEzNJVJOCrEg9x/pQ9lU\n" +
+        "RoETmsBedGwqmDLq/He7DaWiMZgifnx859qkrey3LhoZcfhIUNpDjyyE3cFAJ+O1\n" +
+        "8BVOltT4XOOGKUYr1zsH6zh/yIZXl9PvKjPEF1DVZGlrK2tFXl0vF8paTs/D1zk8\n" +
+        "9TufRrmb5w5Jl53W1eMbD+qPAU6aE5RZCgIHSEsaYKt/T+0L2FUNaG9VnGllFULs\n" +
+        "wNzdbKzDFs4LHVabpMTE0i7gD+JEJytQaaTcYuiKISlCbMwAOpZ2m+9AwKRed4Qy\n" +
+        "bCYqOWauXeO5ubIsaB8empADOfCqs6TMSYsYNOk3yXspx4R8b0QVL+xhWQTJRcui\n" +
+        "1lKifH8pktZKxYtCqNT+6tjHhyMY5J16fXNAUpigrm7jBT8FD+Clxm1N7YM3iJzH\n" +
+        "89xCmmq21yFJNnfy7xhPxXDZnunetyuL9Lx+KN8NQMmFXK6dxTH/0FwOtah+8Okv\n" +
+        "uq+IruW10Vilr5xxpykBkINpN4IFuvwJwQhujHg7wzMCgD9EhQgd31VWCK0shS1d\n" +
+        "sQPhrqp0xaTzTro3mHuCuQ==\n" +
+        "-----END CERTIFICATE-----");
+
+        //
+        // Compromised DigiNotar PKIoverheid CA Overheid en Bedrijven
+        //
+
+        // DigiNotar intermediate, cross-signed by the Dutch government
+        //
+        // Subject: CN=DigiNotar PKIoverheid CA Overheid en Bedrijven,
+        //          O=DigiNotar B.V.,
+        //          C=NL
+        // Issuer:  CN=Staat der Nederlanden Overheid CA
+        //          O=Staat der Nederlanden,
+        //          C=NL
+        // Serial:  20015536 (01:31:69:b0)
+        add("diginotar-pkioverheid-overheid-enb-cross-to-nederlanden-013169B0",
+        "-----BEGIN CERTIFICATE-----\n" +
+        "MIIEiDCCA3CgAwIBAgIEATFpsDANBgkqhkiG9w0BAQUFADBZMQswCQYDVQQGEwJO\n" +
+        "TDEeMBwGA1UEChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSowKAYDVQQDEyFTdGFh\n" +
+        "dCBkZXIgTmVkZXJsYW5kZW4gT3ZlcmhlaWQgQ0EwHhcNMDcwNzA1MDg0MjA3WhcN\n" +
+        "MTUwNzI3MDgzOTQ2WjBfMQswCQYDVQQGEwJOTDEXMBUGA1UEChMORGlnaU5vdGFy\n" +
+        "IEIuVi4xNzA1BgNVBAMTLkRpZ2lOb3RhciBQS0lvdmVyaGVpZCBDQSBPdmVyaGVp\n" +
+        "ZCBlbiBCZWRyaWp2ZW4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDc\n" +
+        "vdKnTmoKuzuiheF/AK2+tDBomAfNoHrElM9x+Yo35FPrV3bMi+Zs/u6HVcg+uwQ5\n" +
+        "AKeAeKxbT370vbhUuHE7BzFJOZNUfCA7eSuPu2GQfbGs5h+QLp1FAalkLU3DL7nn\n" +
+        "UNVOKlyrdnY3Rtd57EKZ96LspIlw3Dgrh6aqJOadkiQbvvb91C8ZF3rmMgeUVAVT\n" +
+        "Q+lsvK9Hy7zL/b07RBKB8WtLu+20z6slTxjSzAL8o0+1QjPLWc0J3NNQ/aB2jKx+\n" +
+        "ZopC9q0ckvO2+xRG603XLzDgbe5bNr5EdLcgBVeFTegAGaL2DOauocBC36esgl3H\n" +
+        "aLcY5olLmmv6znn58yynAgMBAAGjggFQMIIBTDBIBgNVHSAEQTA/MD0GBFUdIAAw\n" +
+        "NTAzBggrBgEFBQcCARYnaHR0cDovL3d3dy5kaWdpbm90YXIubmwvY3BzL3BraW92\n" +
+        "ZXJoZWlkMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMIGABgNVHSME\n" +
+        "eTB3gBQLhtYPd6NosftkCcOIblwEHFfpPaFZpFcwVTELMAkGA1UEBhMCTkwxHjAc\n" +
+        "BgNVBAoTFVN0YWF0IGRlciBOZWRlcmxhbmRlbjEmMCQGA1UEAxMdU3RhYXQgZGVy\n" +
+        "IE5lZGVybGFuZGVuIFJvb3QgQ0GCBACYmnkwPQYDVR0fBDYwNDAyoDCgLoYsaHR0\n" +
+        "cDovL2NybC5wa2lvdmVyaGVpZC5ubC9Eb21PdkxhdGVzdENSTC5jcmwwHQYDVR0O\n" +
+        "BBYEFEwIyY128ZjHPt881y91DbF2eZfMMA0GCSqGSIb3DQEBBQUAA4IBAQAMlIca\n" +
+        "v03jheLu19hjeQ5Q38aEW9K72fUxCho1l3TfFPoqDz7toOMI9tVOW6+mriXiRWsi\n" +
+        "D7dUKH6S3o0UbNEc5W50BJy37zRERd/Jgx0ZH8Apad+J1T/CsFNt5U4X5HNhIxMm\n" +
+        "cUP9TFnLw98iqiEr2b+VERqKpOKrp11Lbyn1UtHk0hWxi/7wA8+nfemZhzizDXMU\n" +
+        "5HIs4c71rQZIZPrTKbmi2Lv01QulQERDjqC/zlqlUkxk0xcxYczopIro5Ij76eUv\n" +
+        "BjMzm5RmZrGrUDqhCYF0U1onuabSJc/Tw6f/ltAv6uAejVLpGBwgCkegllYOQJBR\n" +
+        "RKwa/fHuhR/3Qlpl\n" +
+        "-----END CERTIFICATE-----");
+
+        //
+        // Compromised DigiNotar PKIoverheid CA Overheid
+        //
+
+        // DigiNotar intermediate, cross-signed by the Dutch government
+        //
+        // Subject: CN=DigiNotar PKIoverheid CA Overheid
+        //          O=DigiNotar B.V.,
+        //          C=NL
+        // Issuer:  CN=Staat der Nederlanden Overheid CA
+        //          O=Staat der Nederlanden,
+        //          C=NL
+        // Serial:  20006006 (01:31:44:76)
+        add("diginotar-pkioverheid-overheid-cross-to-nederlanden-01314476",
+        "-----BEGIN CERTIFICATE-----\n" +
+        "MIIEezCCA2OgAwIBAgIEATFEdjANBgkqhkiG9w0BAQUFADBZMQswCQYDVQQGEwJO\n" +
+        "TDEeMBwGA1UEChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSowKAYDVQQDEyFTdGFh\n" +
+        "dCBkZXIgTmVkZXJsYW5kZW4gT3ZlcmhlaWQgQ0EwHhcNMDQwNjI0MDgxOTMyWhcN\n" +
+        "MTAwNjIzMDgxNzM2WjBSMQswCQYDVQQGEwJOTDEXMBUGA1UEChMORGlnaU5vdGFy\n" +
+        "IEIuVi4xKjAoBgNVBAMTIURpZ2lOb3RhciBQS0lvdmVyaGVpZCBDQSBPdmVyaGVp\n" +
+        "ZDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANSlrubta5tlOjVCi/gb\n" +
+        "yLCvRqfBjxG8H594VcKHu0WAYc99SPZF9cycj5mw2GyfQvy/WIrGrL4iyNq1gSqR\n" +
+        "0QA/mTXKZIaPqzpDhdm+VvrKkmjrbZfaQxgMSs3ChtBsjcP9Lc0X1zXZ4Q8nBe3k\n" +
+        "BTp+zehINfmbjoEgXLxsMR5RQ6GxzKjuC04PQpbJQgTIakglKaqYcDDZbEscWgPV\n" +
+        "Hgj/2aoHlj6leW/ThHZ+O41jUguEmBLZA3mu3HrCfrHntb5dPt0ihzSx7GtD/SaX\n" +
+        "5HBLxnP189YuqMk5iRA95CtiSdKauvon/xRKRLNgG6XAz0ctSoY7xLDdiBVU5kJd\n" +
+        "FScCAwEAAaOCAVAwggFMMEgGA1UdIARBMD8wPQYEVR0gADA1MDMGCCsGAQUFBwIB\n" +
+        "FidodHRwOi8vd3d3LmRpZ2lub3Rhci5ubC9jcHMvcGtpb3ZlcmhlaWQwDwYDVR0T\n" +
+        "AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwgYAGA1UdIwR5MHeAFAuG1g93o2ix\n" +
+        "+2QJw4huXAQcV+k9oVmkVzBVMQswCQYDVQQGEwJOTDEeMBwGA1UEChMVU3RhYXQg\n" +
+        "ZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFhdCBkZXIgTmVkZXJsYW5kZW4g\n" +
+        "Um9vdCBDQYIEAJiaeTA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3JsLnBraW92\n" +
+        "ZXJoZWlkLm5sL0RvbU92TGF0ZXN0Q1JMLmNybDAdBgNVHQ4EFgQUvRaYQh2+kdE9\n" +
+        "wpcl4CjXWOC1f+IwDQYJKoZIhvcNAQEFBQADggEBAGhQsCWLiaN2EOhPAW+JQP6o\n" +
+        "XBOrLv5w6joahzBFVn1BiefzmlMKjibqKYxURRvMAsMkh82/MfL8V0w6ugxl81lu\n" +
+        "i42dcxl9cKSVXKMw4bbBzJ2VQI5HTIABwefeNuy/eX6idVwYdt3ajAH7fUA8Q9Cq\n" +
+        "vr6H8B+8mwoEqTVTEVlCSsC/EXsokYEUr06PPzRudKjDmijgj7zFaIioZNc8hk7g\n" +
+        "ufEgrs/tmcNGylrwRHgCXjCRBt2NHlZ08l7A1AGU8HcHlSbG9Un/2q9kVHUkps0D\n" +
+        "gtUaEK+x6jpAu/R8Ojezu/+ZEcwwjI/KOhG+84+ejFmtyEkrUdsAdEdLf/2dKsw=\n" +
+        "-----END CERTIFICATE-----");
+
+        //
+        // Compromised DigiNotar Services 1024 CA
+        //
+
+        // DigiNotar intermediate, cross-signed by the Entrust
+        //
+        // Subject: EMAILADDRESS=info@diginotar.nl,
+        //          CN=DigiNotar Services 1024 CA
+        //          O=DigiNotar, C=NL
+        // Issuer:  CN=Entrust.net Secure Server Certification Authority,
+        //          OU=(c) 1999 Entrust.net Limited,
+        //          OU=www.entrust.net/CPS incorp. by ref. (limits liab.),
+        //          O=Entrust.net,
+        //          C=US
+        // Serial:  1184640176 (46:9c:2c:b0)
+        add("diginotar-services-1024-ca-cross-to-entrust-469C2CB0",
+        "-----BEGIN CERTIFICATE-----\n" +
+        "MIIDzTCCAzagAwIBAgIERpwssDANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC\n" +
+        "VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u\n" +
+        "ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc\n" +
+        "KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u\n" +
+        "ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNzA3\n" +
+        "MjYxNTU5MDBaFw0xMzA4MjYxNjI5MDBaMGgxCzAJBgNVBAYTAk5MMRIwEAYDVQQK\n" +
+        "EwlEaWdpTm90YXIxIzAhBgNVBAMTGkRpZ2lOb3RhciBTZXJ2aWNlcyAxMDI0IENB\n" +
+        "MSAwHgYJKoZIhvcNAQkBFhFpbmZvQGRpZ2lub3Rhci5ubDCBnzANBgkqhkiG9w0B\n" +
+        "AQEFAAOBjQAwgYkCgYEA2ptNXTz50eKLxsYIIMXZHkjsZlhneWIrQWP0iY1o2q+4\n" +
+        "lDaLGSSkoJPSmQ+yrS01Tc0vauH5mxkrvAQafi09UmTN8T5nD4ku6PJPrqYIoYX+\n" +
+        "oakJ5sarPkP8r3oDkdqmOaZh7phPGKjTs69mgumfvN1y+QYEvRLZGCTnq5NTi1kC\n" +
+        "AwEAAaOCASYwggEiMBIGA1UdEwEB/wQIMAYBAf8CAQAwJwYDVR0lBCAwHgYIKwYB\n" +
+        "BQUHAwEGCCsGAQUFBwMCBggrBgEFBQcDBDARBgNVHSAECjAIMAYGBFUdIAAwMwYI\n" +
+        "KwYBBQUHAQEEJzAlMCMGCCsGAQUFBzABhhdodHRwOi8vb2NzcC5lbnRydXN0Lm5l\n" +
+        "dDAzBgNVHR8ELDAqMCigJqAkhiJodHRwOi8vY3JsLmVudHJ1c3QubmV0L3NlcnZl\n" +
+        "cjEuY3JsMB0GA1UdDgQWBBT+3JRJDG/vXH/G8RKZTxZJrfuCZTALBgNVHQ8EBAMC\n" +
+        "AQYwHwYDVR0jBBgwFoAU8BdiE1U9s/8KAGv7UISX8+1i0BowGQYJKoZIhvZ9B0EA\n" +
+        "BAwwChsEVjcuMQMCAIEwDQYJKoZIhvcNAQEFBQADgYEAY3RqN6k/lpxmyFisCcnv\n" +
+        "9WWUf6MCxDgxvV0jh+zUVrLJsm7kBQb87PX6iHBZ1O7m3bV6oKNgLwIMq94SXa/w\n" +
+        "NUuqikeRGvWFLELHHe+VQ7NeuJWTpdrFKKqtci0xrZlrbP+MISevrZqRK8fdWMNu\n" +
+        "B8WfedLHjFW/TMcnXlEWKz4=\n" +
+        "-----END CERTIFICATE-----");
+
+    }
+}
--- a/src/share/classes/sun/security/validator/SimpleValidator.java	Wed May 02 14:00:06 2012 +0100
+++ b/src/share/classes/sun/security/validator/SimpleValidator.java	Wed May 02 15:06:35 2012 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 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
@@ -41,6 +41,7 @@
 import sun.security.util.ObjectIdentifier;
 
 import sun.security.provider.certpath.AlgorithmChecker;
+import sun.security.provider.certpath.UntrustedChecker;
 
 /**
  * A simple validator implementation. It is based on code from the JSSE
@@ -137,6 +138,9 @@
             date = new Date();
         }
 
+        // create distrusted certificates checker
+        UntrustedChecker untrustedChecker = new UntrustedChecker();
+
         // create default algorithm constraints checker
         TrustAnchor anchor = new TrustAnchor(chain[chain.length - 1], null);
         AlgorithmChecker defaultAlgChecker = new AlgorithmChecker(anchor);
@@ -154,6 +158,17 @@
             X509Certificate issuerCert = chain[i + 1];
             X509Certificate cert = chain[i];
 
+            // check untrusted certificate
+            try {
+                // Untrusted checker does not care about the unresolved
+                // critical extensions.
+                untrustedChecker.check(cert, Collections.<String>emptySet());
+            } catch (CertPathValidatorException cpve) {
+                throw new ValidatorException(
+                    "Untrusted certificate: " + cert.getSubjectX500Principal(),
+                    ValidatorException.T_UNTRUSTED_CERT, cert, cpve);
+            }
+
             // check certificate algorithm
             try {
                 // Algorithm checker does not care about the unresolved
--- a/src/share/classes/sun/security/validator/ValidatorException.java	Wed May 02 14:00:06 2012 +0100
+++ b/src/share/classes/sun/security/validator/ValidatorException.java	Wed May 02 15:06:35 2012 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2009, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 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
@@ -58,6 +58,9 @@
     public final static Object T_ALGORITHM_DISABLED =
         "Certificate signature algorithm disabled";
 
+    public final static Object T_UNTRUSTED_CERT =
+        "Untrusted certificate";
+
     private Object type;
     private X509Certificate cert;
 
--- a/src/share/native/sun/management/HotSpotDiagnostic.c	Wed May 02 14:00:06 2012 +0100
+++ b/src/share/native/sun/management/HotSpotDiagnostic.c	Wed May 02 15:06:35 2012 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 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
@@ -34,141 +34,3 @@
 {
     jmm_interface->DumpHeap0(env, outputfile, live);
 }
-
-JNIEXPORT jobjectArray JNICALL
-Java_sun_management_HotSpotDiagnostic_getDiagnosticCommands0
-  (JNIEnv *env, jobject dummy)
-{
-  if ((jmm_version > JMM_VERSION_1_2_1)
-      || (jmm_version == JMM_VERSION_1_2 && ((jmm_version&0xFF)>=2))) {
-    return jmm_interface->GetDiagnosticCommands(env);
-  }
-  JNU_ThrowByName(env, "java/lang/UnsupportedOperationException",
-                  "Diagnostic commands are not supported by this VM");
-}
-
-jobject getDiagnosticCommandArgumentInfoArray(JNIEnv *env, jstring command,
-                                              int num_arg) {
-  int i;
-  jobject obj;
-  jobjectArray result;
-  dcmdArgInfo* dcmd_arg_info_array;
-  jclass dcmdArgInfoCls;
-  jclass arraysCls;
-  jmethodID mid;
-  jobject resultList;
-
-  dcmd_arg_info_array = (dcmdArgInfo*) malloc(num_arg * sizeof(dcmdArgInfo));
-  if (dcmd_arg_info_array == NULL) {
-    return NULL;
-  }
-  jmm_interface->GetDiagnosticCommandArgumentsInfo(env, command,
-                                                   dcmd_arg_info_array);
-  dcmdArgInfoCls = (*env)->FindClass(env,
-                                     "com/sun/management/DiagnosticCommandArgumentInfo");
-  result = (*env)->NewObjectArray(env, num_arg, dcmdArgInfoCls, NULL);
-  if (result == NULL) {
-    free(dcmd_arg_info_array);
-    return NULL;
-  }
-  for (i=0; i<num_arg; i++) {
-    obj = JNU_NewObjectByName(env,
-                              "com/sun/management/DiagnosticCommandArgumentInfo",
-                              "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZI)V",
-                              (*env)->NewStringUTF(env,dcmd_arg_info_array[i].name),
-                              (*env)->NewStringUTF(env,dcmd_arg_info_array[i].description),
-                              (*env)->NewStringUTF(env,dcmd_arg_info_array[i].type),
-                              dcmd_arg_info_array[i].default_string == NULL ? NULL:
-                              (*env)->NewStringUTF(env, dcmd_arg_info_array[i].default_string),
-                              dcmd_arg_info_array[i].mandatory,
-                              dcmd_arg_info_array[i].option,
-                              dcmd_arg_info_array[i].position);
-    if (obj == NULL) {
-      free(dcmd_arg_info_array);
-      return NULL;
-    }
-    (*env)->SetObjectArrayElement(env, result, i, obj);
-  }
-  free(dcmd_arg_info_array);
-  arraysCls = (*env)->FindClass(env, "java/util/Arrays");
-  mid = (*env)->GetStaticMethodID(env, arraysCls,
-                                  "asList", "([Ljava/lang/Object;)Ljava/util/List;");
-  resultList = (*env)->CallStaticObjectMethod(env, arraysCls, mid, result);
-  return resultList;
-}
-
-/* Throws IllegalArgumentException if at least one the diagnostic command
- * passed in argument is not supported by the JVM
- */
-JNIEXPORT jobjectArray JNICALL
-Java_sun_management_HotSpotDiagnostic_getDiagnosticCommandInfo0
-(JNIEnv *env, jobject dummy, jobjectArray commands)
-{
-  int i;
-  jclass dcmdInfoCls;
-  jobject result;
-  jobjectArray args;
-  jobject obj;
-
-  if (commands == NULL) {
-    JNU_ThrowNullPointerException(env, "Invalid String Array");
-    return NULL;
-  }
-  if ((jmm_version > JMM_VERSION_1_2_1)
-      || (jmm_version == JMM_VERSION_1_2 && ((jmm_version&0xFF)>=2))) {
-    jsize num_commands = (*env)->GetArrayLength(env, commands);
-    dcmdInfo* dcmd_info_array = (dcmdInfo*) malloc(num_commands *
-                                                   sizeof(dcmdInfo));
-    if (dcmd_info_array == NULL) {
-      JNU_ThrowOutOfMemoryError(env, NULL);
-    }
-    jmm_interface->GetDiagnosticCommandInfo(env, commands, dcmd_info_array);
-    dcmdInfoCls = (*env)->FindClass(env,
-                                    "com/sun/management/DiagnosticCommandInfo");
-    result = (*env)->NewObjectArray(env, num_commands, dcmdInfoCls, NULL);
-    if (result == NULL) {
-      free(dcmd_info_array);
-      JNU_ThrowOutOfMemoryError(env, 0);
-    }
-    for (i=0; i<num_commands; i++) {
-      args = getDiagnosticCommandArgumentInfoArray(env,
-                                                   (*env)->GetObjectArrayElement(env,commands,i),
-                                                   dcmd_info_array[i].num_arguments);
-      if (args == NULL) {
-        free(dcmd_info_array);
-        JNU_ThrowOutOfMemoryError(env, 0);
-      }
-      obj = JNU_NewObjectByName(env,
-                                "com/sun/management/DiagnosticCommandInfo",
-                                "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZLjava/util/List;)V",
-                                (*env)->NewStringUTF(env,dcmd_info_array[i].name),
-                                (*env)->NewStringUTF(env,dcmd_info_array[i].description),
-                                (*env)->NewStringUTF(env,dcmd_info_array[i].impact),
-                                dcmd_info_array[i].enabled,
-                                args);
-      if (obj == NULL) {
-        free(dcmd_info_array);
-        JNU_ThrowOutOfMemoryError(env, 0);
-      }
-      (*env)->SetObjectArrayElement(env, result, i, obj);
-    }
-    free(dcmd_info_array);
-    return result;
-  }
-  JNU_ThrowByName(env, "java/lang/UnsupportedOperationException",
-                  "Diagnostic commands are not supported by this VM");
-}
-
-/* Throws IllegalArgumentException if the diagnostic command
- * passed in argument is not supported by the JVM
- */
-JNIEXPORT jstring JNICALL
-Java_sun_management_HotSpotDiagnostic_executeDiagnosticCommand0
-(JNIEnv *env, jobject dummy, jstring command) {
-  if((jmm_version > JMM_VERSION_1_2_1 )
-     || (jmm_version == JMM_VERSION_1_2 && ((jmm_version&0xFF)>=2))) {
-    return jmm_interface->ExecuteDiagnosticCommand(env, command);
-  }
-  JNU_ThrowByName(env, "java/lang/UnsupportedOperationException",
-                  "Diagnostic commands are not supported by this VM");
-}
--- a/src/solaris/classes/sun/awt/X11/GtkFileDialogPeer.java	Wed May 02 14:00:06 2012 +0100
+++ b/src/solaris/classes/sun/awt/X11/GtkFileDialogPeer.java	Wed May 02 15:06:35 2012 +0100
@@ -73,14 +73,20 @@
         if (filenames == null) {
             accessor.setDirectory(fd, null);
             accessor.setFile(fd, null);
-            accessor.setFiles(fd, null, null);
+            accessor.setFiles(fd, null);
         } else {
             // Fix 6987233: add the trailing slash if it's absent
             accessor.setDirectory(fd, directory +
                     (directory.endsWith(File.separator) ?
                      "" : File.separator));
             accessor.setFile(fd, filenames[0]);
-            accessor.setFiles(fd, directory, filenames);
+
+            int filesNumber = (filenames != null) ? filenames.length : 0;
+            File[] files = new File[filesNumber];
+            for (int i = 0; i < filesNumber; i++) {
+                files[i] = new File(directory, filenames[i]);
+            }
+            accessor.setFiles(fd, files);
         }
     }
 
--- a/src/solaris/classes/sun/awt/X11/XFileDialogPeer.java	Wed May 02 14:00:06 2012 +0100
+++ b/src/solaris/classes/sun/awt/X11/XFileDialogPeer.java	Wed May 02 15:06:35 2012 +0100
@@ -396,11 +396,18 @@
             savedFile = file.substring(index+1);
         }
 
+        String[] fileNames = fileList.getSelectedItems();
+        int filesNumber = (fileNames != null) ? fileNames.length : 0;
+        File[] files = new File[filesNumber];
+        for (int i = 0; i < filesNumber; i++) {
+            files[i] = new File(savedDir, fileNames[i]);
+        }
+
         AWTAccessor.FileDialogAccessor fileDialogAccessor = AWTAccessor.getFileDialogAccessor();
 
         fileDialogAccessor.setDirectory(target, savedDir);
         fileDialogAccessor.setFile(target, savedFile);
-        fileDialogAccessor.setFiles(target, savedDir, fileList.getSelectedItems());
+        fileDialogAccessor.setFiles(target, files);
     }
 
     /**
@@ -419,7 +426,7 @@
 
         fileDialogAccessor.setDirectory(target, null);
         fileDialogAccessor.setFile(target, null);
-        fileDialogAccessor.setFiles(target, null, null);
+        fileDialogAccessor.setFiles(target, null);
 
         handleQuitButton();
     }
--- a/src/solaris/classes/sun/tools/attach/BsdVirtualMachine.java	Wed May 02 14:00:06 2012 +0100
+++ b/src/solaris/classes/sun/tools/attach/BsdVirtualMachine.java	Wed May 02 15:06:35 2012 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 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
@@ -37,8 +37,14 @@
  * Bsd implementation of HotSpotVirtualMachine
  */
 public class BsdVirtualMachine extends HotSpotVirtualMachine {
-    // temp directory for socket file
-    private static final String tmpdir = System.getProperty("java.io.tmpdir");
+    // "tmpdir" is used as a global well-known location for the files
+    // .java_pid<pid>. and .attach_pid<pid>. It is important that this
+    // location is the same for all processes, otherwise the tools
+    // will not be able to find all Hotspot processes.
+    // This is intentionally not the same as java.io.tmpdir, since
+    // the latter can be changed by the user.
+    // Any changes to this needs to be synchronized with HotSpot.
+    private static final String tmpdir;
 
     // The patch to the socket file created by the target VM
     String path;
@@ -243,11 +249,8 @@
     }
 
     // Return the socket file for the given process.
-    // Checks working directory of process for .java_pid<pid>. If not
-    // found it looks in temp directory.
+    // Checks temp directory for .java_pid<pid>.
     private String findSocketFile(int pid) {
-        // First check for a .java_pid<pid> file in the working directory
-        // of the target process
         String fn = ".java_pid" + pid;
         File f = new File(tmpdir, fn);
         return f.exists() ? f.getPath() : null;
@@ -291,7 +294,10 @@
 
     static native void createAttachFile(String path);
 
+    static native String getTempDir();
+
     static {
         System.loadLibrary("attach");
+        tmpdir = getTempDir();
     }
 }
--- a/src/solaris/native/java/lang/java_props_md.c	Wed May 02 14:00:06 2012 +0100
+++ b/src/solaris/native/java/lang/java_props_md.c	Wed May 02 15:06:35 2012 +0100
@@ -411,7 +411,7 @@
 #ifdef MACOSX
             break;
         default:
-            sprops.graphics_env = "sun.awt.HeadlessGraphicsEnvironment";
+            sprops.graphics_env = "sun.java2d.HeadlessGraphicsEnvironment";
             break;
     }
 #endif
--- a/src/solaris/native/java/net/PlainDatagramSocketImpl.c	Wed May 02 14:00:06 2012 +0100
+++ b/src/solaris/native/java/net/PlainDatagramSocketImpl.c	Wed May 02 15:06:35 2012 +0100
@@ -84,6 +84,7 @@
 #endif
 
 extern void setDefaultScopeID(JNIEnv *env, struct sockaddr *him);
+extern int getDefaultScopeID(JNIEnv *env);
 
 /*
  * Returns a java.lang.Integer based on 'i'
@@ -2418,7 +2419,11 @@
                 }
             }
 #endif
-
+#ifdef MACOSX
+            if (family == AF_INET6 && index == 0) {
+                index = getDefaultScopeID(env);
+            }
+#endif
             mname6.ipv6mr_interface = index;
         } else {
             jint idx = (*env)->GetIntField(env, niObj, ni_indexID);
--- a/src/solaris/native/java/net/net_util_md.c	Wed May 02 14:00:06 2012 +0100
+++ b/src/solaris/native/java/net/net_util_md.c	Wed May 02 15:06:35 2012 +0100
@@ -109,6 +109,24 @@
 #endif
 }
 
+int getDefaultScopeID(JNIEnv *env) {
+    static jclass ni_class = NULL;
+    static jfieldID ni_defaultIndexID;
+    if (ni_class == NULL) {
+        jclass c = (*env)->FindClass(env, "java/net/NetworkInterface");
+        CHECK_NULL(c);
+        c = (*env)->NewGlobalRef(env, c);
+        CHECK_NULL(c);
+        ni_defaultIndexID = (*env)->GetStaticFieldID(
+            env, c, "defaultIndex", "I");
+        ni_class = c;
+    }
+    int defaultIndex = 0;
+    defaultIndex = (*env)->GetStaticIntField(env, ni_class,
+                                                 ni_defaultIndexID);
+    return defaultIndex;
+}
+
 #ifdef __solaris__
 static int init_tcp_max_buf, init_udp_max_buf;
 static int tcp_max_buf;
--- a/src/solaris/native/sun/nio/fs/UnixNativeDispatcher.c	Wed May 02 14:00:06 2012 +0100
+++ b/src/solaris/native/sun/nio/fs/UnixNativeDispatcher.c	Wed May 02 15:06:35 2012 +0100
@@ -579,9 +579,12 @@
 
 JNIEXPORT jbyteArray JNICALL
 Java_sun_nio_fs_UnixNativeDispatcher_readdir(JNIEnv* env, jclass this, jlong value) {
-    char entry[sizeof(struct dirent64) + PATH_MAX + 1];
-    struct dirent64* ptr = (struct dirent64*)&entry;
     struct dirent64* result;
+    struct {
+        struct dirent64 buf;
+        char name_extra[PATH_MAX + 1 - sizeof result->d_name];
+    } entry;
+    struct dirent64* ptr = &entry.buf;
     int res;
     DIR* dirp = jlong_to_ptr(value);
 
--- a/src/solaris/native/sun/tools/attach/BsdVirtualMachine.c	Wed May 02 14:00:06 2012 +0100
+++ b/src/solaris/native/sun/tools/attach/BsdVirtualMachine.c	Wed May 02 15:06:35 2012 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright 2005 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 2005, 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
@@ -37,6 +37,7 @@
 #include <sys/types.h>
 #include <sys/socket.h>
 #include <sys/stat.h>
+#include <sys/syslimits.h>
 #include <sys/un.h>
 #include <fcntl.h>
 
@@ -277,3 +278,30 @@
         JNU_ReleaseStringPlatformChars(env, path, _path);
     }
 }
+
+/*
+ * Class:     sun_tools_attach_BSDVirtualMachine
+ * Method:    getTempDir
+ * Signature: (V)Ljava.lang.String;
+ */
+JNIEXPORT jstring JNICALL Java_sun_tools_attach_BsdVirtualMachine_getTempDir(JNIEnv *env, jclass cls)
+{
+    // This must be hard coded because it's the system's temporary
+    // directory not the java application's temp directory, ala java.io.tmpdir.
+
+#ifdef __APPLE__
+    // macosx has a secure per-user temporary directory
+    static char *temp_path = NULL;
+    char temp_path_storage[PATH_MAX];
+    if (temp_path == NULL) {
+        int pathSize = confstr(_CS_DARWIN_USER_TEMP_DIR, temp_path_storage, PATH_MAX);
+        if (pathSize == 0 || pathSize > PATH_MAX) {
+            strlcpy(temp_path_storage, "/tmp", sizeof(temp_path_storage));
+        }
+        temp_path = temp_path_storage;
+    }
+    return JNU_NewStringPlatform(env, temp_path);
+#else /* __APPLE__ */
+    return (*env)->NewStringUTF(env, "/tmp");
+#endif /* __APPLE__ */
+}
--- a/src/windows/classes/sun/awt/windows/WFileDialogPeer.java	Wed May 02 14:00:06 2012 +0100
+++ b/src/windows/classes/sun/awt/windows/WFileDialogPeer.java	Wed May 02 15:06:35 2012 +0100
@@ -139,13 +139,16 @@
 
         String jDirectory = null;
         String jFile = null;
-        String jFiles[] = null;
+        File[] jFiles = null;
 
         if (multiple) {
             jDirectory = wFiles[0];
-            jFiles = new String[wFiles.length - 1];
-            System.arraycopy(wFiles, 1, jFiles, 0, jFiles.length);
-            jFile = jFiles[1]; // choose any file
+            int filesNumber = wFiles.length - 1;
+            jFiles = new File[filesNumber];
+            for (int i = 0; i < filesNumber; i++) {
+                jFiles[i] = new File(jDirectory, wFiles[i + 1]);
+            }
+            jFile = wFiles[1]; // choose any file
         } else {
             int index = wFiles[0].lastIndexOf(java.io.File.separatorChar);
             if (index == -1) {
@@ -155,7 +158,7 @@
                 jDirectory = wFiles[0].substring(0, index + 1);
                 jFile = wFiles[0].substring(index + 1);
             }
-            jFiles = new String[] { jFile };
+            jFiles = new File[] { new File(jDirectory, jFile) };
         }
 
         final FileDialog fileDialog = (FileDialog)target;
@@ -163,7 +166,7 @@
 
         fileDialogAccessor.setDirectory(fileDialog, jDirectory);
         fileDialogAccessor.setFile(fileDialog, jFile);
-        fileDialogAccessor.setFiles(fileDialog, jDirectory, jFiles);
+        fileDialogAccessor.setFiles(fileDialog, jFiles);
 
         WToolkit.executeOnEventHandlerThread(fileDialog, new Runnable() {
              public void run() {
@@ -178,7 +181,7 @@
         final FileDialog fileDialog = (FileDialog)target;
 
         AWTAccessor.getFileDialogAccessor().setFile(fileDialog, null);
-        AWTAccessor.getFileDialogAccessor().setFiles(fileDialog, null, null);
+        AWTAccessor.getFileDialogAccessor().setFiles(fileDialog, null);
 
         WToolkit.executeOnEventHandlerThread(fileDialog, new Runnable() {
              public void run() {
--- a/src/windows/native/sun/windows/awt_Font.cpp	Wed May 02 14:00:06 2012 +0100
+++ b/src/windows/native/sun/windows/awt_Font.cpp	Wed May 02 15:06:35 2012 +0100
@@ -150,6 +150,7 @@
 
 AwtFont::~AwtFont()
 {
+    delete[] m_hFont;
 }
 
 void AwtFont::Dispose() {
@@ -160,11 +161,12 @@
             /*  NOTE: delete of windows HFONT happens in FontCache::Remove
                       only when the final reference to the font is disposed */
         } else if (font != NULL) {
-         // if font was not in cache, its not shared and we delete it now
-           VERIFY(::DeleteObject(font));
+            // if font was not in cache, its not shared and we delete it now
+            DASSERT(::GetObjectType(font) == OBJ_FONT);
+            VERIFY(::DeleteObject(font));
         }
+        m_hFont[i] = NULL;
     }
-    delete[] m_hFont;
 
     AwtObject::Dispose();
 }
--- a/src/windows/native/sun/windows/awt_Toolkit.cpp	Wed May 02 14:00:06 2012 +0100
+++ b/src/windows/native/sun/windows/awt_Toolkit.cpp	Wed May 02 15:06:35 2012 +0100
@@ -534,7 +534,6 @@
     D3DInitializer::GetInstance().Clean();
 
     AwtObjectList::Cleanup();
-    AwtFont::Cleanup();
 
     awt_dnd_uninitialize();
     awt_clipboard_uninitialize((JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2));
@@ -554,6 +553,8 @@
         ::DispatchMessage(&msg);
     }
 
+    AwtFont::Cleanup();
+
     HWND toolkitHWndToDestroy = tk.m_toolkitHWnd;
     tk.m_toolkitHWnd = 0;
     VERIFY(::DestroyWindow(toolkitHWndToDestroy) != NULL);
--- a/test/Makefile	Wed May 02 14:00:06 2012 +0100
+++ b/test/Makefile	Wed May 02 15:06:35 2012 +0100
@@ -352,7 +352,7 @@
 
 # Expect JT_HOME to be set for jtreg tests. (home for jtreg)
 ifndef JT_HOME
-  JT_HOME = $(SLASH_JAVA)/re/jtreg/4.0/promoted/latest/binaries/jtreg
+  JT_HOME = $(SLASH_JAVA)/re/jtreg/4.1/promoted/latest/binaries/jtreg
   ifdef JPRT_JTREG_HOME
     JT_HOME = $(JPRT_JTREG_HOME)
   endif
@@ -363,19 +363,23 @@
   TESTDIRS = demo
 endif
 
-# Samevm settings (default is false)
-ifndef USE_JTREG_SAMEVM
-  USE_JTREG_SAMEVM=false
+# Agentvm settings (default is false)
+ifndef USE_JTREG_AGENTVM
+  USE_JTREG_AGENTVM=false
 endif
-# With samevm, you cannot use -javaoptions?
-ifeq ($(USE_JTREG_SAMEVM),true)
-  JTREG_SAMEVM_OPTION = -samevm
-  EXTRA_JTREG_OPTIONS += $(JTREG_SAMEVM_OPTION) $(JAVA_ARGS) $(JAVA_ARGS:%=-vmoption:%)
+# With agentvm, you cannot use -javaoptions?
+ifeq ($(USE_JTREG_AGENTVM),true)
+  JTREG_AGENTVM_OPTION = -agentvm
+  EXTRA_JTREG_OPTIONS += $(JTREG_AGENTVM_OPTION) $(JAVA_ARGS) $(JAVA_ARGS:%=-vmoption:%)
   JTREG_TEST_OPTIONS = $(JAVA_VM_ARGS:%=-vmoption:%)
 else
   JTREG_TEST_OPTIONS = $(JAVA_ARGS:%=-javaoptions:%) $(JAVA_VM_ARGS:%=-vmoption:%)
 endif
 
+ifdef CONCURRENCY
+  EXTRA_JTREG_OPTIONS += -concurrency:$(CONCURRENCY)
+endif
+
 # Some tests annoy me and fail frequently
 PROBLEM_LIST=ProblemList.txt
 PROBLEM_LISTS=$(PROBLEM_LIST) $(wildcard closed/$(PROBLEM_LIST))
@@ -410,14 +414,14 @@
 define TestDirs
 $(foreach i,$1,$(wildcard ${i})) $(foreach i,$1,$(wildcard closed/${i}))
 endef
-# Running batches of tests with or without samevm
-define RunSamevmBatch
-$(ECHO) "Running tests in samevm mode: $?"
-$(MAKE) TEST_DEPENDENCIES="$?" TESTDIRS="$?" USE_JTREG_SAMEVM=true  UNIQUE_DIR=$@ jtreg_tests
+# Running batches of tests with or without agentvm
+define RunAgentvmBatch
+$(ECHO) "Running tests in agentvm mode: $?"
+$(MAKE) TEST_DEPENDENCIES="$?" TESTDIRS="$?" USE_JTREG_AGENTVM=true  UNIQUE_DIR=$@ jtreg_tests
 endef
 define RunOthervmBatch
 $(ECHO) "Running tests in othervm mode: $?"
-$(MAKE) TEST_DEPENDENCIES="$?" TESTDIRS="$?" USE_JTREG_SAMEVM=false UNIQUE_DIR=$@ jtreg_tests
+$(MAKE) TEST_DEPENDENCIES="$?" TESTDIRS="$?" USE_JTREG_AGENTVM=false UNIQUE_DIR=$@ jtreg_tests
 endef
 define SummaryInfo
 $(ECHO) "########################################################"
@@ -442,7 +446,7 @@
             java/beans/beancontext java/beans/PropertyChangeSupport \
             java/beans/Introspector java/beans/Performance \
             java/beans/VetoableChangeSupport java/beans/Statement)
-	$(call RunSamevmBatch)
+	$(call RunAgentvmBatch)
 
 # Stable othervm testruns (minus items from PROBLEM_LIST)
 #   Using samevm has serious problems with these tests
@@ -453,7 +457,7 @@
 	$(call RunOthervmBatch)
 
 # Stable othervm testruns (minus items from PROBLEM_LIST)
-#   Using samevm has serious problems with these tests
+#   Using agentvm has serious problems with these tests
 JDK_ALL_TARGETS += jdk_beans3
 jdk_beans3: $(call TestDirs, java/beans/XMLEncoder)
 	$(call RunOthervmBatch)
@@ -462,24 +466,24 @@
 jdk_beans: jdk_beans1 jdk_beans2 jdk_beans3
 	@$(SummaryInfo)
 
-# Stable samevm testruns (minus items from PROBLEM_LIST)
+# Stable agentvm testruns (minus items from PROBLEM_LIST)
 JDK_ALL_TARGETS += jdk_io
 jdk_io: $(call TestDirs, java/io)
-	$(call RunSamevmBatch)
+	$(call RunAgentvmBatch)
 
-# Stable samevm testruns (minus items from PROBLEM_LIST)
+# Stable agentvm testruns (minus items from PROBLEM_LIST)
 JDK_ALL_TARGETS += jdk_lang
 jdk_lang: $(call TestDirs, java/lang)
-	$(call RunSamevmBatch)
+	$(call RunAgentvmBatch)
 
 # Stable othervm testruns (minus items from PROBLEM_LIST)
-#   Using samevm has serious problems with these tests
+#   Using agentvm has serious problems with these tests
 JDK_ALL_TARGETS += jdk_management1
 jdk_management1: $(call TestDirs, javax/management)
 	$(call RunOthervmBatch)
 
 # Stable othervm testruns (minus items from PROBLEM_LIST)
-#   Using samevm has serious problems with these tests
+#   Using agentvm has serious problems with these tests
 JDK_ALL_TARGETS += jdk_management2
 jdk_management2: $(call TestDirs, com/sun/jmx com/sun/management sun/management)
 	$(call RunOthervmBatch)
@@ -491,7 +495,7 @@
 # Stable samevm testruns (minus items from PROBLEM_LIST)
 JDK_ALL_TARGETS += jdk_math
 jdk_math: $(call TestDirs, java/math)
-	$(call RunSamevmBatch)
+	$(call RunAgentvmBatch)
 
 # Stable samevm testruns (minus items from PROBLEM_LIST)
 JDK_ALL_TARGETS += jdk_misc
@@ -499,29 +503,29 @@
           demo javax/imageio javax/naming javax/print javax/script \
           javax/smartcardio javax/sound com/sun/java com/sun/jndi \
 	  com/sun/org com/sun/xml sun/misc sun/pisces)
-	$(call RunSamevmBatch)
+	$(call RunAgentvmBatch)
 
 # Stable samevm testruns (minus items from PROBLEM_LIST)
 JDK_ALL_TARGETS += jdk_net
 jdk_net: $(call TestDirs, com/sun/net java/net sun/net)
-	$(call RunSamevmBatch)
+	$(call RunAgentvmBatch)
 
 # Stable samevm testruns (minus items from PROBLEM_LIST)
 JDK_ALL_TARGETS += jdk_nio1
 jdk_nio1: $(call TestDirs, java/nio/file)
-	$(call RunSamevmBatch)
+	$(call RunAgentvmBatch)
 
 # Stable samevm testruns (minus items from PROBLEM_LIST)
 JDK_ALL_TARGETS += jdk_nio2
 jdk_nio2: $(call TestDirs, java/nio/Buffer java/nio/ByteOrder \
           java/nio/channels java/nio/MappedByteBuffer)
 	$(call SharedLibraryPermissions,java/nio/channels)
-	$(call RunSamevmBatch)
+	$(call RunAgentvmBatch)
 
 # Stable samevm testruns (minus items from PROBLEM_LIST)
 JDK_ALL_TARGETS += jdk_nio3
 jdk_nio3: $(call TestDirs, sun/nio)
-	$(call RunSamevmBatch)
+	$(call RunAgentvmBatch)
 
 # All nio tests
 jdk_nio: jdk_nio1 jdk_nio2 jdk_nio3
@@ -529,7 +533,7 @@
 
 # Stable samevm testruns (minus items from PROBLEM_LIST)
 jdk_sctp: $(call TestDirs, com/sun/nio/sctp)
-	$(call RunSamevmBatch)
+	$(call RunAgentvmBatch)
 
 # Stable othervm testruns (minus items from PROBLEM_LIST)
 #   Using samevm has serious problems with these tests
@@ -540,7 +544,7 @@
 # Stable samevm testruns (minus items from PROBLEM_LIST)
 JDK_ALL_TARGETS += jdk_security1
 jdk_security1: $(call TestDirs, java/security)
-	$(call RunSamevmBatch)
+	$(call RunAgentvmBatch)
 
 # Stable othervm testruns (minus items from PROBLEM_LIST)
 #   Using samevm has serious problems with these tests
@@ -570,12 +574,12 @@
 # Stable samevm testruns (minus items from PROBLEM_LIST)
 JDK_ALL_TARGETS += jdk_text
 jdk_text: $(call TestDirs, java/text sun/text)
-	$(call RunSamevmBatch)
+	$(call RunAgentvmBatch)
 
 # Stable samevm testruns (minus items from PROBLEM_LIST)
 JDK_ALL_TARGETS += jdk_tools1
 jdk_tools1: $(call TestDirs, com/sun/jdi)
-	$(call RunSamevmBatch)
+	$(call RunAgentvmBatch)
 
 # Stable othervm testruns (minus items from PROBLEM_LIST)
 #   Using samevm has serious problems with these tests
@@ -584,7 +588,7 @@
             com/sun/tools sun/jvmstat sun/tools tools vm \
             com/sun/servicetag com/sun/tracing)
 	$(call SharedLibraryPermissions,tools/launcher)
-	$(call RunSamevmBatch)
+	$(call RunAgentvmBatch)
 
 # All tools tests
 jdk_tools: jdk_tools1 jdk_tools2
@@ -593,7 +597,7 @@
 # Stable samevm testruns (minus items from PROBLEM_LIST)
 JDK_ALL_TARGETS += jdk_util
 jdk_util: $(call TestDirs, java/util sun/util)
-	$(call RunSamevmBatch)
+	$(call RunAgentvmBatch)
 
 # ------------------------------------------------------------------
 
@@ -610,7 +614,7 @@
 
 # Default JTREG to run (win32 script works for everybody)
 JTREG = $(JT_HOME)/win32/bin/jtreg
-# Add any extra options (samevm etc.)
+# Add any extra options (agentvm etc.)
 JTREG_BASIC_OPTIONS += $(EXTRA_JTREG_OPTIONS)
 # Only run automatic tests
 JTREG_BASIC_OPTIONS += -a
--- a/test/ProblemList.txt	Wed May 02 14:00:06 2012 +0100
+++ b/test/ProblemList.txt	Wed May 02 15:06:35 2012 +0100
@@ -369,6 +369,16 @@
 
 # jdk_net
 
+# 7122846
+java/net/MulticastSocket/NoLoopbackPackets.java                  macosx-all
+java/net/MulticastSocket/SetLoopbackMode.java                    macosx-all
+
+# 7145658
+java/net/MulticastSocket/Test.java                               macosx-all
+
+#7143960
+java/net/DatagramSocket/SendDatagramToBadAddress.java            macosx-all
+
 ############################################################################
 
 # jdk_io
@@ -376,9 +386,6 @@
 # 6962637
 java/io/File/MaxPathLength.java                                 windows-all
 
-# 6671616
-java/io/File/BlockIsDirectory.java                              solaris-all
-
 ############################################################################
 
 # jdk_nio
@@ -391,6 +398,12 @@
 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
+
+# 7132677
+java/nio/channels/Selector/OutOfBand.java			macosx-all
+
 ############################################################################
 
 # jdk_rmi
@@ -663,12 +676,18 @@
 # Filed 6952105
 com/sun/jdi/SuspendThreadTest.java                              generic-all
 
+# Filed 6987312
+com/sun/jdi/DoubleAgentTest.java                                generic-all
+
 # Filed 6986875
 sun/tools/jps/jps-Vvml.sh                                       generic-all
 
 # Filed 6979016
 sun/tools/jconsole/ResourceCheckTest.sh                         generic-all
 
+# 7132203
+sun/jvmstat/monitor/MonitoredVm/CR6672135.java                  generic-all
+
 ############################################################################
 
 # jdk_util
--- a/test/com/sun/jdi/sde/MangleStepTest.java	Wed May 02 14:00:06 2012 +0100
+++ b/test/com/sun/jdi/sde/MangleStepTest.java	Wed May 02 15:06:35 2012 +0100
@@ -10,11 +10,11 @@
  *  @run build TestScaffold VMConnection TargetListener TargetAdapter InstallSDE
  *  @run compile MangleStepTest.java
  *  @run compile -g  onion/pickle/Mangle.java
- *  @run main MangleStepTest unset
- *  @run main MangleStepTest Java
- *  @run main MangleStepTest XYZ
- *  @run main MangleStepTest Rats
- *  @run main MangleStepTest bogus
+ *  @run main/othervm MangleStepTest unset
+ *  @run main/othervm MangleStepTest Java
+ *  @run main/othervm MangleStepTest XYZ
+ *  @run main/othervm MangleStepTest Rats
+ *  @run main/othervm MangleStepTest bogus
  */
 import com.sun.jdi.*;
 import com.sun.jdi.event.*;
--- a/test/com/sun/management/HotSpotDiagnosticMXBean/ExecuteDiagnosticCommand.java	Wed May 02 14:00:06 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,64 +0,0 @@
-/*
- * Copyright (c) 2011, 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     7104647
- * @summary Basic Test for HotSpotDiagnosticMXBean.execute()
- * @author  Frederic Parain
- *
- * @run main ExecuteDiagnosticCommand
- */
-
-import com.sun.management.HotSpotDiagnosticMXBean;
-import com.sun.management.VMOption;
-import java.lang.management.ManagementFactory;
-import java.util.List;
-import javax.management.MBeanServer;
-
-public class ExecuteDiagnosticCommand {
-    private static String HOTSPOT_DIAGNOSTIC_MXBEAN_NAME =
-        "com.sun.management:type=HotSpotDiagnostic";
-
-    public static void main(String[] args) throws Exception {
-        HotSpotDiagnosticMXBean mbean =
-            ManagementFactory.getPlatformMXBean(HotSpotDiagnosticMXBean.class);
-        executeDiagnosticCommand(mbean);
-
-        MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
-        mbean = ManagementFactory.newPlatformMXBeanProxy(mbs,
-                    HOTSPOT_DIAGNOSTIC_MXBEAN_NAME,
-                    HotSpotDiagnosticMXBean.class);
-        executeDiagnosticCommand(mbean);
-    }
-
-    private static void executeDiagnosticCommand(HotSpotDiagnosticMXBean mbean) {
-        String s = mbean.execute("help help");
-        System.out.println(s);
-        s = mbean.execute("help", "help");
-        System.out.println(s);
-        String tab[] = { "help"};
-        s = mbean.execute("help", tab);
-        System.out.println(s);
-    }
-}
--- a/test/com/sun/management/HotSpotDiagnosticMXBean/GetDiagnosticCommandInfo.java	Wed May 02 14:00:06 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,117 +0,0 @@
-/*
- * Copyright (c) 2011, 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     7104647
- * @summary Basic Test for HotSpotDiagnosticMXBean.getDiagnosticCommandInfo()
- * @author  Frederic Parain
- *
- * @run main GetDiagnosticCommandInfo
- */
-
-import com.sun.management.HotSpotDiagnosticMXBean;
-import com.sun.management.DiagnosticCommandInfo;
-import com.sun.management.DiagnosticCommandArgumentInfo;
-import com.sun.management.VMOption;
-import java.lang.management.ManagementFactory;
-import java.util.List;
-import javax.management.MBeanServer;
-
-public class GetDiagnosticCommandInfo {
-    private static String HOTSPOT_DIAGNOSTIC_MXBEAN_NAME =
-        "com.sun.management:type=HotSpotDiagnostic";
-
-    public static void main(String[] args) throws Exception {
-        HotSpotDiagnosticMXBean mbean =
-            ManagementFactory.getPlatformMXBean(HotSpotDiagnosticMXBean.class);
-        checkDiagnosticCommandArguments(mbean);
-
-        MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
-        mbean = ManagementFactory.newPlatformMXBeanProxy(mbs,
-                    HOTSPOT_DIAGNOSTIC_MXBEAN_NAME,
-                    HotSpotDiagnosticMXBean.class);
-        checkDiagnosticCommandArguments(mbean);
-    }
-
-    private static void checkDiagnosticCommandArguments(HotSpotDiagnosticMXBean mbean) {
-        // check getDiagnosticCommandInfo()
-        StringBuilder sb = new StringBuilder();
-        List<DiagnosticCommandInfo> infoList = mbean.getDiagnosticCommandInfo();
-        for(DiagnosticCommandInfo info : infoList) {
-            printCommandInfo(info,sb);
-        }
-        // check getDiagnosticCommandInfo(List<String>)
-        List<String> commands = mbean.getDiagnosticCommands();
-        List<DiagnosticCommandInfo> list2 =
-            mbean.getDiagnosticCommandInfo(commands);
-        for(DiagnosticCommandInfo info : list2) {
-            printCommandInfo(info,sb);
-        }
-        // check getDiagnosticCommandInfo(String)
-        for(String cmd : commands) {
-            DiagnosticCommandInfo info2 = mbean.getDiagnosticCommandInfo(cmd);
-            printCommandInfo(info2,sb);
-        }
-        System.out.println(sb.toString());
-    }
-
-    private static void printCommandInfo(DiagnosticCommandInfo info,
-                                         StringBuilder sb) {
-        sb.append("\t").append(info.getName()).append(":\n");
-        sb.append("\t\tDescription=").append(info.getDescription()).append("\n");
-        sb.append("\t\tImpact=").append(info.getImpact()).append("\n");
-        sb.append("\t\tStatus=");
-        if (info.isEnabled()) {
-            sb.append("Enabled\n");
-        } else {
-            sb.append("Disbled\n");
-        }
-        sb.append("\t\tArguments=");
-        for(DiagnosticCommandArgumentInfo arg : info.getArgumentsInfo()) {
-            printArgumentInfo(arg,sb);
-        }
-    }
-
-    private static void printArgumentInfo(DiagnosticCommandArgumentInfo info,
-                                          StringBuilder sb) {
-        sb.append("\t\t\t").append(info.getName()).append(":\n");
-        sb.append("\t\t\t\tType=").append(info.getType()).append("\n");
-        sb.append("\t\t\t\tDescription=").append(info.getDescription()).append("\n");
-        if(info.getDefault() != null) {
-            sb.append("\t\t\t\tDefault=").append(info.getDefault()).append("\n");
-        }
-        if(info.isMandatory()) {
-            sb.append("\t\t\t\tMandatory\n");
-        } else {
-            sb.append("\t\t\t\tOptional\n");
-        }
-        if(info.isOption()) {
-            sb.append("\t\t\t\tIs an option\n");
-        } else {
-            sb.append("\t\t\t\tIs an argument expected at position");
-            sb.append(info.getPosition());
-            sb.append("\n");
-        }
-    }
-}
--- a/test/com/sun/management/HotSpotDiagnosticMXBean/GetDiagnosticCommands.java	Wed May 02 14:00:06 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,62 +0,0 @@
-/*
- * Copyright (c) 2011, 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     7104647
- * @summary Basic Test for HotSpotDiagnosticMXBean.getDiagnosticCommands()
- * @author  Frederic Parain
- *
- * @run main GetDiagnosticCommands
- */
-
-import com.sun.management.HotSpotDiagnosticMXBean;
-import com.sun.management.VMOption;
-import java.lang.management.ManagementFactory;
-import java.util.List;
-import javax.management.MBeanServer;
-
-public class GetDiagnosticCommands {
-    private static String HOTSPOT_DIAGNOSTIC_MXBEAN_NAME =
-        "com.sun.management:type=HotSpotDiagnostic";
-
-    public static void main(String[] args) throws Exception {
-        HotSpotDiagnosticMXBean mbean =
-            ManagementFactory.getPlatformMXBean(HotSpotDiagnosticMXBean.class);
-        checkDiagnosticCommands(mbean);
-
-        MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
-        mbean = ManagementFactory.newPlatformMXBeanProxy(mbs,
-                    HOTSPOT_DIAGNOSTIC_MXBEAN_NAME,
-                    HotSpotDiagnosticMXBean.class);
-        checkDiagnosticCommands(mbean);
-    }
-
-    private static void checkDiagnosticCommands(HotSpotDiagnosticMXBean mbean) {
-        List<String> commands = mbean.getDiagnosticCommands();
-        System.out.println("Commands:");
-        for (String cmd : commands) {
-            System.out.println(cmd);
-        }
-    }
-}
--- a/test/java/awt/Choice/ChoiceMouseWheelTest/ChoiceMouseWheelTest.java	Wed May 02 14:00:06 2012 +0100
+++ b/test/java/awt/Choice/ChoiceMouseWheelTest/ChoiceMouseWheelTest.java	Wed May 02 15:06:35 2012 +0100
@@ -94,7 +94,10 @@
 
             // Test mouse wheel over the choice
             String name = Toolkit.getDefaultToolkit().getClass().getName();
-            if(!name.equals("sun.awt.X11.XToolkit")) { // mouse wheel doesn't work for the choice on X11, so skip it
+
+            // mouse wheel doesn't work for the choice on X11 and Mac, so skip it
+            if(!name.equals("sun.awt.X11.XToolkit")
+               && !name.equals("sun.lwawt.macosx.LWCToolkit")) {
                 robot.mouseWheel(1);
                 robot.waitForIdle();
 
--- a/test/java/awt/print/PaintSetEnabledDeadlock/PaintSetEnabledDeadlock.java	Wed May 02 14:00:06 2012 +0100
+++ b/test/java/awt/print/PaintSetEnabledDeadlock/PaintSetEnabledDeadlock.java	Wed May 02 15:06:35 2012 +0100
@@ -54,9 +54,12 @@
             Util.clickOnComp(frame.button, robot);
         }
 
-        frame.panel.stop();
+        boolean ret = frame.panel.stop();
         frame.dispose();
 
+        if (!ret) {
+            throw new RuntimeException("Test failed!");
+        }
         System.out.println("Test passed.");
     }
 
@@ -140,17 +143,19 @@
         }
     }
 
-    public void stop() {
+    public boolean stop() {
         active = false;
         try {
-            synchronized (sync) {
-                sync.notify();
-            }
-            synchronized (thread) {
-                thread.wait();
+            sync();
+            thread.join(1000);
+            if (thread.isAlive()) {
+                thread.interrupt();
+                return false;
             }
         } catch (InterruptedException ex) {
+            return false;
         }
+        return true;
     }
 
     public void draw() {
--- a/test/java/io/Serializable/expectedStackTrace/ExpectedStackTrace.java	Wed May 02 14:00:06 2012 +0100
+++ b/test/java/io/Serializable/expectedStackTrace/ExpectedStackTrace.java	Wed May 02 15:06:35 2012 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2011, 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 @@
  */
 
 /* @test
- * @bug 6317435
+ * @bug 6317435 7110700
  * @summary Verify that stack trace contains a proper cause of
  *          InvalidClassException (methods: checkSerialize,
  *          checkDeserialize or checkDefaultSerialize)
@@ -59,7 +59,7 @@
     private static final String SER_METHOD_NAME = "checkSerializable";
 
     public static final void main(String[] args) throws Exception {
-        System.err.println("\nRegression test for CR6317435");
+        System.err.println("\nRegression test for CRs 6317435, 7110700");
         checkSerializable(getObject());
     }
 
@@ -99,9 +99,12 @@
                 }
             }
             if (found) {
+                if (ex.getCause() != null) {
+                    throw new Error("\nTest for CR 7110700 FAILED");
+                }
                 System.err.println("\nTEST PASSED");
             } else {
-                throw new Error();
+                throw new Error("\nTest for CR 6317435 FAILED");
             }
         }
     }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/util/concurrent/ScheduledThreadPoolExecutor/ZeroCorePoolSize.java	Wed May 02 15:06:35 2012 +0100
@@ -0,0 +1,83 @@
+/*
+ * Copyright (c) 2011, 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 7091003
+ * @summary ScheduledExecutorService never executes Runnable
+ *          with corePoolSize of zero
+ * @author Chris Hegarty
+ */
+
+import java.util.concurrent.ScheduledThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Verify that tasks can be run even with a core pool size of 0.
+ */
+public class ZeroCorePoolSize {
+
+    volatile boolean taskRun;
+
+    void test(String[] args) throws Throwable {
+
+        ScheduledThreadPoolExecutor pool = new ScheduledThreadPoolExecutor(0);
+        Runnable task = new Runnable() {
+            public void run() {
+                taskRun = true;
+            }
+        };
+        check(pool.getCorePoolSize() == 0);
+
+        pool.schedule(task, 1, TimeUnit.SECONDS);
+
+        pool.shutdown();
+        check(pool.awaitTermination(20L, TimeUnit.SECONDS));
+        check(pool.getCorePoolSize() == 0);
+        check(taskRun);
+    }
+
+    //--------------------- Infrastructure ---------------------------
+    volatile int passed = 0, failed = 0;
+    void pass() {passed++;}
+    void fail() {failed++; Thread.dumpStack();}
+    void fail(String msg) {System.err.println(msg); fail();}
+    void unexpected(Throwable t) {failed++; t.printStackTrace();}
+    void check(boolean cond) {if (cond) pass(); else fail();}
+    void equal(Object x, Object y) {
+        if (x == null ? y == null : x.equals(y)) pass();
+        else fail(x + " not equal to " + y);}
+    public static void main(String[] args) throws Throwable {
+        new ZeroCorePoolSize().instanceMain(args);}
+    void instanceMain(String[] args) throws Throwable {
+        try {test(args);} catch (Throwable t) {unexpected(t);}
+        System.out.printf("%nPassed = %d, failed = %d%n%n", passed, failed);
+        if (failed > 0) throw new AssertionError("Some tests failed");}
+    abstract class F {abstract void f() throws Throwable;}
+    void THROWS(Class<? extends Throwable> k, F... fs) {
+        for (F f : fs)
+            try {f.f(); fail("Expected " + k.getName() + " not thrown");}
+            catch (Throwable t) {
+                if (k.isAssignableFrom(t.getClass())) pass();
+                else unexpected(t);}}
+}
--- a/test/java/util/logging/ParentLoggersTest.java	Wed May 02 14:00:06 2012 +0100
+++ b/test/java/util/logging/ParentLoggersTest.java	Wed May 02 15:06:35 2012 +0100
@@ -6,7 +6,7 @@
  * @author  ss45998
  *
  * @build ParentLoggersTest
- * @run main ParentLoggersTest
+ * @run main/othervm ParentLoggersTest
  */
 
 /*
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/util/zip/ZipFile/VmCrash.java	Wed May 02 15:06:35 2012 +0100
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2011, 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 7118283
+   @summary Test if a corrupted zip file crashes VM
+   */
+
+import java.util.zip.*;
+import java.io.*;
+import java.util.*;
+
+public class VmCrash {
+    public static void main(String[] argv) throws Exception {
+        try {
+            ZipFile zf = new ZipFile(new File(System.getProperty("test.src","."),
+                                              "vmcrash.zip"));
+            for (Enumeration e = zf.entries(); e.hasMoreElements();) {
+                System.out.println(e.nextElement());
+            }
+            throw new RuntimeException("Corrupted zip read without exception");
+        } catch (ZipException ex) {
+            System.out.println("expected ZipException:");
+            //ex.printStackTrace();
+        }
+    }
+}
Binary file test/java/util/zip/ZipFile/vmcrash.zip has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/javax/crypto/CipherSpi/DirectBBRemaining.java	Wed May 02 15:06:35 2012 +0100
@@ -0,0 +1,181 @@
+/*
+ * Copyright (c) 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 7142509
+ * @summary Cipher.doFinal(ByteBuffer,ByteBuffer) fails to
+ *     process when in.remaining() == 0
+ */
+
+import java.nio.ByteBuffer;
+import java.security.SecureRandom;
+import java.util.Arrays;
+import java.util.Random;
+
+import javax.crypto.Cipher;
+import javax.crypto.SecretKey;
+import javax.crypto.spec.SecretKeySpec;
+
+/*
+ * Simple test case to show that Cipher.doFinal(ByteBuffer, ByteBuffer) fails to
+ * process the data internally buffered inBB the cipher when input.remaining()
+ * == 0 and at least one buffer is a direct buffer.
+ */
+public class DirectBBRemaining {
+
+    private static Random random = new SecureRandom();
+    private static int testSizes = 40;
+    private static int outputFrequency = 5;
+
+    public static void main(String args[]) throws Exception {
+        boolean failedOnce = false;
+        Exception failedReason = null;
+
+        byte[] keyBytes = new byte[8];
+        random.nextBytes(keyBytes);
+        SecretKey key = new SecretKeySpec(keyBytes, "DES");
+
+        Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding", "SunJCE");
+        cipher.init(Cipher.ENCRYPT_MODE, key);
+
+        /*
+         * Iterate through various sizes to make sure that the code does empty
+         * blocks, single partial blocks, 1 full block, full + partial blocks,
+         * multiple full blocks, etc. 5 blocks (using DES) is probably overkill
+         * but will feel more confident the fix isn't breaking anything.
+         */
+        System.out.println("Output test results for every "
+                + outputFrequency + " tests...");
+
+        for (int size = 0; size <= testSizes; size++) {
+            boolean output = (size % outputFrequency) == 0;
+            if (output) {
+                System.out.print("\nTesting buffer size: " + size + ":");
+            }
+
+            int outSize = cipher.getOutputSize(size);
+
+            try {
+                encrypt(cipher, size,
+                        ByteBuffer.allocate(size),
+                        ByteBuffer.allocate(outSize),
+                        ByteBuffer.allocateDirect(size),
+                        ByteBuffer.allocateDirect(outSize),
+                        output);
+            } catch (Exception e) {
+                System.out.print("\n    Failed with size " + size);
+                failedOnce = true;
+                failedReason = e;
+
+                // If we got an exception, let's be safe for future
+                // testing and reset the cipher to a known good state.
+                cipher.init(Cipher.ENCRYPT_MODE, key);
+            }
+        }
+        if (failedOnce) {
+            throw failedReason;
+        }
+        System.out.println("\nTest Passed...");
+    }
+
+    private enum TestVariant {
+
+        HEAP_HEAP, HEAP_DIRECT, DIRECT_HEAP, DIRECT_DIRECT
+    };
+
+    private static void encrypt(Cipher cipher, int size,
+            ByteBuffer heapIn, ByteBuffer heapOut,
+            ByteBuffer directIn, ByteBuffer directOut,
+            boolean output) throws Exception {
+
+        ByteBuffer inBB = null;
+        ByteBuffer outBB = null;
+
+        // Set up data and encrypt to known/expected values.
+        byte[] testdata = new byte[size];
+        random.nextBytes(testdata);
+        byte[] expected = cipher.doFinal(testdata);
+
+        for (TestVariant tv : TestVariant.values()) {
+            if (output) {
+                System.out.print(" " + tv);
+            }
+
+            switch (tv) {
+            case HEAP_HEAP:
+                inBB = heapIn;
+                outBB = heapOut;
+                break;
+            case HEAP_DIRECT:
+                inBB = heapIn;
+                outBB = directOut;
+                break;
+            case DIRECT_HEAP:
+                inBB = directIn;
+                outBB = heapOut;
+                break;
+            case DIRECT_DIRECT:
+                inBB = directIn;
+                outBB = directOut;
+                break;
+            }
+
+            inBB.clear();
+            outBB.clear();
+
+            inBB.put(testdata);
+            inBB.flip();
+
+            // Process all data in one shot, but don't call doFinal() yet.
+            // May store up to n-1 bytes (w/block size n) internally.
+            cipher.update(inBB, outBB);
+            if (inBB.hasRemaining()) {
+                throw new Exception("buffer not empty");
+            }
+
+            // finish encryption and process all data buffered
+            cipher.doFinal(inBB, outBB);
+            outBB.flip();
+
+            // validate output size
+            if (outBB.remaining() != expected.length) {
+                throw new Exception(
+                        "incomplete encryption output, expected "
+                        + expected.length + " bytes but was only "
+                        + outBB.remaining() + " bytes");
+            }
+
+            // validate output data
+            byte[] encrypted = new byte[outBB.remaining()];
+            outBB.get(encrypted);
+            if (!Arrays.equals(expected, encrypted)) {
+                throw new Exception("bad encryption output");
+            }
+
+            if (!Arrays.equals(cipher.doFinal(), cipher.doFinal())) {
+                throw new Exception("Internal buffers still held data!");
+            }
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/javax/sound/sampled/DataLine/DataLine_ArrayIndexOutOfBounds.java	Wed May 02 15:06:35 2012 +0100
@@ -0,0 +1,226 @@
+/**
+ * @test
+ * @bug 7088367
+ * @summary SourceDataLine.write and TargetDataLine.read don't throw ArrayIndexOutOfBoundsException
+ * @author Alex Menkov
+ */
+
+import javax.sound.sampled.AudioSystem;
+import javax.sound.sampled.DataLine;
+import javax.sound.sampled.Line;
+import javax.sound.sampled.LineUnavailableException;
+import javax.sound.sampled.Mixer;
+import javax.sound.sampled.SourceDataLine;
+import javax.sound.sampled.TargetDataLine;
+
+public class DataLine_ArrayIndexOutOfBounds {
+
+    static int total = 0;
+    static int failed = 0;
+
+    // shared buffer for all tests
+    static final byte[] buffer = new byte[5000000];
+
+    // the class describes different test scenarios (buffer properties)
+    static abstract class Scenario {
+        abstract int getBufferOffset(DataLine line);
+        abstract int getBufferLength(DataLine line);
+    }
+
+    // scenarios to tests
+    static Scenario[] scenarios = new Scenario[]{
+        new Scenario() {
+            public String toString() {
+                return "offset is near Integer.MAX_VALUE";
+            }
+            public int getBufferOffset(DataLine line) {
+                return Integer.MAX_VALUE - 4096;
+            }
+            public int getBufferLength(DataLine line) {
+                return 65536;
+            }
+        },
+        new Scenario() {
+            public String toString() {
+                return "offset is less than buffer.length, length is large";
+            }
+            int getBufferOffset(DataLine line) {
+                return buffer.length / 10;
+            }
+            int getBufferLength(DataLine line) {
+                return Integer.MAX_VALUE - getBufferOffset(line) + 4096;
+            }
+        }
+    };
+
+    public static void main(String[] args) throws Exception {
+        Mixer.Info[] infos = AudioSystem.getMixerInfo();
+        log("" + infos.length + " mixers detected");
+        for (int i=0; i<infos.length; i++) {
+            Mixer mixer = AudioSystem.getMixer(infos[i]);
+            log("Mixer " + (i+1) + ": " + infos[i]);
+            try {
+                mixer.open();
+                for (Scenario scenario: scenarios) {
+                    testSDL(mixer, scenario);
+                    testTDL(mixer, scenario);
+                }
+                mixer.close();
+            } catch (LineUnavailableException ex) {
+                log("LineUnavailableException: " + ex);
+            }
+        }
+        if (failed == 0) {
+            log("PASSED (" + total + " tests)");
+        } else {
+            log("FAILED (" + failed + " of " + total + " tests)");
+            throw new Exception("Test FAILED");
+        }
+    }
+
+    final static int STOPPER_DELAY = 5000;  // 1 sec
+
+    static class AsyncLineStopper implements Runnable {
+        private final DataLine line;
+        private final long delayMS;  // delay before stop the line
+        private final Thread thread;
+        private final Object readyEvent = new Object();
+        private final Object startEvent = new Object();
+
+        public AsyncLineStopper(DataLine line, long delayMS) {
+            this.line = line;
+            this.delayMS = delayMS;
+            thread = new Thread(this);
+            thread.setDaemon(true);
+            // starts the thread and waits until it becomes ready
+            synchronized (readyEvent) {
+                thread.start();
+                try {
+                    readyEvent.wait();
+                } catch (InterruptedException ex) { }
+            }
+        }
+
+        // makes the delay and then stops the line
+        public void schedule() {
+            synchronized(startEvent) {
+                startEvent.notifyAll();
+            }
+        }
+
+        // force stop/close the line
+        public void force() {
+            thread.interrupt();
+            try {
+                thread.join();
+            } catch (InterruptedException ex) {
+                log("join exception: " + ex);
+            }
+        }
+
+        // Runnable implementation
+        public void run() {
+            try {
+                synchronized(readyEvent) {
+                    readyEvent.notifyAll();
+                }
+                synchronized(startEvent) {
+                    startEvent.wait();
+                }
+                // delay
+                Thread.sleep(delayMS);
+            } catch (InterruptedException ex) {
+                log("    AsyncLineStopper has been interrupted: " + ex);
+            }
+            // and flush
+            log("    stop...");
+            line.stop();
+            log("    close...");
+            line.close();
+        }
+    }
+
+    static void testSDL(Mixer mixer, Scenario scenario) {
+        log("  Testing SDL (scenario: " + scenario + ")...");
+        Line.Info linfo = new Line.Info(SourceDataLine.class);
+        SourceDataLine line = null;
+        try {
+            line = (SourceDataLine)mixer.getLine(linfo);
+            log("    got line: " + line);
+            log("    open...");
+            line.open();
+        } catch (IllegalArgumentException ex) {
+            log("    unsupported (IllegalArgumentException)");
+            return;
+        } catch (LineUnavailableException ex) {
+            log("    unavailable: " + ex);
+            return;
+        }
+
+        total++;
+
+        log("    start...");
+        line.start();
+
+        AsyncLineStopper lineStopper = new AsyncLineStopper(line, STOPPER_DELAY);
+        int offset = scenario.getBufferOffset(line);
+        int len = scenario.getBufferLength(line);
+        // ensure len represents integral number of frames
+        len -= len % line.getFormat().getFrameSize();
+
+        log("    write...");
+        lineStopper.schedule();
+        try {
+            line.write(buffer, offset, len);
+            log("    ERROR: didn't get ArrayIndexOutOfBoundsException");
+            failed++;
+        } catch (ArrayIndexOutOfBoundsException  ex) {
+            log("    OK: got ArrayIndexOutOfBoundsException: " + ex);
+        }
+        lineStopper.force();
+    }
+
+    static void testTDL(Mixer mixer, Scenario scenario) {
+        log("  Testing TDL (scenario: " + scenario + ")...");
+        Line.Info linfo = new Line.Info(TargetDataLine.class);
+        TargetDataLine line = null;
+        try {
+            line = (TargetDataLine)mixer.getLine(linfo);
+            log("    got line: " + line);
+            log("    open...");
+            line.open();
+        } catch (IllegalArgumentException ex) {
+            log("    unsupported (IllegalArgumentException)");
+            return;
+        } catch (LineUnavailableException ex) {
+            log("    unavailable: " + ex);
+            return;
+        }
+
+        total++;
+
+        log("    start...");
+        line.start();
+
+        AsyncLineStopper lineStopper = new AsyncLineStopper(line, STOPPER_DELAY);
+        int offset = scenario.getBufferOffset(line);
+        int len = scenario.getBufferLength(line);
+        // ensure len represents integral number of frames
+        len -= len % line.getFormat().getFrameSize();
+
+        log("    read...");
+        try {
+            line.read(buffer, offset, len);
+            log("    ERROR: didn't get ArrayIndexOutOfBoundsException");
+            failed++;
+        } catch (ArrayIndexOutOfBoundsException  ex) {
+            log("    OK: got ArrayIndexOutOfBoundsException: " + ex);
+        }
+        lineStopper.force();
+    }
+
+    static void log(String s) {
+        System.out.println(s);
+        System.out.flush();
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/javax/swing/JOptionPane/7138665/bug7138665.java	Wed May 02 15:06:35 2012 +0100
@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 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 7138665
+   @summary JOptionPane.getValue() unexpected change between JRE 1.6 and JRE 1.7
+   @author Pavel Porvatov
+*/
+
+import sun.awt.SunToolkit;
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.KeyEvent;
+
+public class bug7138665 {
+    public static void main(String[] args) throws Exception {
+        SwingUtilities.invokeLater(new Runnable() {
+            @Override
+            public void run() {
+                JOptionPane pane = new JOptionPane("Enter value", JOptionPane.QUESTION_MESSAGE,
+                        JOptionPane.OK_CANCEL_OPTION, null, null, null);
+                pane.setWantsInput(true);
+
+                JDialog dialog = pane.createDialog(null, "My Dialog");
+                dialog.setVisible(true);
+
+                Object result = pane.getValue();
+
+                if (result == null || ((Integer) result).intValue() != JOptionPane.OK_OPTION) {
+                    throw new RuntimeException("Invalid result: " + result);
+                }
+
+                System.out.println("Test bug7138665 passed");
+            }
+        });
+
+        SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
+
+        toolkit.realSync();
+
+        Robot robot = new Robot();
+
+        robot.setAutoDelay(100);
+        robot.keyPress(KeyEvent.VK_ENTER);
+        robot.keyRelease(KeyEvent.VK_ENTER);
+
+        toolkit.realSync();
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/javax/swing/JTree/4314199/bug4314199.html	Wed May 02 15:06:35 2012 +0100
@@ -0,0 +1,8 @@
+<html>
+<body>
+Select the last tree node (marked "Here") and click on the menu.
+Look at the vertical line connecting nodes "Bug" and "Here". If
+this line disappears when the menu drops down, test fails.
+<applet  code="bug4314199.class" width=200 height=200></applet>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/javax/swing/JTree/4314199/bug4314199.java	Wed May 02 15:06:35 2012 +0100
@@ -0,0 +1,92 @@
+/*
+ * Copyright (c) 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 4314199
+ * @summary Tests that JTree repaints correctly in a container with a JMenu
+ * @author Peter Zhelezniakov
+ * @run applet/manual=yesno bug4314199.html
+ */
+
+import javax.swing.*;
+import javax.swing.tree.*;
+
+public class bug4314199 extends JApplet {
+
+    public void init() {
+
+        try {
+            UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
+            SwingUtilities.invokeAndWait(new Runnable() {
+
+                public void run() {
+                    createAndShowGUI();
+                }
+            });
+        } catch (final Exception e) {
+            SwingUtilities.invokeLater(new Runnable() {
+
+                public void run() {
+                    createAndShowMessage("Test fails because of exception: "
+                            + e.getMessage());
+                }
+            });
+        }
+
+    }
+
+    private void createAndShowMessage(String message) {
+        getContentPane().add(new JLabel(message));
+    }
+
+    private void createAndShowGUI() {
+        JMenuBar mb = new JMenuBar();
+
+        // needed to exactly align left edge of menu and angled line of tree
+        mb.add(Box.createHorizontalStrut(27));
+
+        JMenu mn = new JMenu("Menu");
+        JMenuItem mi = new JMenuItem("MenuItem");
+        mn.add(mi);
+        mb.add(mn);
+        setJMenuBar(mb);
+
+        DefaultMutableTreeNode n1 = new DefaultMutableTreeNode("Root");
+        DefaultMutableTreeNode n2 = new DefaultMutableTreeNode("Duke");
+        n1.add(n2);
+        DefaultMutableTreeNode n3 = new DefaultMutableTreeNode("Bug");
+        n2.add(n3);
+        n3.add(new DefaultMutableTreeNode("Blah"));
+        n3.add(new DefaultMutableTreeNode("Blah"));
+        n3.add(new DefaultMutableTreeNode("Blah"));
+        DefaultMutableTreeNode n4 = new DefaultMutableTreeNode("Here");
+        n2.add(n4);
+
+        JTree tree = new JTree(new DefaultTreeModel(n1));
+        tree.putClientProperty("JTree.lineStyle", "Angled");
+        tree.expandPath(new TreePath(new Object[]{n1, n2, n3}));
+        setContentPane(tree);
+    }
+}
--- a/test/sun/security/krb5/runNameEquals.sh	Wed May 02 14:00:06 2012 +0100
+++ b/test/sun/security/krb5/runNameEquals.sh	Wed May 02 15:06:35 2012 +0100
@@ -48,11 +48,15 @@
 # set platform-dependent variables
 OS=`uname -s`
 case "$OS" in
-  SunOS | Linux | Darwin )
+  SunOS | Linux )
     PATHSEP=":"
     FILESEP="/"
     NATIVE=true
     ;;
+  Darwin )
+    PATHSEP=":"
+    FILESEP="/"
+    ;;
   CYGWIN* )
     PATHSEP=";"
     FILESEP="/"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/sun/security/pkcs12/Bug6415637.java	Wed May 02 15:06:35 2012 +0100
@@ -0,0 +1,313 @@
+/*
+ * Copyright (c) 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 6415637
+ * @summary Support PKCS#12 key stores protected with an empty password
+ */
+
+import java.io.ByteArrayInputStream;
+import java.math.BigInteger;
+import java.security.KeyStore;
+import java.security.cert.X509Certificate;
+import java.security.interfaces.RSAPrivateCrtKey;
+
+public class Bug6415637 {
+
+    public static void main(String[] args) throws Exception {
+        check(WITH_NULL);
+        check(WITHOUT_NULL);
+    }
+
+    private static void check(String encodedBlob) throws Exception {
+        byte[] blob = new byte[encodedBlob.length() * 2];
+        for (int i = 0; i < blob.length; ) {
+            final char ch = encodedBlob.charAt(i / 2);
+            blob[i++] = (byte) (ch >> 8);
+            blob[i++] = (byte) ch;
+        }
+        KeyStore store = KeyStore.getInstance("PKCS12");
+        store.load(new ByteArrayInputStream(blob), new char[0]);
+        if (!store.aliases().nextElement().equals("test"))
+            throw new Exception("test alias not found");
+        KeyStore.PrivateKeyEntry e =
+            (KeyStore.PrivateKeyEntry) store.getEntry("test",
+                    new KeyStore.PasswordProtection(new char[0]));
+        X509Certificate cert = (X509Certificate) e.getCertificateChain()[0];
+        if (!cert.getSubjectDN().toString().equals("CN=Test Key"))
+            throw new Exception("invalid certificate subject DN");
+        RSAPrivateCrtKey key = (RSAPrivateCrtKey) e.getPrivateKey();
+        if (!key.getPublicExponent().equals(BigInteger.valueOf(65537)))
+            throw new Exception("invalid public exponent");
+    }
+
+    private static final String WITH_NULL =
+        "\u3082\u097c\u0201\u0330\u8209\u3606\u092a\u8648\u86f7\u0d01" +
+        "\u0701\ua082\u0927\u0482\u0923\u3082\u091f\u3082\u0564\u0609" +
+        "\u2a86\u4886\uf70d\u0107\u01a0\u8205\u5504\u8205\u5130\u8205" +
+        "\u4d30\u8205\u4906\u0b2a\u8648\u86f7\u0d01\u0c0a\u0102\ua082" +
+        "\u04fa\u3082\u04f6\u3028\u060a\u2a86\u4886\uf70d\u010c\u0103" +
+        "\u301a\u0414\u8317\ucfd6\u89ab\uc03b\u79d6\u4c45\u1b10\uc3bd" +
+        "\u3923\ub806\u0202\u0400\u0482\u04c8\ud51d\uf953\ud79e\u92c6" +
+        "\u83c0\u92dc\ucd05\u69ab\ucc1b\ud538\u2ed9\u7796\ua426\uc14e" +
+        "\udcbf\ue541\u40be\ud264\u3b5b\uf51f\u8e1a\u892f\u2813\ucdd6" +
+        "\uf72e\uef55\u35ef\u4620\ude18\ued5e\ufae0\ubed4\uf84e\u276b" +
+        "\u3596\uc33f\ub251\ue617\u6e00\ua80f\u6c82\u4acd\u7303\u26be" +
+        "\uffb5\u1e49\u5fb1\uf87c\ua873\ue60a\u7415\u655c\u39f1\ucf16" +
+        "\u8f5c\u85c6\u4100\u4130\u565b\u649a\u60d6\u6054\u868d\u7267" +
+        "\u97a8\u8492\uc5a0\udb5e\u2880\udf55\ub0ee\ua641\u8224\u76d2" +
+        "\u9b1e\u2a67\u1e32\ue1fc\u0a77\u435b\u669f\ued00\u6c30\u963f" +
+        "\u7ee3\uc5c8\u198f\u8ede\u30e1\u015d\u1195\uc850\u3371\ub9e5" +
+        "\u6968\u84c3\ub0e4\u22b7\u2a08\u4a9d\u9166\ua9ba\ud945\u0529" +
+        "\ue1e7\u8aba\ub4ef\u7445\udc9a\ucf73\ud77b\ufafe\ue1df\u3180" +
+        "\u9585\ued73\uca40\u06b0\ufdee\u95ba\u1aa3\ubd67\ua5c1\u84b4" +
+        "\u4b50\uc1e1\u4547\ud837\u21bc\uac0d\u0a65\uebb5\u7281\ud9bc" +
+        "\u2e2c\ua9bc\u7714\u0fc0\uab41\uce09\ud5e8\u5f8c\uc35d\uba6e" +
+        "\u98a2\u95c3\u87ff\uba8c\u056a\udc9f\uf254\u3d38\uf40a\u77dd" +
+        "\u4e30\u01de\ubef7\ud288\ue59c\ua143\ub30b\ud0ae\u63b9\u138b" +
+        "\uc793\u3474\u18ca\udeed\u78d9\u2ae8\u63cc\ua5d1\u6779\u0229" +
+        "\u7b72\ucfd4\ueecb\ue167\u08c0\u7556\u181d\u8d62\uc401\ub092" +
+        "\u8cf5\ued71\uf29f\u843e\u13e1\u7e7b\uf589\u0329\u92bd\ud0e3" +
+        "\u8dcc\u7541\uf195\ueef2\u3f3a\ueb01\uf5b0\u1869\u2216\uf351" +
+        "\u488d\udffb\u6243\u1121\u9447\u8a3a\u006f\u008c\ue2b3\ued31" +
+        "\u7f57\u6492\ue02f\u6f68\u387d\u58c0\uaadf\u2ee3\uf304\u3de9" +
+        "\u9741\u47fa\udde8\ufe8a\u679a\u597d\u8c7c\u9c71\u570e\u1dbd" +
+        "\ud555\ue853\uff63\u0fcb\u4b28\u3691\u33c8\uc31f\uc510\u6cba" +
+        "\ud92c\u6462\u733a\u739e\uc792\ud861\u743e\u3bd3\u006b\u2276" +
+        "\u9fb3\u0a31\u1eb3\ub97e\u4a80\uc076\uaabc\u35a0\u678d\u17c3" +
+        "\ua225\ua77c\u7d9c\uef2d\u83e2\u6996\uba70\uf6f8\u79a1\u9399" +
+        "\uc86b\u1cc5\ub2a5\u02c1\ud676\ua274\u4933\u6c60\u6832\ub0be" +
+        "\u5354\u5af9\uae23\u0963\u722d\u9ad2\u4461\ub768\u2068\u0ccb" +
+        "\u94fd\u88ac\u0f58\u3bc0\u212d\u30c8\u8860\uf7c9\u1dde\ub6b4" +
+        "\u3549\u5bcd\ucf83\u9420\u3a40\u16ad\uc4d7\ucd87\ue73a\ue1c7" +
+        "\u21df\u7f4f\u8659\u9f79\u5b36\uf206\uac66\uc9f3\u6336\u164d" +
+        "\u9046\uf4d5\u285d\ufcd8\ubd55\u1fb9\ua533\u9101\u1e87\uc7b0" +
+        "\u64e9\u3817\u216c\u8d41\uba51\u743a\uc74e\ue4ab\u2820\u972f" +
+        "\ue191\u85b4\u0ea7\ud896\u23cf\u7df5\u1653\ua9f3\ub724\ucbc9" +
+        "\u9738\ud2f8\u464e\ucf12\u99b8\u64e0\uf03b\u8d02\u85a8\uab52" +
+        "\u8da3\uea34\ube99\ue5f8\u2b38\ub082\u399d\ue61e\u64a1\u7f90" +
+        "\u26e9\ueb74\u6107\ufe2f\u82ca\u87a5\u3028\u8e1f\ue859\u61d4" +
+        "\ud26d\u23a9\uaadc\u02a7\u8ab2\u43d4\uf6b9\udf7a\u8935\u45a4" +
+        "\ufad6\ue7e4\u92b7\u35d7\u1044\u8ed3\u74ef\uaaa9\u713f\u6ebc" +
+        "\u1158\u5e5c\u7522\ufe17\ua515\u59a1\u75dd\ue7ac\uafd9\u16a9" +
+        "\u190e\u18fc\uc041\ufc9e\u3e16\u60c4\ufe51\u6d53\ufa52\u4c08" +
+        "\uce2a\ue546\u017b\ud96b\ube18\u8cb9\udd50\ued40\u14b0\u7da1" +
+        "\u2f2c\ubf9d\uc7c7\u1b73\ua155\ucaf8\ue54d\uebb0\u160a\ubd64" +
+        "\u5ef7\ue1cf\u4633\u86c1\ubc91\u839d\ub148\u9f31\uf2b1\ud133" +
+        "\u168f\u9374\u4667\u6aa9\u0482\ua2a6\ub5c0\ud9b7\ua070\uf6bd" +
+        "\u16fe\u0f41\u986b\u3d33\u7cb9\u291d\u24f0\u704a\uc946\u10a2" +
+        "\udbcf\u6c5f\u5a83\u5507\u036e\ube9f\uf60a\u9da8\u72dd\u23c9" +
+        "\u8878\udd67\uf486\u1384\u751f\u4694\uee3c\udc2e\ud5d7\ud99a" +
+        "\u5ee2\u5455\ub82d\u1837\u336d\u5724\u635b\ubd0b\u2e7c\u92be" +
+        "\u2110\u9c0e\u1662\u43f6\u62ae\u32e3\uaea4\u1cc5\uadc0\u7511" +
+        "\u6ad4\u0228\ue399\u5741\u2050\ue31a\u7dc8\uf6db\u67bb\u994a" +
+        "\u5b5a\uaac6\u2210\u95b0\u462e\u0684\u335e\uac36\u7ab9\uab1e" +
+        "\u0b75\u0f05\u74c5\ufcb3\ua0a5\ube7e\u45f8\u92d5\u3399\u7dd6" +
+        "\uf96e\u7e01\u7823\u6690\u231c\u4c47\u2d10\u7e7f\u5eb8\u70dd" +
+        "\u98d2\u6204\u3a92\u3990\u502b\u7cdb\u952a\ufa97\uea3b\ud990" +
+        "\u436f\uf33a\u070d\u2aff\u7497\u2591\u37e4\ua590\ue7ba\u2c1e" +
+        "\u53d9\u73fa\udc53\u944f\ua3a5\u5093\u33a4\uf080\u1193\u37f2" +
+        "\u7642\ub033\u7f90\u9b44\uff89\ue6ef\u81be\u9e6e\u68a4\u5a00" +
+        "\u9232\u4372\u40aa\u2748\u229d\u534d\u316b\u6e89\ufcb7\uff2e" +
+        "\ub654\u1649\ucb13\u3c28\u4940\u43aa\uc07d\u247c\u313c\u3017" +
+        "\u0609\u2a86\u4886\uf70d\u0109\u1431\u0a1e\u0800\u7400\u6500" +
+        "\u7300\u7430\u2106\u092a\u8648\u86f7\u0d01\u0915\u3114\u0412" +
+        "\u5469\u6d65\u2031\u3330\u3833\u3132\u3234\u3236\u3437\u3082" +
+        "\u03b3\u0609\u2a86\u4886\uf70d\u0107\u06a0\u8203\ua430\u8203" +
+        "\ua002\u0100\u3082\u0399\u0609\u2a86\u4886\uf70d\u0107\u0130" +
+        "\u2806\u0a2a\u8648\u86f7\u0d01\u0c01\u0630\u1a04\u14de\ud8d8" +
+        "\ua792\uf9d9\u6875\ua51d\u98ec\udf03\uc2b6\u5100\u8a02\u0204" +
+        "\u0080\u8203\u6074\ub909\u3c60\ua522\ue4ac\u0f60\u2396\u7baa" +
+        "\ud208\ub76c\u89a5\ue4ef\u205d\u2062\u4a5b\ua684\uceae\u01b9" +
+        "\u1e7a\u6e03\ud996\u555a\u615b\uba70\u406f\u80a9\u901e\ua947" +
+        "\u5b8f\u73f3\udea3\ud8b1\u9782\uac87\u231a\udcd2\u3ef0\u3a17" +
+        "\u4092\u509f\u0e79\u4cd7\u8516\u5111\uebe1\u86e0\uc548\u5ffc" +
+        "\u9a99\u11ed\uef13\u17af\u2707\u8984\u8770\u7064\u1943\u1dd3" +
+        "\u45cf\u9f80\u65f8\u9b3e\u1f70\u6bd0\uc726\u5506\ufb20\u6bdc" +
+        "\uba8c\u0b19\ucd01\ud0f0\u7040\udf63\u48a5\udf5f\u6559\u1b33" +
+        "\ubdae\u8183\uc13f\ued10\ud6dc\ud0f0\u6a7f\ubc36\uc7ca\u320f" +
+        "\u50b8\ud422\ufd99\u8843\u65e8\ue201\u843b\u64ee\ub891\u3ba2" +
+        "\uecae\ufda0\u72d6\u8394\u2551\ufc44\u3778\u27c3\u061a\u6d3b" +
+        "\ubd80\ue010\u06df\u39e7\u3d6a\u5ae2\u93fa\u4de4\u938f\u6f27" +
+        "\ufd39\u4380\u60da\uf215\u79d4\uf6f1\ua02f\u959a\ua0ea\u1c38" +
+        "\u80e3\u2744\u7506\u54b3\u77ad\u18ce\ucfec\u555e\u7bbe\u2e2f" +
+        "\u9900\ub2ef\ua5b9\ubdf0\u5e15\ua681\u92c7\u4f86\u2e1a\ub893" +
+        "\u01fc\u01d2\ub674\uff19\u04c3\ua1a0\u2cea\u72e0\ua8f1\u1358" +
+        "\ube79\u7caa\u269d\u728a\ue435\u37bd\u6495\uc106\u8830\u9b17" +
+        "\ue16d\uef78\uae2b\u5313\u1c96\uc0ee\u3098\ud743\ucd1c\u7407" +
+        "\uf4f9\uee72\ub95e\u31e7\u6435\u0173\u0336\u93c5\u8a1b\u05b4" +
+        "\u4359\uc4be\ud92b\u8d21\u83a9\u32b7\u6433\ua9bc\u27c2\ud842" +
+        "\ua4f2\u81c5\ua86c\u2fd2\uba30\u53bd\uc277\u659f\u203b\u60e5" +
+        "\u37f7\u0984\u31c2\u838a\u2107\u5840\u6411\u1b8d\u044e\ub0b6" +
+        "\uf558\ue6d3\u62bb\u5464\uf83a\u4d5b\uf153\u9e18\ua353\ubd05" +
+        "\uf204\ud543\u037d\ue5aa\u473a\ueb13\uac19\u0494\ua08e\u76c3" +
+        "\ufbd7\u9f1c\u8ca9\u57ad\ud218\uc018\u67ac\u0ae9\ub559\ufe38" +
+        "\u5641\uec0c\ue0ee\u606c\u1989\ue5a2\uff09\u8c61\u1386\ueb51" +
+        "\u7cbd\u95cd\u80c5\u3532\u8605\u596d\u4cfd\u7797\u1e82\ud2fe" +
+        "\uad6b\ua16e\ub6cf\u8fce\ud5a9\u207f\u1d0a\udabe\uc3a6\u5633" +
+        "\u2023\u925f\u809f\uee7c\u5362\u5fd9\u8dfc\u6b5f\uc95b\u0ae9" +
+        "\u7b26\u9e5b\u97e8\u9d6e\uaf91\u6d1a\u1d19\ufc27\u0815\uccbc" +
+        "\u83d4\u2ce2\ue06e\u21a1\u88da\u09af\u9671\uc510\uac23\u398d" +
+        "\ubea2\ua9a1\uf0d3\u490d\ub94b\u7ff7\u6636\ub1fa\u9b10\u1be3" +
+        "\u179b\u6a8a\u4a6c\ude1f\u5da7\u7c02\u96ec\u70ac\u5045\udd2c" +
+        "\u9f6d\uc37d\u5ba6\u4895\ue142\u0db9\uf2dc\uba2e\ud054\ud33e" +
+        "\u1ed9\u144b\u5d85\u9156\u3a90\ue8cd\u0a01\u67f5\ua81b\u4f56" +
+        "\u99dd\u4950\ua551\uacdb\udf31\u1f05\u7169\u3231\u0071\u80ec" +
+        "\ua4e9\ud74e\u62cf\u8931\u11f1\uc925\u0319\uabd4\ufb86\u73c2" +
+        "\u1479\u005b\uf05d\u4f8d\u44e4\u942b\ud338\ud05d\u2b3b\uf6f5" +
+        "\udc0d\uf741\u798b\ud8e9\u36a5\u577b\u8a95\ud773\uffcb\u17b3" +
+        "\u7174\u9616\u9b5e\ua577\u983c\u6e7a\u6cc8\u4a04\u042b\u503e" +
+        "\ud744\ub65e\ue5de\ufa24\u8c71\u1127\ud47f\ud290\ufd4c\u5cbb" +
+        "\u0e21\u77fd\u6553\ub82b\ucb49\u41e7\u8e3d\u4539\u925d\u6ba9" +
+        "\uae47\u391c\ua79e\ub6e2\u7142\u7cb3\u02f5\u6495\u7a85\u2dea" +
+        "\u787b\u22b7\u6ec2\uea8d\uf930\u3d30\u2130\u0906\u052b\u0e03" +
+        "\u021a\u0500\u0414\ubfef\u99f5\u0bb0\uc9b3\uf96a\ue267\u6bc0" +
+        "\u0202\u6d78\ub923\u0414\u5500\u095a\u2a04\u2d7e\u708d\u9779" +
+        "\u9bdb\u2c4f\u82f2\uf89f\u0202\u0400";
+
+    private static final String WITHOUT_NULL =
+        "\u3082\u097c\u0201\u0330\u8209\u3606\u092a\u8648\u86f7\u0d01" +
+        "\u0701\ua082\u0927\u0482\u0923\u3082\u091f\u3082\u0564\u0609" +
+        "\u2a86\u4886\uf70d\u0107\u01a0\u8205\u5504\u8205\u5130\u8205" +
+        "\u4d30\u8205\u4906\u0b2a\u8648\u86f7\u0d01\u0c0a\u0102\ua082" +
+        "\u04fa\u3082\u04f6\u3028\u060a\u2a86\u4886\uf70d\u010c\u0103" +
+        "\u301a\u0414\ud258\ubbe7\ub641\ud196\u4969\u3c88\u70f1\u8c97" +
+        "\u95b1\u8bf3\u0202\u0400\u0482\u04c8\u096a\u4686\uf519\u61da" +
+        "\u1b3b\uebfd\u89b1\u044b\u3bd8\u79a7\ud022\ud880\ud173\ucde1" +
+        "\ud2c1\u2c5d\u8ebb\u6bd4\u46db\ub90b\u04b9\ub091\ud1f3\ud468" +
+        "\u3e93\u2c88\uca5a\u1c54\u5342\u1eca\u8565\ubbbd\ua022\u1ead" +
+        "\ud0bb\u1a8c\u69cf\uf0f4\ucbfb\u488a\ube99\uf190\ue01c\ud87d" +
+        "\u78ca\u9e5c\u82f9\u76ad\u811f\u37d0\u272b\u0481\u500c\u0a27" +
+        "\u08d3\ub637\u3e39\u6db1\ubcba\ue354\u6924\ua9d5\u3555\u20d6" +
+        "\u4c6b\u3189\u5f91\u382c\uf351\u4de2\ubade\u2a14\uea84\u16b6" +
+        "\uf7f7\u36de\ubba6\ue952\u5f5d\u8243\u2318\ucf3d\u8ac8\u33d3" +
+        "\u706c\ue3db\u6619\u7935\u7300\u89b3\u0bcd\uca9f\u0333\ua450" +
+        "\u1be1\u3e42\ub465\uced5\ub055\u5843\uf40f\ua0f2\u6fea\u94fa" +
+        "\ua51e\u4b5d\u93c9\ucb2e\u977e\uafd9\u2a2f\u784b\u0320\u5550" +
+        "\u273f\u469f\uc42b\u2ce7\uedea\u4e0d\u54a5\u1a25\u4fac\ue346" +
+        "\u2102\u7ab6\uea86\u554f\u7706\u8a80\uf6dd\u04f8\u3b37\u005a" +
+        "\u4562\u2ef8\u59f9\u32b7\u31c0\ue7dc\ucbde\ue0e1\u2fd9\u0960" +
+        "\u3e7a\ub4e5\u2a58\u1e2b\uef14\u9a44\u5444\u806d\uc475\u12ab" +
+        "\ucc3d\ua03b\ubd52\ubf1c\ua9a6\u58aa\uee8b\u96c2\ud0c9\ua029" +
+        "\u1db4\ub118\u4807\uecaa\ue182\uabb7\ud9ed\u66c5\u2c80\uc6a6" +
+        "\u3f54\ubc73\u2632\ue1b0\u0d74\u001c\u5740\uc74b\ufadb\u25b4" +
+        "\ua10e\u3191\u69e6\u0861\u452b\u955c\uac56\ud3c4\u86b7\u45f8" +
+        "\u777a\uc336\u8cc7\ud471\u76b6\u11d8\ueb84\u14e4\uf44f\uc9ff" +
+        "\u8929\u0d84\ubcfe\u8cc2\u9d07\u94e6\u1cf9\u19b5\u773a\u012d" +
+        "\u0453\u4ff3\u40f2\ub144\ufc80\u571c\u0e13\uf890\u9fed\u2045" +
+        "\u7baf\ufd88\u4920\u2b86\u491d\uecf8\ua5d9\u1e12\u48c7\u2c84" +
+        "\u3fbe\u4df5\u11ce\u7b81\u83fc\u3efa\u697d\u1f3d\u8d81\u01b0" +
+        "\u0bf1\u9012\u697f\u3b25\u3574\u5286\udded\u5be0\u7e92\u0a02" +
+        "\ua486\ud19b\ue0b5\ua05c\u5ac2\u0ad5\u0d04\ua763\ub5c8\uf7e6" +
+        "\u6e77\u2df3\ub9e7\uda30\ufccb\u7642\u5dc1\udf1f\uc922\uff69" +
+        "\u4471\u4749\u937a\ud77d\u7c0d\u917c\uf2ef\u122c\u13b2\u8943" +
+        "\u33aa\uad59\u86e8\u21c4\ueaa0\uf200\ue5f3\u6da0\ue8ef\uce7e" +
+        "\u37b2\u3ddf\u0480\u08fc\uf89a\ud927\u3f5b\u75d3\ubdfe\u6ebd" +
+        "\ufab1\u9f54\u1c20\u625b\u1391\u2af0\u43ba\u4395\udf22\u299e" +
+        "\uf3bf\u7750\u5f68\u0120\u0ee0\u6960\ud939\u621f\uf845\u0025" +
+        "\ue33c\u7ed9\ueadf\u0005\u6306\u7274\u5e67\ucf7a\uf3c6\u7371" +
+        "\u487b\u79d7\u2142\ubc1a\ubfe4\u3536\u15db\ufe23\u4352\u6321" +
+        "\u329d\uc251\u84c8\ufc0e\uc0ca\u5be6\uf530\u0177\ud9cb\ud132" +
+        "\uf752\u3f26\uda90\ud9cf\u2e46\u3e09\u5d9a\u6902\udb3e\ub06c" +
+        "\u722d\uf498\u3e93\u6cae\u43b5\u535a\u1cd1\uf0b2\u8d80\u9e53" +
+        "\ue02e\uf782\u01ce\u5063\u73d1\u5571\uf0e7\ufa22\u7e48\u0c31" +
+        "\u4642\u29fd\udcab\ue8d4\u7a77\u0880\u4855\u88c7\u7aa5\u0d9c" +
+        "\uf8b7\uc91c\u127d\u2dd7\ude53\u9d3f\u132b\u965c\ubc80\udd97" +
+        "\u87bf\ua0e8\ub2a2\u4e1f\u98fd\u72f3\u16ea\uc415\u5be3\ue8df" +
+        "\u5681\u1f11\u4e3a\uac5d\u1684\u6602\ueb14\u0a96\ufcef\uaebf" +
+        "\u1f2e\ud1a9\u435c\uf4e5\ub6b4\uaae2\u8244\u96a4\u0d3a\u752f" +
+        "\uce21\u1bc9\u219e\uf17b\ud95e\ucd12\u1b0a\ucb85\ub0cd\u4ecb" +
+        "\u6bb4\u5f7c\u2a93\ubb24\u9d7c\u6822\u80cd\u3f54\u78ad\u4fde" +
+        "\ud57f\uec1d\ub54c\u0d78\u5946\u84c1\ua9ad\u0dea\u0292\ub279" +
+        "\u1c76\u817e\ub910\ub1fa\ub1c0\u839d\u9eca\u6f83\u8211\u4112" +
+        "\u440c\u4fbd\u6ef2\u897d\udfa9\ude9e\u1aef\u0f21\u26fb\uaca4" +
+        "\u637e\ub072\u264f\ud24d\u9357\uc801\u0b84\u2d34\ueddf\u6063" +
+        "\udc5d\u90dd\u5c62\ufb48\u8c5e\u7c4e\u3bdb\ub590\u7a75\udbd1" +
+        "\udd78\uc8be\u5915\u7c8b\u8874\u578d\u3116\ub65a\uab8e\ud2ef" +
+        "\u5d35\ubf8b\u2828\u8983\ua790\uedcf\u9698\ue023\u5786\u627b" +
+        "\u9037\u1db7\u900e\u1f45\u0001\u7cf8\u14fd\ue437\u0dfd\ucacc" +
+        "\u5edf\u1742\u7f6e\u612a\ud57d\udca0\u73a4\ud601\uc7f0\uca0e" +
+        "\u5a44\u00b4\u233a\u84f2\u95b5\u5f16\uc291\u04fb\u369d\u6b99" +
+        "\ue127\u493f\u66be\u86e9\u9672\u2849\u64a7\u851b\ue420\u8491" +
+        "\ueb07\u6563\uc753\uc28e\ucad5\uec05\u6920\u8955\u5605\u25f6" +
+        "\u6193\ubee5\u7a1a\ub73d\ucc27\uc8ce\u7179\u57c1\u7a2a\u37c1" +
+        "\ua6c7\u2d8a\u4025\uc97d\u8c9d\u7b4b\u1ad5\uc6d7\u50fc\u246d" +
+        "\u91a9\ua55d\u677a\udc83\u04c7\u3e14\u9950\u420c\udf02\u749b" +
+        "\ude88\u5459\u2074\ua4ae\ud12d\uaf60\uba98\u630d\u313c\u3017" +
+        "\u0609\u2a86\u4886\uf70d\u0109\u1431\u0a1e\u0800\u7400\u6500" +
+        "\u7300\u7430\u2106\u092a\u8648\u86f7\u0d01\u0915\u3114\u0412" +
+        "\u5469\u6d65\u2031\u3330\u3833\u3132\u3431\u3138\u3238\u3082" +
+        "\u03b3\u0609\u2a86\u4886\uf70d\u0107\u06a0\u8203\ua430\u8203" +
+        "\ua002\u0100\u3082\u0399\u0609\u2a86\u4886\uf70d\u0107\u0130" +
+        "\u2806\u0a2a\u8648\u86f7\u0d01\u0c01\u0630\u1a04\u14af\ud4f5" +
+        "\u0ff4\u0ede\u0da0\u6cc5\ufd9d\u3502\uae5e\u4cef\u3102\u0204" +
+        "\u0080\u8203\u6028\ua7e6\u088b\u56b6\uf453\u9747\u68ec\uc064" +
+        "\u2254\u693f\u25c5\uaa39\u3d87\uc97c\uc558\u5194\u7553\ude3a" +
+        "\u4575\u9d85\ud843\u2bd0\ua2e8\u244f\u8593\uac84\u54b4\ubdc6" +
+        "\ucea6\uba1a\ud3da\ua510\uee9d\uaf31\ub5c2\u3329\u0fed\u0e08" +
+        "\u426b\u46fe\udcc5\u0979\ua9ed\u3123\u9a50\ud222\u3fc0\u771a" +
+        "\u6f55\u9664\ud56f\u6b03\u6020\u78a4\u63b2\ue35e\u0816\u43a7" +
+        "\u1909\u52e1\u8183\u1b8d\u9f5b\u19e4\uad73\u8461\ucc86\u3b49" +
+        "\u322e\ue9d9\u3c66\uea22\u091e\u6621\ua8bf\u0169\u72d0\u535e" +
+        "\u77dc\u1002\ubded\u7a91\u6cee\u58fa\uc295\uae8e\ue009\uabe9" +
+        "\u6638\ucaea\u8bbf\uca27\udef5\u2881\u72ec\u8aa5\u582b\u9d6e" +
+        "\u26bb\u3c70\u8bd6\uf5ec\u34ae\ua967\u5bb1\u22cb\u4b74\u0e50" +
+        "\u5062\uc6f7\u7cb4\u58a3\uf43d\u57c0\u9654\u2f9c\u9308\u4546" +
+        "\u6f4a\u37fe\u8d5d\u1465\u8621\u4cd8\u68d6\u0456\u96a4\ud3e2" +
+        "\u76d1\u2675\u7654\u7649\u10e9\u9d0e\u8b04\uffb6\u020a\u2eb4" +
+        "\uf24f\u150e\u7f0d\uf41b\u2c76\u538f\uc2df\u79dc\u0472\u1119" +
+        "\uc148\ue2e8\u1820\ucd45\u08a7\u6bcd\u6eb0\ubd0a\ufff4\uec28" +
+        "\u819b\u2adb\uefc8\ue8f7\ue233\u6535\uc938\u9771\u3681\u87cf" +
+        "\u3a24\u4c71\ue1df\u3e19\u259c\uae5b\u27ed\u8a67\uf3e6\u7af0" +
+        "\u48e1\uc542\uc471\ud8f4\ue317\u46e9\u0b4f\uec45\ua1d3\u2b88" +
+        "\u8a22\udda1\u7c1a\u273c\ua0f7\u8bac\u3771\u28d2\u6ef8\u28d2" +
+        "\ud83c\u196f\ue3fd\u9c79\u4305\u01b8\u3490\u0a91\ue4f3\uebc6" +
+        "\u25a2\u7dd2\u72db\u7531\ucfca\u432f\u2beb\uc649\uf9c5\uc533" +
+        "\u9f3a\ua611\u935c\ubca6\ud293\u54d6\u0dd1\u0aff\u82fb\u2d69" +
+        "\u3da0\u3b33\u0986\u45b3\u3353\ub968\u7348\u454f\u9117\ub3dc" +
+        "\ud7af\u06ca\ua34a\u9357\ue22f\uad3d\u4c76\ub386\ua8d7\u2a90" +
+        "\u6d17\u9321\u7b00\u21e4\u1994\u9d18\u6439\u04c8\u8282\ub269" +
+        "\uf786\u75c6\ua505\u983a\ua075\uffa0\ud662\u6ae5\ub126\u96d1" +
+        "\u9e5e\u346b\ub7ee\ub0a3\u4ee8\ud204\u77ec\u2325\u5da8\ua326" +
+        "\ua018\u0fd8\ue50e\u93cc\ucc40\u2d89\u2ffb\u54e0\u091a\u19fd" +
+        "\u45d7\uc0ab\u77a2\u66ae\u794b\u6644\u21c3\ud782\u1e9e\u53e5" +
+        "\u782e\u55e8\ud44e\u93e8\u379e\u5aa8\u353b\u95de\u7bc1\ucaf3" +
+        "\u5223\ub5e9\uacbb\ub86b\u6014\u0626\ue7ad\ufd93\ue43a\ud864" +
+        "\u1e6d\u14b2\ua12a\u94c5\u2ed9\ua7f7\u14f4\u0cbd\uca3b\u7c21" +
+        "\ua85a\uf834\u6c99\ue1aa\u3832\u2515\u8170\u3c93\u7def\u94fe" +
+        "\u9c3d\u4ab0\u73ed\u6c72\u8b94\ua407\uc719\uad1e\u6306\u4167" +
+        "\u921e\uae53\u3fd4\uf569\u6f0b\u82b0\u0ca6\ud61f\ud526\u23c9" +
+        "\u168d\u4baf\ucc4f\ud8a2\uc64a\ud649\u55e3\u7019\u8f20\u680c" +
+        "\u5581\u2cb1\ub3a4\u3e37\u5fd3\ua3ca\uc115\u979c\uf910\u3797" +
+        "\u05cb\u51d6\u74a4\uc5c0\u597b\uf27f\ud5e2\ue8ac\u4f3d\uc0c3" +
+        "\u9594\u7799\u6876\ub1a3\u059a\uff03\uc2ee\uc8c2\uf224\u3720" +
+        "\u9177\uabdb\u9202\u18d8\uffbe\u0516\u2a76\uedb5\ufe9e\u6d65" +
+        "\u4c35\ue4cb\u75aa\u02be\ud24c\ua482\ufc67\ue4f9\u70c7\u3567" +
+        "\ufc3f\uaa89\ue80a\u6507\u0a65\u4e18\uf919\u071d\u423c\u1756" +
+        "\u30e5\u37f3\u19b3\u10fb\u6c30\u3d30\u2130\u0906\u052b\u0e03" +
+        "\u021a\u0500\u0414\ufd05\u4444\ud347\u673c\u6da4\udb7c\u0733" +
+        "\ud7bf\ud263\uc6b2\u0414\udd17\u155e\u2d4c\u25cb\ua028\u1a23" +
+        "\ub8b0\uf6be\u925f\ude3a\u0202\u0400";
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/sun/security/provider/certpath/X509CertPath/ForwardBuildCompromised.java	Wed May 02 15:06:35 2012 +0100
@@ -0,0 +1,312 @@
+/*
+ * Copyright (c) 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 7123519
+ * @summary Problem with java/classes_security
+ */
+
+import java.net.*;
+import java.util.*;
+import java.io.*;
+import javax.net.ssl.*;
+import java.security.KeyStore;
+import java.security.cert.*;
+import java.security.spec.*;
+import java.security.interfaces.*;
+
+public class ForwardBuildCompromised {
+    // DigiNotar Root CA, untrusted root certificate
+    static String trustedCertStr =
+        "-----BEGIN CERTIFICATE-----\n" +
+        "MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC\n" +
+        "VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u\n" +
+        "ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc\n" +
+        "KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u\n" +
+        "ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05OTA1\n" +
+        "MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIGA1UE\n" +
+        "ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5j\n" +
+        "b3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF\n" +
+        "bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg\n" +
+        "U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUA\n" +
+        "A4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/\n" +
+        "I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3\n" +
+        "wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OC\n" +
+        "AdcwggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHb\n" +
+        "oIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5\n" +
+        "BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p\n" +
+        "dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk\n" +
+        "MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp\n" +
+        "b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu\n" +
+        "dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0\n" +
+        "MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8Bdi\n" +
+        "E1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAa\n" +
+        "MAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI\n" +
+        "hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN\n" +
+        "95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd\n" +
+        "2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=\n" +
+        "-----END CERTIFICATE-----";
+
+    // DigiNotar Root CA, untrusted cross-certificate
+    static String untrustedCrossCertStr =
+        "-----BEGIN CERTIFICATE-----\n" +
+        "MIIFSDCCBLGgAwIBAgIERpwsrzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC\n" +
+        "VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u\n" +
+        "ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc\n" +
+        "KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u\n" +
+        "ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNzA3\n" +
+        "MjYxNTU3MzlaFw0xMzA4MjYxNjI3MzlaMF8xCzAJBgNVBAYTAk5MMRIwEAYDVQQK\n" +
+        "EwlEaWdpTm90YXIxGjAYBgNVBAMTEURpZ2lOb3RhciBSb290IENBMSAwHgYJKoZI\n" +
+        "hvcNAQkBFhFpbmZvQGRpZ2lub3Rhci5ubDCCAiIwDQYJKoZIhvcNAQEBBQADggIP\n" +
+        "ADCCAgoCggIBAKywWMEAvdghCAsrmv5uVjAFnxt3kBBBXMMNhxF3joHxynzpjGrt\n" +
+        "OHQ1u9rf+bvACTe0lnOBfTMamDn3k2+Vfz25sXWHulFI6ItwPpUExdi2wxbZiLCx\n" +
+        "hx1w2oa0DxSLes8Q0XQ2ohJ7d4ZKeeZ73wIRaKVOhq40WJskE3hWIiUeAYtLUXH7\n" +
+        "gsxZlmmIWmhTxbkNAjfLS7xmSpB+KgsFB+0WX1WQddhGyRuD4gi+8SPMmR3WKg+D\n" +
+        "IBVYJ4Iu+uIiwkmxuQGBap1tnUB3aHZOISpthECFTnaZfILz87cCWdQmARuO361T\n" +
+        "BtGuGN3isjrL14g4jqxbKbkZ05j5GAPPSIKGZgsbaQ/J6ziIeiYaBUyS1yTUlvKs\n" +
+        "Ui2jR9VS9j/+zoQGcKaqPqLytlY0GFei5IFt58rwatPHkWsCg0F8Fe9rmmRe49A8\n" +
+        "5bHre12G+8vmd0nNo2Xc97mcuOQLX5PPzDAaMhzOHGOVpfnq4XSLnukrqTB7oBgf\n" +
+        "DhgL5Vup09FsHgdnj5FLqYq80maqkwGIspH6MVzVpsFSCAnNCmOi0yKm6KHZOQaX\n" +
+        "9W6NApCMFHs/gM0bnLrEWHIjr7ZWn8Z6QjMpBz+CyeYfBQ3NTCg2i9PIPhzGiO9e\n" +
+        "7olk6R3r2ol+MqZp0d3MiJ/R0MlmIdwGZ8WUepptYkx9zOBkgLKeR46jAgMBAAGj\n" +
+        "ggEmMIIBIjASBgNVHRMBAf8ECDAGAQH/AgEBMCcGA1UdJQQgMB4GCCsGAQUFBwMB\n" +
+        "BggrBgEFBQcDAgYIKwYBBQUHAwQwEQYDVR0gBAowCDAGBgRVHSAAMDMGCCsGAQUF\n" +
+        "BwEBBCcwJTAjBggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMwYD\n" +
+        "VR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5lbnRydXN0Lm5ldC9zZXJ2ZXIxLmNy\n" +
+        "bDAdBgNVHQ4EFgQUiGi/4I41xDs4a2L3KDuEgcgM100wCwYDVR0PBAQDAgEGMB8G\n" +
+        "A1UdIwQYMBaAFPAXYhNVPbP/CgBr+1CEl/PtYtAaMBkGCSqGSIb2fQdBAAQMMAob\n" +
+        "BFY3LjEDAgCBMA0GCSqGSIb3DQEBBQUAA4GBAEa6RcDNcEIGUlkDJUY/pWTds4zh\n" +
+        "xbVkp3wSmpwPFhx5fxTyF4HD2L60jl3aqjTB7gPpsL2Pk5QZlNsi3t4UkCV70UOd\n" +
+        "ueJRN3o/LOtk4+bjXY2lC0qTHbN80VMLqPjmaf9ghSA9hwhskdtMgRsgfd90q5QP\n" +
+        "ZFdYf+hthc3m6IcJ\n" +
+        "-----END CERTIFICATE-----";
+
+    // DigiNotar Root CA, compromised certificate
+    static String compromisedCertStr =
+        "-----BEGIN CERTIFICATE-----\n" +
+        "MIIFijCCA3KgAwIBAgIQDHbanJEMTiye/hXQWJM8TDANBgkqhkiG9w0BAQUFADBf\n" +
+        "MQswCQYDVQQGEwJOTDESMBAGA1UEChMJRGlnaU5vdGFyMRowGAYDVQQDExFEaWdp\n" +
+        "Tm90YXIgUm9vdCBDQTEgMB4GCSqGSIb3DQEJARYRaW5mb0BkaWdpbm90YXIubmww\n" +
+        "HhcNMDcwNTE2MTcxOTM2WhcNMjUwMzMxMTgxOTIxWjBfMQswCQYDVQQGEwJOTDES\n" +
+        "MBAGA1UEChMJRGlnaU5vdGFyMRowGAYDVQQDExFEaWdpTm90YXIgUm9vdCBDQTEg\n" +
+        "MB4GCSqGSIb3DQEJARYRaW5mb0BkaWdpbm90YXIubmwwggIiMA0GCSqGSIb3DQEB\n" +
+        "AQUAA4ICDwAwggIKAoICAQCssFjBAL3YIQgLK5r+blYwBZ8bd5AQQVzDDYcRd46B\n" +
+        "8cp86Yxq7Th0Nbva3/m7wAk3tJZzgX0zGpg595NvlX89ubF1h7pRSOiLcD6VBMXY\n" +
+        "tsMW2YiwsYcdcNqGtA8Ui3rPENF0NqISe3eGSnnme98CEWilToauNFibJBN4ViIl\n" +
+        "HgGLS1Fx+4LMWZZpiFpoU8W5DQI3y0u8ZkqQfioLBQftFl9VkHXYRskbg+IIvvEj\n" +
+        "zJkd1ioPgyAVWCeCLvriIsJJsbkBgWqdbZ1Ad2h2TiEqbYRAhU52mXyC8/O3AlnU\n" +
+        "JgEbjt+tUwbRrhjd4rI6y9eIOI6sWym5GdOY+RgDz0iChmYLG2kPyes4iHomGgVM\n" +
+        "ktck1JbyrFIto0fVUvY//s6EBnCmqj6i8rZWNBhXouSBbefK8GrTx5FrAoNBfBXv\n" +
+        "a5pkXuPQPOWx63tdhvvL5ndJzaNl3Pe5nLjkC1+Tz8wwGjIczhxjlaX56uF0i57p\n" +
+        "K6kwe6AYHw4YC+VbqdPRbB4HZ4+RS6mKvNJmqpMBiLKR+jFc1abBUggJzQpjotMi\n" +
+        "puih2TkGl/VujQKQjBR7P4DNG5y6xFhyI6+2Vp/GekIzKQc/gsnmHwUNzUwoNovT\n" +
+        "yD4cxojvXu6JZOkd69qJfjKmadHdzIif0dDJZiHcBmfFlHqabWJMfczgZICynkeO\n" +
+        "owIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV\n" +
+        "HQ4EFgQUiGi/4I41xDs4a2L3KDuEgcgM100wDQYJKoZIhvcNAQEFBQADggIBADsC\n" +
+        "jcs8MOhuoK3yc7NfniUTBAXT9uOLuwt5zlPe5JbF0a9zvNXD0EBVfEB/zRtfCdXy\n" +
+        "fJ9oHbtdzno5wozWmHvFg1Wo1X1AyuAe94leY12hE8JdiraKfADzI8PthV9xdvBo\n" +
+        "Y6pFITlIYXg23PFDk9Qlx/KAZeFTAnVR/Ho67zerhChXDNjU1JlWbOOi/lmEtDHo\n" +
+        "M/hklJRRl6s5xUvt2t2AC298KQ3EjopyDedTFLJgQT2EkTFoPSdE2+Xe9PpjRchM\n" +
+        "Ppj1P0G6Tss3DbpmmPHdy59c91Q2gmssvBNhl0L4eLvMyKKfyvBovWsdst+Nbwed\n" +
+        "2o5nx0ceyrm/KkKRt2NTZvFCo+H0Wk1Ya7XkpDOtXHAd3ODy63MUkZoDweoAZbwH\n" +
+        "/M8SESIsrqC9OuCiKthZ6SnTGDWkrBFfGbW1G/8iSlzGeuQX7yCpp/Q/rYqnmgQl\n" +
+        "nQ7KN+ZQ/YxCKQSa7LnPS3K94gg2ryMvYuXKAdNw23yCIywWMQzGNgeQerEfZ1jE\n" +
+        "O1hZibCMjFCz2IbLaKPECudpSyDOwR5WS5WpI2jYMNjD67BVUc3l/Su49bsRn1NU\n" +
+        "9jQZjHkJNsphFyUXC4KYcwx3dMPVDceoEkzHp1RxRy4sGn3J4ys7SN4nhKdjNrN9\n" +
+        "j6BkOSQNPXuHr2ZcdBtLc7LljPCGmbjlxd+Ewbfr\n" +
+        "-----END CERTIFICATE-----";
+
+    // DigiNotar Public CA 2025, intermediate certificate
+    static String intermediateCertStr =
+        "-----BEGIN CERTIFICATE-----\n" +
+        "MIIGAzCCA+ugAwIBAgIQHn16Uz1FMEGWQA9xSB9FBDANBgkqhkiG9w0BAQUFADBf\n" +
+        "MQswCQYDVQQGEwJOTDESMBAGA1UEChMJRGlnaU5vdGFyMRowGAYDVQQDExFEaWdp\n" +
+        "Tm90YXIgUm9vdCBDQTEgMB4GCSqGSIb3DQEJARYRaW5mb0BkaWdpbm90YXIubmww\n" +
+        "HhcNMDYwMjA2MTYwNzAyWhcNMjUwMzI4MTYwNzAyWjBmMQswCQYDVQQGEwJOTDES\n" +
+        "MBAGA1UEChMJRGlnaU5vdGFyMSEwHwYDVQQDExhEaWdpTm90YXIgUHVibGljIENB\n" +
+        "IDIwMjUxIDAeBgkqhkiG9w0BCQEWEWluZm9AZGlnaW5vdGFyLm5sMIIBIjANBgkq\n" +
+        "hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/2eu/I5fMG8lbvPph3e8zfJpZQtg/72\n" +
+        "Yx29+ivtKehiF6A3n785XyoY6IT3vlCrhy1CbMOY3M0x1n4YQlv17B0XZ/DqHyBA\n" +
+        "SQvnDNbkM9j4NoSy/sRtGsP6PetIFFjrhE9whZuvuSUC1PY4PruEEJp8zOCx4+wU\n" +
+        "Zt9xvjy4Xra+bSia5rwccQ/R5FYTGKrYCthOy9C9ud5Fhd++rlVhgdA/78w+Cs2s\n" +
+        "xS4i0MAxG75P3/e/bATJKepbydHdDjkyz9o3RW/wdPUXhzEw4EwUjYg6XJrDzMad\n" +
+        "6aL9M/eaxDjgz6o48EaWRDrGptaE2uJRuErVz7oOO0p/wYKq/BU+/wIDAQABo4IB\n" +
+        "sjCCAa4wOgYIKwYBBQUHAQEELjAsMCoGCCsGAQUFBzABhh5odHRwOi8vdmFsaWRh\n" +
+        "dGlvbi5kaWdpbm90YXIubmwwHwYDVR0jBBgwFoAUiGi/4I41xDs4a2L3KDuEgcgM\n" +
+        "100wEgYDVR0TAQH/BAgwBgEB/wIBADCBxgYDVR0gBIG+MIG7MIG4Bg5ghBABh2kB\n" +
+        "AQEBBQIGBDCBpTAnBggrBgEFBQcCARYbaHR0cDovL3d3dy5kaWdpbm90YXIubmwv\n" +
+        "Y3BzMHoGCCsGAQUFBwICMG4abENvbmRpdGlvbnMsIGFzIG1lbnRpb25lZCBvbiBv\n" +
+        "dXIgd2Vic2l0ZSAod3d3LmRpZ2lub3Rhci5ubCksIGFyZSBhcHBsaWNhYmxlIHRv\n" +
+        "IGFsbCBvdXIgcHJvZHVjdHMgYW5kIHNlcnZpY2VzLjBDBgNVHR8EPDA6MDigNqA0\n" +
+        "hjJodHRwOi8vc2VydmljZS5kaWdpbm90YXIubmwvY3JsL3Jvb3QvbGF0ZXN0Q1JM\n" +
+        "LmNybDAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFN8zwK+S/jf8ttgWFtDZsZHV\n" +
+        "+m6lMA0GCSqGSIb3DQEBBQUAA4ICAQCfV1rmBd9QStEyQ40lT0tqby0/3ez0STuJ\n" +
+        "ESBQLQD56XYdb4VFSuqA6xTtiuSVHLoiv2xyISN9FvX3A5VtifkJ00JEaLQJiSsE\n" +
+        "wGDkYGl1DT7SsqtAVKdMAuCM+e0j0/RV3hZ6kcrM7/wFccHwM+/TiurR9lgZDzB4\n" +
+        "a7++A4XrYyKx9vc9ZwBEnD1nrAe7++gg9cuZgP7e+QL0FBHMjpw+gnCDjr2dzBZC\n" +
+        "4r+b8SOqlbPRPexBuNghlc7PfcPIyFis2LJXDRMWiAd3TcfdALwRsuKMR/T+cwyr\n" +
+        "asy69OEGHplLT57otQ524BDctDXNzlH9bHEh52QzqkWvIDqs42910IUy1nYNPIUG\n" +
+        "yYJV/T7H8Jb6vfMZWe47iUFvtNZCi8+b542gRUwdi+ca+hGviBC9Qr4Wv1pl7CBQ\n" +
+        "Hy1axTkHiQawUo/hgmoetCpftugl9yJTfvsBorUV1ZMxn9B1JLSGtWnbUsFRla7G\n" +
+        "fNa0IsUkzmmha8XCzvNu0d1PDGtcQyUqmDOE1Hx4cIBeuF8ipuIXkrVCr9zAZ4ZC\n" +
+        "hgz6aA1gDTW8whSRJqYEYEQ0pcMEFLyXE+Nz3O8NinO2AuxqKhjMk13203xA7lPY\n" +
+        "MnBQ0v7S3qqbp/pvPMiUhOz/VaYted6QmOY5EATBnFiLCuw87JXoAyp382eJ3WX1\n" +
+        "hOiR4IX9Tg==\n" +
+        "-----END CERTIFICATE-----";
+
+    // The fraudulent certificate issued by above compromised CA
+    static String targetCertStr =
+        "-----BEGIN CERTIFICATE-----\n" +
+        "MIIFKDCCBBCgAwIBAgIQBeLmpM0J6lTWZbB1/iKiVjANBgkqhkiG9w0BAQUFADBm\n" +
+        "MQswCQYDVQQGEwJOTDESMBAGA1UEChMJRGlnaU5vdGFyMSEwHwYDVQQDExhEaWdp\n" +
+        "Tm90YXIgUHVibGljIENBIDIwMjUxIDAeBgkqhkiG9w0BCQEWEWluZm9AZGlnaW5v\n" +
+        "dGFyLm5sMB4XDTExMDcxMDE5MDYzMFoXDTEzMDcwOTE5MDYzMFowajELMAkGA1UE\n" +
+        "BhMCVVMxEzARBgNVBAoTCkdvb2dsZSBJbmMxFjAUBgNVBAcTDU1vdW50YWluIFZp\n" +
+        "ZXcxFzAVBgNVBAUTDlBLMDAwMjI5MjAwMDAyMRUwEwYDVQQDEwwqLmdvb2dsZS5j\n" +
+        "b20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDNbeKubCV0aCxhOiOS\n" +
+        "CSQ/w9HXTYuD5BLKuiqXNw3setdTymeJz2L8aWOHo3nicFNDVwWTgwWomGNr2J6Q\n" +
+        "7g1iINNSW0rR4E1l2szRkcnAY6c6i/Eke93nF4i2hDsnIBveolF5yjpuRm73uQQD\n" +
+        "ulHjA3BFRF/PTi0fw2/Yt+8ieoMuNcMWN6Eou5Gqt5YZkWv176ofeCbsBmMrP87x\n" +
+        "OhhtTDckCapk4VQZG2XrfzZcV6tdzCp5TI8uHdu17cdzXm1imZ8tyvzFeiCEOQN8\n" +
+        "vPNzB/fIr3CJQ5q4uM5aKT3DD5PeVzf4rfJKQNgCTWiIBc9XcWEUuszwAsnmg7e2\n" +
+        "EJRdAgMBAAGjggHMMIIByDA6BggrBgEFBQcBAQQuMCwwKgYIKwYBBQUHMAGGHmh0\n" +
+        "dHA6Ly92YWxpZGF0aW9uLmRpZ2lub3Rhci5ubDAfBgNVHSMEGDAWgBTfM8Cvkv43\n" +
+        "/LbYFhbQ2bGR1fpupTAJBgNVHRMEAjAAMIHGBgNVHSAEgb4wgbswgbgGDmCEEAGH\n" +
+        "aQEBAQIEAQICMIGlMCcGCCsGAQUFBwIBFhtodHRwOi8vd3d3LmRpZ2lub3Rhci5u\n" +
+        "bC9jcHMwegYIKwYBBQUHAgIwbhpsQ29uZGl0aW9ucywgYXMgbWVudGlvbmVkIG9u\n" +
+        "IG91ciB3ZWJzaXRlICh3d3cuZGlnaW5vdGFyLm5sKSwgYXJlIGFwcGxpY2FibGUg\n" +
+        "dG8gYWxsIG91ciBwcm9kdWN0cyBhbmQgc2VydmljZXMuMEkGA1UdHwRCMEAwPqA8\n" +
+        "oDqGOGh0dHA6Ly9zZXJ2aWNlLmRpZ2lub3Rhci5ubC9jcmwvcHVibGljMjAyNS9s\n" +
+        "YXRlc3RDUkwuY3JsMA4GA1UdDwEB/wQEAwIEsDAbBgNVHREEFDASgRBhZG1pbkBn\n" +
+        "b29nbGUuY29tMB0GA1UdDgQWBBQHSn0WJzIo0eMBMQUNsMqN6eF/7TANBgkqhkiG\n" +
+        "9w0BAQUFAAOCAQEAAs5dL7N9wzRJkI4Aq4lC5t8j5ZadqnqUcgYLADzSv4ExytNH\n" +
+        "UY2nH6iVTihC0UPSsILWraoeApdT7Rphz/8DLQEBRGdeKWAptNM3EbiXtQaZT2uB\n" +
+        "pidL8UoafX0kch3f71Y1scpBEjvu5ZZLnjg0A8AL0tnsereOVdDpU98bKqdbbrnM\n" +
+        "FRmBlSf7xdaNca6JJHeEpga4E9Ty683CmccrSGXdU2tTCuHEJww+iOAUtPIZcsum\n" +
+        "U7/eYeY1pMyGLyIjbNgRY7nDzRwvM/BsbL9eh4/mSQj/4nncqJd22sVQpCggQiVK\n" +
+        "baB2sVGcVNBkK55bT8gPqnx8JypubyUvayzZGg==\n" +
+        "-----END CERTIFICATE-----";
+
+    public static void main(String args[]) throws Exception {
+
+        Exception reservedException = null;
+        try {
+            build();
+        } catch (CertPathBuilderException cpbe) {
+            reservedException = cpbe;
+        }
+
+        if (reservedException == null) {
+            throw new Exception("Unable to block fraudulent certificate");
+        }
+
+        System.out.println(
+            "The expected untrusted cert exception: " + reservedException);
+    }
+
+    private static X509CertSelector generateSelector() throws Exception {
+
+        // generate certificate from cert strings
+        CertificateFactory cf = CertificateFactory.getInstance("X.509");
+
+        X509Certificate target = null;
+        try (ByteArrayInputStream is =
+                new ByteArrayInputStream(targetCertStr.getBytes())) {
+            target = (X509Certificate)cf.generateCertificate(is);
+        }
+
+        X509CertSelector selector = new X509CertSelector();
+        selector.setCertificate(target);
+
+        return selector;
+    }
+
+
+    private static CertStore generateCertificateStore() throws Exception {
+
+        // generate certificate from cert strings
+        CertificateFactory cf = CertificateFactory.getInstance("X.509");
+
+        // generate certification path
+        Set<Certificate> entries = new HashSet();
+
+        try (ByteArrayInputStream is =
+                new ByteArrayInputStream(targetCertStr.getBytes())) {
+            entries.add(cf.generateCertificate(is));
+        }
+
+        try (ByteArrayInputStream is =
+                new ByteArrayInputStream(intermediateCertStr.getBytes())) {
+            entries.add(cf.generateCertificate(is));
+        }
+
+        try (ByteArrayInputStream is =
+                new ByteArrayInputStream(compromisedCertStr.getBytes())) {
+            entries.add(cf.generateCertificate(is));
+        }
+
+        try (ByteArrayInputStream is =
+                new ByteArrayInputStream(untrustedCrossCertStr.getBytes())) {
+            entries.add(cf.generateCertificate(is));
+        }
+
+        return CertStore.getInstance("Collection",
+                            new CollectionCertStoreParameters(entries));
+    }
+
+    private static Set<TrustAnchor> generateTrustAnchors()
+            throws CertificateException, IOException {
+        // generate certificate from cert string
+        CertificateFactory cf = CertificateFactory.getInstance("X.509");
+
+        Certificate trustedCert = null;
+        try (ByteArrayInputStream is =
+                new ByteArrayInputStream(trustedCertStr.getBytes())) {
+            trustedCert = cf.generateCertificate(is);
+        }
+
+        // generate a trust anchor
+        TrustAnchor anchor =
+            new TrustAnchor((X509Certificate)trustedCert, null);
+
+        return Collections.singleton(anchor);
+    }
+
+    private static void build() throws Exception {
+        X509CertSelector selector = generateSelector();
+        Set<TrustAnchor> anchors = generateTrustAnchors();
+        CertStore certs = generateCertificateStore();
+
+        PKIXBuilderParameters params =
+                new PKIXBuilderParameters(anchors, selector);
+        params.addCertStore(certs);
+        params.setRevocationEnabled(false);
+        params.setDate(new Date(111, 11, 25));   // 2011-12-25
+
+        CertPathBuilder builder = CertPathBuilder.getInstance("PKIX");
+        PKIXCertPathBuilderResult result =
+                        (PKIXCertPathBuilderResult)builder.build(params);
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/sun/security/provider/certpath/X509CertPath/ReverseBuildCompromised.java	Wed May 02 15:06:35 2012 +0100
@@ -0,0 +1,315 @@
+/*
+ * Copyright (c) 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 7123519
+ * @summary Problem with java/classes_security
+ */
+
+import java.net.*;
+import java.util.*;
+import java.io.*;
+import javax.net.ssl.*;
+import java.security.KeyStore;
+import java.security.cert.*;
+import java.security.spec.*;
+import java.security.interfaces.*;
+import sun.security.provider.certpath.SunCertPathBuilderParameters;
+
+public class ReverseBuildCompromised {
+    // DigiNotar Root CA, untrusted root certificate
+    static String trustedCertStr =
+        "-----BEGIN CERTIFICATE-----\n" +
+        "MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC\n" +
+        "VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u\n" +
+        "ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc\n" +
+        "KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u\n" +
+        "ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05OTA1\n" +
+        "MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIGA1UE\n" +
+        "ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5j\n" +
+        "b3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF\n" +
+        "bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg\n" +
+        "U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUA\n" +
+        "A4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/\n" +
+        "I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3\n" +
+        "wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OC\n" +
+        "AdcwggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHb\n" +
+        "oIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5\n" +
+        "BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p\n" +
+        "dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk\n" +
+        "MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp\n" +
+        "b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu\n" +
+        "dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0\n" +
+        "MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8Bdi\n" +
+        "E1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAa\n" +
+        "MAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI\n" +
+        "hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN\n" +
+        "95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd\n" +
+        "2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=\n" +
+        "-----END CERTIFICATE-----";
+
+    // DigiNotar Root CA, untrusted cross-certificate
+    static String untrustedCrossCertStr =
+        "-----BEGIN CERTIFICATE-----\n" +
+        "MIIFSDCCBLGgAwIBAgIERpwsrzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC\n" +
+        "VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u\n" +
+        "ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc\n" +
+        "KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u\n" +
+        "ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNzA3\n" +
+        "MjYxNTU3MzlaFw0xMzA4MjYxNjI3MzlaMF8xCzAJBgNVBAYTAk5MMRIwEAYDVQQK\n" +
+        "EwlEaWdpTm90YXIxGjAYBgNVBAMTEURpZ2lOb3RhciBSb290IENBMSAwHgYJKoZI\n" +
+        "hvcNAQkBFhFpbmZvQGRpZ2lub3Rhci5ubDCCAiIwDQYJKoZIhvcNAQEBBQADggIP\n" +
+        "ADCCAgoCggIBAKywWMEAvdghCAsrmv5uVjAFnxt3kBBBXMMNhxF3joHxynzpjGrt\n" +
+        "OHQ1u9rf+bvACTe0lnOBfTMamDn3k2+Vfz25sXWHulFI6ItwPpUExdi2wxbZiLCx\n" +
+        "hx1w2oa0DxSLes8Q0XQ2ohJ7d4ZKeeZ73wIRaKVOhq40WJskE3hWIiUeAYtLUXH7\n" +
+        "gsxZlmmIWmhTxbkNAjfLS7xmSpB+KgsFB+0WX1WQddhGyRuD4gi+8SPMmR3WKg+D\n" +
+        "IBVYJ4Iu+uIiwkmxuQGBap1tnUB3aHZOISpthECFTnaZfILz87cCWdQmARuO361T\n" +
+        "BtGuGN3isjrL14g4jqxbKbkZ05j5GAPPSIKGZgsbaQ/J6ziIeiYaBUyS1yTUlvKs\n" +
+        "Ui2jR9VS9j/+zoQGcKaqPqLytlY0GFei5IFt58rwatPHkWsCg0F8Fe9rmmRe49A8\n" +
+        "5bHre12G+8vmd0nNo2Xc97mcuOQLX5PPzDAaMhzOHGOVpfnq4XSLnukrqTB7oBgf\n" +
+        "DhgL5Vup09FsHgdnj5FLqYq80maqkwGIspH6MVzVpsFSCAnNCmOi0yKm6KHZOQaX\n" +
+        "9W6NApCMFHs/gM0bnLrEWHIjr7ZWn8Z6QjMpBz+CyeYfBQ3NTCg2i9PIPhzGiO9e\n" +
+        "7olk6R3r2ol+MqZp0d3MiJ/R0MlmIdwGZ8WUepptYkx9zOBkgLKeR46jAgMBAAGj\n" +
+        "ggEmMIIBIjASBgNVHRMBAf8ECDAGAQH/AgEBMCcGA1UdJQQgMB4GCCsGAQUFBwMB\n" +
+        "BggrBgEFBQcDAgYIKwYBBQUHAwQwEQYDVR0gBAowCDAGBgRVHSAAMDMGCCsGAQUF\n" +
+        "BwEBBCcwJTAjBggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMwYD\n" +
+        "VR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5lbnRydXN0Lm5ldC9zZXJ2ZXIxLmNy\n" +
+        "bDAdBgNVHQ4EFgQUiGi/4I41xDs4a2L3KDuEgcgM100wCwYDVR0PBAQDAgEGMB8G\n" +
+        "A1UdIwQYMBaAFPAXYhNVPbP/CgBr+1CEl/PtYtAaMBkGCSqGSIb2fQdBAAQMMAob\n" +
+        "BFY3LjEDAgCBMA0GCSqGSIb3DQEBBQUAA4GBAEa6RcDNcEIGUlkDJUY/pWTds4zh\n" +
+        "xbVkp3wSmpwPFhx5fxTyF4HD2L60jl3aqjTB7gPpsL2Pk5QZlNsi3t4UkCV70UOd\n" +
+        "ueJRN3o/LOtk4+bjXY2lC0qTHbN80VMLqPjmaf9ghSA9hwhskdtMgRsgfd90q5QP\n" +
+        "ZFdYf+hthc3m6IcJ\n" +
+        "-----END CERTIFICATE-----";
+
+    // DigiNotar Root CA, compromised certificate
+    static String compromisedCertStr =
+        "-----BEGIN CERTIFICATE-----\n" +
+        "MIIFijCCA3KgAwIBAgIQDHbanJEMTiye/hXQWJM8TDANBgkqhkiG9w0BAQUFADBf\n" +
+        "MQswCQYDVQQGEwJOTDESMBAGA1UEChMJRGlnaU5vdGFyMRowGAYDVQQDExFEaWdp\n" +
+        "Tm90YXIgUm9vdCBDQTEgMB4GCSqGSIb3DQEJARYRaW5mb0BkaWdpbm90YXIubmww\n" +
+        "HhcNMDcwNTE2MTcxOTM2WhcNMjUwMzMxMTgxOTIxWjBfMQswCQYDVQQGEwJOTDES\n" +
+        "MBAGA1UEChMJRGlnaU5vdGFyMRowGAYDVQQDExFEaWdpTm90YXIgUm9vdCBDQTEg\n" +
+        "MB4GCSqGSIb3DQEJARYRaW5mb0BkaWdpbm90YXIubmwwggIiMA0GCSqGSIb3DQEB\n" +
+        "AQUAA4ICDwAwggIKAoICAQCssFjBAL3YIQgLK5r+blYwBZ8bd5AQQVzDDYcRd46B\n" +
+        "8cp86Yxq7Th0Nbva3/m7wAk3tJZzgX0zGpg595NvlX89ubF1h7pRSOiLcD6VBMXY\n" +
+        "tsMW2YiwsYcdcNqGtA8Ui3rPENF0NqISe3eGSnnme98CEWilToauNFibJBN4ViIl\n" +
+        "HgGLS1Fx+4LMWZZpiFpoU8W5DQI3y0u8ZkqQfioLBQftFl9VkHXYRskbg+IIvvEj\n" +
+        "zJkd1ioPgyAVWCeCLvriIsJJsbkBgWqdbZ1Ad2h2TiEqbYRAhU52mXyC8/O3AlnU\n" +
+        "JgEbjt+tUwbRrhjd4rI6y9eIOI6sWym5GdOY+RgDz0iChmYLG2kPyes4iHomGgVM\n" +
+        "ktck1JbyrFIto0fVUvY//s6EBnCmqj6i8rZWNBhXouSBbefK8GrTx5FrAoNBfBXv\n" +
+        "a5pkXuPQPOWx63tdhvvL5ndJzaNl3Pe5nLjkC1+Tz8wwGjIczhxjlaX56uF0i57p\n" +
+        "K6kwe6AYHw4YC+VbqdPRbB4HZ4+RS6mKvNJmqpMBiLKR+jFc1abBUggJzQpjotMi\n" +
+        "puih2TkGl/VujQKQjBR7P4DNG5y6xFhyI6+2Vp/GekIzKQc/gsnmHwUNzUwoNovT\n" +
+        "yD4cxojvXu6JZOkd69qJfjKmadHdzIif0dDJZiHcBmfFlHqabWJMfczgZICynkeO\n" +
+        "owIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV\n" +
+        "HQ4EFgQUiGi/4I41xDs4a2L3KDuEgcgM100wDQYJKoZIhvcNAQEFBQADggIBADsC\n" +
+        "jcs8MOhuoK3yc7NfniUTBAXT9uOLuwt5zlPe5JbF0a9zvNXD0EBVfEB/zRtfCdXy\n" +
+        "fJ9oHbtdzno5wozWmHvFg1Wo1X1AyuAe94leY12hE8JdiraKfADzI8PthV9xdvBo\n" +
+        "Y6pFITlIYXg23PFDk9Qlx/KAZeFTAnVR/Ho67zerhChXDNjU1JlWbOOi/lmEtDHo\n" +
+        "M/hklJRRl6s5xUvt2t2AC298KQ3EjopyDedTFLJgQT2EkTFoPSdE2+Xe9PpjRchM\n" +
+        "Ppj1P0G6Tss3DbpmmPHdy59c91Q2gmssvBNhl0L4eLvMyKKfyvBovWsdst+Nbwed\n" +
+        "2o5nx0ceyrm/KkKRt2NTZvFCo+H0Wk1Ya7XkpDOtXHAd3ODy63MUkZoDweoAZbwH\n" +
+        "/M8SESIsrqC9OuCiKthZ6SnTGDWkrBFfGbW1G/8iSlzGeuQX7yCpp/Q/rYqnmgQl\n" +
+        "nQ7KN+ZQ/YxCKQSa7LnPS3K94gg2ryMvYuXKAdNw23yCIywWMQzGNgeQerEfZ1jE\n" +
+        "O1hZibCMjFCz2IbLaKPECudpSyDOwR5WS5WpI2jYMNjD67BVUc3l/Su49bsRn1NU\n" +
+        "9jQZjHkJNsphFyUXC4KYcwx3dMPVDceoEkzHp1RxRy4sGn3J4ys7SN4nhKdjNrN9\n" +
+        "j6BkOSQNPXuHr2ZcdBtLc7LljPCGmbjlxd+Ewbfr\n" +
+        "-----END CERTIFICATE-----";
+
+    // DigiNotar Public CA 2025, intermediate certificate
+    static String intermediateCertStr =
+        "-----BEGIN CERTIFICATE-----\n" +
+        "MIIGAzCCA+ugAwIBAgIQHn16Uz1FMEGWQA9xSB9FBDANBgkqhkiG9w0BAQUFADBf\n" +
+        "MQswCQYDVQQGEwJOTDESMBAGA1UEChMJRGlnaU5vdGFyMRowGAYDVQQDExFEaWdp\n" +
+        "Tm90YXIgUm9vdCBDQTEgMB4GCSqGSIb3DQEJARYRaW5mb0BkaWdpbm90YXIubmww\n" +
+        "HhcNMDYwMjA2MTYwNzAyWhcNMjUwMzI4MTYwNzAyWjBmMQswCQYDVQQGEwJOTDES\n" +
+        "MBAGA1UEChMJRGlnaU5vdGFyMSEwHwYDVQQDExhEaWdpTm90YXIgUHVibGljIENB\n" +
+        "IDIwMjUxIDAeBgkqhkiG9w0BCQEWEWluZm9AZGlnaW5vdGFyLm5sMIIBIjANBgkq\n" +
+        "hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/2eu/I5fMG8lbvPph3e8zfJpZQtg/72\n" +
+        "Yx29+ivtKehiF6A3n785XyoY6IT3vlCrhy1CbMOY3M0x1n4YQlv17B0XZ/DqHyBA\n" +
+        "SQvnDNbkM9j4NoSy/sRtGsP6PetIFFjrhE9whZuvuSUC1PY4PruEEJp8zOCx4+wU\n" +
+        "Zt9xvjy4Xra+bSia5rwccQ/R5FYTGKrYCthOy9C9ud5Fhd++rlVhgdA/78w+Cs2s\n" +
+        "xS4i0MAxG75P3/e/bATJKepbydHdDjkyz9o3RW/wdPUXhzEw4EwUjYg6XJrDzMad\n" +
+        "6aL9M/eaxDjgz6o48EaWRDrGptaE2uJRuErVz7oOO0p/wYKq/BU+/wIDAQABo4IB\n" +
+        "sjCCAa4wOgYIKwYBBQUHAQEELjAsMCoGCCsGAQUFBzABhh5odHRwOi8vdmFsaWRh\n" +
+        "dGlvbi5kaWdpbm90YXIubmwwHwYDVR0jBBgwFoAUiGi/4I41xDs4a2L3KDuEgcgM\n" +
+        "100wEgYDVR0TAQH/BAgwBgEB/wIBADCBxgYDVR0gBIG+MIG7MIG4Bg5ghBABh2kB\n" +
+        "AQEBBQIGBDCBpTAnBggrBgEFBQcCARYbaHR0cDovL3d3dy5kaWdpbm90YXIubmwv\n" +
+        "Y3BzMHoGCCsGAQUFBwICMG4abENvbmRpdGlvbnMsIGFzIG1lbnRpb25lZCBvbiBv\n" +
+        "dXIgd2Vic2l0ZSAod3d3LmRpZ2lub3Rhci5ubCksIGFyZSBhcHBsaWNhYmxlIHRv\n" +
+        "IGFsbCBvdXIgcHJvZHVjdHMgYW5kIHNlcnZpY2VzLjBDBgNVHR8EPDA6MDigNqA0\n" +
+        "hjJodHRwOi8vc2VydmljZS5kaWdpbm90YXIubmwvY3JsL3Jvb3QvbGF0ZXN0Q1JM\n" +
+        "LmNybDAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFN8zwK+S/jf8ttgWFtDZsZHV\n" +
+        "+m6lMA0GCSqGSIb3DQEBBQUAA4ICAQCfV1rmBd9QStEyQ40lT0tqby0/3ez0STuJ\n" +
+        "ESBQLQD56XYdb4VFSuqA6xTtiuSVHLoiv2xyISN9FvX3A5VtifkJ00JEaLQJiSsE\n" +
+        "wGDkYGl1DT7SsqtAVKdMAuCM+e0j0/RV3hZ6kcrM7/wFccHwM+/TiurR9lgZDzB4\n" +
+        "a7++A4XrYyKx9vc9ZwBEnD1nrAe7++gg9cuZgP7e+QL0FBHMjpw+gnCDjr2dzBZC\n" +
+        "4r+b8SOqlbPRPexBuNghlc7PfcPIyFis2LJXDRMWiAd3TcfdALwRsuKMR/T+cwyr\n" +
+        "asy69OEGHplLT57otQ524BDctDXNzlH9bHEh52QzqkWvIDqs42910IUy1nYNPIUG\n" +
+        "yYJV/T7H8Jb6vfMZWe47iUFvtNZCi8+b542gRUwdi+ca+hGviBC9Qr4Wv1pl7CBQ\n" +
+        "Hy1axTkHiQawUo/hgmoetCpftugl9yJTfvsBorUV1ZMxn9B1JLSGtWnbUsFRla7G\n" +
+        "fNa0IsUkzmmha8XCzvNu0d1PDGtcQyUqmDOE1Hx4cIBeuF8ipuIXkrVCr9zAZ4ZC\n" +
+        "hgz6aA1gDTW8whSRJqYEYEQ0pcMEFLyXE+Nz3O8NinO2AuxqKhjMk13203xA7lPY\n" +
+        "MnBQ0v7S3qqbp/pvPMiUhOz/VaYted6QmOY5EATBnFiLCuw87JXoAyp382eJ3WX1\n" +
+        "hOiR4IX9Tg==\n" +
+        "-----END CERTIFICATE-----";
+
+    // The fraudulent certificate issued by above compromised CA
+    static String targetCertStr =
+        "-----BEGIN CERTIFICATE-----\n" +
+        "MIIFKDCCBBCgAwIBAgIQBeLmpM0J6lTWZbB1/iKiVjANBgkqhkiG9w0BAQUFADBm\n" +
+        "MQswCQYDVQQGEwJOTDESMBAGA1UEChMJRGlnaU5vdGFyMSEwHwYDVQQDExhEaWdp\n" +
+        "Tm90YXIgUHVibGljIENBIDIwMjUxIDAeBgkqhkiG9w0BCQEWEWluZm9AZGlnaW5v\n" +
+        "dGFyLm5sMB4XDTExMDcxMDE5MDYzMFoXDTEzMDcwOTE5MDYzMFowajELMAkGA1UE\n" +
+        "BhMCVVMxEzARBgNVBAoTCkdvb2dsZSBJbmMxFjAUBgNVBAcTDU1vdW50YWluIFZp\n" +
+        "ZXcxFzAVBgNVBAUTDlBLMDAwMjI5MjAwMDAyMRUwEwYDVQQDEwwqLmdvb2dsZS5j\n" +
+        "b20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDNbeKubCV0aCxhOiOS\n" +
+        "CSQ/w9HXTYuD5BLKuiqXNw3setdTymeJz2L8aWOHo3nicFNDVwWTgwWomGNr2J6Q\n" +
+        "7g1iINNSW0rR4E1l2szRkcnAY6c6i/Eke93nF4i2hDsnIBveolF5yjpuRm73uQQD\n" +
+        "ulHjA3BFRF/PTi0fw2/Yt+8ieoMuNcMWN6Eou5Gqt5YZkWv176ofeCbsBmMrP87x\n" +
+        "OhhtTDckCapk4VQZG2XrfzZcV6tdzCp5TI8uHdu17cdzXm1imZ8tyvzFeiCEOQN8\n" +
+        "vPNzB/fIr3CJQ5q4uM5aKT3DD5PeVzf4rfJKQNgCTWiIBc9XcWEUuszwAsnmg7e2\n" +
+        "EJRdAgMBAAGjggHMMIIByDA6BggrBgEFBQcBAQQuMCwwKgYIKwYBBQUHMAGGHmh0\n" +
+        "dHA6Ly92YWxpZGF0aW9uLmRpZ2lub3Rhci5ubDAfBgNVHSMEGDAWgBTfM8Cvkv43\n" +
+        "/LbYFhbQ2bGR1fpupTAJBgNVHRMEAjAAMIHGBgNVHSAEgb4wgbswgbgGDmCEEAGH\n" +
+        "aQEBAQIEAQICMIGlMCcGCCsGAQUFBwIBFhtodHRwOi8vd3d3LmRpZ2lub3Rhci5u\n" +
+        "bC9jcHMwegYIKwYBBQUHAgIwbhpsQ29uZGl0aW9ucywgYXMgbWVudGlvbmVkIG9u\n" +
+        "IG91ciB3ZWJzaXRlICh3d3cuZGlnaW5vdGFyLm5sKSwgYXJlIGFwcGxpY2FibGUg\n" +
+        "dG8gYWxsIG91ciBwcm9kdWN0cyBhbmQgc2VydmljZXMuMEkGA1UdHwRCMEAwPqA8\n" +
+        "oDqGOGh0dHA6Ly9zZXJ2aWNlLmRpZ2lub3Rhci5ubC9jcmwvcHVibGljMjAyNS9s\n" +
+        "YXRlc3RDUkwuY3JsMA4GA1UdDwEB/wQEAwIEsDAbBgNVHREEFDASgRBhZG1pbkBn\n" +
+        "b29nbGUuY29tMB0GA1UdDgQWBBQHSn0WJzIo0eMBMQUNsMqN6eF/7TANBgkqhkiG\n" +
+        "9w0BAQUFAAOCAQEAAs5dL7N9wzRJkI4Aq4lC5t8j5ZadqnqUcgYLADzSv4ExytNH\n" +
+        "UY2nH6iVTihC0UPSsILWraoeApdT7Rphz/8DLQEBRGdeKWAptNM3EbiXtQaZT2uB\n" +
+        "pidL8UoafX0kch3f71Y1scpBEjvu5ZZLnjg0A8AL0tnsereOVdDpU98bKqdbbrnM\n" +
+        "FRmBlSf7xdaNca6JJHeEpga4E9Ty683CmccrSGXdU2tTCuHEJww+iOAUtPIZcsum\n" +
+        "U7/eYeY1pMyGLyIjbNgRY7nDzRwvM/BsbL9eh4/mSQj/4nncqJd22sVQpCggQiVK\n" +
+        "baB2sVGcVNBkK55bT8gPqnx8JypubyUvayzZGg==\n" +
+        "-----END CERTIFICATE-----";
+
+    public static void main(String args[]) throws Exception {
+
+        Exception reservedException = null;
+        try {
+            build();
+        } catch (CertPathBuilderException cpbe) {
+            reservedException = cpbe;
+        }
+
+        if (reservedException == null) {
+            throw new Exception("Unable to block fraudulent certificate");
+        }
+
+        System.out.println(
+            "The expected untrusted cert exception: " + reservedException);
+    }
+
+    private static X509CertSelector generateSelector() throws Exception {
+
+        // generate certificate from cert strings
+        CertificateFactory cf = CertificateFactory.getInstance("X.509");
+
+        X509Certificate target = null;
+        try (ByteArrayInputStream is =
+                new ByteArrayInputStream(targetCertStr.getBytes())) {
+            target = (X509Certificate)cf.generateCertificate(is);
+        }
+
+        X509CertSelector selector = new X509CertSelector();
+        selector.setCertificate(target);
+        selector.setSubject(target.getSubjectX500Principal());
+
+        return selector;
+    }
+
+
+    private static CertStore generateCertificateStore() throws Exception {
+
+        // generate certificate from cert strings
+        CertificateFactory cf = CertificateFactory.getInstance("X.509");
+
+        // generate certification path
+        Set<Certificate> entries = new HashSet();
+
+        try (ByteArrayInputStream is =
+                new ByteArrayInputStream(targetCertStr.getBytes())) {
+            entries.add(cf.generateCertificate(is));
+        }
+
+        try (ByteArrayInputStream is =
+                new ByteArrayInputStream(intermediateCertStr.getBytes())) {
+            entries.add(cf.generateCertificate(is));
+        }
+
+        try (ByteArrayInputStream is =
+                new ByteArrayInputStream(compromisedCertStr.getBytes())) {
+            entries.add(cf.generateCertificate(is));
+        }
+
+        try (ByteArrayInputStream is =
+                new ByteArrayInputStream(untrustedCrossCertStr.getBytes())) {
+            entries.add(cf.generateCertificate(is));
+        }
+
+        return CertStore.getInstance("Collection",
+                            new CollectionCertStoreParameters(entries));
+    }
+
+    private static Set<TrustAnchor> generateTrustAnchors()
+            throws CertificateException, IOException {
+        // generate certificate from cert string
+        CertificateFactory cf = CertificateFactory.getInstance("X.509");
+
+        Certificate trustedCert = null;
+        try (ByteArrayInputStream is =
+                new ByteArrayInputStream(trustedCertStr.getBytes())) {
+            trustedCert = cf.generateCertificate(is);
+        }
+
+        // generate a trust anchor
+        TrustAnchor anchor =
+            new TrustAnchor((X509Certificate)trustedCert, null);
+
+        return Collections.singleton(anchor);
+    }
+
+    private static void build() throws Exception {
+        X509CertSelector selector = generateSelector();
+        Set<TrustAnchor> anchors = generateTrustAnchors();
+        CertStore certs = generateCertificateStore();
+
+        SunCertPathBuilderParameters params =
+            new SunCertPathBuilderParameters(anchors, selector);
+        params.setBuildForward(false);
+        params.addCertStore(certs);
+        params.setRevocationEnabled(false);
+        params.setDate(new Date(111, 11, 25));   // 2011-12-25
+
+        CertPathBuilder builder = CertPathBuilder.getInstance("PKIX");
+        PKIXCertPathBuilderResult result =
+                        (PKIXCertPathBuilderResult)builder.build(params);
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/sun/security/provider/certpath/X509CertPath/ValidateCompromised.java	Wed May 02 15:06:35 2012 +0100
@@ -0,0 +1,297 @@
+/*
+ * Copyright (c) 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 7123519
+ * @summary Problem with java/classes_security
+ */
+
+import java.net.*;
+import java.util.*;
+import java.io.*;
+import javax.net.ssl.*;
+import java.security.KeyStore;
+import java.security.cert.*;
+import java.security.spec.*;
+import java.security.interfaces.*;
+
+public class ValidateCompromised {
+    // DigiNotar Root CA, untrusted root certificate
+    static String trustedCertStr =
+        "-----BEGIN CERTIFICATE-----\n" +
+        "MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC\n" +
+        "VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u\n" +
+        "ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc\n" +
+        "KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u\n" +
+        "ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05OTA1\n" +
+        "MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIGA1UE\n" +
+        "ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5j\n" +
+        "b3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF\n" +
+        "bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg\n" +
+        "U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUA\n" +
+        "A4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/\n" +
+        "I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3\n" +
+        "wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OC\n" +
+        "AdcwggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHb\n" +
+        "oIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5\n" +
+        "BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p\n" +
+        "dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk\n" +
+        "MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp\n" +
+        "b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu\n" +
+        "dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0\n" +
+        "MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8Bdi\n" +
+        "E1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAa\n" +
+        "MAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI\n" +
+        "hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN\n" +
+        "95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd\n" +
+        "2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=\n" +
+        "-----END CERTIFICATE-----";
+
+    // DigiNotar Root CA, untrusted cross-certificate
+    static String untrustedCrossCertStr =
+        "-----BEGIN CERTIFICATE-----\n" +
+        "MIIFSDCCBLGgAwIBAgIERpwsrzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC\n" +
+        "VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u\n" +
+        "ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc\n" +
+        "KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u\n" +
+        "ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNzA3\n" +
+        "MjYxNTU3MzlaFw0xMzA4MjYxNjI3MzlaMF8xCzAJBgNVBAYTAk5MMRIwEAYDVQQK\n" +
+        "EwlEaWdpTm90YXIxGjAYBgNVBAMTEURpZ2lOb3RhciBSb290IENBMSAwHgYJKoZI\n" +
+        "hvcNAQkBFhFpbmZvQGRpZ2lub3Rhci5ubDCCAiIwDQYJKoZIhvcNAQEBBQADggIP\n" +
+        "ADCCAgoCggIBAKywWMEAvdghCAsrmv5uVjAFnxt3kBBBXMMNhxF3joHxynzpjGrt\n" +
+        "OHQ1u9rf+bvACTe0lnOBfTMamDn3k2+Vfz25sXWHulFI6ItwPpUExdi2wxbZiLCx\n" +
+        "hx1w2oa0DxSLes8Q0XQ2ohJ7d4ZKeeZ73wIRaKVOhq40WJskE3hWIiUeAYtLUXH7\n" +
+        "gsxZlmmIWmhTxbkNAjfLS7xmSpB+KgsFB+0WX1WQddhGyRuD4gi+8SPMmR3WKg+D\n" +
+        "IBVYJ4Iu+uIiwkmxuQGBap1tnUB3aHZOISpthECFTnaZfILz87cCWdQmARuO361T\n" +
+        "BtGuGN3isjrL14g4jqxbKbkZ05j5GAPPSIKGZgsbaQ/J6ziIeiYaBUyS1yTUlvKs\n" +
+        "Ui2jR9VS9j/+zoQGcKaqPqLytlY0GFei5IFt58rwatPHkWsCg0F8Fe9rmmRe49A8\n" +
+        "5bHre12G+8vmd0nNo2Xc97mcuOQLX5PPzDAaMhzOHGOVpfnq4XSLnukrqTB7oBgf\n" +
+        "DhgL5Vup09FsHgdnj5FLqYq80maqkwGIspH6MVzVpsFSCAnNCmOi0yKm6KHZOQaX\n" +
+        "9W6NApCMFHs/gM0bnLrEWHIjr7ZWn8Z6QjMpBz+CyeYfBQ3NTCg2i9PIPhzGiO9e\n" +
+        "7olk6R3r2ol+MqZp0d3MiJ/R0MlmIdwGZ8WUepptYkx9zOBkgLKeR46jAgMBAAGj\n" +
+        "ggEmMIIBIjASBgNVHRMBAf8ECDAGAQH/AgEBMCcGA1UdJQQgMB4GCCsGAQUFBwMB\n" +
+        "BggrBgEFBQcDAgYIKwYBBQUHAwQwEQYDVR0gBAowCDAGBgRVHSAAMDMGCCsGAQUF\n" +
+        "BwEBBCcwJTAjBggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMwYD\n" +
+        "VR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5lbnRydXN0Lm5ldC9zZXJ2ZXIxLmNy\n" +
+        "bDAdBgNVHQ4EFgQUiGi/4I41xDs4a2L3KDuEgcgM100wCwYDVR0PBAQDAgEGMB8G\n" +
+        "A1UdIwQYMBaAFPAXYhNVPbP/CgBr+1CEl/PtYtAaMBkGCSqGSIb2fQdBAAQMMAob\n" +
+        "BFY3LjEDAgCBMA0GCSqGSIb3DQEBBQUAA4GBAEa6RcDNcEIGUlkDJUY/pWTds4zh\n" +
+        "xbVkp3wSmpwPFhx5fxTyF4HD2L60jl3aqjTB7gPpsL2Pk5QZlNsi3t4UkCV70UOd\n" +
+        "ueJRN3o/LOtk4+bjXY2lC0qTHbN80VMLqPjmaf9ghSA9hwhskdtMgRsgfd90q5QP\n" +
+        "ZFdYf+hthc3m6IcJ\n" +
+        "-----END CERTIFICATE-----";
+
+    // DigiNotar Root CA, compromised certificate
+    static String compromisedCertStr =
+        "-----BEGIN CERTIFICATE-----\n" +
+        "MIIFijCCA3KgAwIBAgIQDHbanJEMTiye/hXQWJM8TDANBgkqhkiG9w0BAQUFADBf\n" +
+        "MQswCQYDVQQGEwJOTDESMBAGA1UEChMJRGlnaU5vdGFyMRowGAYDVQQDExFEaWdp\n" +
+        "Tm90YXIgUm9vdCBDQTEgMB4GCSqGSIb3DQEJARYRaW5mb0BkaWdpbm90YXIubmww\n" +
+        "HhcNMDcwNTE2MTcxOTM2WhcNMjUwMzMxMTgxOTIxWjBfMQswCQYDVQQGEwJOTDES\n" +
+        "MBAGA1UEChMJRGlnaU5vdGFyMRowGAYDVQQDExFEaWdpTm90YXIgUm9vdCBDQTEg\n" +
+        "MB4GCSqGSIb3DQEJARYRaW5mb0BkaWdpbm90YXIubmwwggIiMA0GCSqGSIb3DQEB\n" +
+        "AQUAA4ICDwAwggIKAoICAQCssFjBAL3YIQgLK5r+blYwBZ8bd5AQQVzDDYcRd46B\n" +
+        "8cp86Yxq7Th0Nbva3/m7wAk3tJZzgX0zGpg595NvlX89ubF1h7pRSOiLcD6VBMXY\n" +
+        "tsMW2YiwsYcdcNqGtA8Ui3rPENF0NqISe3eGSnnme98CEWilToauNFibJBN4ViIl\n" +
+        "HgGLS1Fx+4LMWZZpiFpoU8W5DQI3y0u8ZkqQfioLBQftFl9VkHXYRskbg+IIvvEj\n" +
+        "zJkd1ioPgyAVWCeCLvriIsJJsbkBgWqdbZ1Ad2h2TiEqbYRAhU52mXyC8/O3AlnU\n" +
+        "JgEbjt+tUwbRrhjd4rI6y9eIOI6sWym5GdOY+RgDz0iChmYLG2kPyes4iHomGgVM\n" +
+        "ktck1JbyrFIto0fVUvY//s6EBnCmqj6i8rZWNBhXouSBbefK8GrTx5FrAoNBfBXv\n" +
+        "a5pkXuPQPOWx63tdhvvL5ndJzaNl3Pe5nLjkC1+Tz8wwGjIczhxjlaX56uF0i57p\n" +
+        "K6kwe6AYHw4YC+VbqdPRbB4HZ4+RS6mKvNJmqpMBiLKR+jFc1abBUggJzQpjotMi\n" +
+        "puih2TkGl/VujQKQjBR7P4DNG5y6xFhyI6+2Vp/GekIzKQc/gsnmHwUNzUwoNovT\n" +
+        "yD4cxojvXu6JZOkd69qJfjKmadHdzIif0dDJZiHcBmfFlHqabWJMfczgZICynkeO\n" +
+        "owIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV\n" +
+        "HQ4EFgQUiGi/4I41xDs4a2L3KDuEgcgM100wDQYJKoZIhvcNAQEFBQADggIBADsC\n" +
+        "jcs8MOhuoK3yc7NfniUTBAXT9uOLuwt5zlPe5JbF0a9zvNXD0EBVfEB/zRtfCdXy\n" +
+        "fJ9oHbtdzno5wozWmHvFg1Wo1X1AyuAe94leY12hE8JdiraKfADzI8PthV9xdvBo\n" +
+        "Y6pFITlIYXg23PFDk9Qlx/KAZeFTAnVR/Ho67zerhChXDNjU1JlWbOOi/lmEtDHo\n" +
+        "M/hklJRRl6s5xUvt2t2AC298KQ3EjopyDedTFLJgQT2EkTFoPSdE2+Xe9PpjRchM\n" +
+        "Ppj1P0G6Tss3DbpmmPHdy59c91Q2gmssvBNhl0L4eLvMyKKfyvBovWsdst+Nbwed\n" +
+        "2o5nx0ceyrm/KkKRt2NTZvFCo+H0Wk1Ya7XkpDOtXHAd3ODy63MUkZoDweoAZbwH\n" +
+        "/M8SESIsrqC9OuCiKthZ6SnTGDWkrBFfGbW1G/8iSlzGeuQX7yCpp/Q/rYqnmgQl\n" +
+        "nQ7KN+ZQ/YxCKQSa7LnPS3K94gg2ryMvYuXKAdNw23yCIywWMQzGNgeQerEfZ1jE\n" +
+        "O1hZibCMjFCz2IbLaKPECudpSyDOwR5WS5WpI2jYMNjD67BVUc3l/Su49bsRn1NU\n" +
+        "9jQZjHkJNsphFyUXC4KYcwx3dMPVDceoEkzHp1RxRy4sGn3J4ys7SN4nhKdjNrN9\n" +
+        "j6BkOSQNPXuHr2ZcdBtLc7LljPCGmbjlxd+Ewbfr\n" +
+        "-----END CERTIFICATE-----";
+
+    // DigiNotar Public CA 2025, intermediate certificate
+    static String intermediateCertStr =
+        "-----BEGIN CERTIFICATE-----\n" +
+        "MIIGAzCCA+ugAwIBAgIQHn16Uz1FMEGWQA9xSB9FBDANBgkqhkiG9w0BAQUFADBf\n" +
+        "MQswCQYDVQQGEwJOTDESMBAGA1UEChMJRGlnaU5vdGFyMRowGAYDVQQDExFEaWdp\n" +
+        "Tm90YXIgUm9vdCBDQTEgMB4GCSqGSIb3DQEJARYRaW5mb0BkaWdpbm90YXIubmww\n" +
+        "HhcNMDYwMjA2MTYwNzAyWhcNMjUwMzI4MTYwNzAyWjBmMQswCQYDVQQGEwJOTDES\n" +
+        "MBAGA1UEChMJRGlnaU5vdGFyMSEwHwYDVQQDExhEaWdpTm90YXIgUHVibGljIENB\n" +
+        "IDIwMjUxIDAeBgkqhkiG9w0BCQEWEWluZm9AZGlnaW5vdGFyLm5sMIIBIjANBgkq\n" +
+        "hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/2eu/I5fMG8lbvPph3e8zfJpZQtg/72\n" +
+        "Yx29+ivtKehiF6A3n785XyoY6IT3vlCrhy1CbMOY3M0x1n4YQlv17B0XZ/DqHyBA\n" +
+        "SQvnDNbkM9j4NoSy/sRtGsP6PetIFFjrhE9whZuvuSUC1PY4PruEEJp8zOCx4+wU\n" +
+        "Zt9xvjy4Xra+bSia5rwccQ/R5FYTGKrYCthOy9C9ud5Fhd++rlVhgdA/78w+Cs2s\n" +
+        "xS4i0MAxG75P3/e/bATJKepbydHdDjkyz9o3RW/wdPUXhzEw4EwUjYg6XJrDzMad\n" +
+        "6aL9M/eaxDjgz6o48EaWRDrGptaE2uJRuErVz7oOO0p/wYKq/BU+/wIDAQABo4IB\n" +
+        "sjCCAa4wOgYIKwYBBQUHAQEELjAsMCoGCCsGAQUFBzABhh5odHRwOi8vdmFsaWRh\n" +
+        "dGlvbi5kaWdpbm90YXIubmwwHwYDVR0jBBgwFoAUiGi/4I41xDs4a2L3KDuEgcgM\n" +
+        "100wEgYDVR0TAQH/BAgwBgEB/wIBADCBxgYDVR0gBIG+MIG7MIG4Bg5ghBABh2kB\n" +
+        "AQEBBQIGBDCBpTAnBggrBgEFBQcCARYbaHR0cDovL3d3dy5kaWdpbm90YXIubmwv\n" +
+        "Y3BzMHoGCCsGAQUFBwICMG4abENvbmRpdGlvbnMsIGFzIG1lbnRpb25lZCBvbiBv\n" +
+        "dXIgd2Vic2l0ZSAod3d3LmRpZ2lub3Rhci5ubCksIGFyZSBhcHBsaWNhYmxlIHRv\n" +
+        "IGFsbCBvdXIgcHJvZHVjdHMgYW5kIHNlcnZpY2VzLjBDBgNVHR8EPDA6MDigNqA0\n" +
+        "hjJodHRwOi8vc2VydmljZS5kaWdpbm90YXIubmwvY3JsL3Jvb3QvbGF0ZXN0Q1JM\n" +
+        "LmNybDAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFN8zwK+S/jf8ttgWFtDZsZHV\n" +
+        "+m6lMA0GCSqGSIb3DQEBBQUAA4ICAQCfV1rmBd9QStEyQ40lT0tqby0/3ez0STuJ\n" +
+        "ESBQLQD56XYdb4VFSuqA6xTtiuSVHLoiv2xyISN9FvX3A5VtifkJ00JEaLQJiSsE\n" +
+        "wGDkYGl1DT7SsqtAVKdMAuCM+e0j0/RV3hZ6kcrM7/wFccHwM+/TiurR9lgZDzB4\n" +
+        "a7++A4XrYyKx9vc9ZwBEnD1nrAe7++gg9cuZgP7e+QL0FBHMjpw+gnCDjr2dzBZC\n" +
+        "4r+b8SOqlbPRPexBuNghlc7PfcPIyFis2LJXDRMWiAd3TcfdALwRsuKMR/T+cwyr\n" +
+        "asy69OEGHplLT57otQ524BDctDXNzlH9bHEh52QzqkWvIDqs42910IUy1nYNPIUG\n" +
+        "yYJV/T7H8Jb6vfMZWe47iUFvtNZCi8+b542gRUwdi+ca+hGviBC9Qr4Wv1pl7CBQ\n" +
+        "Hy1axTkHiQawUo/hgmoetCpftugl9yJTfvsBorUV1ZMxn9B1JLSGtWnbUsFRla7G\n" +
+        "fNa0IsUkzmmha8XCzvNu0d1PDGtcQyUqmDOE1Hx4cIBeuF8ipuIXkrVCr9zAZ4ZC\n" +
+        "hgz6aA1gDTW8whSRJqYEYEQ0pcMEFLyXE+Nz3O8NinO2AuxqKhjMk13203xA7lPY\n" +
+        "MnBQ0v7S3qqbp/pvPMiUhOz/VaYted6QmOY5EATBnFiLCuw87JXoAyp382eJ3WX1\n" +
+        "hOiR4IX9Tg==\n" +
+        "-----END CERTIFICATE-----";
+
+    // The fraudulent certificate issued by above compromised CA
+    static String targetCertStr =
+        "-----BEGIN CERTIFICATE-----\n" +
+        "MIIFKDCCBBCgAwIBAgIQBeLmpM0J6lTWZbB1/iKiVjANBgkqhkiG9w0BAQUFADBm\n" +
+        "MQswCQYDVQQGEwJOTDESMBAGA1UEChMJRGlnaU5vdGFyMSEwHwYDVQQDExhEaWdp\n" +
+        "Tm90YXIgUHVibGljIENBIDIwMjUxIDAeBgkqhkiG9w0BCQEWEWluZm9AZGlnaW5v\n" +
+        "dGFyLm5sMB4XDTExMDcxMDE5MDYzMFoXDTEzMDcwOTE5MDYzMFowajELMAkGA1UE\n" +
+        "BhMCVVMxEzARBgNVBAoTCkdvb2dsZSBJbmMxFjAUBgNVBAcTDU1vdW50YWluIFZp\n" +
+        "ZXcxFzAVBgNVBAUTDlBLMDAwMjI5MjAwMDAyMRUwEwYDVQQDEwwqLmdvb2dsZS5j\n" +
+        "b20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDNbeKubCV0aCxhOiOS\n" +
+        "CSQ/w9HXTYuD5BLKuiqXNw3setdTymeJz2L8aWOHo3nicFNDVwWTgwWomGNr2J6Q\n" +
+        "7g1iINNSW0rR4E1l2szRkcnAY6c6i/Eke93nF4i2hDsnIBveolF5yjpuRm73uQQD\n" +
+        "ulHjA3BFRF/PTi0fw2/Yt+8ieoMuNcMWN6Eou5Gqt5YZkWv176ofeCbsBmMrP87x\n" +
+        "OhhtTDckCapk4VQZG2XrfzZcV6tdzCp5TI8uHdu17cdzXm1imZ8tyvzFeiCEOQN8\n" +
+        "vPNzB/fIr3CJQ5q4uM5aKT3DD5PeVzf4rfJKQNgCTWiIBc9XcWEUuszwAsnmg7e2\n" +
+        "EJRdAgMBAAGjggHMMIIByDA6BggrBgEFBQcBAQQuMCwwKgYIKwYBBQUHMAGGHmh0\n" +
+        "dHA6Ly92YWxpZGF0aW9uLmRpZ2lub3Rhci5ubDAfBgNVHSMEGDAWgBTfM8Cvkv43\n" +
+        "/LbYFhbQ2bGR1fpupTAJBgNVHRMEAjAAMIHGBgNVHSAEgb4wgbswgbgGDmCEEAGH\n" +
+        "aQEBAQIEAQICMIGlMCcGCCsGAQUFBwIBFhtodHRwOi8vd3d3LmRpZ2lub3Rhci5u\n" +
+        "bC9jcHMwegYIKwYBBQUHAgIwbhpsQ29uZGl0aW9ucywgYXMgbWVudGlvbmVkIG9u\n" +
+        "IG91ciB3ZWJzaXRlICh3d3cuZGlnaW5vdGFyLm5sKSwgYXJlIGFwcGxpY2FibGUg\n" +
+        "dG8gYWxsIG91ciBwcm9kdWN0cyBhbmQgc2VydmljZXMuMEkGA1UdHwRCMEAwPqA8\n" +
+        "oDqGOGh0dHA6Ly9zZXJ2aWNlLmRpZ2lub3Rhci5ubC9jcmwvcHVibGljMjAyNS9s\n" +
+        "YXRlc3RDUkwuY3JsMA4GA1UdDwEB/wQEAwIEsDAbBgNVHREEFDASgRBhZG1pbkBn\n" +
+        "b29nbGUuY29tMB0GA1UdDgQWBBQHSn0WJzIo0eMBMQUNsMqN6eF/7TANBgkqhkiG\n" +
+        "9w0BAQUFAAOCAQEAAs5dL7N9wzRJkI4Aq4lC5t8j5ZadqnqUcgYLADzSv4ExytNH\n" +
+        "UY2nH6iVTihC0UPSsILWraoeApdT7Rphz/8DLQEBRGdeKWAptNM3EbiXtQaZT2uB\n" +
+        "pidL8UoafX0kch3f71Y1scpBEjvu5ZZLnjg0A8AL0tnsereOVdDpU98bKqdbbrnM\n" +
+        "FRmBlSf7xdaNca6JJHeEpga4E9Ty683CmccrSGXdU2tTCuHEJww+iOAUtPIZcsum\n" +
+        "U7/eYeY1pMyGLyIjbNgRY7nDzRwvM/BsbL9eh4/mSQj/4nncqJd22sVQpCggQiVK\n" +
+        "baB2sVGcVNBkK55bT8gPqnx8JypubyUvayzZGg==\n" +
+        "-----END CERTIFICATE-----";
+
+    public static void main(String args[]) throws Exception {
+
+        Exception reservedException = null;
+        try {
+            validate();
+        } catch (CertPathValidatorException cpve) {
+            reservedException = cpve;
+        }
+
+        if (reservedException == null) {
+            throw new Exception("Unable to block fraudulent certificate");
+        }
+
+        System.out.println(
+            "The expected untrusted cert exception: " + reservedException);
+    }
+
+    private static CertPath generateCertificatePath()
+            throws CertificateException, IOException {
+
+        // generate certificate from cert strings
+        CertificateFactory cf = CertificateFactory.getInstance("X.509");
+
+        // generate certification path
+        List<Certificate> list = new ArrayList();
+
+        try (ByteArrayInputStream is =
+                new ByteArrayInputStream(targetCertStr.getBytes())) {
+            list.add(cf.generateCertificate(is));
+        }
+
+        try (ByteArrayInputStream is =
+                new ByteArrayInputStream(intermediateCertStr.getBytes())) {
+            list.add(cf.generateCertificate(is));
+        }
+
+        try (ByteArrayInputStream is =
+                new ByteArrayInputStream(compromisedCertStr.getBytes())) {
+            list.add(cf.generateCertificate(is));
+        }
+
+        try (ByteArrayInputStream is =
+                new ByteArrayInputStream(untrustedCrossCertStr.getBytes())) {
+            list.add(cf.generateCertificate(is));
+        }
+
+        return cf.generateCertPath(list);
+    }
+
+    private static Set<TrustAnchor> generateTrustAnchors()
+            throws CertificateException, IOException {
+        // generate certificate from cert string
+        CertificateFactory cf = CertificateFactory.getInstance("X.509");
+
+        Certificate trustedCert = null;
+        try (ByteArrayInputStream is =
+                new ByteArrayInputStream(trustedCertStr.getBytes())) {
+            trustedCert = cf.generateCertificate(is);
+        }
+
+        // generate a trust anchor
+        TrustAnchor anchor =
+            new TrustAnchor((X509Certificate)trustedCert, null);
+
+        return Collections.singleton(anchor);
+    }
+
+    private static void validate()
+            throws CertPathValidatorException, Exception {
+
+        CertPath path = generateCertificatePath();
+        Set<TrustAnchor> anchors = generateTrustAnchors();
+
+        PKIXParameters params = new PKIXParameters(anchors);
+
+        // disable certificate revocation checking
+        params.setRevocationEnabled(false);
+
+        // set the validation time
+        params.setDate(new Date(111, 11, 25));   // 2011-12-25
+
+        CertPathValidator validator = CertPathValidator.getInstance("PKIX");
+
+        validator.validate(path, params);
+    }
+}
+
--- a/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/EngineArgs/DebugReportsOneExtraByte.sh	Wed May 02 14:00:06 2012 +0100
+++ b/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/EngineArgs/DebugReportsOneExtraByte.sh	Wed May 02 15:06:35 2012 +0100
@@ -33,11 +33,7 @@
 
 OS=`uname -s`
 case "$OS" in
-  SunOS )
-    PS=":"
-    FS="/"
-    ;;
-  Linux )
+  SunOS | Linux | Darwin )
     PS=":"
     FS="/"
     ;;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/X509TrustManagerImpl/ComodoHacker.java	Wed May 02 15:06:35 2012 +0100
@@ -0,0 +1,305 @@
+/*
+ * Copyright (c) 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 7123519
+ * @summary Problem with java/classes_security
+ * @run main/othervm ComodoHacker PKIX
+ * @run main/othervm ComodoHacker SunX509
+ */
+
+import java.net.*;
+import java.util.*;
+import java.io.*;
+import javax.net.ssl.*;
+import java.security.KeyStore;
+import java.security.cert.Certificate;
+import java.security.cert.CertificateFactory;
+import java.security.cert.X509Certificate;
+import java.security.cert.CertificateException;
+import java.security.spec.*;
+import java.security.interfaces.*;
+
+public class ComodoHacker {
+    // DigiNotar Root CA, untrusted root certificate
+    static String trustedCertStr =
+        "-----BEGIN CERTIFICATE-----\n" +
+        "MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC\n" +
+        "VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u\n" +
+        "ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc\n" +
+        "KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u\n" +
+        "ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05OTA1\n" +
+        "MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIGA1UE\n" +
+        "ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5j\n" +
+        "b3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF\n" +
+        "bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg\n" +
+        "U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUA\n" +
+        "A4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/\n" +
+        "I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3\n" +
+        "wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OC\n" +
+        "AdcwggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHb\n" +
+        "oIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5\n" +
+        "BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p\n" +
+        "dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk\n" +
+        "MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp\n" +
+        "b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu\n" +
+        "dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0\n" +
+        "MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8Bdi\n" +
+        "E1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAa\n" +
+        "MAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI\n" +
+        "hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN\n" +
+        "95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd\n" +
+        "2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=\n" +
+        "-----END CERTIFICATE-----";
+
+    // DigiNotar Root CA, untrusted cross-certificate
+    static String untrustedCrossCertStr =
+        "-----BEGIN CERTIFICATE-----\n" +
+        "MIIFSDCCBLGgAwIBAgIERpwsrzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC\n" +
+        "VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u\n" +
+        "ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc\n" +
+        "KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u\n" +
+        "ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNzA3\n" +
+        "MjYxNTU3MzlaFw0xMzA4MjYxNjI3MzlaMF8xCzAJBgNVBAYTAk5MMRIwEAYDVQQK\n" +
+        "EwlEaWdpTm90YXIxGjAYBgNVBAMTEURpZ2lOb3RhciBSb290IENBMSAwHgYJKoZI\n" +
+        "hvcNAQkBFhFpbmZvQGRpZ2lub3Rhci5ubDCCAiIwDQYJKoZIhvcNAQEBBQADggIP\n" +
+        "ADCCAgoCggIBAKywWMEAvdghCAsrmv5uVjAFnxt3kBBBXMMNhxF3joHxynzpjGrt\n" +
+        "OHQ1u9rf+bvACTe0lnOBfTMamDn3k2+Vfz25sXWHulFI6ItwPpUExdi2wxbZiLCx\n" +
+        "hx1w2oa0DxSLes8Q0XQ2ohJ7d4ZKeeZ73wIRaKVOhq40WJskE3hWIiUeAYtLUXH7\n" +
+        "gsxZlmmIWmhTxbkNAjfLS7xmSpB+KgsFB+0WX1WQddhGyRuD4gi+8SPMmR3WKg+D\n" +
+        "IBVYJ4Iu+uIiwkmxuQGBap1tnUB3aHZOISpthECFTnaZfILz87cCWdQmARuO361T\n" +
+        "BtGuGN3isjrL14g4jqxbKbkZ05j5GAPPSIKGZgsbaQ/J6ziIeiYaBUyS1yTUlvKs\n" +
+        "Ui2jR9VS9j/+zoQGcKaqPqLytlY0GFei5IFt58rwatPHkWsCg0F8Fe9rmmRe49A8\n" +
+        "5bHre12G+8vmd0nNo2Xc97mcuOQLX5PPzDAaMhzOHGOVpfnq4XSLnukrqTB7oBgf\n" +
+        "DhgL5Vup09FsHgdnj5FLqYq80maqkwGIspH6MVzVpsFSCAnNCmOi0yKm6KHZOQaX\n" +
+        "9W6NApCMFHs/gM0bnLrEWHIjr7ZWn8Z6QjMpBz+CyeYfBQ3NTCg2i9PIPhzGiO9e\n" +
+        "7olk6R3r2ol+MqZp0d3MiJ/R0MlmIdwGZ8WUepptYkx9zOBkgLKeR46jAgMBAAGj\n" +
+        "ggEmMIIBIjASBgNVHRMBAf8ECDAGAQH/AgEBMCcGA1UdJQQgMB4GCCsGAQUFBwMB\n" +
+        "BggrBgEFBQcDAgYIKwYBBQUHAwQwEQYDVR0gBAowCDAGBgRVHSAAMDMGCCsGAQUF\n" +
+        "BwEBBCcwJTAjBggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMwYD\n" +
+        "VR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5lbnRydXN0Lm5ldC9zZXJ2ZXIxLmNy\n" +
+        "bDAdBgNVHQ4EFgQUiGi/4I41xDs4a2L3KDuEgcgM100wCwYDVR0PBAQDAgEGMB8G\n" +
+        "A1UdIwQYMBaAFPAXYhNVPbP/CgBr+1CEl/PtYtAaMBkGCSqGSIb2fQdBAAQMMAob\n" +
+        "BFY3LjEDAgCBMA0GCSqGSIb3DQEBBQUAA4GBAEa6RcDNcEIGUlkDJUY/pWTds4zh\n" +
+        "xbVkp3wSmpwPFhx5fxTyF4HD2L60jl3aqjTB7gPpsL2Pk5QZlNsi3t4UkCV70UOd\n" +
+        "ueJRN3o/LOtk4+bjXY2lC0qTHbN80VMLqPjmaf9ghSA9hwhskdtMgRsgfd90q5QP\n" +
+        "ZFdYf+hthc3m6IcJ\n" +
+        "-----END CERTIFICATE-----";
+
+    // DigiNotar Root CA, compromised certificate
+    static String compromisedCertStr =
+        "-----BEGIN CERTIFICATE-----\n" +
+        "MIIFijCCA3KgAwIBAgIQDHbanJEMTiye/hXQWJM8TDANBgkqhkiG9w0BAQUFADBf\n" +
+        "MQswCQYDVQQGEwJOTDESMBAGA1UEChMJRGlnaU5vdGFyMRowGAYDVQQDExFEaWdp\n" +
+        "Tm90YXIgUm9vdCBDQTEgMB4GCSqGSIb3DQEJARYRaW5mb0BkaWdpbm90YXIubmww\n" +
+        "HhcNMDcwNTE2MTcxOTM2WhcNMjUwMzMxMTgxOTIxWjBfMQswCQYDVQQGEwJOTDES\n" +
+        "MBAGA1UEChMJRGlnaU5vdGFyMRowGAYDVQQDExFEaWdpTm90YXIgUm9vdCBDQTEg\n" +
+        "MB4GCSqGSIb3DQEJARYRaW5mb0BkaWdpbm90YXIubmwwggIiMA0GCSqGSIb3DQEB\n" +
+        "AQUAA4ICDwAwggIKAoICAQCssFjBAL3YIQgLK5r+blYwBZ8bd5AQQVzDDYcRd46B\n" +
+        "8cp86Yxq7Th0Nbva3/m7wAk3tJZzgX0zGpg595NvlX89ubF1h7pRSOiLcD6VBMXY\n" +
+        "tsMW2YiwsYcdcNqGtA8Ui3rPENF0NqISe3eGSnnme98CEWilToauNFibJBN4ViIl\n" +
+        "HgGLS1Fx+4LMWZZpiFpoU8W5DQI3y0u8ZkqQfioLBQftFl9VkHXYRskbg+IIvvEj\n" +
+        "zJkd1ioPgyAVWCeCLvriIsJJsbkBgWqdbZ1Ad2h2TiEqbYRAhU52mXyC8/O3AlnU\n" +
+        "JgEbjt+tUwbRrhjd4rI6y9eIOI6sWym5GdOY+RgDz0iChmYLG2kPyes4iHomGgVM\n" +
+        "ktck1JbyrFIto0fVUvY//s6EBnCmqj6i8rZWNBhXouSBbefK8GrTx5FrAoNBfBXv\n" +
+        "a5pkXuPQPOWx63tdhvvL5ndJzaNl3Pe5nLjkC1+Tz8wwGjIczhxjlaX56uF0i57p\n" +
+        "K6kwe6AYHw4YC+VbqdPRbB4HZ4+RS6mKvNJmqpMBiLKR+jFc1abBUggJzQpjotMi\n" +
+        "puih2TkGl/VujQKQjBR7P4DNG5y6xFhyI6+2Vp/GekIzKQc/gsnmHwUNzUwoNovT\n" +
+        "yD4cxojvXu6JZOkd69qJfjKmadHdzIif0dDJZiHcBmfFlHqabWJMfczgZICynkeO\n" +
+        "owIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV\n" +
+        "HQ4EFgQUiGi/4I41xDs4a2L3KDuEgcgM100wDQYJKoZIhvcNAQEFBQADggIBADsC\n" +
+        "jcs8MOhuoK3yc7NfniUTBAXT9uOLuwt5zlPe5JbF0a9zvNXD0EBVfEB/zRtfCdXy\n" +
+        "fJ9oHbtdzno5wozWmHvFg1Wo1X1AyuAe94leY12hE8JdiraKfADzI8PthV9xdvBo\n" +
+        "Y6pFITlIYXg23PFDk9Qlx/KAZeFTAnVR/Ho67zerhChXDNjU1JlWbOOi/lmEtDHo\n" +
+        "M/hklJRRl6s5xUvt2t2AC298KQ3EjopyDedTFLJgQT2EkTFoPSdE2+Xe9PpjRchM\n" +
+        "Ppj1P0G6Tss3DbpmmPHdy59c91Q2gmssvBNhl0L4eLvMyKKfyvBovWsdst+Nbwed\n" +
+        "2o5nx0ceyrm/KkKRt2NTZvFCo+H0Wk1Ya7XkpDOtXHAd3ODy63MUkZoDweoAZbwH\n" +
+        "/M8SESIsrqC9OuCiKthZ6SnTGDWkrBFfGbW1G/8iSlzGeuQX7yCpp/Q/rYqnmgQl\n" +
+        "nQ7KN+ZQ/YxCKQSa7LnPS3K94gg2ryMvYuXKAdNw23yCIywWMQzGNgeQerEfZ1jE\n" +
+        "O1hZibCMjFCz2IbLaKPECudpSyDOwR5WS5WpI2jYMNjD67BVUc3l/Su49bsRn1NU\n" +
+        "9jQZjHkJNsphFyUXC4KYcwx3dMPVDceoEkzHp1RxRy4sGn3J4ys7SN4nhKdjNrN9\n" +
+        "j6BkOSQNPXuHr2ZcdBtLc7LljPCGmbjlxd+Ewbfr\n" +
+        "-----END CERTIFICATE-----";
+
+    // DigiNotar Public CA 2025, intermediate certificate
+    static String intermediateCertStr =
+        "-----BEGIN CERTIFICATE-----\n" +
+        "MIIGAzCCA+ugAwIBAgIQHn16Uz1FMEGWQA9xSB9FBDANBgkqhkiG9w0BAQUFADBf\n" +
+        "MQswCQYDVQQGEwJOTDESMBAGA1UEChMJRGlnaU5vdGFyMRowGAYDVQQDExFEaWdp\n" +
+        "Tm90YXIgUm9vdCBDQTEgMB4GCSqGSIb3DQEJARYRaW5mb0BkaWdpbm90YXIubmww\n" +
+        "HhcNMDYwMjA2MTYwNzAyWhcNMjUwMzI4MTYwNzAyWjBmMQswCQYDVQQGEwJOTDES\n" +
+        "MBAGA1UEChMJRGlnaU5vdGFyMSEwHwYDVQQDExhEaWdpTm90YXIgUHVibGljIENB\n" +
+        "IDIwMjUxIDAeBgkqhkiG9w0BCQEWEWluZm9AZGlnaW5vdGFyLm5sMIIBIjANBgkq\n" +
+        "hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/2eu/I5fMG8lbvPph3e8zfJpZQtg/72\n" +
+        "Yx29+ivtKehiF6A3n785XyoY6IT3vlCrhy1CbMOY3M0x1n4YQlv17B0XZ/DqHyBA\n" +
+        "SQvnDNbkM9j4NoSy/sRtGsP6PetIFFjrhE9whZuvuSUC1PY4PruEEJp8zOCx4+wU\n" +
+        "Zt9xvjy4Xra+bSia5rwccQ/R5FYTGKrYCthOy9C9ud5Fhd++rlVhgdA/78w+Cs2s\n" +
+        "xS4i0MAxG75P3/e/bATJKepbydHdDjkyz9o3RW/wdPUXhzEw4EwUjYg6XJrDzMad\n" +
+        "6aL9M/eaxDjgz6o48EaWRDrGptaE2uJRuErVz7oOO0p/wYKq/BU+/wIDAQABo4IB\n" +
+        "sjCCAa4wOgYIKwYBBQUHAQEELjAsMCoGCCsGAQUFBzABhh5odHRwOi8vdmFsaWRh\n" +
+        "dGlvbi5kaWdpbm90YXIubmwwHwYDVR0jBBgwFoAUiGi/4I41xDs4a2L3KDuEgcgM\n" +
+        "100wEgYDVR0TAQH/BAgwBgEB/wIBADCBxgYDVR0gBIG+MIG7MIG4Bg5ghBABh2kB\n" +
+        "AQEBBQIGBDCBpTAnBggrBgEFBQcCARYbaHR0cDovL3d3dy5kaWdpbm90YXIubmwv\n" +
+        "Y3BzMHoGCCsGAQUFBwICMG4abENvbmRpdGlvbnMsIGFzIG1lbnRpb25lZCBvbiBv\n" +
+        "dXIgd2Vic2l0ZSAod3d3LmRpZ2lub3Rhci5ubCksIGFyZSBhcHBsaWNhYmxlIHRv\n" +
+        "IGFsbCBvdXIgcHJvZHVjdHMgYW5kIHNlcnZpY2VzLjBDBgNVHR8EPDA6MDigNqA0\n" +
+        "hjJodHRwOi8vc2VydmljZS5kaWdpbm90YXIubmwvY3JsL3Jvb3QvbGF0ZXN0Q1JM\n" +
+        "LmNybDAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFN8zwK+S/jf8ttgWFtDZsZHV\n" +
+        "+m6lMA0GCSqGSIb3DQEBBQUAA4ICAQCfV1rmBd9QStEyQ40lT0tqby0/3ez0STuJ\n" +
+        "ESBQLQD56XYdb4VFSuqA6xTtiuSVHLoiv2xyISN9FvX3A5VtifkJ00JEaLQJiSsE\n" +
+        "wGDkYGl1DT7SsqtAVKdMAuCM+e0j0/RV3hZ6kcrM7/wFccHwM+/TiurR9lgZDzB4\n" +
+        "a7++A4XrYyKx9vc9ZwBEnD1nrAe7++gg9cuZgP7e+QL0FBHMjpw+gnCDjr2dzBZC\n" +
+        "4r+b8SOqlbPRPexBuNghlc7PfcPIyFis2LJXDRMWiAd3TcfdALwRsuKMR/T+cwyr\n" +
+        "asy69OEGHplLT57otQ524BDctDXNzlH9bHEh52QzqkWvIDqs42910IUy1nYNPIUG\n" +
+        "yYJV/T7H8Jb6vfMZWe47iUFvtNZCi8+b542gRUwdi+ca+hGviBC9Qr4Wv1pl7CBQ\n" +
+        "Hy1axTkHiQawUo/hgmoetCpftugl9yJTfvsBorUV1ZMxn9B1JLSGtWnbUsFRla7G\n" +
+        "fNa0IsUkzmmha8XCzvNu0d1PDGtcQyUqmDOE1Hx4cIBeuF8ipuIXkrVCr9zAZ4ZC\n" +
+        "hgz6aA1gDTW8whSRJqYEYEQ0pcMEFLyXE+Nz3O8NinO2AuxqKhjMk13203xA7lPY\n" +
+        "MnBQ0v7S3qqbp/pvPMiUhOz/VaYted6QmOY5EATBnFiLCuw87JXoAyp382eJ3WX1\n" +
+        "hOiR4IX9Tg==\n" +
+        "-----END CERTIFICATE-----";
+
+    // The fraudulent certificate issued by above compromised CA
+    static String targetCertStr =
+        "-----BEGIN CERTIFICATE-----\n" +
+        "MIIFKDCCBBCgAwIBAgIQBeLmpM0J6lTWZbB1/iKiVjANBgkqhkiG9w0BAQUFADBm\n" +
+        "MQswCQYDVQQGEwJOTDESMBAGA1UEChMJRGlnaU5vdGFyMSEwHwYDVQQDExhEaWdp\n" +
+        "Tm90YXIgUHVibGljIENBIDIwMjUxIDAeBgkqhkiG9w0BCQEWEWluZm9AZGlnaW5v\n" +
+        "dGFyLm5sMB4XDTExMDcxMDE5MDYzMFoXDTEzMDcwOTE5MDYzMFowajELMAkGA1UE\n" +
+        "BhMCVVMxEzARBgNVBAoTCkdvb2dsZSBJbmMxFjAUBgNVBAcTDU1vdW50YWluIFZp\n" +
+        "ZXcxFzAVBgNVBAUTDlBLMDAwMjI5MjAwMDAyMRUwEwYDVQQDEwwqLmdvb2dsZS5j\n" +
+        "b20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDNbeKubCV0aCxhOiOS\n" +
+        "CSQ/w9HXTYuD5BLKuiqXNw3setdTymeJz2L8aWOHo3nicFNDVwWTgwWomGNr2J6Q\n" +
+        "7g1iINNSW0rR4E1l2szRkcnAY6c6i/Eke93nF4i2hDsnIBveolF5yjpuRm73uQQD\n" +
+        "ulHjA3BFRF/PTi0fw2/Yt+8ieoMuNcMWN6Eou5Gqt5YZkWv176ofeCbsBmMrP87x\n" +
+        "OhhtTDckCapk4VQZG2XrfzZcV6tdzCp5TI8uHdu17cdzXm1imZ8tyvzFeiCEOQN8\n" +
+        "vPNzB/fIr3CJQ5q4uM5aKT3DD5PeVzf4rfJKQNgCTWiIBc9XcWEUuszwAsnmg7e2\n" +
+        "EJRdAgMBAAGjggHMMIIByDA6BggrBgEFBQcBAQQuMCwwKgYIKwYBBQUHMAGGHmh0\n" +
+        "dHA6Ly92YWxpZGF0aW9uLmRpZ2lub3Rhci5ubDAfBgNVHSMEGDAWgBTfM8Cvkv43\n" +
+        "/LbYFhbQ2bGR1fpupTAJBgNVHRMEAjAAMIHGBgNVHSAEgb4wgbswgbgGDmCEEAGH\n" +
+        "aQEBAQIEAQICMIGlMCcGCCsGAQUFBwIBFhtodHRwOi8vd3d3LmRpZ2lub3Rhci5u\n" +
+        "bC9jcHMwegYIKwYBBQUHAgIwbhpsQ29uZGl0aW9ucywgYXMgbWVudGlvbmVkIG9u\n" +
+        "IG91ciB3ZWJzaXRlICh3d3cuZGlnaW5vdGFyLm5sKSwgYXJlIGFwcGxpY2FibGUg\n" +
+        "dG8gYWxsIG91ciBwcm9kdWN0cyBhbmQgc2VydmljZXMuMEkGA1UdHwRCMEAwPqA8\n" +
+        "oDqGOGh0dHA6Ly9zZXJ2aWNlLmRpZ2lub3Rhci5ubC9jcmwvcHVibGljMjAyNS9s\n" +
+        "YXRlc3RDUkwuY3JsMA4GA1UdDwEB/wQEAwIEsDAbBgNVHREEFDASgRBhZG1pbkBn\n" +
+        "b29nbGUuY29tMB0GA1UdDgQWBBQHSn0WJzIo0eMBMQUNsMqN6eF/7TANBgkqhkiG\n" +
+        "9w0BAQUFAAOCAQEAAs5dL7N9wzRJkI4Aq4lC5t8j5ZadqnqUcgYLADzSv4ExytNH\n" +
+        "UY2nH6iVTihC0UPSsILWraoeApdT7Rphz/8DLQEBRGdeKWAptNM3EbiXtQaZT2uB\n" +
+        "pidL8UoafX0kch3f71Y1scpBEjvu5ZZLnjg0A8AL0tnsereOVdDpU98bKqdbbrnM\n" +
+        "FRmBlSf7xdaNca6JJHeEpga4E9Ty683CmccrSGXdU2tTCuHEJww+iOAUtPIZcsum\n" +
+        "U7/eYeY1pMyGLyIjbNgRY7nDzRwvM/BsbL9eh4/mSQj/4nncqJd22sVQpCggQiVK\n" +
+        "baB2sVGcVNBkK55bT8gPqnx8JypubyUvayzZGg==\n" +
+        "-----END CERTIFICATE-----";
+
+    private static String tmAlgorithm;               // trust manager
+
+    public static void main(String args[]) throws Exception {
+        // Get the customized arguments.
+        parseArguments(args);
+
+        X509TrustManager tm = getTrustManager();
+        X509Certificate[] chain = getFraudulentChain();
+
+        Exception reservedException = null;
+        try {
+            tm.checkClientTrusted(chain, "RSA");
+        } catch (CertificateException ce) {
+            reservedException = ce;
+        }
+
+        if (reservedException == null) {
+            throw new Exception("Unable to block fraudulent certificate");
+        }
+
+        reservedException = null;
+        try {
+            tm.checkServerTrusted(chain, "RSA");
+        } catch (CertificateException ce) {
+            reservedException = ce;
+        }
+
+        if (reservedException == null) {
+            throw new Exception("Unable to block fraudulent certificate");
+        }
+
+        System.out.println(
+            "The expected untrusted cert exception: " + reservedException);
+    }
+
+    private static void parseArguments(String[] args) {
+        tmAlgorithm = args[0];
+    }
+
+    private static X509TrustManager getTrustManager() throws Exception {
+        // generate certificate from cert string
+        CertificateFactory cf = CertificateFactory.getInstance("X.509");
+
+        // create a key store
+        KeyStore ks = KeyStore.getInstance("JKS");
+        ks.load(null, null);
+
+        // import the trusted cert
+        try (ByteArrayInputStream is =
+                new ByteArrayInputStream(trustedCertStr.getBytes())) {
+            Certificate trustedCert = cf.generateCertificate(is);
+            ks.setCertificateEntry("RSA Export Signer", trustedCert);
+        }
+
+        // create the trust manager
+        TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmAlgorithm);
+        tmf.init(ks);
+
+        return (X509TrustManager)tmf.getTrustManagers()[0];
+    }
+
+    private static X509Certificate[] getFraudulentChain() throws Exception {
+        // generate certificate from cert string
+        CertificateFactory cf = CertificateFactory.getInstance("X.509");
+
+        X509Certificate[] chain = new X509Certificate[4];
+        try (ByteArrayInputStream is =
+                new ByteArrayInputStream(targetCertStr.getBytes())) {
+            chain[0] = (X509Certificate)cf.generateCertificate(is);
+        }
+
+        try (ByteArrayInputStream is =
+                new ByteArrayInputStream(intermediateCertStr.getBytes())) {
+            chain[1] = (X509Certificate)cf.generateCertificate(is);
+        }
+
+        try (ByteArrayInputStream is =
+                new ByteArrayInputStream(compromisedCertStr.getBytes())) {
+            chain[2] = (X509Certificate)cf.generateCertificate(is);
+        }
+
+        try (ByteArrayInputStream is =
+                new ByteArrayInputStream(untrustedCrossCertStr.getBytes())) {
+            chain[3] = (X509Certificate)cf.generateCertificate(is);
+        }
+
+        return chain;
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/sun/security/tools/keytool/ListKeychainStore.sh	Wed May 02 15:06:35 2012 +0100
@@ -0,0 +1,142 @@
+#
+# Copyright (c) 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 7133495
+# @summary [macosx] KeyChain KeyStore implementation retrieves only one private key entry
+
+if [ "${TESTJAVA}" = "" ] ; then
+    JAVAC_CMD=`which javac`
+    TESTJAVA=`dirname $JAVAC_CMD`/..
+fi
+
+if [ "${TESTCLASSES}" = "" ] ; then
+    TESTCLASSES=`pwd`
+fi
+
+# Only run on MacOS
+OS=`uname -s`
+case "$OS" in
+    Darwin )
+        ;;
+    * )
+        echo "Will not run test on: ${OS}"
+        exit 0;
+        ;;
+esac
+
+PWD="xxxxxx"
+KEYTOOL="${TESTJAVA}/bin/keytool -storetype KeychainStore -keystore NONE -storepass $PWD"
+TEMPORARY_P12="$TESTCLASSES/7133495.p12"
+TEMPORARY_KC="$TESTCLASSES/7133495.keychain"
+CLEANUP_P12="rm -f $TEMPORARY_P12"
+CLEANUP_KC="security delete-keychain $TEMPORARY_KC"
+
+# Count the number of private key entries in the Keychain keystores
+
+COUNT=`$KEYTOOL -list | grep PrivateKeyEntry | wc -l`
+echo "Found $COUNT private key entries in the Keychain keystores"
+
+if [ $COUNT -gt 1 ]; then
+    exit 0
+fi
+
+# Create a temporary PKCS12 keystore containing 3 public/private keypairs
+
+RESULT=`$CLEANUP_P12`
+
+for i in X Y Z
+do
+    ${TESTJAVA}/bin/keytool -genkeypair \
+        -storetype PKCS12 \
+        -keystore $TEMPORARY_P12 \
+        -storepass $PWD \
+        -dname "CN=$i,OU=$i,O=$i,ST=$i,C=US" \
+        -alias 7133495-$i
+
+    if [ $? -ne 0 ]; then
+        echo "Error: cannot create keypair $i in the temporary PKCS12 keystore"
+        RESULT=`$CLEANUP_P12`
+        exit 1
+    fi
+done
+echo "Created a temporary PKCS12 keystore: $TEMPORARY_P12"
+
+# Create a temporary keychain
+
+security create-keychain -p $PWD $TEMPORARY_KC
+if [ $? -ne 0 ]; then
+    echo "Error: cannot create the temporary keychain"
+    RESULT=`$CLEANUP_P12`
+    exit 2
+fi
+echo "Created a temporary keychain: $TEMPORARY_KC"
+
+# Unlock the temporary keychain
+
+security unlock-keychain -p $PWD $TEMPORARY_KC
+if [ $? -ne 0 ]; then
+    echo "Error: cannot unlock the temporary keychain"
+    RESULT=`$CLEANUP_P12`
+    RESULT=`$CLEANUP_KC`
+    exit 3
+fi
+echo "Unlocked the temporary keychain"
+
+# Import the keypairs from the PKCS12 keystore into the keychain
+
+security import $TEMPORARY_P12 -k $TEMPORARY_KC -f pkcs12 -P $PWD
+if [ $? -ne 0 ]; then
+    echo "Error: cannot import keypairs from PKCS12 keystore into the keychain"
+    RESULT=`$CLEANUP_P12`
+    RESULT=`$CLEANUP_KC`
+    exit 4
+fi
+echo "Imported keypairs from PKCS12 keystore into the keychain"
+
+# Recount the number of private key entries in the Keychain keystores
+
+COUNT=`$KEYTOOL -list | grep PrivateKeyEntry | wc -l`
+echo "Found $COUNT private key entries in the Keychain keystore"
+if [ $COUNT -lt 3 ]; then
+    echo "Error: expected >2 private key entries in the Keychain keystores"
+    RESULT=`$CLEANUP_P12`
+    RESULT=`$CLEANUP_KC`
+    exit 5
+fi
+
+RESULT=`$CLEANUP_P12`
+if [ $? -ne 0 ]; then
+    echo "Error: cannot remove the temporary PKCS12 keystore"
+    exit 6
+fi
+echo "Removed the temporary PKCS12 keystore"
+
+RESULT=`$CLEANUP_KC`
+if [ $? -ne 0 ]; then
+    echo "Error: cannot remove the temporary keychain"
+    exit 7
+fi
+echo "Removed the temporary keychain"
+
+exit 0