changeset 6768:7a0817613afa

Merge
author asaha
date Tue, 01 Oct 2013 14:22:36 -0700
parents b3b0823d5501 3c9a6d9eafd3
children 1bb6eaa200ca
files .hgtags make/sun/awt/FILES_c_macosx.gmk make/sun/awt/FILES_export_macosx.gmk src/macosx/classes/com/apple/resources/MacOSXResourceBundle.java src/macosx/native/com/apple/resources/MacOSXResourceBundle.m src/share/classes/java/util/TimeZone.java src/share/classes/javax/management/MBeanNotificationInfo.java src/share/classes/javax/management/remote/rmi/RMIConnector.java src/share/classes/sun/swing/SwingUtilities2.java test/java/io/IOException/LastErrorString.java
diffstat 135 files changed, 4591 insertions(+), 1670 deletions(-) [+]
line wrap: on
line diff
--- a/.hgtags	Wed Sep 18 13:51:23 2013 -0700
+++ b/.hgtags	Tue Oct 01 14:22:36 2013 -0700
@@ -341,4 +341,21 @@
 ae85cfff71e95c3a1882177779c5f681d2621410 jdk7u40-b41
 b479996d5c924128c3490165b592bf66a3034932 jdk7u40-b42
 fb25cdef17e9610db5cb89fc35c0c4abef5ad781 jdk7u40-b43
+ed444a09a5fd32237deaef6e43804e20ba4f6352 jdk7u40-b60
+55f01444cf58c8004df9a9634c1bd7ff87caa370 jdk7u25-b32
+b06abd965701459a868e88af9a3e564c0301971c jdk7u45-b01
+d23a877da2d5dad6520a268c83f183295a9e7299 jdk7u45-b02
+a56eb4f801232c409d34cd1190df4eec5fefe8a9 jdk7u45-b03
+702c8d83dd8c5b6c76fe53a694244a36d23fa860 jdk7u45-b04
+a70540e8a5e96773b83c7dc0accdb323d946c045 jdk7u45-b05
+f39399baf36761571719f6ff5dc69c514d97842d jdk7u45-b06
+a35d4a4ebcfa895202544c2f6b2d09e0b29bddfc jdk7u45-b07
+2f01847eb9530ed5ec08b1b663f3a02cac57b048 jdk7u45-b08
+6e2313d45f0c50d824531b32d3f577aa0b357551 jdk7u45-b09
+d4506b816f63330489e00ba0b9e3c6583a8a9efa jdk7u45-b10
+ee87452ba9e2b4b7d847bd2a7910a8aaeacfea7b jdk7u45-b11
+d5e393a55e6adc2f1b9aaa752a5004fa07561480 jdk7u45-b12
+34997920efe962b2e4422e2c2de8ae91cd1d563d jdk7u45-b13
+59a78e4ca635a469a763ee408b11f8e1033f2584 jdk7u45-b14
+96782fe0c38c41cc4806e27ee64b20dc647ea808 jdk7u45-b15
 db5a29c812ee25c34ce9cd97de6e0dae284a4e34 jdk7u60-b00
--- a/make/bridge/Jabswitch/Makefile	Wed Sep 18 13:51:23 2013 -0700
+++ b/make/bridge/Jabswitch/Makefile	Tue Oct 01 14:22:36 2013 -0700
@@ -53,7 +53,7 @@
 buildexe : 
 	$(CD) $(TEMPDIR)  
 	$(RC) $(RC_FLAGS) $(VERSIONINFO_RESOURCE) 
-	$(CC) $(CPPFLAGS) $(JAB_SRC) $(LDDFLAGS) $(VERSIONRES) -o $(JAB_EXE) 
+	$(CC) $(CPPFLAGS) $(JAB_SRC) $(VERSIONRES) /link $(LDDFLAGS) -out:$(JAB_EXE)
 	$(MT) /nologo /verbose /manifest $(JAB_MANIFEST_INP) /outputresource:$(JAB_EXE)  
 
 copyfilejab : 
--- a/make/com/sun/jmx/Makefile	Wed Sep 18 13:51:23 2013 -0700
+++ b/make/com/sun/jmx/Makefile	Tue Oct 01 14:22:36 2013 -0700
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 #
 # This code is free software; you can redistribute it and/or modify it
@@ -115,6 +115,8 @@
 
 ifeq ($(CROSS_COMPILE_ARCH),)
 RMIC = $(RMIC_JAVA) $(JAVA_TOOLS_FLAGS) -cp $(OUTPUTDIR)/classes sun.rmi.rmic.Main
+else
+RMIC = $(BOOT_JAVA_CMD)  $(JAVA_TOOLS_FLAGS) -cp $(OUTPUTDIR)/classes sun.rmi.rmic.Main
 endif  
 
 $(CLASSDESTDIR)/%_Stub.class: $(CLASSDESTDIR)/%.class
@@ -130,11 +132,13 @@
 	$(RMIC) -classpath "$(CLASSDESTDIR)"    \
                 -d $(CLASSDESTDIR)              \
                 -iiop -v1.2                     \
+                -emitPermissionCheck            \
                 $(subst /,.,$(<:$(CLASSDESTDIR)/%.class=%))
 	$(RMIC) $(HOTSPOT_INTERPRETER_FLAG) -classpath "$(CLASSDESTDIR)"    \
                 -d $(CLASSDESTDIR)              \
                 -iiop -v1.2                     \
                 -standardPackage                \
+                -emitPermissionCheck            \
                 $(subst /,.,$(<:$(CLASSDESTDIR)/%.class=%))
 	@$(java-vm-cleanup)
 
--- a/make/common/Program.gmk	Wed Sep 18 13:51:23 2013 -0700
+++ b/make/common/Program.gmk	Tue Oct 01 14:22:36 2013 -0700
@@ -101,17 +101,14 @@
   ifeq ($(PLATFORM), solaris)
     ifeq ($(ARCH_DATA_MODEL), 32)
       LDFLAGS += -R \$$ORIGIN/../lib/$(LIBARCH)/jli
-      LDFLAGS += -R \$$ORIGIN/../jre/lib/$(LIBARCH)/jli
     else # ! ARCH_DATA_MODEL 64-bit
       LDFLAGS += -R \$$ORIGIN/../../lib/$(LIBARCH)/jli
-      LDFLAGS += -R \$$ORIGIN/../../jre/lib/$(LIBARCH)/jli
     endif # ARCH_DATA_MODEL
   endif # PLATFORM SOLARIS
   ifeq ($(PLATFORM), linux)
     LDFLAGS += $(LDFLAG_Z_ORIGIN)
     LDFLAGS += -Wl,--allow-shlib-undefined
     LDFLAGS += -Wl,-rpath -Wl,\$$ORIGIN/../lib/$(LIBARCH)/jli
-    LDFLAGS += -Wl,-rpath -Wl,\$$ORIGIN/../jre/lib/$(LIBARCH)/jli
   endif # PLATFORM LINUX
 endif # PLATFORM linux solaris
 
--- a/make/common/Release.gmk	Wed Sep 18 13:51:23 2013 -0700
+++ b/make/common/Release.gmk	Tue Oct 01 14:22:36 2013 -0700
@@ -982,6 +982,11 @@
   endif
 	$(RM) -rf $(JDK_IMAGE_DIR)/jre/man
 	$(CHMOD) a+rx `$(FIND) $(JDK_IMAGE_DIR) -type d`
+  ifneq (,$(findstring $(PLATFORM), linux solaris)) # If linux or solaris 
+	($(CD) $(LIBDIR)/.. && $(TAR) cf - \
+	    `$(FIND) lib -name $(LIB_PREFIX)jli.$(LIB_SUFFIX) -print `) | \
+	    ($(CD) $(JDK_IMAGE_DIR) && $(TAR) xf -)
+  endif # PLATFORM
 
 initial-image-jdk64-bindemos:
 	for dir in bin demo ; do \
@@ -1030,7 +1035,7 @@
 		    initial-image-jdk-db \
 		    $(JDK_DOCFILES) \
 		    $(JDK_DEMOS_AND_SAMPLES_DOCFILES)
-	$(MKDIR) $(JDK_IMAGE_DIR)/lib
+	$(MKDIR) -p $(JDK_IMAGE_DIR)/lib
 	@#
 	@# Copy in the jars in lib that only belong in the JDK
 	@#
--- a/make/common/shared/Defs.gmk	Wed Sep 18 13:51:23 2013 -0700
+++ b/make/common/shared/Defs.gmk	Tue Oct 01 14:22:36 2013 -0700
@@ -296,10 +296,8 @@
   RELEASE      = $(JDK_VERSION)$(BUILD_VARIANT_RELEASE)
 endif
 
-# FULL_VERSION is RELEASE and -BUILD_NUMBER if BUILD_NUMBER is set
-ifdef BUILD_NUMBER
-  FULL_VERSION = $(RELEASE)-$(BUILD_NUMBER)
-else
+# Define default USER_RELEASE_SUFFIX if BUILD_NUMBER and USER_RELEASE_SUFFIX are not set
+ifndef BUILD_NUMBER
   BUILD_NUMBER = b00
   ifndef USER_RELEASE_SUFFIX
     BUILD_DATE := $(shell $(DATE) '+%Y_%m_%d_%H_%M')
@@ -307,6 +305,12 @@
     USER_RELEASE_SUFFIX := $(shell $(ECHO) "$(CLEAN_USERNAME)_$(BUILD_DATE)" | $(TR) '[:upper:]' '[:lower:]' )
   endif
   export USER_RELEASE_SUFFIX
+endif
+
+# FULL_VERSION is RELEASE and BUILD_NUMBER if USER_RELEASE_SUFFIX is not set
+ifndef USER_RELEASE_SUFFIX
+  FULL_VERSION = $(RELEASE)-$(BUILD_NUMBER)
+else
   FULL_VERSION = $(RELEASE)-$(USER_RELEASE_SUFFIX)-$(BUILD_NUMBER)
 endif
 
--- a/make/java/management/mapfile-vers	Wed Sep 18 13:51:23 2013 -0700
+++ b/make/java/management/mapfile-vers	Tue Oct 01 14:22:36 2013 -0700
@@ -53,7 +53,7 @@
 	    Java_sun_management_GcInfoBuilder_fillGcAttributeInfo;
 	    Java_sun_management_GcInfoBuilder_getLastGcInfo0;
 	    Java_sun_management_GcInfoBuilder_getNumGcExtAttributes;
-	    Java_sun_management_HotSpotDiagnostic_dumpHeap;
+	    Java_sun_management_HotSpotDiagnostic_dumpHeap0;
 	    Java_sun_management_HotspotThread_getInternalThreadCount;
 	    Java_sun_management_HotspotThread_getInternalThreadTimes0;
 	    Java_sun_management_MemoryImpl_getMemoryManagers0;
--- a/make/sun/awt/FILES_c_macosx.gmk	Wed Sep 18 13:51:23 2013 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,28 +0,0 @@
-#
-# Copyright (c) 1995, 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.
-#
-
-FILES_AWT_objc = \
-        $(TARGDIR)MacOSXResourceBundle.m
-
--- a/make/sun/awt/FILES_export_macosx.gmk	Wed Sep 18 13:51:23 2013 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-#
-# Copyright (c) 1995, 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.
-#
-
-# FILES_export definitions for Mac OS X
-
-FILES_export += \
-	com/apple/resources/MacOSXResourceBundle.java
--- a/make/sun/awt/Makefile	Wed Sep 18 13:51:23 2013 -0700
+++ b/make/sun/awt/Makefile	Tue Oct 01 14:22:36 2013 -0700
@@ -145,8 +145,6 @@
 #
 # Files
 #
-include FILES_c_macosx.gmk
-include FILES_export_macosx.gmk
 
 FILES_objc = $(FILES_AWT_objc)
 OTHER_LDLIBS = -lmlib_image $(JVMLIB) $(LIBM) \
--- a/make/sun/font/Makefile	Wed Sep 18 13:51:23 2013 -0700
+++ b/make/sun/font/Makefile	Tue Oct 01 14:22:36 2013 -0700
@@ -36,7 +36,11 @@
 CPLUSPLUSLIBRARY=true
 
 # Use higher optimization level
-OPTIMIZATION_LEVEL = HIGHER
+ifeq ($(PLATFORM), windows)
+  OPTIMIZATION_LEVEL = HIGHEST
+else
+  OPTIMIZATION_LEVEL = HIGHER
+endif
 
 include $(BUILDDIR)/common/Defs.gmk
 
--- a/make/sun/nio/cs/FILES_java.gmk	Wed Sep 18 13:51:23 2013 -0700
+++ b/make/sun/nio/cs/FILES_java.gmk	Tue Oct 01 14:22:36 2013 -0700
@@ -329,6 +329,7 @@
 	sun/nio/cs/ext/IBM280.java \
 	sun/nio/cs/ext/IBM284.java \
 	sun/nio/cs/ext/IBM285.java \
+	sun/nio/cs/ext/IBM290.java \
 	sun/nio/cs/ext/IBM297.java \
 	sun/nio/cs/ext/IBM420.java \
 	sun/nio/cs/ext/IBM424.java \
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make/tools/CharsetMapping/IBM290.c2b	Tue Oct 01 14:22:36 2013 -0700
@@ -0,0 +1,100 @@
+# 
+# Diff of 
+# b2c: cdctables.zip/Package2.zip/IBM-290.zip/012234B0.TPMAP100
+# c2b: cdctables.zip/Package2.zip/IBM-290.zip/012234B0.UPMAP100
+#
+# fullwidth form
+0x4B    U+FF0E
+0x4C    U+FF1C
+0x4D    U+FF08
+0x4E    U+FF0B
+0x4F    U+FF5C
+0x50    U+FF06
+0x5A    U+FF01
+0x5C    U+FF0A
+0x5D    U+FF09
+0x5E    U+FF1B
+0x60    U+FF0D
+0x61    U+FF0F
+0x62    U+FF41
+0x63    U+FF42
+0x64    U+FF43
+0x65    U+FF44
+0x66    U+FF45
+0x67    U+FF46
+0x68    U+FF47
+0x69    U+FF48
+0x6B    U+FF0C
+0x6C    U+FF05
+0x6D    U+FF3F
+0x6E    U+FF1E
+0x6F    U+FF1F
+0x70    U+FF3B
+0x71    U+FF49
+0x72    U+FF4A
+0x73    U+FF4B
+0x74    U+FF4C
+0x75    U+FF4D
+0x76    U+FF4E
+0x77    U+FF4F
+0x78    U+FF50
+0x79    U+FF40
+0x7A    U+FF1A
+0x7B    U+FF03
+0x7C    U+FF20
+0x7D    U+FF07
+0x7E    U+FF1D
+0x7F    U+FF02
+0x80    U+FF3D
+0x8B    U+FF51
+0x9B    U+FF52
+0xA0    U+FF5E
+0xAB    U+FF53
+0xB0    U+FF3E
+0xB2    U+FF3C
+0xB3    U+FF54
+0xB4    U+FF55
+0xB5    U+FF56
+0xB6    U+FF57
+0xB7    U+FF58
+0xB8    U+FF59
+0xB9    U+FF5A
+0xC0    U+FF5B
+0xC1    U+FF21
+0xC2    U+FF22
+0xC3    U+FF23
+0xC4    U+FF24
+0xC5    U+FF25
+0xC6    U+FF26
+0xC7    U+FF27
+0xC8    U+FF28
+0xC9    U+FF29
+0xD0    U+FF5D
+0xD1    U+FF2A
+0xD2    U+FF2B
+0xD3    U+FF2C
+0xD4    U+FF2D
+0xD5    U+FF2E
+0xD6    U+FF2F
+0xD7    U+FF30
+0xD8    U+FF31
+0xD9    U+FF32
+0xE0    U+FF04
+0xE2    U+FF33
+0xE3    U+FF34
+0xE4    U+FF35
+0xE5    U+FF36
+0xE6    U+FF37
+0xE7    U+FF38
+0xE8    U+FF39
+0xE9    U+FF3A
+0xF0    U+FF10
+0xF1    U+FF11
+0xF2    U+FF12
+0xF3    U+FF13
+0xF4    U+FF14
+0xF5    U+FF15
+0xF6    U+FF16
+0xF7    U+FF17
+0xF8    U+FF18
+0xF9    U+FF19
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make/tools/CharsetMapping/IBM290.map	Tue Oct 01 14:22:36 2013 -0700
@@ -0,0 +1,232 @@
+#
+# b2c mapping for IBM290, generated from
+# cdctables.zip/Package2.zip/IBM-290.zip/012234B0.TPMAP100
+#
+0x00    U+0000
+0x01    U+0001
+0x02    U+0002
+0x03    U+0003
+0x04    U+009C
+0x05    U+0009
+0x06    U+0086
+0x07    U+007F
+0x08    U+0097
+0x09    U+008D
+0x0A    U+008E
+0x0B    U+000B
+0x0C    U+000C
+0x0D    U+000D
+0x0E    U+000E
+0x0F    U+000F
+0x10    U+0010
+0x11    U+0011
+0x12    U+0012
+0x13    U+0013
+0x14    U+009D
+0x15    U+0085
+0x16    U+0008
+0x17    U+0087
+0x18    U+0018
+0x19    U+0019
+0x1A    U+0092
+0x1B    U+008F
+0x1C    U+001C
+0x1D    U+001D
+0x1E    U+001E
+0x1F    U+001F
+0x20    U+0080
+0x21    U+0081
+0x22    U+0082
+0x23    U+0083
+0x24    U+0084
+0x25    U+000A
+0x26    U+0017
+0x27    U+001B
+0x28    U+0088
+0x29    U+0089
+0x2A    U+008A
+0x2B    U+008B
+0x2C    U+008C
+0x2D    U+0005
+0x2E    U+0006
+0x2F    U+0007
+0x30    U+0090
+0x31    U+0091
+0x32    U+0016
+0x33    U+0093
+0x34    U+0094
+0x35    U+0095
+0x36    U+0096
+0x37    U+0004
+0x38    U+0098
+0x39    U+0099
+0x3A    U+009A
+0x3B    U+009B
+0x3C    U+0014
+0x3D    U+0015
+0x3E    U+009E
+0x3F    U+001A
+0x40    U+0020
+0x41    U+FF61
+0x42    U+FF62
+0x43    U+FF63
+0x44    U+FF64
+0x45    U+FF65
+0x46    U+FF66
+0x47    U+FF67
+0x48    U+FF68
+0x49    U+FF69
+0x4A    U+00A3
+0x4B    U+002E
+0x4C    U+003C
+0x4D    U+0028
+0x4E    U+002B
+0x4F    U+007C
+0x50    U+0026
+0x51    U+FF6A
+0x52    U+FF6B
+0x53    U+FF6C
+0x54    U+FF6D
+0x55    U+FF6E
+0x56    U+FF6F
+0x58    U+FF70
+0x5A    U+0021
+0x5B    U+00A5
+0x5C    U+002A
+0x5D    U+0029
+0x5E    U+003B
+0x5F    U+00AC
+0x60    U+002D
+0x61    U+002F
+0x62    U+0061
+0x63    U+0062
+0x64    U+0063
+0x65    U+0064
+0x66    U+0065
+0x67    U+0066
+0x68    U+0067
+0x69    U+0068
+0x6B    U+002C
+0x6C    U+0025
+0x6D    U+005F
+0x6E    U+003E
+0x6F    U+003F
+0x70    U+005B
+0x71    U+0069
+0x72    U+006A
+0x73    U+006B
+0x74    U+006C
+0x75    U+006D
+0x76    U+006E
+0x77    U+006F
+0x78    U+0070
+0x79    U+0060
+0x7A    U+003A
+0x7B    U+0023
+0x7C    U+0040
+0x7D    U+0027
+0x7E    U+003D
+0x7F    U+0022
+0x80    U+005D
+0x81    U+FF71
+0x82    U+FF72
+0x83    U+FF73
+0x84    U+FF74
+0x85    U+FF75
+0x86    U+FF76
+0x87    U+FF77
+0x88    U+FF78
+0x89    U+FF79
+0x8A    U+FF7A
+0x8B    U+0071
+0x8C    U+FF7B
+0x8D    U+FF7C
+0x8E    U+FF7D
+0x8F    U+FF7E
+0x90    U+FF7F
+0x91    U+FF80
+0x92    U+FF81
+0x93    U+FF82
+0x94    U+FF83
+0x95    U+FF84
+0x96    U+FF85
+0x97    U+FF86
+0x98    U+FF87
+0x99    U+FF88
+0x9A    U+FF89
+0x9B    U+0072
+0x9D    U+FF8A
+0x9E    U+FF8B
+0x9F    U+FF8C
+0xA0    U+007E
+0xA1    U+203E
+0xA2    U+FF8D
+0xA3    U+FF8E
+0xA4    U+FF8F
+0xA5    U+FF90
+0xA6    U+FF91
+0xA7    U+FF92
+0xA8    U+FF93
+0xA9    U+FF94
+0xAA    U+FF95
+0xAB    U+0073
+0xAC    U+FF96
+0xAD    U+FF97
+0xAE    U+FF98
+0xAF    U+FF99
+0xB0    U+005E
+0xB1    U+00A2
+0xB2    U+005C
+0xB3    U+0074
+0xB4    U+0075
+0xB5    U+0076
+0xB6    U+0077
+0xB7    U+0078
+0xB8    U+0079
+0xB9    U+007A
+0xBA    U+FF9A
+0xBB    U+FF9B
+0xBC    U+FF9C
+0xBD    U+FF9D
+0xBE    U+FF9E
+0xBF    U+FF9F
+0xC0    U+007B
+0xC1    U+0041
+0xC2    U+0042
+0xC3    U+0043
+0xC4    U+0044
+0xC5    U+0045
+0xC6    U+0046
+0xC7    U+0047
+0xC8    U+0048
+0xC9    U+0049
+0xD0    U+007D
+0xD1    U+004A
+0xD2    U+004B
+0xD3    U+004C
+0xD4    U+004D
+0xD5    U+004E
+0xD6    U+004F
+0xD7    U+0050
+0xD8    U+0051
+0xD9    U+0052
+0xE0    U+0024
+0xE2    U+0053
+0xE3    U+0054
+0xE4    U+0055
+0xE5    U+0056
+0xE6    U+0057
+0xE7    U+0058
+0xE8    U+0059
+0xE9    U+005A
+0xF0    U+0030
+0xF1    U+0031
+0xF2    U+0032
+0xF3    U+0033
+0xF4    U+0034
+0xF5    U+0035
+0xF6    U+0036
+0xF7    U+0037
+0xF8    U+0038
+0xF9    U+0039
+0xFF    U+009F
--- a/make/tools/CharsetMapping/extsbcs	Wed Sep 18 13:51:23 2013 -0700
+++ b/make/tools/CharsetMapping/extsbcs	Tue Oct 01 14:22:36 2013 -0700
@@ -28,6 +28,7 @@
 IBM280		IBM280		Cp280		false		sun.nio.cs.ext
 IBM284		IBM284		Cp284		false		sun.nio.cs.ext
 IBM285		IBM285		Cp285		false		sun.nio.cs.ext
+IBM290		IBM290		Cp290		false		sun.nio.cs.ext
 IBM297		IBM297		Cp297		false		sun.nio.cs.ext
 IBM420		IBM420		Cp420		false		sun.nio.cs.ext
 IBM424		IBM424		Cp424		false		sun.nio.cs.ext
--- a/src/macosx/classes/com/apple/laf/AquaLookAndFeel.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/macosx/classes/com/apple/laf/AquaLookAndFeel.java	Tue Oct 01 14:22:36 2013 -0700
@@ -37,8 +37,6 @@
 import sun.swing.*;
 import apple.laf.*;
 
-import com.apple.resources.MacOSXResourceBundle;
-
 public class AquaLookAndFeel extends BasicLookAndFeel {
     static final String sOldPropertyPrefix = "com.apple.macos."; // old prefix for things like 'useScreenMenuBar'
     static final String sPropertyPrefix = "apple.laf."; // new prefix for things like 'useScreenMenuBar'
@@ -246,7 +244,7 @@
         table.setDefaultLocale(Locale.getDefault());
         table.addResourceBundle(PKG_PREFIX + "resources.aqua");
         try {
-            final ResourceBundle aquaProperties = MacOSXResourceBundle.getMacResourceBundle(PKG_PREFIX + "resources.aqua");
+            final ResourceBundle aquaProperties = ResourceBundle.getBundle(PKG_PREFIX + "resources.aqua");
             final Enumeration<String> propertyKeys = aquaProperties.getKeys();
 
             while (propertyKeys.hasMoreElements()) {
--- a/src/macosx/classes/com/apple/laf/AquaUtils.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/macosx/classes/com/apple/laf/AquaUtils.java	Tue Oct 01 14:22:36 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -29,6 +29,7 @@
 import java.awt.image.*;
 import java.lang.ref.SoftReference;
 import java.lang.reflect.Method;
+import java.security.AccessController;
 import java.security.PrivilegedAction;
 import java.util.*;
 
@@ -41,56 +42,68 @@
 import sun.lwawt.macosx.CImage;
 import sun.lwawt.macosx.CImage.Creator;
 import sun.lwawt.macosx.CPlatformWindow;
+import sun.misc.Launcher;
+import sun.reflect.misc.ReflectUtil;
+import sun.security.action.GetPropertyAction;
 import sun.swing.SwingUtilities2;
 
 import com.apple.laf.AquaImageFactory.SlicedImageControl;
 
-public class AquaUtils {
-    final static String ANIMATIONS_SYSTEM_PROPERTY = "swing.enableAnimations";
+final class AquaUtils {
 
-    /*
+    private static final String ANIMATIONS_PROPERTY = "swing.enableAnimations";
+
+    /**
+     * Suppresses default constructor, ensuring non-instantiability.
+     */
+    private AquaUtils() {
+    }
+
+    /**
      * Convenience function for determining ComponentOrientation.  Helps us
      * avoid having Munge directives throughout the code.
      */
-    public static boolean isLeftToRight(final Component c) {
+    static boolean isLeftToRight(final Component c) {
         return c.getComponentOrientation().isLeftToRight();
     }
 
-    public static void enforceComponentOrientation(Component c, ComponentOrientation orientation) {
+    static void enforceComponentOrientation(final Component c, final ComponentOrientation orientation) {
         c.setComponentOrientation(orientation);
         if (c instanceof Container) {
-            for (Component child : ((Container)c).getComponents()) {
+            for (final Component child : ((Container)c).getComponents()) {
                 enforceComponentOrientation(child, orientation);
             }
         }
     }
 
-    private static CImage.Creator getCImageCreatorInternal() {
-        return java.security.AccessController.doPrivileged(new PrivilegedAction<CImage.Creator>() {
+    private static Creator getCImageCreatorInternal() {
+        return AccessController.doPrivileged(new PrivilegedAction<Creator>() {
+            @Override
             public Creator run() {
                 try {
                     final Method getCreatorMethod = CImage.class.getDeclaredMethod("getCreator", new Class[] {});
                     getCreatorMethod.setAccessible(true);
-                    return (CImage.Creator)getCreatorMethod.invoke(null, new Object[] {});
-                } catch (final Exception e) {
+                    return (Creator)getCreatorMethod.invoke(null, new Object[] {});
+                } catch (final Exception ignored) {
                     return null;
                 }
             }
         });
     }
 
-    private static final RecyclableSingleton<CImage.Creator> cImageCreator = new RecyclableSingleton<CImage.Creator>() {
+    private static final RecyclableSingleton<Creator> cImageCreator = new RecyclableSingleton<Creator>() {
         @Override
         protected Creator getInstance() {
             return getCImageCreatorInternal();
         }
     };
-    static CImage.Creator getCImageCreator() {
+    static Creator getCImageCreator() {
         return cImageCreator.get();
     }
 
-    protected static Image generateSelectedDarkImage(final Image image) {
+    static Image generateSelectedDarkImage(final Image image) {
         final ImageProducer prod = new FilteredImageSource(image.getSource(), new IconImageFilter() {
+            @Override
             int getGreyFor(final int gray) {
                 return gray * 75 / 100;
             }
@@ -98,8 +111,9 @@
         return Toolkit.getDefaultToolkit().createImage(prod);
     }
 
-    protected static Image generateDisabledImage(final Image image) {
+    static Image generateDisabledImage(final Image image) {
         final ImageProducer prod = new FilteredImageSource(image.getSource(), new IconImageFilter() {
+            @Override
             int getGreyFor(final int gray) {
                 return 255 - ((255 - gray) * 65 / 100);
             }
@@ -107,19 +121,20 @@
         return Toolkit.getDefaultToolkit().createImage(prod);
     }
 
-    protected static Image generateLightenedImage(final Image image, final int percent) {
+    static Image generateLightenedImage(final Image image, final int percent) {
         final GrayFilter filter = new GrayFilter(true, percent);
         final ImageProducer prod = new FilteredImageSource(image.getSource(), filter);
         return Toolkit.getDefaultToolkit().createImage(prod);
     }
 
-    static abstract class IconImageFilter extends RGBImageFilter {
-        public IconImageFilter() {
+    private abstract static class IconImageFilter extends RGBImageFilter {
+        IconImageFilter() {
             super();
             canFilterIndexColorModel = true;
         }
 
-        public int filterRGB(final int x, final int y, final int rgb) {
+        @Override
+        public final int filterRGB(final int x, final int y, final int rgb) {
             final int red = (rgb >> 16) & 0xff;
             final int green = (rgb >> 8) & 0xff;
             final int blue = rgb & 0xff;
@@ -135,14 +150,14 @@
             return result;
         }
 
-        abstract int getGreyFor(final int gray);
+        abstract int getGreyFor(int gray);
     }
 
-    public abstract static class RecyclableObject<T> {
-        protected SoftReference<T> objectRef = null;
+    abstract static class RecyclableObject<T> {
+        private SoftReference<T> objectRef;
 
-        public T get() {
-            T referent = null;
+        T get() {
+            T referent;
             if (objectRef != null && (referent = objectRef.get()) != null) return referent;
             referent = create();
             objectRef = new SoftReference<T>(referent);
@@ -152,8 +167,8 @@
         protected abstract T create();
     }
 
-    public abstract static class RecyclableSingleton<T> {
-        public T get() {
+    abstract static class RecyclableSingleton<T> {
+        final T get() {
             final AppContext appContext = AppContext.getAppContext();
             SoftReference<T> ref = (SoftReference<T>) appContext.get(this);
             if (ref != null) {
@@ -166,38 +181,36 @@
             return object;
         }
 
-        public void reset() {
-            AppContext appContext = AppContext.getAppContext();
-            appContext.remove(this);
+        void reset() {
+            AppContext.getAppContext().remove(this);
         }
 
-        protected abstract T getInstance();
+        abstract T getInstance();
     }
 
-    public static class RecyclableSingletonFromDefaultConstructor<T> extends RecyclableSingleton<T> {
-        protected final Class<T> clazz;
+    static class RecyclableSingletonFromDefaultConstructor<T> extends RecyclableSingleton<T> {
+        private final Class<T> clazz;
 
-        public RecyclableSingletonFromDefaultConstructor(final Class<T> clazz) {
+        RecyclableSingletonFromDefaultConstructor(final Class<T> clazz) {
             this.clazz = clazz;
         }
 
-        protected T getInstance() {
+        @Override
+        T getInstance() {
             try {
+                ReflectUtil.checkPackageAccess(clazz);
                 return clazz.newInstance();
-            } catch (final InstantiationException e) {
-                e.printStackTrace();
-            } catch (final IllegalAccessException e) {
-                e.printStackTrace();
+            } catch (InstantiationException | IllegalAccessException ignored) {
             }
             return null;
         }
     }
 
-    public abstract static class LazyKeyedSingleton<K, V> {
-        protected Map<K, V> refs;
+    abstract static class LazyKeyedSingleton<K, V> {
+        private Map<K, V> refs;
 
-        public V get(final K key) {
-            if (refs == null) refs = new HashMap<K, V>();
+        V get(final K key) {
+            if (refs == null) refs = new HashMap<>();
 
             final V cachedValue = refs.get(key);
             if (cachedValue != null) return cachedValue;
@@ -207,44 +220,45 @@
             return value;
         }
 
-        protected abstract V getInstance(final K key);
+        protected abstract V getInstance(K key);
     }
 
-    static final RecyclableSingleton<Boolean> enableAnimations = new RecyclableSingleton<Boolean>() {
+    private static final RecyclableSingleton<Boolean> enableAnimations = new RecyclableSingleton<Boolean>() {
         @Override
         protected Boolean getInstance() {
-            final String sizeProperty = (String)java.security.AccessController.doPrivileged((PrivilegedAction<?>)new sun.security.action.GetPropertyAction(ANIMATIONS_SYSTEM_PROPERTY));
-            return new Boolean(!"false".equals(sizeProperty)); // should be true by default
+            final String sizeProperty = (String) AccessController.doPrivileged((PrivilegedAction<?>)new GetPropertyAction(
+                    ANIMATIONS_PROPERTY));
+            return !"false".equals(sizeProperty); // should be true by default
         }
     };
-    static boolean animationsEnabled() {
+    private static boolean animationsEnabled() {
         return enableAnimations.get();
     }
 
-    static final int MENU_BLINK_DELAY = 50; // 50ms == 3/60 sec, according to the spec
-    protected static void blinkMenu(final Selectable selectable) {
+    private static final int MENU_BLINK_DELAY = 50; // 50ms == 3/60 sec, according to the spec
+    static void blinkMenu(final Selectable selectable) {
         if (!animationsEnabled()) return;
         try {
             selectable.paintSelected(false);
             Thread.sleep(MENU_BLINK_DELAY);
             selectable.paintSelected(true);
             Thread.sleep(MENU_BLINK_DELAY);
-        } catch (final InterruptedException e) { }
+        } catch (final InterruptedException ignored) { }
     }
 
     interface Selectable {
-        void paintSelected(final boolean selected);
+        void paintSelected(boolean selected);
     }
 
     interface JComponentPainter {
-        public void paint(JComponent c, Graphics g, int x, int y, int w, int h);
+        void paint(JComponent c, Graphics g, int x, int y, int w, int h);
     }
 
     interface Painter {
-        public void paint(final Graphics g, int x, int y, int w, int h);
+        void paint(Graphics g, int x, int y, int w, int h);
     }
 
-    public static void paintDropShadowText(final Graphics g, final JComponent c, final Font font, final FontMetrics metrics, final int x, final int y, final int offsetX, final int offsetY, final Color textColor, final Color shadowColor, final String text) {
+    static void paintDropShadowText(final Graphics g, final JComponent c, final Font font, final FontMetrics metrics, final int x, final int y, final int offsetX, final int offsetY, final Color textColor, final Color shadowColor, final String text) {
         g.setFont(font);
         g.setColor(shadowColor);
         SwingUtilities2.drawString(c, g, text, x + offsetX, y + offsetY + metrics.getAscent());
@@ -252,22 +266,22 @@
         SwingUtilities2.drawString(c, g, text, x, y + metrics.getAscent());
     }
 
-    public static class ShadowBorder implements Border {
-        final Painter prePainter;
-        final Painter postPainter;
+    static class ShadowBorder implements Border {
+        private final Painter prePainter;
+        private final Painter postPainter;
 
-        final int offsetX;
-        final int offsetY;
-        final float distance;
-        final int blur;
-        final Insets insets;
-        final ConvolveOp blurOp;
+        private final int offsetX;
+        private final int offsetY;
+        private final float distance;
+        private final int blur;
+        private final Insets insets;
+        private final ConvolveOp blurOp;
 
-        public ShadowBorder(final Painter prePainter, final Painter postPainter, final int offsetX, final int offsetY, final float distance, final float intensity, final int blur) {
+        ShadowBorder(final Painter prePainter, final Painter postPainter, final int offsetX, final int offsetY, final float distance, final float intensity, final int blur) {
             this.prePainter = prePainter; this.postPainter = postPainter;
             this.offsetX = offsetX; this.offsetY = offsetY; this.distance = distance; this.blur = blur;
             final int halfBlur = blur / 2;
-            this.insets = new Insets(halfBlur - offsetY, halfBlur - offsetX, halfBlur + offsetY, halfBlur + offsetX);
+            insets = new Insets(halfBlur - offsetY, halfBlur - offsetX, halfBlur + offsetY, halfBlur + offsetX);
 
             final float blurry = intensity / (blur * blur);
             final float[] blurKernel = new float[blur * blur];
@@ -275,14 +289,17 @@
             blurOp = new ConvolveOp(new Kernel(blur, blur, blurKernel));
         }
 
-        public boolean isBorderOpaque() {
+        @Override
+        public final boolean isBorderOpaque() {
             return false;
         }
 
-        public Insets getBorderInsets(final Component c) {
+        @Override
+        public final Insets getBorderInsets(final Component c) {
             return insets;
         }
 
+        @Override
         public void paintBorder(final Component c, final Graphics g, final int x, final int y, final int width, final int height) {
             final BufferedImage img = new BufferedImage(width + blur * 2, height + blur * 2, BufferedImage.TYPE_INT_ARGB_PRE);
             paintToImage(img, x, y, width, height);
@@ -290,7 +307,7 @@
             g.drawImage(img, -blur, -blur, null);
         }
 
-        protected void paintToImage(final BufferedImage img, final int x, final int y, final int width, final int height) {
+        private void paintToImage(final BufferedImage img, final int x, final int y, final int width, final int height) {
             // clear the prior image
             Graphics2D imgG = (Graphics2D)img.getGraphics();
             imgG.setComposite(AlphaComposite.Clear);
@@ -319,10 +336,10 @@
         }
     }
 
-    public static class SlicedShadowBorder extends ShadowBorder {
-        final SlicedImageControl slices;
+    static class SlicedShadowBorder extends ShadowBorder {
+        private final SlicedImageControl slices;
 
-        public SlicedShadowBorder(final Painter prePainter, final Painter postPainter, final int offsetX, final int offsetY, final float distance, final float intensity, final int blur, final int templateWidth, final int templateHeight, final int leftCut, final int topCut, final int rightCut, final int bottomCut) {
+        SlicedShadowBorder(final Painter prePainter, final Painter postPainter, final int offsetX, final int offsetY, final float distance, final float intensity, final int blur, final int templateWidth, final int templateHeight, final int leftCut, final int topCut, final int rightCut, final int bottomCut) {
             super(prePainter, postPainter, offsetX, offsetY, distance, intensity, blur);
 
             final BufferedImage i = new BufferedImage(templateWidth, templateHeight, BufferedImage.TYPE_INT_ARGB_PRE);
@@ -331,15 +348,12 @@
             slices = new SlicedImageControl(i, leftCut, topCut, rightCut, bottomCut, false);
         }
 
+        @Override
         public void paintBorder(final Component c, final Graphics g, final int x, final int y, final int width, final int height) {
             slices.paint(g, x, y, width, height);
         }
     }
 
-    public interface NineSliceMetricsProvider {
-
-    }
-
 //    static void debugFrame(String name, Image image) {
 //        JFrame f = new JFrame(name);
 //        f.setContentPane(new JLabel(new ImageIcon(image)));
@@ -350,28 +364,30 @@
     // special casing naughty applications, like InstallAnywhere
     // <rdar://problem/4851533> REGR: JButton: Myst IV: the buttons of 1.0.3 updater have redraw issue
     static boolean shouldUseOpaqueButtons() {
-        final ClassLoader launcherClassLoader = sun.misc.Launcher.getLauncher().getClassLoader();
+        final ClassLoader launcherClassLoader = Launcher.getLauncher().getClassLoader();
         if (classExists(launcherClassLoader, "com.installshield.wizard.platform.macosx.MacOSXUtils")) return true;
         return false;
     }
 
-    static boolean classExists(final ClassLoader classLoader, final String clazzName) {
+    private static boolean classExists(final ClassLoader classLoader, final String clazzName) {
         try {
             return Class.forName(clazzName, false, classLoader) != null;
-        } catch (final Throwable e) { }
+        } catch (final Throwable ignored) { }
         return false;
     }
 
-    private static RecyclableSingleton<Method> getJComponentGetFlagMethod = new RecyclableSingleton<Method>() {
+    private static final RecyclableSingleton<Method> getJComponentGetFlagMethod = new RecyclableSingleton<Method>() {
+        @Override
         protected Method getInstance() {
-            return java.security.AccessController.doPrivileged(
+            return AccessController.doPrivileged(
                 new PrivilegedAction<Method>() {
+                    @Override
                     public Method run() {
                         try {
                             final Method method = JComponent.class.getDeclaredMethod("getFlag", new Class[] { int.class });
                             method.setAccessible(true);
                             return method;
-                        } catch (final Throwable e) {
+                        } catch (final Throwable ignored) {
                             return null;
                         }
                     }
@@ -380,18 +396,18 @@
         }
     };
 
-    private static final Integer OPAQUE_SET_FLAG = new Integer(24); // private int JComponent.OPAQUE_SET
-    protected static boolean hasOpaqueBeenExplicitlySet(final JComponent c) {
+    private static final Integer OPAQUE_SET_FLAG = 24; // private int JComponent.OPAQUE_SET
+    static boolean hasOpaqueBeenExplicitlySet(final JComponent c) {
         final Method method = getJComponentGetFlagMethod.get();
         if (method == null) return false;
         try {
             return Boolean.TRUE.equals(method.invoke(c, OPAQUE_SET_FLAG));
-        } catch (final Throwable e) {
+        } catch (final Throwable ignored) {
             return false;
         }
     }
 
-    protected static boolean isWindowTextured(final Component c) {
+    private static boolean isWindowTextured(final Component c) {
         if (!(c instanceof JComponent)) {
             return false;
         }
@@ -412,13 +428,12 @@
         return new Color(color.getRed(), color.getGreen(), color.getBlue(), 0);
     }
 
-    protected static void fillRect(final Graphics g, final Component c) {
+    static void fillRect(final Graphics g, final Component c) {
         fillRect(g, c, c.getBackground(), 0, 0, c.getWidth(), c.getHeight());
     }
 
-    protected static void fillRect(final Graphics g, final Component c,
-                                   final Color color, final int x, final int y,
-                                   final int w, final int h) {
+    static void fillRect(final Graphics g, final Component c, final Color color,
+                         final int x, final int y, final int w, final int h) {
         if (!(g instanceof Graphics2D)) {
             return;
         }
--- a/src/macosx/classes/com/apple/laf/ScreenMenu.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/macosx/classes/com/apple/laf/ScreenMenu.java	Tue Oct 01 14:22:36 2013 -0700
@@ -37,26 +37,31 @@
 import sun.lwawt.LWToolkit;
 import sun.lwawt.macosx.*;
 
-class ScreenMenu extends Menu implements ContainerListener, ComponentListener, ScreenMenuPropertyHandler {
+final class ScreenMenu extends Menu
+        implements ContainerListener, ComponentListener,
+                   ScreenMenuPropertyHandler {
+
     static {
         java.security.AccessController.doPrivileged((PrivilegedAction<?>)new sun.security.action.LoadLibraryAction("awt"));
     }
 
     // screen menu stuff
-    public static native long addMenuListeners(ScreenMenu listener, long nativeMenu);
-    public static native void removeMenuListeners(long modelPtr);
+    private static native long addMenuListeners(ScreenMenu listener, long nativeMenu);
+    private static native void removeMenuListeners(long modelPtr);
 
-    long fModelPtr = 0;
+    private transient long fModelPtr;
 
-    Hashtable<Component, MenuItem> fItems;
-    JMenu fInvoker;
+    private final Hashtable<Component, MenuItem> fItems;
+    private final JMenu fInvoker;
 
-    Component fLastMouseEventTarget;
-    Rectangle fLastTargetRect;
+    private Component fLastMouseEventTarget;
+    private Rectangle fLastTargetRect;
     private volatile Rectangle[] fItemBounds;
 
+    private ScreenMenuPropertyListener fPropertyListener;
+
     // Array of child hashes used to see if we need to recreate the Menu.
-    int childHashArray[];
+    private int childHashArray[];
 
     ScreenMenu(final JMenu invoker) {
         super(invoker.getText());
@@ -69,25 +74,12 @@
         updateItems();
     }
 
-    // I'm always 'visible', but never on screen
-    static class ScreenMenuComponent extends Container {
-        public boolean isVisible() { return true; }
-        public boolean isShowing() { return true; }
-        public void setVisible(final boolean b) {}
-        public void show() {}
-    }
-
-    ScreenMenuComponent makeScreenMenuComponent() {
-        return new ScreenMenuComponent();
-    }
-
-
     /**
      * Determine if we need to tear down the Menu and re-create it, since the contents may have changed in the Menu opened listener and
      * we do not get notified of it, because EDT is busy in our code. We only need to update if the menu contents have changed in some
      * way, such as the number of menu items, the text of the menuitems, icon, shortcut etc.
      */
-    static boolean needsUpdate(final Component items[], final int childHashArray[]) {
+    private static boolean needsUpdate(final Component items[], final int childHashArray[]) {
       if (items == null || childHashArray == null) {
         return true;
       }
@@ -107,7 +99,7 @@
      * Used to recreate the AWT based Menu structure that implements the Screen Menu.
      * Also computes hashcode and stores them so that we can compare them later in needsUpdate.
      */
-    void updateItems() {
+    private void updateItems() {
         final int count = fInvoker.getMenuComponentCount();
         final Component[] items = fInvoker.getMenuComponents();
         if (needsUpdate(items, childHashArray)) {
@@ -158,16 +150,14 @@
             LWCToolkit.invokeAndWait(new Runnable() {
                 public void run() {
                     invoker.setSelected(false);
-
-            // Null out the tracking rectangles and the array.
+                    // Null out the tracking rectangles and the array.
                     if (fItemBounds != null) {
-            for (int i = 0; i < fItemBounds.length; i++) {
-                fItemBounds[i] = null;
-            }
+                        for (int i = 0; i < fItemBounds.length; i++) {
+                            fItemBounds[i] = null;
+                        }
                     }
-
-            fItemBounds = null;
-    }
+                    fItemBounds = null;
+                }
             }, invoker);
         } catch (final Exception e) {
             e.printStackTrace();
@@ -232,49 +222,56 @@
         });
     }
 
-    ScreenMenuPropertyListener fPropertyListener;
+    @Override
     public void addNotify() {
-        super.addNotify();
-        if (fModelPtr == 0) {
-        fInvoker.addContainerListener(this);
-        fInvoker.addComponentListener(this);
-        fPropertyListener = new ScreenMenuPropertyListener(this);
-        fInvoker.addPropertyChangeListener(fPropertyListener);
+        synchronized (getTreeLock()) {
+            super.addNotify();
+            if (fModelPtr == 0) {
+                fInvoker.addContainerListener(this);
+                fInvoker.addComponentListener(this);
+                fPropertyListener = new ScreenMenuPropertyListener(this);
+                fInvoker.addPropertyChangeListener(fPropertyListener);
 
-        final Icon icon = fInvoker.getIcon();
-        if (icon != null) {
-            this.setIcon(icon);
-        }
+                final Icon icon = fInvoker.getIcon();
+                if (icon != null) {
+                    setIcon(icon);
+                }
 
-        final String tooltipText = fInvoker.getToolTipText();
-        if (tooltipText != null) {
-            this.setToolTipText(tooltipText);
-        }
-        final MenuComponentPeer peer = getPeer();
-        if (peer instanceof CMenu) {
-            final CMenu menu = (CMenu)peer;
-            final long nativeMenu = menu.getNativeMenu();
-            fModelPtr = addMenuListeners(this, nativeMenu);
+                final String tooltipText = fInvoker.getToolTipText();
+                if (tooltipText != null) {
+                    setToolTipText(tooltipText);
+                }
+                final MenuComponentPeer peer = getPeer();
+                if (peer instanceof CMenu) {
+                    final CMenu menu = (CMenu) peer;
+                    final long nativeMenu = menu.getNativeMenu();
+                    fModelPtr = addMenuListeners(this, nativeMenu);
+                }
             }
         }
     }
 
+    @Override
     public void removeNotify() {
-        // Call super so that the NSMenu has been removed, before we release the delegate in removeMenuListeners
-        super.removeNotify();
-        fItems.clear();
-        if (fModelPtr != 0) {
-            removeMenuListeners(fModelPtr);
-            fModelPtr = 0;
-            fInvoker.removeContainerListener(this);
-            fInvoker.removeComponentListener(this);
-            fInvoker.removePropertyChangeListener(fPropertyListener);
+        synchronized (getTreeLock()) {
+            // Call super so that the NSMenu has been removed, before we release
+            // the delegate in removeMenuListeners
+            super.removeNotify();
+            fItems.clear();
+            if (fModelPtr != 0) {
+                removeMenuListeners(fModelPtr);
+                fModelPtr = 0;
+                fInvoker.removeContainerListener(this);
+                fInvoker.removeComponentListener(this);
+                fInvoker.removePropertyChangeListener(fPropertyListener);
+            }
         }
     }
 
     /**
      * Invoked when a component has been added to the container.
      */
+    @Override
     public void componentAdded(final ContainerEvent e) {
         addItem(e.getChild());
     }
@@ -282,23 +279,26 @@
     /**
      * Invoked when a component has been removed from the container.
      */
+    @Override
     public void componentRemoved(final ContainerEvent e) {
         final Component child = e.getChild();
         final MenuItem sm = fItems.get(child);
         if (sm == null) return;
 
-            remove(sm);
-            fItems.remove(sm);
-        }
+        remove(sm);
+        fItems.remove(sm);
+    }
 
     /**
      * Invoked when the component's size changes.
      */
+    @Override
     public void componentResized(final ComponentEvent e) {}
 
     /**
      * Invoked when the component's position changes.
      */
+    @Override
     public void componentMoved(final ComponentEvent e) {}
 
     /**
@@ -306,6 +306,7 @@
      * See componentHidden - we should still have a MenuItem
      * it just isn't inserted
      */
+    @Override
     public void componentShown(final ComponentEvent e) {
         setVisible(true);
     }
@@ -316,11 +317,12 @@
      * so we remove the ScreenMenuItem from the ScreenMenu
      * but leave it in fItems
      */
+    @Override
     public void componentHidden(final ComponentEvent e) {
         setVisible(false);
     }
 
-    public void setVisible(final boolean b) {
+    private void setVisible(final boolean b) {
         // Tell our parent to add/remove us
         final MenuContainer parent = getParent();
 
@@ -328,20 +330,24 @@
             if (parent instanceof ScreenMenu) {
                 final ScreenMenu sm = (ScreenMenu)parent;
                 sm.setChildVisible(fInvoker, b);
-    }
+            }
         }
     }
 
+    @Override
     public void setChildVisible(final JMenuItem child, final boolean b) {
         fItems.remove(child);
         updateItems();
     }
 
+    @Override
     public void setAccelerator(final KeyStroke ks) {}
 
     // only check and radio items can be indeterminate
+    @Override
     public void setIndeterminate(boolean indeterminate) { }
 
+    @Override
     public void setToolTipText(final String text) {
         final MenuComponentPeer peer = getPeer();
         if (!(peer instanceof CMenuItem)) return;
@@ -350,6 +356,7 @@
         cmi.setToolTipText(text);
     }
 
+    @Override
     public void setIcon(final Icon i) {
         final MenuComponentPeer peer = getPeer();
         if (!(peer instanceof CMenuItem)) return;
@@ -369,9 +376,8 @@
     /**
      * Gets a hashCode for a JMenu or JMenuItem or subclass so that we can compare for
      * changes in the Menu.
-     *
      */
-    static int getHashCode(final Component m) {
+    private static int getHashCode(final Component m) {
         int hashCode = m.hashCode();
 
         if (m instanceof JMenuItem) {
@@ -403,7 +409,7 @@
         return hashCode;
     }
 
-    void addItem(final Component m) {
+    private void addItem(final Component m) {
         if (!m.isVisible()) return;
         MenuItem sm = fItems.get(m);
 
--- a/src/macosx/classes/com/apple/resources/MacOSXResourceBundle.java	Wed Sep 18 13:51:23 2013 -0700
+++ /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.apple.resources;
-
-import java.security.*;
-import java.util.PropertyResourceBundle;
-import java.util.ResourceBundle;
-import java.io.*;
-
-public class MacOSXResourceBundle extends PropertyResourceBundle {
-    MacOSXResourceBundle(InputStream stream) throws IOException {
-        super(stream);
-    }
-
-    void setItsParent(ResourceBundle rb) {
-        setParent(rb);
-    }
-
-    public static ResourceBundle getMacResourceBundle(String baseJavaBundle) throws Exception {
-        return getMacResourceBundle(baseJavaBundle, null);
-    }
-
-    public static ResourceBundle getMacResourceBundle(String baseJavaBundle, String filename) throws Exception {
-        LoadNativeBundleAction lnba = new LoadNativeBundleAction(baseJavaBundle, filename);
-        return (ResourceBundle)java.security.AccessController.doPrivileged(lnba);
-    }
-}
-
-class LoadNativeBundleAction implements PrivilegedExceptionAction {
-    String mBaseJavaBundle;
-    String mFilenameOverride;
-
-    LoadNativeBundleAction(String baseJavaBundle, String filenameOverride) {
-        mBaseJavaBundle = baseJavaBundle;
-        mFilenameOverride = filenameOverride;
-    }
-
-    public Object run() {
-        java.util.ResourceBundle returnValue = null;
-        MacOSXResourceBundle macOSrb = null;
-
-        // Load the Mac OS X resources.
-        // Use a base filename if we were given one. Otherwise, we will look for the last piece of the bundle path
-        // with '.properties' appended. Either way, the native method will take care of the extension.
-        String filename = mFilenameOverride;
-
-        if (filename == null) {
-            filename = mBaseJavaBundle.substring(mBaseJavaBundle.lastIndexOf('.') + 1);
-        }
-
-        File propsFile = null;
-        String propertyFileName = getPathToBundleFile(filename);
-        InputStream stream = null;
-
-        try {
-            propsFile = new File(propertyFileName);
-            stream = new FileInputStream(propsFile);
-            stream = new java.io.BufferedInputStream(stream);
-            macOSrb = new MacOSXResourceBundle(stream);
-        } catch (Exception e) {
-            //e.printStackTrace();
-            //System.out.println("Failed to create resources from application bundle.  Using Java-based resources.");
-        } finally {
-            try {
-                if (stream != null) stream.close();
-                stream = null;
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-
-        returnValue = ResourceBundle.getBundle(mBaseJavaBundle);
-
-        // If we have a platform-specific bundle, make it the parent of the generic bundle, so failures propagate up to the parent.
-        if (returnValue != null) {
-            if (macOSrb != null) {
-                macOSrb.setItsParent(returnValue);
-                returnValue = macOSrb;
-            }
-        }
-
-        return returnValue;
-    }
-
-    private static native String getPathToBundleFile(String filename);
-}
-
--- a/src/macosx/native/com/apple/resources/MacOSXResourceBundle.m	Wed Sep 18 13:51:23 2013 -0700
+++ /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.
- */
-
-#import <dlfcn.h>
-#import <Cocoa/Cocoa.h>
-#import <JavaNativeFoundation/JavaNativeFoundation.h>
-
-#ifndef MAXPATHLEN
-#define MAXPATHLEN PATH_MAX
-#endif
-
-static jboolean
-GetPathFromCurrentBinary(char *buf, jint bufsize)
-{
-    Dl_info dlinfo;
-    dladdr((void *)GetPathFromCurrentBinary, &dlinfo);
-    if (realpath(dlinfo.dli_fname, buf) == NULL) {
-//      fprintf(stderr, "Error: realpath(`%s') failed.\n", dlinfo.dli_fname);
-        return JNI_FALSE;
-    }
-
-    const char *libawt = "lib/libawt.dylib";
-    int strLen, libawtLen;
-
-    strLen = strlen(buf);
-    libawtLen = strlen(libawt);
-
-    if (strLen < libawtLen ||
-        strcmp(buf + strLen - libawtLen, libawt) != 0) {
-        return JNI_FALSE;
-    }
-
-    buf[strLen - libawtLen] = '\0';
-
-    return JNI_TRUE;
-}
-
-#define JAVA_DLL "libjava.dylib"
-
-static jboolean
-GetJREPath(char *buf, jint bufsize)
-{
-    /* try to get the path from the current binary, if not, bail to the framework */
-    if (GetPathFromCurrentBinary(buf, bufsize) == JNI_TRUE) {
-        /* does the rest of the JRE exist? */
-        char libjava[MAXPATHLEN];
-        snprintf(libjava, MAXPATHLEN, "%s/lib/" JAVA_DLL, buf);
-        if (access(libjava, F_OK) == 0) {
-            return JNI_TRUE;
-        }
-    }
-
-    return JNI_FALSE;
-}
-
-static NSString *getRunningJavaBundle()
-{
-    char path[MAXPATHLEN];
-    GetJREPath(path, MAXPATHLEN);
-    return [[NSString alloc] initWithFormat:@"%@/bundle", [NSString stringWithUTF8String:path]];
-}
-
-/*
- * Class:     com_apple_resources_LoadNativeBundleAction
- * Method:    getPathToBundleFile
- * Signature: (Ljava/lang/String)Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL
-Java_com_apple_resources_LoadNativeBundleAction_getPathToBundleFile
-    (JNIEnv *env, jclass klass, jstring filename)
-{
-    jstring returnVal = NULL;
-    if (filename == NULL) {
-        return NULL;
-    }
-
-JNF_COCOA_ENTER(env);
-    NSBundle *javaBundle = [NSBundle bundleWithPath:getRunningJavaBundle()];
-    NSString *baseFilename = JNFJavaToNSString(env, filename);
-    NSString *propertyFilePath = [javaBundle pathForResource:baseFilename ofType:@"properties"];
-
-    if (propertyFilePath != nil) {
-        returnVal = JNFNSToJavaString(env, propertyFilePath);
-    }
-JNF_COCOA_EXIT(env);
-
-    return returnVal;
-}
--- a/src/share/classes/com/sun/crypto/provider/DHPrivateKey.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/com/sun/crypto/provider/DHPrivateKey.java	Tue Oct 01 14:22:36 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -280,22 +280,6 @@
             return new DHParameterSpec(this.p, this.g);
     }
 
-    public String toString() {
-        String LINE_SEP = System.getProperty("line.separator");
-
-        StringBuffer strbuf
-            = new StringBuffer("SunJCE Diffie-Hellman Private Key:"
-                               + LINE_SEP + "x:" + LINE_SEP
-                               + Debug.toHexString(this.x)
-                               + LINE_SEP + "p:" + LINE_SEP
-                               + Debug.toHexString(this.p)
-                               + LINE_SEP + "g:" + LINE_SEP
-                               + Debug.toHexString(this.g));
-        if (this.l != 0)
-            strbuf.append(LINE_SEP + "l:" + LINE_SEP + "    " + this.l);
-        return strbuf.toString();
-    }
-
     private void parseKeyBits() throws InvalidKeyException {
         try {
             DerInputStream in = new DerInputStream(this.key);
--- a/src/share/classes/com/sun/demo/jvmti/hprof/Tracker.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/com/sun/demo/jvmti/hprof/Tracker.java	Tue Oct 01 14:22:36 2013 -0700
@@ -53,7 +53,10 @@
 
     public static void ObjectInit(Object obj)
     {
-        if ( engaged != 0 ) {
+        if ( engaged != 0) {
+            if (obj == null) {
+                throw new IllegalArgumentException("Null object.");
+            }
             nativeObjectInit(Thread.currentThread(), obj);
         }
     }
@@ -66,7 +69,10 @@
 
     public static void NewArray(Object obj)
     {
-        if ( engaged != 0 ) {
+        if ( engaged != 0) {
+            if (obj == null) {
+                throw new IllegalArgumentException("Null object.");
+            }
             nativeNewArray(Thread.currentThread(), obj);
         }
     }
@@ -82,6 +88,14 @@
     public static void CallSite(int cnum, int mnum)
     {
         if ( engaged != 0 ) {
+            if (cnum < 0) {
+                throw new IllegalArgumentException("Negative class index");
+            }
+
+            if (mnum < 0) {
+                throw new IllegalArgumentException("Negative method index");
+            }
+
             nativeCallSite(Thread.currentThread(), cnum, mnum);
         }
     }
@@ -95,6 +109,14 @@
     public static void ReturnSite(int cnum, int mnum)
     {
         if ( engaged != 0 ) {
+            if (cnum < 0) {
+                throw new IllegalArgumentException("Negative class index");
+            }
+
+            if (mnum < 0) {
+                throw new IllegalArgumentException("Negative method index");
+            }
+
             nativeReturnSite(Thread.currentThread(), cnum, mnum);
         }
     }
--- a/src/share/classes/com/sun/imageio/plugins/jpeg/JPEGImageReader.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/com/sun/imageio/plugins/jpeg/JPEGImageReader.java	Tue Oct 01 14:22:36 2013 -0700
@@ -1160,6 +1160,11 @@
             target = imRas;
         }
         int [] bandSizes = target.getSampleModel().getSampleSize();
+        for (int i = 0; i < bandSizes.length; i++) {
+            if (bandSizes[i] <= 0 || bandSizes[i] > 8) {
+                throw new IIOException("Illegal band size: should be 0 < size <= 8");
+            }
+        }
 
         /*
          * If the process is sequential, and we have restart markers,
--- a/src/share/classes/com/sun/imageio/plugins/jpeg/JPEGImageWriter.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/com/sun/imageio/plugins/jpeg/JPEGImageWriter.java	Tue Oct 01 14:22:36 2013 -0700
@@ -490,8 +490,8 @@
             // handle <= 8-bit samples.  We now check the band sizes and throw
             // an exception for images, such as USHORT_GRAY, with > 8 bits
             // per sample.
-            if (bandSizes[i] > 8) {
-                throw new IIOException("Sample size must be <= 8");
+            if (bandSizes[i] <= 0 || bandSizes[i] > 8) {
+                throw new IIOException("Illegal band size: should be 0 < size <= 8");
             }
             // 4450894 part 2: We expand IndexColorModel images to full 24-
             // or 32-bit in grabPixels() for each scanline.  For indexed
--- a/src/share/classes/com/sun/jmx/remote/protocol/iiop/IIOPProxyImpl.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/com/sun/jmx/remote/protocol/iiop/IIOPProxyImpl.java	Tue Oct 01 14:22:36 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009,2013, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -36,13 +36,34 @@
 import java.rmi.NoSuchObjectException;
 
 import com.sun.jmx.remote.internal.IIOPProxy;
+import java.io.SerializablePermission;
+import java.security.AccessControlContext;
+import java.security.AccessController;
+import java.security.Permissions;
+import java.security.PrivilegedActionException;
+import java.security.PrivilegedExceptionAction;
+import java.security.ProtectionDomain;
 
 /**
- * An implementatin of IIOPProxy that simply delegates to the appropriate
+ * An implementation of IIOPProxy that simply delegates to the appropriate
  * RMI-IIOP and CORBA APIs.
  */
 
 public class IIOPProxyImpl implements IIOPProxy {
+    // special ACC used to initialize the IIOP stub
+    // the only allowed privilege is SerializablePermission("enableSubclassImplementation")
+    private static final AccessControlContext STUB_ACC;
+
+    static {
+        Permissions p = new Permissions();
+        p.add(new SerializablePermission("enableSubclassImplementation"));
+        STUB_ACC = new AccessControlContext(
+            new ProtectionDomain[]{
+                new ProtectionDomain(null, p)
+            }
+        );
+    }
+
     public IIOPProxyImpl() { }
 
     @Override
@@ -113,7 +134,24 @@
     }
 
     @Override
-    public Remote toStub(Remote obj) throws NoSuchObjectException {
-        return PortableRemoteObject.toStub(obj);
+    public Remote toStub(final Remote obj) throws NoSuchObjectException {
+        if (System.getSecurityManager() == null) {
+            return PortableRemoteObject.toStub(obj);
+        } else {
+            try {
+                return AccessController.doPrivileged(new PrivilegedExceptionAction<Remote>() {
+
+                    @Override
+                    public Remote run() throws Exception {
+                        return PortableRemoteObject.toStub(obj);
+                    }
+                }, STUB_ACC);
+            } catch (PrivilegedActionException e) {
+                if (e.getException() instanceof NoSuchObjectException) {
+                    throw (NoSuchObjectException)e.getException();
+                }
+                throw new RuntimeException("Unexpected exception type", e.getException());
+            }
+        }
     }
 }
--- a/src/share/classes/com/sun/jndi/ldap/VersionHelper12.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/com/sun/jndi/ldap/VersionHelper12.java	Tue Oct 01 14:22:36 2013 -0700
@@ -25,11 +25,12 @@
 
 package com.sun.jndi.ldap;
 
-import java.net.URL;
 import java.net.URLClassLoader;
 import java.net.MalformedURLException;
+import java.security.AccessControlContext;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
+import sun.misc.SharedSecrets;
 
 final class VersionHelper12 extends VersionHelper {
 
@@ -82,12 +83,16 @@
     }
 
     Thread createThread(final Runnable r) {
-        return (Thread) AccessController.doPrivileged(
-            new PrivilegedAction() {
-                public Object run() {
-                    return new Thread(r);
+        final AccessControlContext acc = AccessController.getContext();
+        // 4290486: doPrivileged is needed to create a thread in
+        // an environment that restricts "modifyThreadGroup".
+        return AccessController.doPrivileged(
+                new PrivilegedAction<Thread>() {
+                    public Thread run() {
+                        return SharedSecrets.getJavaLangAccess()
+                                .newThreadWithAcc(r, acc);
+                    }
                 }
-            }
         );
     }
 }
--- a/src/share/classes/com/sun/management/HotSpotDiagnosticMXBean.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/com/sun/management/HotSpotDiagnosticMXBean.java	Tue Oct 01 14:22:36 2013 -0700
@@ -66,6 +66,11 @@
      *                     cannot be created, opened, or written to.
      * @throws UnsupportedOperationException if this operation is not supported.
      * @throws NullPointerException if <tt>outputFile</tt> is <tt>null</tt>.
+     * @throws SecurityException
+     *         If a security manager exists and its {@link
+     *         java.lang.SecurityManager#checkWrite(java.lang.String)}
+     *         method denies write access to the named file
+     *         or the caller does not have ManagmentPermission("control").
      */
     public void dumpHeap(String outputFile, boolean live) throws java.io.IOException;
 
--- a/src/share/classes/com/sun/org/apache/xml/internal/security/utils/UnsyncByteArrayOutputStream.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/com/sun/org/apache/xml/internal/security/utils/UnsyncByteArrayOutputStream.java	Tue Oct 01 14:22:36 2013 -0700
@@ -44,6 +44,9 @@
     }
 
     public void write(byte[] arg0) {
+        if ((Integer.MAX_VALUE - pos) < arg0.length) {
+            throw new OutOfMemoryError();
+        }
         int newPos = pos + arg0.length;
         if (newPos > size) {
             expandSize(newPos);
@@ -53,6 +56,9 @@
     }
 
     public void write(byte[] arg0, int arg1, int arg2) {
+        if ((Integer.MAX_VALUE - pos) < arg2) {
+            throw new OutOfMemoryError();
+        }
         int newPos = pos + arg2;
         if (newPos > size) {
             expandSize(newPos);
@@ -62,6 +68,9 @@
     }
 
     public void write(int arg0) {
+        if ((Integer.MAX_VALUE - pos) == 0) {
+            throw new OutOfMemoryError();
+        }
         int newPos = pos + 1;
         if (newPos > size) {
             expandSize(newPos);
@@ -82,7 +91,11 @@
     private void expandSize(int newPos) {
         int newSize = size;
         while (newPos > newSize) {
-            newSize = newSize<<2;
+            newSize = newSize << 1;
+            // Deal with overflow
+            if (newSize < 0) {
+                newSize = Integer.MAX_VALUE;
+            }
         }
         byte newBuf[] = new byte[newSize];
         System.arraycopy(buf, 0, newBuf, 0, pos);
--- a/src/share/classes/com/sun/script/util/InterfaceImplementor.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/com/sun/script/util/InterfaceImplementor.java	Tue Oct 01 14:22:36 2013 -0700
@@ -28,6 +28,7 @@
 import javax.script.*;
 import java.lang.reflect.*;
 import java.security.*;
+import sun.reflect.misc.ReflectUtil;
 
 /*
  * java.lang.reflect.Proxy based interface implementor. This is meant
@@ -85,8 +86,18 @@
         if (! isImplemented(thiz, iface)) {
             return null;
         }
+
+        if (System.getSecurityManager() != null &&
+           !Modifier.isPublic(iface.getModifiers())) {
+            throw new SecurityException("attempt to implement non-public interface");
+        }
+
+        // make sure restricted package interfaces are not attempted.
+        ReflectUtil.checkPackageAccess(iface.getName());
+
         AccessControlContext accCtxt = AccessController.getContext();
-        return iface.cast(Proxy.newProxyInstance(iface.getClassLoader(),
+        return iface.cast(Proxy.newProxyInstance(
+            getLoaderForProxy(iface),
             new Class[]{iface},
             new InterfaceImplementorInvocationHandler(thiz, accCtxt)));
     }
@@ -108,4 +119,20 @@
         // default is identity conversion
         return args;
     }
+
+    // get appropriate ClassLoader for generated Proxy class
+    private static ClassLoader getLoaderForProxy(Class<?> iface) {
+        ClassLoader loader = iface.getClassLoader();
+
+        // if bootstrap class, try TCCL
+        if (loader == null) {
+            loader = Thread.currentThread().getContextClassLoader();
+        }
+
+        // if TCCL is also null, try System class loader
+        if (loader == null) {
+            loader = ClassLoader.getSystemClassLoader();
+        }
+        return loader;
+    }
 }
--- a/src/share/classes/com/sun/tools/hat/internal/server/AllClassesQuery.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/com/sun/tools/hat/internal/server/AllClassesQuery.java	Tue Oct 01 14:22:36 2013 -0700
@@ -84,7 +84,7 @@
             lastPackage = pkg;
             printClass(clazz);
             if (clazz.getId() != -1) {
-                out.print(" [" + clazz.getIdString() + "]");
+                print(" [" + clazz.getIdString() + "]");
             }
             out.println("<br>");
         }
--- a/src/share/classes/com/sun/tools/hat/internal/server/ClassQuery.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/com/sun/tools/hat/internal/server/ClassQuery.java	Tue Oct 01 14:22:36 2013 -0700
@@ -112,12 +112,12 @@
         out.println("<h2>Instances</h2>");
 
         printAnchorStart();
-        out.print("instances/" + encodeForURL(clazz));
+        print("instances/" + encodeForURL(clazz));
         out.print("\">");
         out.println("Exclude subclasses</a><br>");
 
         printAnchorStart();
-        out.print("allInstances/" + encodeForURL(clazz));
+        print("allInstances/" + encodeForURL(clazz));
         out.print("\">");
         out.println("Include subclasses</a><br>");
 
@@ -126,19 +126,19 @@
             out.println("<h2>New Instances</h2>");
 
             printAnchorStart();
-            out.print("newInstances/" + encodeForURL(clazz));
+            print("newInstances/" + encodeForURL(clazz));
             out.print("\">");
             out.println("Exclude subclasses</a><br>");
 
             printAnchorStart();
-            out.print("allNewInstances/" + encodeForURL(clazz));
+            print("allNewInstances/" + encodeForURL(clazz));
             out.print("\">");
             out.println("Include subclasses</a><br>");
         }
 
         out.println("<h2>References summary by Type</h2>");
         printAnchorStart();
-        out.print("refsByType/" + encodeForURL(clazz));
+        print("refsByType/" + encodeForURL(clazz));
         out.print("\">");
         out.println("References summary by type</a>");
 
--- a/src/share/classes/com/sun/tools/hat/internal/server/HttpReader.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/com/sun/tools/hat/internal/server/HttpReader.java	Tue Oct 01 14:22:36 2013 -0700
@@ -41,21 +41,17 @@
 
 
 import java.net.Socket;
-import java.net.ServerSocket;
-import java.net.InetAddress;
 
 import java.io.InputStream;
 import java.io.BufferedInputStream;
 import java.io.IOException;
-import java.io.Writer;
 import java.io.BufferedWriter;
 import java.io.PrintWriter;
-import java.io.OutputStream;
 import java.io.OutputStreamWriter;
-import java.io.BufferedOutputStream;
 
 import com.sun.tools.hat.internal.model.Snapshot;
 import com.sun.tools.hat.internal.oql.OQLEngine;
+import com.sun.tools.hat.internal.util.Misc;
 
 public class HttpReader implements Runnable {
 
@@ -87,7 +83,7 @@
                 outputError("Protocol error");
             }
             int data;
-            StringBuffer queryBuf = new StringBuffer();
+            StringBuilder queryBuf = new StringBuilder();
             while ((data = in.read()) != -1 && data != ' ') {
                 char ch = (char) data;
                 queryBuf.append(ch);
@@ -217,7 +213,7 @@
     private void outputError(String msg) {
         out.println();
         out.println("<html><body bgcolor=\"#ffffff\">");
-        out.println(msg);
+        out.println(Misc.encodeHtml(msg));
         out.println("</body></html>");
     }
 
--- a/src/share/classes/com/sun/tools/hat/internal/server/InstancesCountQuery.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/com/sun/tools/hat/internal/server/InstancesCountQuery.java	Tue Oct 01 14:22:36 2013 -0700
@@ -102,7 +102,7 @@
             int count = clazz.getInstancesCount(false);
             print("" + count);
             printAnchorStart();
-            out.print("instances/" + encodeForURL(classes[i]));
+            print("instances/" + encodeForURL(classes[i]));
             out.print("\"> ");
             if (count == 1) {
                 print("instance");
@@ -121,7 +121,7 @@
                 }
                 print("(");
                 printAnchorStart();
-                out.print("newInstances/" + encodeForURL(classes[i]));
+                print("newInstances/" + encodeForURL(classes[i]));
                 out.print("\">");
                 print("" + newInst + " new");
                 out.print("</a>) ");
--- a/src/share/classes/com/sun/tools/hat/internal/server/OQLHelp.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/com/sun/tools/hat/internal/server/OQLHelp.java	Tue Oct 01 14:22:36 2013 -0700
@@ -54,10 +54,7 @@
                 out.print((char)ch);
             }
         } catch (Exception exp) {
-            out.println(exp.getMessage());
-            out.println("<pre>");
-            exp.printStackTrace(out);
-            out.println("</pre>");
+            printException(exp);
         }
     }
 }
--- a/src/share/classes/com/sun/tools/hat/internal/server/OQLQuery.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/com/sun/tools/hat/internal/server/OQLQuery.java	Tue Oct 01 14:22:36 2013 -0700
@@ -32,10 +32,7 @@
 
 package com.sun.tools.hat.internal.server;
 
-import com.sun.tools.hat.internal.model.*;
 import com.sun.tools.hat.internal.oql.*;
-import com.sun.tools.hat.internal.util.ArraySorter;
-import com.sun.tools.hat.internal.util.Comparer;
 
 /**
  * This handles Object Query Language (OQL) queries.
@@ -68,7 +65,7 @@
         out.println("<p align='center'>");
         out.println("<textarea name='query' cols=80 rows=10>");
         if (oql != null) {
-            out.println(oql);
+            println(oql);
         }
         out.println("</textarea>");
         out.println("</p>");
@@ -91,10 +88,7 @@
                          try {
                              out.println(engine.toHtml(o));
                          } catch (Exception e) {
-                             out.println(e.getMessage());
-                             out.println("<pre>");
-                             e.printStackTrace(out);
-                             out.println("</pre>");
+                             printException(e);
                          }
                          out.println("</td></tr>");
                          return false;
@@ -102,10 +96,7 @@
                  });
             out.println("</table>");
         } catch (OQLException exp) {
-            out.println(exp.getMessage());
-            out.println("<pre>");
-            exp.printStackTrace(out);
-            out.println("</pre>");
+            printException(exp);
         }
     }
 
--- a/src/share/classes/com/sun/tools/hat/internal/server/QueryHandler.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/com/sun/tools/hat/internal/server/QueryHandler.java	Tue Oct 01 14:22:36 2013 -0700
@@ -36,6 +36,7 @@
 
 import com.sun.tools.hat.internal.model.*;
 import com.sun.tools.hat.internal.util.Misc;
+import java.io.StringWriter;
 
 import java.net.URLEncoder;
 import java.io.UnsupportedEncodingException;
@@ -96,7 +97,7 @@
     }
 
     protected void error(String msg) {
-        out.println(msg);
+        println(msg);
     }
 
     protected void printAnchorStart() {
@@ -160,7 +161,6 @@
             out.println("null");
             return;
         }
-        String name = clazz.getName();
         printAnchorStart();
         out.print("class/");
         print(encodeForURL(clazz));
@@ -208,6 +208,15 @@
         }
     }
 
+    protected void printException(Throwable t) {
+        println(t.getMessage());
+        out.println("<pre>");
+        StringWriter sw = new StringWriter();
+        t.printStackTrace(new PrintWriter(sw));
+        print(sw.toString());
+        out.println("</pre>");
+    }
+
     protected void printHex(long addr) {
         if (snapshot.getIdentifierSize() == 4) {
             out.print(Misc.toHex((int)addr));
@@ -223,4 +232,8 @@
     protected void print(String str) {
         out.print(Misc.encodeHtml(str));
     }
+
+    protected void println(String str) {
+        out.println(Misc.encodeHtml(str));
+    }
 }
--- a/src/share/classes/com/sun/tools/hat/internal/server/RefsByTypeQuery.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/com/sun/tools/hat/internal/server/RefsByTypeQuery.java	Tue Oct 01 14:22:36 2013 -0700
@@ -89,7 +89,7 @@
             out.println("<p align='center'>");
             printClass(clazz);
             if (clazz.getId() != -1) {
-                out.println("[" + clazz.getIdString() + "]");
+                println("[" + clazz.getIdString() + "]");
             }
             out.println("</p>");
 
@@ -125,9 +125,9 @@
             JavaClass clazz = classes[i];
             out.println("<tr><td>");
             out.print("<a href='/refsByType/");
-            out.print(clazz.getIdString());
+            print(clazz.getIdString());
             out.print("'>");
-            out.print(clazz.getName());
+            print(clazz.getName());
             out.println("</a>");
             out.println("</td><td>");
             out.println(map.get(clazz));
--- a/src/share/classes/java/awt/datatransfer/DataFlavor.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/java/awt/datatransfer/DataFlavor.java	Tue Oct 01 14:22:36 2013 -0700
@@ -25,12 +25,14 @@
 
 package java.awt.datatransfer;
 
-import java.awt.Toolkit;
 import java.io.*;
 import java.nio.*;
 import java.util.*;
 
 import sun.awt.datatransfer.DataTransferer;
+import sun.reflect.misc.ReflectUtil;
+
+import static sun.security.util.SecurityConstants.GET_CLASSLOADER_PERMISSION;
 
 /**
  * A {@code DataFlavor} provides meta information about data. {@code DataFlavor}
@@ -117,27 +119,33 @@
                                                    ClassLoader fallback)
         throws ClassNotFoundException
     {
-        ClassLoader systemClassLoader = (ClassLoader)
-            java.security.AccessController.doPrivileged(
-                new java.security.PrivilegedAction() {
-                    public Object run() {
-                        ClassLoader cl = Thread.currentThread().
-                            getContextClassLoader();
-                        return (cl != null)
-                            ? cl
-                            : ClassLoader.getSystemClassLoader();
+        ReflectUtil.checkPackageAccess(className);
+        try {
+            SecurityManager sm = System.getSecurityManager();
+            if (sm != null) {
+                sm.checkPermission(GET_CLASSLOADER_PERMISSION);
+            }
+            ClassLoader loader = ClassLoader.getSystemClassLoader();
+            try {
+                // bootstrap class loader and system class loader if present
+                return Class.forName(className, true, loader);
+            }
+            catch (ClassNotFoundException exception) {
+                // thread context class loader if and only if present
+                loader = Thread.currentThread().getContextClassLoader();
+                if (loader != null) {
+                    try {
+                        return Class.forName(className, true, loader);
                     }
-                    });
-
-        try {
-            return Class.forName(className, true, systemClassLoader);
-        } catch (ClassNotFoundException e2) {
-            if (fallback != null) {
-                return Class.forName(className, true, fallback);
-            } else {
-                throw new ClassNotFoundException(className);
+                    catch (ClassNotFoundException e) {
+                        // fallback to user's class loader
+                    }
+                }
             }
+        } catch (SecurityException exception) {
+            // ignore secured class loaders
         }
+        return Class.forName(className, true, fallback);
     }
 
     /*
--- a/src/share/classes/java/beans/Beans.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/java/beans/Beans.java	Tue Oct 01 14:22:36 2013 -0700
@@ -42,6 +42,8 @@
 import java.io.ObjectStreamClass;
 import java.io.StreamCorruptedException;
 
+import java.lang.reflect.Modifier;
+
 import java.net.URL;
 
 import java.security.AccessController;
@@ -222,6 +224,10 @@
                 throw ex;
             }
 
+            if (!Modifier.isPublic(cl.getModifiers())) {
+                throw new ClassNotFoundException("" + cl + " : no public access");
+            }
+
             /*
              * Try to instantiate the class.
              */
--- a/src/share/classes/java/beans/DefaultPersistenceDelegate.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/java/beans/DefaultPersistenceDelegate.java	Tue Oct 01 14:22:36 2013 -0700
@@ -220,6 +220,9 @@
     // Write out the properties of this instance.
     private void initBean(Class type, Object oldInstance, Object newInstance, Encoder out) {
         for (Field field : type.getFields()) {
+            if (!ReflectUtil.isPackageAccessible(field.getDeclaringClass())) {
+                continue;
+            }
             int mod = field.getModifiers();
             if (Modifier.isFinal(mod) || Modifier.isStatic(mod) || Modifier.isTransient(mod)) {
                 continue;
--- a/src/share/classes/java/beans/MetaData.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/java/beans/MetaData.java	Tue Oct 01 14:22:36 2013 -0700
@@ -42,6 +42,7 @@
 import java.lang.reflect.Constructor;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
 import java.lang.reflect.InvocationTargetException;
 
 import java.security.AccessController;
@@ -56,7 +57,7 @@
 
 import sun.swing.PrintColorUIResource;
 
-import java.util.Objects;
+import static sun.reflect.misc.ReflectUtil.isPackageAccessible;
 
 /*
  * Like the <code>Intropector</code>, the <code>MetaData</code> class
@@ -850,13 +851,15 @@
 
 static class StaticFieldsPersistenceDelegate extends PersistenceDelegate {
     protected void installFields(Encoder out, Class<?> cls) {
-        Field fields[] = cls.getFields();
-        for(int i = 0; i < fields.length; i++) {
-            Field field = fields[i];
-            // Don't install primitives, their identity will not be preserved
-            // by wrapping.
-            if (Object.class.isAssignableFrom(field.getType())) {
-                out.writeExpression(new Expression(field, "get", new Object[]{null}));
+        if (Modifier.isPublic(cls.getModifiers()) && isPackageAccessible(cls)) {
+            Field fields[] = cls.getFields();
+            for(int i = 0; i < fields.length; i++) {
+                Field field = fields[i];
+                // Don't install primitives, their identity will not be preserved
+                // by wrapping.
+                if (Object.class.isAssignableFrom(field.getType())) {
+                    out.writeExpression(new Expression(field, "get", new Object[]{null}));
+                }
             }
         }
     }
--- a/src/share/classes/java/io/File.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/java/io/File.java	Tue Oct 01 14:22:36 2013 -0700
@@ -1885,10 +1885,18 @@
             } else {
                 n = Math.abs(n);
             }
+
+            // Use only the file name from the supplied prefix
+            prefix = (new File(prefix)).getName();
+
             String name = prefix + Long.toString(n) + suffix;
             File f = new File(dir, name);
-            if (!name.equals(f.getName()))
-                throw new IOException("Unable to create temporary file");
+            if (!name.equals(f.getName())) {
+                if (System.getSecurityManager() != null)
+                    throw new IOException("Unable to create temporary file");
+                else
+                    throw new IOException("Unable to create temporary file, " + f);
+            }
             return f;
         }
     }
--- a/src/share/classes/java/io/ObjectInputStream.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/java/io/ObjectInputStream.java	Tue Oct 01 14:22:36 2013 -0700
@@ -490,11 +490,12 @@
     public void defaultReadObject()
         throws IOException, ClassNotFoundException
     {
-        if (curContext == null) {
+        SerialCallbackContext ctx = curContext;
+        if (ctx == null) {
             throw new NotActiveException("not in call to readObject");
         }
-        Object curObj = curContext.getObj();
-        ObjectStreamClass curDesc = curContext.getDesc();
+        Object curObj = ctx.getObj();
+        ObjectStreamClass curDesc = ctx.getDesc();
         bin.setBlockDataMode(false);
         defaultReadFields(curObj, curDesc);
         bin.setBlockDataMode(true);
@@ -528,11 +529,12 @@
     public ObjectInputStream.GetField readFields()
         throws IOException, ClassNotFoundException
     {
-        if (curContext == null) {
+        SerialCallbackContext ctx = curContext;
+        if (ctx == null) {
             throw new NotActiveException("not in call to readObject");
         }
-        Object curObj = curContext.getObj();
-        ObjectStreamClass curDesc = curContext.getDesc();
+        Object curObj = ctx.getObj();
+        ObjectStreamClass curDesc = ctx.getDesc();
         bin.setBlockDataMode(false);
         GetFieldImpl getField = new GetFieldImpl(curDesc);
         getField.readFields();
@@ -1965,7 +1967,6 @@
     private void defaultReadFields(Object obj, ObjectStreamClass desc)
         throws IOException
     {
-        // REMIND: is isInstance check necessary?
         Class cl = desc.forClass();
         if (cl != null && obj != null && !cl.isInstance(obj)) {
             throw new ClassCastException();
--- a/src/share/classes/java/io/ObjectOutputStream.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/java/io/ObjectOutputStream.java	Tue Oct 01 14:22:36 2013 -0700
@@ -430,11 +430,12 @@
      *          <code>OutputStream</code>
      */
     public void defaultWriteObject() throws IOException {
-        if ( curContext == null ) {
+        SerialCallbackContext ctx = curContext;
+        if (ctx == null) {
             throw new NotActiveException("not in call to writeObject");
         }
-        Object curObj = curContext.getObj();
-        ObjectStreamClass curDesc = curContext.getDesc();
+        Object curObj = ctx.getObj();
+        ObjectStreamClass curDesc = ctx.getDesc();
         bout.setBlockDataMode(false);
         defaultWriteFields(curObj, curDesc);
         bout.setBlockDataMode(true);
@@ -452,11 +453,12 @@
      */
     public ObjectOutputStream.PutField putFields() throws IOException {
         if (curPut == null) {
-            if (curContext == null) {
+            SerialCallbackContext ctx = curContext;
+            if (ctx == null) {
                 throw new NotActiveException("not in call to writeObject");
             }
-            Object curObj = curContext.getObj();
-            ObjectStreamClass curDesc = curContext.getDesc();
+            Object curObj = ctx.getObj();
+            ObjectStreamClass curDesc = ctx.getDesc();
             curPut = new PutFieldImpl(curDesc);
         }
         return curPut;
@@ -1516,7 +1518,11 @@
     private void defaultWriteFields(Object obj, ObjectStreamClass desc)
         throws IOException
     {
-        // REMIND: perform conservative isInstance check here?
+        Class<?> cl = desc.forClass();
+        if (cl != null && obj != null && !cl.isInstance(obj)) {
+            throw new ClassCastException();
+        }
+
         desc.checkDefaultSerialize();
 
         int primDataSize = desc.getPrimDataSize();
--- a/src/share/classes/java/lang/Class.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/java/lang/Class.java	Tue Oct 01 14:22:36 2013 -0700
@@ -1096,7 +1096,17 @@
      * @return the declaring class for this class
      * @since JDK1.1
      */
-    public native Class<?> getDeclaringClass();
+    @CallerSensitive
+    public Class<?> getDeclaringClass() {
+        final Class<?> candidate = getDeclaringClass0();
+
+        if (candidate != null)
+            candidate.checkPackageAccess(
+                    ClassLoader.getClassLoader(Reflection.getCallerClass()), true);
+        return candidate;
+    }
+
+    private native Class<?> getDeclaringClass0();
 
 
     /**
--- a/src/share/classes/java/lang/ClassLoader.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/java/lang/ClassLoader.java	Tue Oct 01 14:22:36 2013 -0700
@@ -58,6 +58,7 @@
 import sun.misc.VM;
 import sun.reflect.CallerSensitive;
 import sun.reflect.Reflection;
+import sun.reflect.misc.ReflectUtil;
 import sun.security.util.SecurityConstants;
 
 /**
@@ -487,6 +488,13 @@
     private void checkPackageAccess(Class cls, ProtectionDomain pd) {
         final SecurityManager sm = System.getSecurityManager();
         if (sm != null) {
+            if (ReflectUtil.isNonPublicProxyClass(cls)) {
+                for (Class intf: cls.getInterfaces()) {
+                    checkPackageAccess(intf, pd);
+                }
+                return;
+            }
+
             final String name = cls.getName();
             final int i = name.lastIndexOf('.');
             if (i != -1) {
--- a/src/share/classes/java/lang/System.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/java/lang/System.java	Tue Oct 01 14:22:36 2013 -0700
@@ -25,6 +25,7 @@
 package java.lang;
 
 import java.io.*;
+import java.security.AccessControlContext;
 import java.util.Properties;
 import java.util.PropertyPermission;
 import java.util.StringTokenizer;
@@ -1202,6 +1203,9 @@
             public int getStringHash32(String string) {
                 return string.hash32();
             }
+            public Thread newThreadWithAcc(Runnable target, AccessControlContext acc) {
+                return new Thread(target, acc);
+            }
         });
     }
 }
--- a/src/share/classes/java/lang/Thread.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/java/lang/Thread.java	Tue Oct 01 14:22:36 2013 -0700
@@ -341,6 +341,15 @@
     }
 
     /**
+     * Initializes a Thread with the current AccessControlContext.
+     * @see #init(ThreadGroup,Runnable,String,long,AccessControlContext)
+     */
+    private void init(ThreadGroup g, Runnable target, String name,
+                      long stackSize) {
+        init(g, target, name, stackSize, null);
+    }
+
+    /**
      * Initializes a Thread.
      *
      * @param g the Thread group
@@ -348,9 +357,11 @@
      * @param name the name of the new Thread
      * @param stackSize the desired stack size for the new thread, or
      *        zero to indicate that this parameter is to be ignored.
+     * @param acc the AccessControlContext to inherit, or
+     *            AccessController.getContext() if null
      */
     private void init(ThreadGroup g, Runnable target, String name,
-                      long stackSize) {
+                      long stackSize, AccessControlContext acc) {
         if (name == null) {
             throw new NullPointerException("name cannot be null");
         }
@@ -396,7 +407,8 @@
             this.contextClassLoader = parent.getContextClassLoader();
         else
             this.contextClassLoader = parent.contextClassLoader;
-        this.inheritedAccessControlContext = AccessController.getContext();
+        this.inheritedAccessControlContext =
+                acc != null ? acc : AccessController.getContext();
         this.target = target;
         setPriority(priority);
         if (parent.inheritableThreadLocals != null)
@@ -449,6 +461,14 @@
     }
 
     /**
+     * Creates a new Thread that inherits the given AccessControlContext.
+     * This is not a public constructor.
+     */
+    Thread(Runnable target, AccessControlContext acc) {
+        init(null, target, "Thread-" + nextThreadNum(), 0, acc);
+    }
+
+    /**
      * Allocates a new {@code Thread} object. This constructor has the same
      * effect as {@linkplain #Thread(ThreadGroup,Runnable,String) Thread}
      * {@code (group, target, gname)} ,where {@code gname} is a newly generated
--- a/src/share/classes/java/lang/invoke/MethodHandleNatives.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/java/lang/invoke/MethodHandleNatives.java	Tue Oct 01 14:22:36 2013 -0700
@@ -456,6 +456,7 @@
         case "getDeclaredField":
         case "getDeclaredMethod":
         case "getDeclaredConstructor":
+        case "getDeclaringClass":
         case "getEnclosingClass":
         case "getEnclosingMethod":
         case "getEnclosingConstructor":
@@ -491,6 +492,7 @@
             return defc == java.lang.ClassLoader.class;
         case "registerAsParallelCapable":
             return defc == java.lang.ClassLoader.class;
+        case "getInvocationHandler":
         case "getProxyClass":
         case "newProxyInstance":
             return defc == java.lang.reflect.Proxy.class;
--- a/src/share/classes/java/lang/invoke/MethodHandles.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/java/lang/invoke/MethodHandles.java	Tue Oct 01 14:22:36 2013 -0700
@@ -426,7 +426,7 @@
 
         Lookup(Class<?> lookupClass) {
             this(lookupClass, ALL_MODES);
-            checkUnprivilegedlookupClass(lookupClass);
+            checkUnprivilegedlookupClass(lookupClass, ALL_MODES);
         }
 
         private Lookup(Class<?> lookupClass, int allowedModes) {
@@ -480,7 +480,7 @@
                 // No permissions.
                 newModes = 0;
             }
-            checkUnprivilegedlookupClass(requestedLookupClass);
+            checkUnprivilegedlookupClass(requestedLookupClass, newModes);
             return new Lookup(requestedLookupClass, newModes);
         }
 
@@ -496,10 +496,19 @@
         /** Package-private version of lookup which is trusted. */
         static final Lookup IMPL_LOOKUP = new Lookup(Object.class, TRUSTED);
 
-        private static void checkUnprivilegedlookupClass(Class<?> lookupClass) {
+        private static void checkUnprivilegedlookupClass(Class<?> lookupClass, int allowedModes) {
             String name = lookupClass.getName();
             if (name.startsWith("java.lang.invoke."))
                 throw newIllegalArgumentException("illegal lookupClass: "+lookupClass);
+
+            // For caller-sensitive MethodHandles.lookup()
+            // disallow lookup more restricted packages
+            if (allowedModes == ALL_MODES && lookupClass.getClassLoader() == null) {
+                if (name.startsWith("java.") ||
+                        (name.startsWith("sun.") && !name.startsWith("sun.invoke."))) {
+                    throw newIllegalArgumentException("illegal lookupClass: " + lookupClass);
+                }
+            }
         }
 
         /**
@@ -1316,6 +1325,10 @@
                         : resolveOrFail(refKind, defc, name, (Class<?>) type);
                 return getDirectField(refKind, defc, field);
             } else if (MethodHandleNatives.refKindIsMethod(refKind)) {
+                if (defc == MethodHandle.class && refKind == REF_invokeVirtual) {
+                    MethodHandle mh = findVirtualForMH(name, (MethodType) type);
+                    if (mh != null)  return mh;
+                }
                 MemberName method = (resolved != null) ? resolved
                         : resolveOrFail(refKind, defc, name, (MethodType) type);
                 return getDirectMethod(refKind, defc, method, lookupClass);
--- a/src/share/classes/java/lang/reflect/Proxy.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/java/lang/reflect/Proxy.java	Tue Oct 01 14:22:36 2013 -0700
@@ -788,6 +788,7 @@
      * @throws  IllegalArgumentException if the argument is not a
      *          proxy instance
      */
+    @CallerSensitive
     public static InvocationHandler getInvocationHandler(Object proxy)
         throws IllegalArgumentException
     {
@@ -798,8 +799,19 @@
             throw new IllegalArgumentException("not a proxy instance");
         }
 
-        Proxy p = (Proxy) proxy;
-        return p.h;
+        final Proxy p = (Proxy) proxy;
+        final InvocationHandler ih = p.h;
+        if (System.getSecurityManager() != null) {
+            Class<?> ihClass = ih.getClass();
+            Class<?> caller = Reflection.getCallerClass();
+            if (ReflectUtil.needsPackageAccessCheck(caller.getClassLoader(),
+                                                    ihClass.getClassLoader()))
+            {
+                ReflectUtil.checkPackageAccess(ihClass);
+            }
+        }
+
+        return ih;
     }
 
     private static native Class defineClass0(ClassLoader loader, String name,
--- a/src/share/classes/java/net/Inet6Address.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/java/net/Inet6Address.java	Tue Oct 01 14:22:36 2013 -0700
@@ -26,6 +26,8 @@
 package java.net;
 
 import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.ObjectStreamField;
 import java.io.IOException;
 import java.io.InvalidObjectException;
 import java.util.Enumeration;
@@ -171,36 +173,196 @@
      */
     private transient int cached_scope_id = 0;
 
-    /**
-     * Holds a 128-bit (16 bytes) IPv6 address.
-     *
-     * @serial
-     */
-    byte[] ipaddress;
+    private class Inet6AddressHolder {
 
-    /**
-     * scope_id. The scope specified when the object is created. If the object is created
-     * with an interface name, then the scope_id is not determined until the time it is needed.
-     */
-    private int scope_id = 0;
+        private Inet6AddressHolder() {
+            ipaddress = new byte[INADDRSZ];
+        }
 
-    /**
-     * This will be set to true when the scope_id field contains a valid
-     * integer scope_id.
-     */
-    private boolean scope_id_set = false;
+        private Inet6AddressHolder(
+            byte[] ipaddress, int scope_id, boolean scope_id_set,
+            NetworkInterface ifname, boolean scope_ifname_set)
+        {
+            this.ipaddress = ipaddress;
+            this.scope_id = scope_id;
+            this.scope_id_set = scope_id_set;
+            this.scope_ifname_set = scope_ifname_set;
+            this.scope_ifname = ifname;
+        }
 
-    /**
-     * scoped interface. scope_id is derived from this as the scope_id of the first
-     * address whose scope is the same as this address for the named interface.
-     */
-    private transient NetworkInterface scope_ifname = null;
+        /**
+         * Holds a 128-bit (16 bytes) IPv6 address.
+         */
+        byte[] ipaddress;
 
-    /**
-     * set if the object is constructed with a scoped interface instead of a
-     * numeric scope id.
-     */
-    private boolean scope_ifname_set = false;
+        /**
+         * scope_id. The scope specified when the object is created. If the object is created
+         * with an interface name, then the scope_id is not determined until the time it is needed.
+         */
+        int scope_id = 0;
+
+        /**
+         * This will be set to true when the scope_id field contains a valid
+         * integer scope_id.
+         */
+        boolean scope_id_set = false;
+
+        /**
+         * scoped interface. scope_id is derived from this as the scope_id of the first
+         * address whose scope is the same as this address for the named interface.
+         */
+        NetworkInterface scope_ifname = null;
+
+        /**
+         * set if the object is constructed with a scoped interface instead of a
+         * numeric scope id.
+         */
+        boolean scope_ifname_set = false;
+
+        void setAddr(byte addr[]) {
+            if (addr.length == INADDRSZ) { // normal IPv6 address
+                System.arraycopy(addr, 0, ipaddress, 0, INADDRSZ);
+            }
+        }
+
+        void init(byte addr[], int scope_id) {
+            setAddr(addr);
+
+            if (scope_id >= 0) {
+                this.scope_id = scope_id;
+                this.scope_id_set = true;
+            }
+        }
+
+        void init(byte addr[], NetworkInterface nif)
+            throws UnknownHostException
+        {
+            setAddr(addr);
+
+            if (nif != null) {
+                this.scope_id = deriveNumericScope(ipaddress, nif);
+                this.scope_id_set = true;
+                this.scope_ifname = nif;
+                this.scope_ifname_set = true;
+            }
+        }
+
+        String getHostAddress() {
+            String s = numericToTextFormat(ipaddress);
+            if (scope_ifname_set) { /* must check this first */
+                s = s + "%" + scope_ifname.getName();
+            } else if (scope_id_set) {
+                s = s + "%" + scope_id;
+            }
+            return s;
+        }
+
+        public boolean equals(Object o) {
+            if (! (o instanceof Inet6AddressHolder)) {
+                return false;
+            }
+            Inet6AddressHolder that = (Inet6AddressHolder)o;
+
+            for (int i = 0; i < INADDRSZ; i++) {
+                if (this.ipaddress[i] != that.ipaddress[i])
+                    return false;
+            }
+
+            return true;
+        }
+
+        public int hashCode() {
+            if (ipaddress != null) {
+
+                int hash = 0;
+                int i=0;
+                while (i<INADDRSZ) {
+                    int j=0;
+                    int component=0;
+                    while (j<4 && i<INADDRSZ) {
+                        component = (component << 8) + ipaddress[i];
+                        j++;
+                        i++;
+                    }
+                    hash += component;
+                }
+                return hash;
+
+            } else {
+                return 0;
+            }
+        }
+
+        boolean isIPv4CompatibleAddress() {
+            if ((ipaddress[0] == 0x00) && (ipaddress[1] == 0x00) &&
+                (ipaddress[2] == 0x00) && (ipaddress[3] == 0x00) &&
+                (ipaddress[4] == 0x00) && (ipaddress[5] == 0x00) &&
+                (ipaddress[6] == 0x00) && (ipaddress[7] == 0x00) &&
+                (ipaddress[8] == 0x00) && (ipaddress[9] == 0x00) &&
+                (ipaddress[10] == 0x00) && (ipaddress[11] == 0x00))  {
+                return true;
+            }
+            return false;
+        }
+
+        boolean isMulticastAddress() {
+            return ((ipaddress[0] & 0xff) == 0xff);
+        }
+
+        boolean isAnyLocalAddress() {
+            byte test = 0x00;
+            for (int i = 0; i < INADDRSZ; i++) {
+                test |= ipaddress[i];
+            }
+            return (test == 0x00);
+        }
+
+        boolean isLoopbackAddress() {
+            byte test = 0x00;
+            for (int i = 0; i < 15; i++) {
+                test |= ipaddress[i];
+            }
+            return (test == 0x00) && (ipaddress[15] == 0x01);
+        }
+
+        boolean isLinkLocalAddress() {
+            return ((ipaddress[0] & 0xff) == 0xfe
+                    && (ipaddress[1] & 0xc0) == 0x80);
+        }
+
+
+        boolean isSiteLocalAddress() {
+            return ((ipaddress[0] & 0xff) == 0xfe
+                    && (ipaddress[1] & 0xc0) == 0xc0);
+        }
+
+        boolean isMCGlobal() {
+            return ((ipaddress[0] & 0xff) == 0xff
+                    && (ipaddress[1] & 0x0f) == 0x0e);
+        }
+
+        boolean isMCNodeLocal() {
+            return ((ipaddress[0] & 0xff) == 0xff
+                    && (ipaddress[1] & 0x0f) == 0x01);
+        }
+
+        boolean isMCLinkLocal() {
+            return ((ipaddress[0] & 0xff) == 0xff
+                    && (ipaddress[1] & 0x0f) == 0x02);
+        }
+
+        boolean isMCSiteLocal() {
+            return ((ipaddress[0] & 0xff) == 0xff
+                    && (ipaddress[1] & 0x0f) == 0x05);
+        }
+
+        boolean isMCOrgLocal() {
+            return ((ipaddress[0] & 0xff) == 0xff
+                    && (ipaddress[1] & 0x0f) == 0x08);
+        }
+    }
+
+    private final transient Inet6AddressHolder holder6;
 
     private static final long serialVersionUID = 6880410070516793377L;
 
@@ -213,37 +375,33 @@
 
     Inet6Address() {
         super();
-        holder().hostName = null;
-        ipaddress = new byte[INADDRSZ];
-        holder().family = IPv6;
+        holder.init(null, IPv6);
+        holder6 = new Inet6AddressHolder();
     }
 
     /* checking of value for scope_id should be done by caller
      * scope_id must be >= 0, or -1 to indicate not being set
      */
     Inet6Address(String hostName, byte addr[], int scope_id) {
-        holder().hostName = hostName;
-        if (addr.length == INADDRSZ) { // normal IPv6 address
-            holder().family = IPv6;
-            ipaddress = addr.clone();
-        }
-        if (scope_id >= 0) {
-            this.scope_id = scope_id;
-            scope_id_set = true;
-        }
+        holder.init(hostName, IPv6);
+        holder6 = new Inet6AddressHolder();
+        holder6.init(addr, scope_id);
     }
 
     Inet6Address(String hostName, byte addr[]) {
+        holder6 = new Inet6AddressHolder();
         try {
             initif (hostName, addr, null);
         } catch (UnknownHostException e) {} /* cant happen if ifname is null */
     }
 
     Inet6Address (String hostName, byte addr[], NetworkInterface nif) throws UnknownHostException {
+        holder6 = new Inet6AddressHolder();
         initif (hostName, addr, nif);
     }
 
     Inet6Address (String hostName, byte addr[], String ifname) throws UnknownHostException {
+        holder6 = new Inet6AddressHolder();
         initstr (hostName, addr, ifname);
     }
 
@@ -325,17 +483,13 @@
     }
 
     private void initif(String hostName, byte addr[],NetworkInterface nif) throws UnknownHostException {
-        holder().hostName = hostName;
+        int family = -1;
+        holder6.init(addr, nif);
+
         if (addr.length == INADDRSZ) { // normal IPv6 address
-            holder().family = IPv6;
-            ipaddress = addr.clone();
+            family = IPv6;
         }
-        if (nif != null) {
-            this.scope_ifname = nif;
-            scope_ifname_set = true;
-            scope_id = deriveNumericScope (nif);
-            scope_id_set = true;
-        }
+        holder.init(hostName, family);
     }
 
     /* check the two Ipv6 addresses and return false if they are both
@@ -343,18 +497,21 @@
      * (ie. one is sitelocal and the other linklocal)
      * return true otherwise.
      */
-    private boolean differentLocalAddressTypes(Inet6Address other) {
+    private static boolean differentLocalAddressTypes(
+        byte[] thisAddr, byte[] otherAddr) {
 
-        if (isLinkLocalAddress() && !other.isLinkLocalAddress()) {
+        if (Inet6Address.isLinkLocalAddress(thisAddr) &&
+                !Inet6Address.isLinkLocalAddress(otherAddr)) {
             return false;
         }
-        if (isSiteLocalAddress() && !other.isSiteLocalAddress()) {
+        if (Inet6Address.isSiteLocalAddress(thisAddr) &&
+                !Inet6Address.isSiteLocalAddress(otherAddr)) {
             return false;
         }
         return true;
     }
 
-    private int deriveNumericScope (NetworkInterface ifc) throws UnknownHostException {
+    private static int deriveNumericScope (byte[] thisAddr, NetworkInterface ifc) throws UnknownHostException {
         Enumeration<InetAddress> addresses = ifc.getInetAddresses();
         while (addresses.hasMoreElements()) {
             InetAddress addr = addresses.nextElement();
@@ -363,12 +520,12 @@
             }
             Inet6Address ia6_addr = (Inet6Address)addr;
             /* check if site or link local prefixes match */
-            if (!differentLocalAddressTypes(ia6_addr)){
+            if (!differentLocalAddressTypes(thisAddr, ia6_addr.getAddress())){
                 /* type not the same, so carry on searching */
                 continue;
             }
             /* found a matching address - return its scope_id */
-            return ia6_addr.scope_id;
+            return ia6_addr.getScopeId();
         }
         throw new UnknownHostException ("no scope_id found");
     }
@@ -383,41 +540,61 @@
         while (en.hasMoreElements()) {
             NetworkInterface ifc = en.nextElement();
             if (ifc.getName().equals (ifname)) {
-                Enumeration addresses = ifc.getInetAddresses();
-                while (addresses.hasMoreElements()) {
-                    InetAddress addr = (InetAddress)addresses.nextElement();
-                    if (!(addr instanceof Inet6Address)) {
-                        continue;
-                    }
-                    Inet6Address ia6_addr = (Inet6Address)addr;
-                    /* check if site or link local prefixes match */
-                    if (!differentLocalAddressTypes(ia6_addr)){
-                        /* type not the same, so carry on searching */
-                        continue;
-                    }
-                    /* found a matching address - return its scope_id */
-                    return ia6_addr.scope_id;
-                }
+                return deriveNumericScope(holder6.ipaddress, ifc);
             }
         }
         throw new UnknownHostException ("No matching address found for interface : " +ifname);
     }
 
     /**
+     * @serialField ipaddress byte[]
+     * @serialField scope_id int
+     * @serialField scope_id_set boolean
+     * @serialField scope_ifname_set boolean
+     * @serialField ifname String
+     */
+
+    private static final ObjectStreamField[] serialPersistentFields = {
+         new ObjectStreamField("ipaddress", byte[].class),
+         new ObjectStreamField("scope_id", int.class),
+         new ObjectStreamField("scope_id_set", boolean.class),
+         new ObjectStreamField("scope_ifname_set", boolean.class),
+         new ObjectStreamField("ifname", String.class)
+    };
+
+    private static final long FIELDS_OFFSET;
+    private static final sun.misc.Unsafe UNSAFE;
+
+    static {
+        try {
+            sun.misc.Unsafe unsafe = sun.misc.Unsafe.getUnsafe();
+            FIELDS_OFFSET = unsafe.objectFieldOffset(
+                    Inet6Address.class.getDeclaredField("holder6"));
+            UNSAFE = unsafe;
+        } catch (ReflectiveOperationException e) {
+            throw new Error(e);
+        }
+    }
+
+    /**
      * restore the state of this object from stream
      * including the scope information, only if the
      * scoped interface name is valid on this system
      */
     private void readObject(ObjectInputStream s)
         throws IOException, ClassNotFoundException {
-        scope_ifname = null;
-        scope_ifname_set = false;
+        NetworkInterface scope_ifname = null;
 
         if (getClass().getClassLoader() != null) {
             throw new SecurityException ("invalid address type");
         }
 
-        s.defaultReadObject();
+        ObjectInputStream.GetField gf = s.readFields();
+        byte[] ipaddress = (byte[])gf.get("ipaddress", null);
+        int scope_id = (int)gf.get("scope_id", -1);
+        boolean scope_id_set = (boolean)gf.get("scope_id_set", false);
+        boolean scope_ifname_set = (boolean)gf.get("scope_ifname_set", false);
+        String ifname = (String)gf.get("ifname", null);
 
         if (ifname != null && !"".equals (ifname)) {
             try {
@@ -430,7 +607,7 @@
                     scope_id = 0;
                 } else {
                     try {
-                        scope_id = deriveNumericScope (scope_ifname);
+                        scope_id = deriveNumericScope (ipaddress, scope_ifname);
                     } catch (UnknownHostException e) {
                         // typically should not happen, but it may be that
                         // the machine being used for deserialization has
@@ -438,8 +615,8 @@
                     }
                 }
             } catch (SocketException e) {}
+        }
 
-        }
         /* if ifname was not supplied, then the numeric info is used */
 
         ipaddress = ipaddress.clone();
@@ -450,9 +627,37 @@
                                              ipaddress.length);
         }
 
-        if (holder().getFamily() != IPv6) {
+        if (holder.getFamily() != IPv6) {
             throw new InvalidObjectException("invalid address family type");
         }
+
+        Inet6AddressHolder h = new Inet6AddressHolder(
+            ipaddress, scope_id, scope_id_set, scope_ifname, scope_ifname_set
+        );
+
+        UNSAFE.putObject(this, FIELDS_OFFSET, h);
+    }
+
+    /**
+     * default behavior is overridden in order to write the
+     * scope_ifname field as a String, rather than a NetworkInterface
+     * which is not serializable
+     */
+    private synchronized void writeObject(ObjectOutputStream s)
+        throws IOException
+    {
+            String ifname = null;
+
+        if (holder6.scope_ifname_set) {
+            ifname = holder6.scope_ifname.getName();
+        }
+        ObjectOutputStream.PutField pfields = s.putFields();
+        pfields.put("ipaddress", holder6.ipaddress);
+        pfields.put("scope_id", holder6.scope_id);
+        pfields.put("scope_id_set", holder6.scope_id_set);
+        pfields.put("scope_ifname_set", holder6.scope_ifname_set);
+        pfields.put("ifname", ifname);
+        s.writeFields();
     }
 
     /**
@@ -466,7 +671,7 @@
      */
     @Override
     public boolean isMulticastAddress() {
-        return ((ipaddress[0] & 0xff) == 0xff);
+        return holder6.isMulticastAddress();
     }
 
     /**
@@ -477,11 +682,7 @@
      */
     @Override
     public boolean isAnyLocalAddress() {
-        byte test = 0x00;
-        for (int i = 0; i < INADDRSZ; i++) {
-            test |= ipaddress[i];
-        }
-        return (test == 0x00);
+        return holder6.isAnyLocalAddress();
     }
 
     /**
@@ -493,11 +694,7 @@
      */
     @Override
     public boolean isLoopbackAddress() {
-        byte test = 0x00;
-        for (int i = 0; i < 15; i++) {
-            test |= ipaddress[i];
-        }
-        return (test == 0x00) && (ipaddress[15] == 0x01);
+        return holder6.isLoopbackAddress();
     }
 
     /**
@@ -509,6 +706,11 @@
      */
     @Override
     public boolean isLinkLocalAddress() {
+        return holder6.isLinkLocalAddress();
+    }
+
+    /* static version of above */
+    static boolean isLinkLocalAddress(byte[] ipaddress) {
         return ((ipaddress[0] & 0xff) == 0xfe
                 && (ipaddress[1] & 0xc0) == 0x80);
     }
@@ -522,6 +724,11 @@
      */
     @Override
     public boolean isSiteLocalAddress() {
+        return holder6.isSiteLocalAddress();
+    }
+
+    /* static version of above */
+    static boolean isSiteLocalAddress(byte[] ipaddress) {
         return ((ipaddress[0] & 0xff) == 0xfe
                 && (ipaddress[1] & 0xc0) == 0xc0);
     }
@@ -536,8 +743,7 @@
      */
     @Override
     public boolean isMCGlobal() {
-        return ((ipaddress[0] & 0xff) == 0xff
-                && (ipaddress[1] & 0x0f) == 0x0e);
+        return holder6.isMCGlobal();
     }
 
     /**
@@ -550,8 +756,7 @@
      */
     @Override
     public boolean isMCNodeLocal() {
-        return ((ipaddress[0] & 0xff) == 0xff
-                && (ipaddress[1] & 0x0f) == 0x01);
+        return holder6.isMCNodeLocal();
     }
 
     /**
@@ -564,8 +769,7 @@
      */
     @Override
     public boolean isMCLinkLocal() {
-        return ((ipaddress[0] & 0xff) == 0xff
-                && (ipaddress[1] & 0x0f) == 0x02);
+        return holder6.isMCLinkLocal();
     }
 
     /**
@@ -578,8 +782,7 @@
      */
     @Override
     public boolean isMCSiteLocal() {
-        return ((ipaddress[0] & 0xff) == 0xff
-                && (ipaddress[1] & 0x0f) == 0x05);
+        return holder6.isMCSiteLocal();
     }
 
     /**
@@ -593,10 +796,8 @@
      */
     @Override
     public boolean isMCOrgLocal() {
-        return ((ipaddress[0] & 0xff) == 0xff
-                && (ipaddress[1] & 0x0f) == 0x08);
+        return holder6.isMCOrgLocal();
     }
-
     /**
      * Returns the raw IP address of this <code>InetAddress</code>
      * object. The result is in network byte order: the highest order
@@ -606,7 +807,7 @@
      */
     @Override
     public byte[] getAddress() {
-        return ipaddress.clone();
+        return holder6.ipaddress.clone();
     }
 
     /**
@@ -617,7 +818,7 @@
      * @since 1.5
      */
      public int getScopeId () {
-        return scope_id;
+        return holder6.scope_id;
      }
 
     /**
@@ -628,7 +829,7 @@
      * @since 1.5
      */
      public NetworkInterface getScopedInterface () {
-        return scope_ifname;
+        return holder6.scope_ifname;
      }
 
     /**
@@ -641,13 +842,7 @@
      */
     @Override
     public String getHostAddress() {
-        String s = numericToTextFormat(ipaddress);
-        if (scope_ifname_set) { /* must check this first */
-            s = s + "%" + scope_ifname.getName();
-        } else if (scope_id_set) {
-            s = s + "%" + scope_id;
-        }
-        return s;
+        return holder6.getHostAddress();
     }
 
     /**
@@ -657,25 +852,7 @@
      */
     @Override
     public int hashCode() {
-        if (ipaddress != null) {
-
-            int hash = 0;
-            int i=0;
-            while (i<INADDRSZ) {
-                int j=0;
-                int component=0;
-                while (j<4 && i<INADDRSZ) {
-                    component = (component << 8) + ipaddress[i];
-                    j++;
-                    i++;
-                }
-                hash += component;
-            }
-            return hash;
-
-        } else {
-            return 0;
-        }
+        return holder6.hashCode();
     }
 
     /**
@@ -702,12 +879,7 @@
 
         Inet6Address inetAddr = (Inet6Address)obj;
 
-        for (int i = 0; i < INADDRSZ; i++) {
-            if (ipaddress[i] != inetAddr.ipaddress[i])
-                return false;
-        }
-
-        return true;
+        return holder6.equals(inetAddr.holder6);
     }
 
     /**
@@ -719,15 +891,7 @@
      * @since 1.4
      */
     public boolean isIPv4CompatibleAddress() {
-        if ((ipaddress[0] == 0x00) && (ipaddress[1] == 0x00) &&
-            (ipaddress[2] == 0x00) && (ipaddress[3] == 0x00) &&
-            (ipaddress[4] == 0x00) && (ipaddress[5] == 0x00) &&
-            (ipaddress[6] == 0x00) && (ipaddress[7] == 0x00) &&
-            (ipaddress[8] == 0x00) && (ipaddress[9] == 0x00) &&
-            (ipaddress[10] == 0x00) && (ipaddress[11] == 0x00))  {
-            return true;
-        }
-        return false;
+        return holder6.isIPv4CompatibleAddress();
     }
 
     // Utilities
@@ -757,23 +921,4 @@
      * Perform class load-time initializations.
      */
     private static native void init();
-
-    /**
-     * Following field is only used during (de)/serialization
-     */
-    private String ifname;
-
-    /**
-     * default behavior is overridden in order to write the
-     * scope_ifname field as a String, rather than a NetworkInterface
-     * which is not serializable
-     */
-    private synchronized void writeObject(java.io.ObjectOutputStream s)
-        throws IOException
-    {
-        if (scope_ifname_set) {
-            ifname = scope_ifname.getName();
-        }
-        s.defaultWriteObject();
-    }
 }
--- a/src/share/classes/java/net/InetAddress.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/java/net/InetAddress.java	Tue Oct 01 14:22:36 2013 -0700
@@ -213,6 +213,13 @@
             this.family = family;
         }
 
+        void init(String hostName, int family) {
+            this.hostName = hostName;
+            if (family != -1) {
+                this.family = family;
+            }
+        }
+
         String hostName;
 
         String getHostName() {
@@ -1594,7 +1601,6 @@
         pf.put("address", holder().address);
         pf.put("family", holder().family);
         s.writeFields();
-        s.flush();
     }
 }
 
--- a/src/share/classes/java/util/TimeZone.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/java/util/TimeZone.java	Tue Oct 01 14:22:36 2013 -0700
@@ -165,6 +165,11 @@
     // Proclaim serialization compatibility with JDK 1.1
     static final long serialVersionUID = 3581463369166924961L;
 
+    // TimeZone.setDefault maintains the compatible behavior of the AppContext-based
+    // default setting for untrusted code if allowSetDefault is true.
+    private static final boolean allowSetDefault = AccessController.doPrivileged(
+    new sun.security.action.GetPropertyAction("jdk.util.TimeZone.allowSetDefault")) != null;
+
     /**
      * Gets the time zone offset, for current date, modified in case of
      * daylight savings. This is the offset to add to UTC to get local time.
@@ -689,6 +694,9 @@
                 sm.checkPermission(new PropertyPermission
                                    ("user.timezone", "write"));
             } catch (SecurityException e) {
+                if (!allowSetDefault) {
+                    throw e;
+                }
                 hasPermission = false;
             }
         }
@@ -719,6 +727,7 @@
      * Returns the default TimeZone in an AppContext if any AppContext
      * has ever used. null is returned if any AppContext hasn't been
      * used or if the AppContext doesn't have the default TimeZone.
+     * null is also returned if allowSetDefault is false.
      *
      * Note that javaAWTAccess may be null if sun.awt.AppContext class hasn't
      * been loaded. If so, it implies that AWTSecurityManager is not our
@@ -726,26 +735,29 @@
      * This works around a build time issue.
      */
     private static TimeZone getDefaultInAppContext() {
-        // JavaAWTAccess provides access implementation-private methods without using reflection.
-        JavaAWTAccess javaAWTAccess = SharedSecrets.getJavaAWTAccess();
-        if (System.getSecurityManager() == null || javaAWTAccess == null) {
-            return mainAppContextDefault;
-        } else if (javaAWTAccess.isDisposed()) {
-            return null;
-        } else {
-            TimeZone tz = (TimeZone) javaAWTAccess.get(TimeZone.class);
-            if (tz == null && javaAWTAccess.isMainAppContext()) {
+        if (allowSetDefault) {
+            // JavaAWTAccess provides access implementation-private methods without using reflection.
+            JavaAWTAccess javaAWTAccess = SharedSecrets.getJavaAWTAccess();
+            if (System.getSecurityManager() == null || javaAWTAccess == null) {
                 return mainAppContextDefault;
+            } else if (javaAWTAccess.isDisposed()) {
+                return null;
             } else {
-                return tz;
+                TimeZone tz = (TimeZone) javaAWTAccess.get(TimeZone.class);
+                if (tz == null && javaAWTAccess.isMainAppContext()) {
+                    return mainAppContextDefault;
+                } else {
+                    return tz;
+                }
             }
         }
+        return null;
     }
 
     /**
-     * Sets the default TimeZone in the AppContext to the given
-     * tz. null is handled special: do nothing if any AppContext
-     * hasn't been used, remove the default TimeZone in the
+     * Sets the default TimeZone in the AppContext to the given tz if
+     * allowSetDefault is true. null is handled special: do nothing if any
+     * AppContext hasn't been used, remove the default TimeZone in the
      * AppContext otherwise.
      *
      * Note that javaAWTAccess may be null if sun.awt.AppContext class hasn't
@@ -754,14 +766,16 @@
      * This works around a build time issue.
      */
     private static void setDefaultInAppContext(TimeZone tz) {
-        // JavaAWTAccess provides access implementation-private methods without using reflection.
-        JavaAWTAccess javaAWTAccess = SharedSecrets.getJavaAWTAccess();
-        if (System.getSecurityManager() == null || javaAWTAccess == null) {
-            mainAppContextDefault = tz;
-        } else if (!javaAWTAccess.isDisposed()) {
-            javaAWTAccess.put(TimeZone.class, tz);
-            if (javaAWTAccess.isMainAppContext()) {
-                mainAppContextDefault = null;
+        if (allowSetDefault) {
+            // JavaAWTAccess provides access implementation-private methods without using reflection.
+            JavaAWTAccess javaAWTAccess = SharedSecrets.getJavaAWTAccess();
+            if (System.getSecurityManager() == null || javaAWTAccess == null) {
+                mainAppContextDefault = tz;
+            } else if (!javaAWTAccess.isDisposed()) {
+                javaAWTAccess.put(TimeZone.class, tz);
+                if (javaAWTAccess.isMainAppContext()) {
+                    mainAppContextDefault = null;
+                }
             }
         }
     }
--- a/src/share/classes/javax/management/BadAttributeValueExpException.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/javax/management/BadAttributeValueExpException.java	Tue Oct 01 14:22:36 2013 -0700
@@ -25,6 +25,9 @@
 
 package javax.management;
 
+import java.io.IOException;
+import java.io.ObjectInputStream;
+
 
 /**
  * Thrown when an invalid MBean attribute is passed to a query
@@ -51,7 +54,7 @@
      * @param val the inappropriate value.
      */
     public BadAttributeValueExpException (Object val) {
-        this.val = val;
+        this.val = val == null ? null : val.toString();
     }
 
 
@@ -62,4 +65,25 @@
         return "BadAttributeValueException: " + val;
     }
 
+    private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
+        ObjectInputStream.GetField gf = ois.readFields();
+        Object valObj = gf.get("val", null);
+
+        if (valObj == null) {
+            val = null;
+        } else if (valObj instanceof String) {
+            val= valObj;
+        } else if (System.getSecurityManager() == null
+                || valObj instanceof Long
+                || valObj instanceof Integer
+                || valObj instanceof Float
+                || valObj instanceof Double
+                || valObj instanceof Byte
+                || valObj instanceof Short
+                || valObj instanceof Boolean) {
+            val = valObj.toString();
+        } else { // the serialized object is from a version without JDK-8019292 fix
+            val = System.identityHashCode(valObj) + "@" + valObj.getClass().getName();
+        }
+    }
  }
--- a/src/share/classes/javax/management/MBeanNotificationInfo.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/javax/management/MBeanNotificationInfo.java	Tue Oct 01 14:22:36 2013 -0700
@@ -25,6 +25,9 @@
 
 package javax.management;
 
+import java.io.IOException;
+import java.io.InvalidObjectException;
+import java.io.ObjectInputStream;
 import java.util.Arrays;
 import java.util.Objects;
 
@@ -68,7 +71,7 @@
     /**
      * @serial The different types of the notification.
      */
-    private final String[] types;
+    private String[] types;
 
     /** @see MBeanInfo#arrayGettersSafe */
     private final transient boolean arrayGettersSafe;
@@ -115,9 +118,8 @@
            notifType, though it doesn't explicitly allow it
            either.  */
 
-        if (notifTypes == null)
-            notifTypes = NO_TYPES;
-        this.types = notifTypes;
+        this.types = (notifTypes != null && notifTypes.length > 0) ?
+                        notifTypes.clone() : NO_TYPES;
         this.arrayGettersSafe =
             MBeanInfo.arrayGettersSafe(this.getClass(),
                                        MBeanNotificationInfo.class);
@@ -204,4 +206,11 @@
             hash ^= types[i].hashCode();
         return hash;
     }
+
+    private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
+        ObjectInputStream.GetField gf = ois.readFields();
+        String[] t = (String[])gf.get("types", null);
+
+        types = (t != null && t.length != 0) ? t.clone() : NO_TYPES;
+    }
 }
--- a/src/share/classes/javax/management/MBeanTrustPermission.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/javax/management/MBeanTrustPermission.java	Tue Oct 01 14:22:36 2013 -0700
@@ -26,6 +26,9 @@
 package javax.management;
 
 import java.security.BasicPermission;
+import java.io.IOException;
+import java.io.InvalidObjectException;
+import java.io.ObjectInputStream;
 
 /**
  * This permission represents "trust" in a signer or codebase.
@@ -75,15 +78,31 @@
      */
     public MBeanTrustPermission(String name, String actions) {
         super(name, actions);
+        validate(name,actions);
+    }
+
+    private static void validate(String name, String actions) {
         /* Check that actions is a null empty string */
-        if (actions != null && actions.length() > 0)
-            throw new IllegalArgumentException("MBeanTrustPermission " +
-                                               "actions must be null: " +
+        if (actions != null && actions.length() > 0) {
+            throw new IllegalArgumentException("MBeanTrustPermission actions must be null: " +
                                                actions);
+        }
 
-        if (!name.equals("register") && !name.equals("*"))
-            throw new IllegalArgumentException("MBeanTrustPermission: " +
-                                               "Unknown target name " +
+        if (!name.equals("register") && !name.equals("*")) {
+            throw new IllegalArgumentException("MBeanTrustPermission: Unknown target name " +
                                                "[" + name + "]");
+        }
+    }
+
+    private void readObject(ObjectInputStream in)
+         throws IOException, ClassNotFoundException {
+
+        // Reading private fields of base class
+        in.defaultReadObject();
+        try {
+            validate(super.getName(),super.getActions());
+        } catch (IllegalArgumentException e) {
+            throw new InvalidObjectException(e.getMessage());
+        }
     }
 }
--- a/src/share/classes/javax/management/modelmbean/RequiredModelMBean.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/javax/management/modelmbean/RequiredModelMBean.java	Tue Oct 01 14:22:36 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -298,11 +298,15 @@
                     RequiredModelMBean.class.getName(),
                 "setModelMBeanInfo(ModelMBeanInfo)",
                 "Setting ModelMBeanInfo to " + printModelMBeanInfo(mbi));
+            int noOfNotifications = 0;
+            if (mbi.getNotifications() != null) {
+                noOfNotifications = mbi.getNotifications().length;
+            }
             MODELMBEAN_LOGGER.logp(Level.FINER,
                     RequiredModelMBean.class.getName(),
                 "setModelMBeanInfo(ModelMBeanInfo)",
                 "ModelMBeanInfo notifications has " +
-                (mbi.getNotifications()).length + " elements");
+                noOfNotifications + " elements");
         }
 
         modelMBeanInfo = (ModelMBeanInfo)mbi.clone();
@@ -2997,4 +3001,4 @@
             Void.class.getName()
         };
     }
-}
\ No newline at end of file
+}
--- a/src/share/classes/javax/management/remote/JMXPrincipal.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/javax/management/remote/JMXPrincipal.java	Tue Oct 01 14:22:36 2013 -0700
@@ -26,6 +26,9 @@
 
 package javax.management.remote;
 
+import java.io.IOException;
+import java.io.InvalidObjectException;
+import java.io.ObjectInputStream;
 import java.io.Serializable;
 import java.security.Principal;
 
@@ -64,9 +67,7 @@
      * <code>null</code>.
      */
     public JMXPrincipal(String name) {
-        if (name == null)
-            throw new NullPointerException("illegal null input");
-
+        validate(name);
         this.name = name;
     }
 
@@ -130,4 +131,20 @@
     public int hashCode() {
         return name.hashCode();
     }
+
+    private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
+        ObjectInputStream.GetField gf = ois.readFields();
+        String principalName = (String)gf.get("name", null);
+        try {
+            validate(principalName);
+            this.name = principalName;
+        } catch (NullPointerException e) {
+            throw new InvalidObjectException(e.getMessage());
+        }
+    }
+
+    private static void validate(String name) throws NullPointerException {
+        if (name == null)
+            throw new NullPointerException("illegal null input");
+    }
 }
--- a/src/share/classes/javax/management/remote/JMXServiceURL.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/javax/management/remote/JMXServiceURL.java	Tue Oct 01 14:22:36 2013 -0700
@@ -29,6 +29,9 @@
 
 import com.sun.jmx.remote.util.ClassLogger;
 import com.sun.jmx.remote.util.EnvHelp;
+import java.io.IOException;
+import java.io.InvalidObjectException;
+import java.io.ObjectInputStream;
 
 import java.io.Serializable;
 import java.net.InetAddress;
@@ -297,7 +300,7 @@
                If we're given an explicit host name that is illegal we
                have to reject it.  (Bug 5057532.)  */
             try {
-                validateHost(host);
+                validateHost(host, port);
             } catch (MalformedURLException e) {
                 if (logger.fineOn()) {
                     logger.fine("JMXServiceURL",
@@ -336,36 +339,82 @@
         validate();
     }
 
-    private void validate() throws MalformedURLException {
+    private static final String INVALID_INSTANCE_MSG =
+            "Trying to deserialize an invalid instance of JMXServiceURL";
+    private void readObject(ObjectInputStream  inputStream) throws IOException, ClassNotFoundException {
+        ObjectInputStream.GetField gf = inputStream.readFields();
+        String h = (String)gf.get("host", null);
+        int p = (int)gf.get("port", -1);
+        String proto = (String)gf.get("protocol", null);
+        String url = (String)gf.get("urlPath", null);
 
+        if (proto == null || url == null || h == null) {
+            StringBuilder sb = new StringBuilder(INVALID_INSTANCE_MSG).append('[');
+            boolean empty = true;
+            if (proto == null) {
+                sb.append("protocol=null");
+                empty = false;
+            }
+            if (h == null) {
+                sb.append(empty ? "" : ",").append("host=null");
+                empty = false;
+            }
+            if (url == null) {
+                sb.append(empty ? "" : ",").append("urlPath=null");
+            }
+            sb.append(']');
+            throw new InvalidObjectException(sb.toString());
+        }
+
+        if (h.contains("[") || h.contains("]")) {
+            throw new InvalidObjectException("Invalid host name: " + h);
+        }
+
+        try {
+            validate(proto, h, p, url);
+            this.protocol = proto;
+            this.host = h;
+            this.port = p;
+            this.urlPath = url;
+        } catch (MalformedURLException e) {
+            throw new InvalidObjectException(INVALID_INSTANCE_MSG + ": " +
+                                             e.getMessage());
+        }
+
+    }
+
+    private void validate(String proto, String h, int p, String url)
+        throws MalformedURLException {
         // Check protocol
-
-        final int protoEnd = indexOfFirstNotInSet(protocol, protocolBitSet, 0);
-        if (protoEnd == 0 || protoEnd < protocol.length()
-            || !alphaBitSet.get(protocol.charAt(0))) {
+        final int protoEnd = indexOfFirstNotInSet(proto, protocolBitSet, 0);
+        if (protoEnd == 0 || protoEnd < proto.length()
+            || !alphaBitSet.get(proto.charAt(0))) {
             throw new MalformedURLException("Missing or invalid protocol " +
-                                            "name: \"" + protocol + "\"");
+                                            "name: \"" + proto + "\"");
         }
 
         // Check host
-
-        validateHost();
+        validateHost(h, p);
 
         // Check port
-
-        if (port < 0)
-            throw new MalformedURLException("Bad port: " + port);
+        if (p < 0)
+            throw new MalformedURLException("Bad port: " + p);
 
         // Check URL path
-
-        if (urlPath.length() > 0) {
-            if (!urlPath.startsWith("/") && !urlPath.startsWith(";"))
-                throw new MalformedURLException("Bad URL path: " + urlPath);
+        if (url.length() > 0) {
+            if (!url.startsWith("/") && !url.startsWith(";"))
+                throw new MalformedURLException("Bad URL path: " + url);
         }
     }
 
-    private void validateHost() throws MalformedURLException {
-        if (host.length() == 0) {
+    private void validate() throws MalformedURLException {
+        validate(this.protocol, this.host, this.port, this.urlPath);
+    }
+
+    private static void validateHost(String h, int port)
+            throws MalformedURLException {
+
+        if (h.length() == 0) {
             if (port != 0) {
                 throw new MalformedURLException("Cannot give port number " +
                                                 "without host name");
@@ -373,12 +422,6 @@
             return;
         }
 
-        validateHost(host);
-    }
-
-    private static void validateHost(String h)
-            throws MalformedURLException {
-
         if (isNumericIPv6Address(h)) {
             /* We assume J2SE >= 1.4 here.  Otherwise you can't
                use the address anyway.  We can't call
@@ -663,22 +706,22 @@
     /**
      * The value returned by {@link #getProtocol()}.
      */
-    private final String protocol;
+    private String protocol;
 
     /**
      * The value returned by {@link #getHost()}.
      */
-    private final String host;
+    private String host;
 
     /**
      * The value returned by {@link #getPort()}.
      */
-    private final int port;
+    private int port;
 
     /**
      * The value returned by {@link #getURLPath()}.
      */
-    private final String urlPath;
+    private String urlPath;
 
     /**
      * Cached result of {@link #toString()}.
--- a/src/share/classes/javax/management/remote/NotificationResult.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/javax/management/remote/NotificationResult.java	Tue Oct 01 14:22:36 2013 -0700
@@ -25,6 +25,9 @@
 
 package javax.management.remote;
 
+import java.io.IOException;
+import java.io.InvalidObjectException;
+import java.io.ObjectInputStream;
 import java.io.Serializable;
 
 /**
@@ -76,17 +79,7 @@
     public NotificationResult(long earliestSequenceNumber,
                               long nextSequenceNumber,
                               TargetedNotification[] targetedNotifications) {
-        if (targetedNotifications == null) {
-            final String msg = "Notifications null";
-            throw new IllegalArgumentException(msg);
-        }
-
-        if (earliestSequenceNumber < 0 || nextSequenceNumber < 0)
-            throw new IllegalArgumentException("Bad sequence numbers");
-        /* We used to check nextSequenceNumber >= earliestSequenceNumber
-           here.  But in fact the opposite can legitimately be true if
-           notifications have been lost.  */
-
+        validate(targetedNotifications, earliestSequenceNumber, nextSequenceNumber);
         this.earliestSequenceNumber = earliestSequenceNumber;
         this.nextSequenceNumber = nextSequenceNumber;
         this.targetedNotifications = (targetedNotifications.length == 0 ? targetedNotifications : targetedNotifications.clone());
@@ -138,7 +131,40 @@
             getTargetedNotifications().length;
     }
 
-    private final long earliestSequenceNumber;
-    private final long nextSequenceNumber;
-    private final TargetedNotification[] targetedNotifications;
+    private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
+        ois.defaultReadObject();
+        try {
+            validate(
+                this.targetedNotifications,
+                this.earliestSequenceNumber,
+                this.nextSequenceNumber
+            );
+
+            this.targetedNotifications = this.targetedNotifications.length == 0 ?
+                                            this.targetedNotifications :
+                                            this.targetedNotifications.clone();
+        } catch (IllegalArgumentException e) {
+            throw new InvalidObjectException(e.getMessage());
+        }
+    }
+
+    private long earliestSequenceNumber;
+    private long nextSequenceNumber;
+    private TargetedNotification[] targetedNotifications;
+
+    private static void validate(TargetedNotification[] targetedNotifications,
+                                 long earliestSequenceNumber,
+                                 long nextSequenceNumber)
+        throws IllegalArgumentException {
+        if (targetedNotifications == null) {
+            final String msg = "Notifications null";
+            throw new IllegalArgumentException(msg);
+        }
+
+        if (earliestSequenceNumber < 0 || nextSequenceNumber < 0)
+            throw new IllegalArgumentException("Bad sequence numbers");
+        /* We used to check nextSequenceNumber >= earliestSequenceNumber
+           here.  But in fact the opposite can legitimately be true if
+           notifications have been lost.  */
+    }
 }
--- a/src/share/classes/javax/management/remote/TargetedNotification.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/javax/management/remote/TargetedNotification.java	Tue Oct 01 14:22:36 2013 -0700
@@ -26,6 +26,9 @@
 
 package javax.management.remote;
 
+import java.io.IOException;
+import java.io.InvalidObjectException;
+import java.io.ObjectInputStream;
 import java.io.Serializable;
 import javax.management.Notification;
 
@@ -73,12 +76,9 @@
      */
     public TargetedNotification(Notification notification,
                                 Integer listenerID) {
+        validate(notification, listenerID);
         // If we replace integer with int...
         // this(notification,intValue(listenerID));
-        if (notification == null) throw new
-            IllegalArgumentException("Invalid notification: null");
-        if (listenerID == null) throw new
-            IllegalArgumentException("Invalid listener ID: null");
         this.notif = notification;
         this.id = listenerID;
     }
@@ -115,13 +115,13 @@
      * @serial A notification to transmit to the other side.
      * @see #getNotification()
      **/
-    private final Notification notif;
+    private Notification notif;
     /**
      * @serial The ID of the listener to which the notification is
      *         targeted.
      * @see #getListenerID()
      **/
-    private final Integer id;
+    private Integer id;
     //private final int id;
 
 // Needed if we use int instead of Integer...
@@ -130,4 +130,22 @@
 //          IllegalArgumentException("Invalid listener ID: null");
 //      return id.intValue();
 //     }
+
+    private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
+        ois.defaultReadObject();
+        try {
+            validate(this.notif, this.id);
+        } catch (IllegalArgumentException e) {
+            throw new InvalidObjectException(e.getMessage());
+        }
+    }
+
+    private static void validate(Notification notif, Integer id) throws IllegalArgumentException {
+        if (notif == null) {
+            throw new IllegalArgumentException("Invalid notification: null");
+        }
+        if (id == null) {
+            throw new IllegalArgumentException("Invalid listener ID: null");
+        }
+    }
 }
--- a/src/share/classes/javax/management/remote/rmi/RMIConnector.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/javax/management/remote/rmi/RMIConnector.java	Tue Oct 01 14:22:36 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -61,6 +61,7 @@
 import java.security.AccessController;
 import java.security.PrivilegedAction;
 import java.security.PrivilegedExceptionAction;
+import java.security.PrivilegedActionException;
 import java.security.ProtectionDomain;
 import java.util.Arrays;
 import java.util.Collections;
@@ -128,7 +129,6 @@
             Map<String, ?> environment) {
         if (rmiServer == null && address == null) throw new
                 IllegalArgumentException("rmiServer and jmxServiceURL both null");
-
         initTransients();
 
         this.rmiServer = rmiServer;
@@ -239,10 +239,21 @@
     //--------------------------------------------------------------------
     // implements JMXConnector interface
     //--------------------------------------------------------------------
+
+    /**
+     * @throws IOException if the connection could not be made because of a
+     *   communication problem, or in the case of the {@code iiop} protocol,
+     *   that RMI/IIOP is not supported
+     */
     public void connect() throws IOException {
         connect(null);
     }
 
+    /**
+     * @throws IOException if the connection could not be made because of a
+     *   communication problem, or in the case of the {@code iiop} protocol,
+     *   that RMI/IIOP is not supported
+     */
     public synchronized void connect(Map<String,?> environment)
     throws IOException {
         final boolean tracing = logger.traceOn();
@@ -2371,13 +2382,21 @@
         }
     }
 
-    private static RMIConnection shadowIiopStub(Object stub)
+  private static RMIConnection shadowIiopStub(Object stub)
     throws InstantiationException, IllegalAccessException {
-        Object proxyStub = proxyStubClass.newInstance();
+        Object proxyStub = null;
+        try {
+            proxyStub = AccessController.doPrivileged(new PrivilegedExceptionAction<Object>() {
+                public Object run() throws Exception {
+                    return proxyStubClass.newInstance();
+                }
+            });
+        } catch (PrivilegedActionException e) {
+            throw new InternalError();
+        }
         IIOPHelper.setDelegate(proxyStub, IIOPHelper.getDelegate(stub));
         return (RMIConnection) proxyStub;
     }
-
     private static RMIConnection getConnection(RMIServer server,
             Object credentials,
             boolean checkStub)
--- a/src/share/classes/javax/security/auth/Subject.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/javax/security/auth/Subject.java	Tue Oct 01 14:22:36 2013 -0700
@@ -1296,8 +1296,14 @@
         {
             ObjectInputStream.GetField fields = ois.readFields();
             subject = (Subject) fields.get("this$0", null);
-            elements = (LinkedList<E>) fields.get("elements", null);
             which = fields.get("which", 0);
+
+            LinkedList<E> tmp = (LinkedList<E>) fields.get("elements", null);
+            if (tmp.getClass() != LinkedList.class) {
+                elements = new LinkedList<E>(tmp);
+            } else {
+                elements = tmp;
+            }
         }
     }
 
--- a/src/share/classes/javax/security/auth/kerberos/KeyTab.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/javax/security/auth/kerberos/KeyTab.java	Tue Oct 01 14:22:36 2013 -0700
@@ -26,6 +26,7 @@
 package javax.security.auth.kerberos;
 
 import java.io.File;
+import java.security.AccessControlException;
 import java.util.Objects;
 import sun.misc.SharedSecrets;
 import sun.security.krb5.EncryptionKey;
@@ -114,7 +115,19 @@
 
     //Takes a snapshot of the keytab content
     private sun.security.krb5.internal.ktab.KeyTab takeSnapshot() {
-        return sun.security.krb5.internal.ktab.KeyTab.getInstance(file);
+        try {
+            return sun.security.krb5.internal.ktab.KeyTab.getInstance(file);
+        } catch (AccessControlException ace) {
+            if (file != null) {
+                // It's OK to show the name if caller specified it
+                throw ace;
+            } else {
+                AccessControlException ace2 = new AccessControlException(
+                        "Access to default keytab denied (modified exception)");
+                ace2.setStackTrace(ace.getStackTrace());
+                throw ace2;
+            }
+        }
     }
 
     /**
--- a/src/share/classes/javax/swing/JTable.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/javax/swing/JTable.java	Tue Oct 01 14:22:36 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -52,6 +52,7 @@
 
 import javax.print.attribute.*;
 import javax.print.PrintService;
+import sun.reflect.misc.ReflectUtil;
 
 import sun.swing.SwingUtilities2;
 import sun.swing.SwingUtilities2.Section;
@@ -5460,14 +5461,16 @@
             // they have the option to replace the value with
             // null or use escape to restore the original.
             // For Strings, return "" for backward compatibility.
-            if ("".equals(s)) {
-                if (constructor.getDeclaringClass() == String.class) {
-                    value = s;
-                }
-                return super.stopCellEditing();
-            }
 
             try {
+                if ("".equals(s)) {
+                    if (constructor.getDeclaringClass() == String.class) {
+                        value = s;
+                    }
+                    return super.stopCellEditing();
+                }
+
+                SwingUtilities2.checkAccess(constructor.getModifiers());
                 value = constructor.newInstance(new Object[]{s});
             }
             catch (Exception e) {
@@ -5491,6 +5494,8 @@
                 if (type == Object.class) {
                     type = String.class;
                 }
+                ReflectUtil.checkPackageAccess(type);
+                SwingUtilities2.checkAccess(type.getModifiers());
                 constructor = type.getConstructor(argTypes);
             }
             catch (Exception e) {
--- a/src/share/classes/javax/swing/UIDefaults.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/javax/swing/UIDefaults.java	Tue Oct 01 14:22:36 2013 -0700
@@ -53,6 +53,7 @@
 
 import sun.reflect.misc.MethodUtil;
 import sun.reflect.misc.ReflectUtil;
+import sun.swing.SwingUtilities2;
 import sun.util.CoreResourceBundleControl;
 
 /**
@@ -1101,7 +1102,7 @@
                         }
                         ReflectUtil.checkPackageAccess(className);
                         c = Class.forName(className, true, (ClassLoader)cl);
-                        checkAccess(c.getModifiers());
+                        SwingUtilities2.checkAccess(c.getModifiers());
                         if (methodName != null) {
                             Class[] types = getClassArray(args);
                             Method m = c.getMethod(methodName, types);
@@ -1109,7 +1110,7 @@
                         } else {
                             Class[] types = getClassArray(args);
                             Constructor constructor = c.getConstructor(types);
-                            checkAccess(constructor.getModifiers());
+                            SwingUtilities2.checkAccess(constructor.getModifiers());
                             return constructor.newInstance(args);
                         }
                     } catch(Exception e) {
@@ -1124,13 +1125,6 @@
             }, acc);
         }
 
-        private void checkAccess(int modifiers) {
-            if(System.getSecurityManager() != null &&
-                    !Modifier.isPublic(modifiers)) {
-                throw new SecurityException("Resource is not accessible");
-            }
-        }
-
         /*
          * Coerce the array of class types provided into one which
          * looks the way the Reflection APIs expect.  This is done
--- a/src/share/classes/javax/swing/text/DefaultFormatter.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/javax/swing/text/DefaultFormatter.java	Tue Oct 01 14:22:36 2013 -0700
@@ -24,7 +24,8 @@
  */
 package javax.swing.text;
 
-import sun.reflect.misc.ConstructorUtil;
+import sun.reflect.misc.ReflectUtil;
+import sun.swing.SwingUtilities2;
 
 import java.io.Serializable;
 import java.lang.reflect.*;
@@ -247,7 +248,9 @@
             Constructor cons;
 
             try {
-                cons = ConstructorUtil.getConstructor(vc, new Class[]{String.class});
+                ReflectUtil.checkPackageAccess(vc);
+                SwingUtilities2.checkAccess(vc.getModifiers());
+                cons = vc.getConstructor(new Class[]{String.class});
 
             } catch (NoSuchMethodException nsme) {
                 cons = null;
@@ -255,6 +258,7 @@
 
             if (cons != null) {
                 try {
+                    SwingUtilities2.checkAccess(cons.getModifiers());
                     return cons.newInstance(new Object[] { string });
                 } catch (Throwable ex) {
                     throw new ParseException("Error creating instance", 0);
--- a/src/share/classes/javax/swing/text/NumberFormatter.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/javax/swing/text/NumberFormatter.java	Tue Oct 01 14:22:36 2013 -0700
@@ -27,6 +27,8 @@
 import java.lang.reflect.*;
 import java.text.*;
 import java.util.*;
+import sun.reflect.misc.ReflectUtil;
+import sun.swing.SwingUtilities2;
 
 /**
  * <code>NumberFormatter</code> subclasses <code>InternationalFormatter</code>
@@ -427,10 +429,12 @@
                         valueClass = value.getClass();
                     }
                     try {
+                        ReflectUtil.checkPackageAccess(valueClass);
+                        SwingUtilities2.checkAccess(valueClass.getModifiers());
                         Constructor cons = valueClass.getConstructor(
                                               new Class[] { String.class });
-
                         if (cons != null) {
+                            SwingUtilities2.checkAccess(cons.getModifiers());
                             return cons.newInstance(new Object[]{string});
                         }
                     } catch (Throwable ex) { }
--- a/src/share/classes/javax/swing/text/html/ObjectView.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/javax/swing/text/html/ObjectView.java	Tue Oct 01 14:22:36 2013 -0700
@@ -31,6 +31,9 @@
 import java.beans.*;
 import java.lang.reflect.*;
 
+import sun.reflect.misc.MethodUtil;
+import sun.reflect.misc.ReflectUtil;
+
 /**
  * Component decorator that implements the view interface
  * for &lt;object&gt; elements.
@@ -87,6 +90,7 @@
         AttributeSet attr = getElement().getAttributes();
         String classname = (String) attr.getAttribute(HTML.Attribute.CLASSID);
         try {
+            ReflectUtil.checkPackageAccess(classname);
             Class c = Class.forName(classname, true,Thread.currentThread().
                                     getContextClassLoader());
             Object o = c.newInstance();
@@ -116,28 +120,6 @@
     }
 
     /**
-     * Get a Class object to use for loading the
-     * classid.  If possible, the Classloader
-     * used to load the associated Document is used.
-     * This would typically be the same as the ClassLoader
-     * used to load the EditorKit.  If the documents
-     * ClassLoader is null,
-     * <code>Class.forName</code> is used.
-     */
-    private Class getClass(String classname) throws ClassNotFoundException {
-        Class klass;
-
-        Class docClass = getDocument().getClass();
-        ClassLoader loader = docClass.getClassLoader();
-        if (loader != null) {
-            klass = loader.loadClass(classname);
-        } else {
-            klass = Class.forName(classname);
-        }
-        return klass;
-    }
-
-    /**
      * Initialize this component according the KEY/VALUEs passed in
      * via the &lt;param&gt; elements in the corresponding
      * &lt;object&gt; element.
@@ -170,7 +152,7 @@
                 }
                 Object [] args = { value };
                 try {
-                    writer.invoke(comp, args);
+                    MethodUtil.invoke(writer, comp, args);
                 } catch (Exception ex) {
                     System.err.println("Invocation failed");
                     // invocation code
--- a/src/share/classes/sun/font/FileFont.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/sun/font/FileFont.java	Tue Oct 01 14:22:36 2013 -0700
@@ -170,7 +170,9 @@
                 }
             }
         }
-        scaler.dispose();
+        if (scaler != null) {
+            scaler.dispose();
+        }
         scaler = FontScaler.getNullScaler();
     }
 
--- a/src/share/classes/sun/font/GlyphLayout.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/sun/font/GlyphLayout.java	Tue Oct 01 14:22:36 2013 -0700
@@ -468,9 +468,10 @@
                         _gvdata.grow();
                     }
                 }
-                if (_gvdata._count < 0) {
-                    break;
-                }
+            }
+            // Break out of the outer for loop if layout fails.
+            if (_gvdata._count < 0) {
+                break;
             }
         }
 
--- a/src/share/classes/sun/font/StandardGlyphVector.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/sun/font/StandardGlyphVector.java	Tue Oct 01 14:22:36 2013 -0700
@@ -1740,8 +1740,9 @@
                                                      tx,
                                                      sgv.font.getStyle(),
                                                      aa, fm);
-
-            FontStrike strike = sgv.font2D.getStrike(desc);  // !!! getStrike(desc, false)
+            // Get the strike via the handle. Shouldn't matter
+            // if we've invalidated the font but its an extra precaution.
+            FontStrike strike = sgv.font2D.handle.font2D.getStrike(desc);  // !!! getStrike(desc, false)
 
             return new GlyphStrike(sgv, strike, dx, dy);
         }
--- a/src/share/classes/sun/font/TrueTypeFont.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/sun/font/TrueTypeFont.java	Tue Oct 01 14:22:36 2013 -0700
@@ -1037,6 +1037,9 @@
             if (head_Table != null && head_Table.capacity() >= 18) {
                 ShortBuffer sb = head_Table.asShortBuffer();
                 upem = sb.get(9) & 0xffff;
+                if (upem < 16 || upem > 16384) {
+                    upem = 2048;
+                }
             }
 
             ByteBuffer os2_Table = getTableBuffer(os_2Tag);
--- a/src/share/classes/sun/java2d/Disposer.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/sun/java2d/Disposer.java	Tue Oct 01 14:22:36 2013 -0700
@@ -150,8 +150,7 @@
                 rec = null;
                 clearDeferredRecords();
             } catch (Exception e) {
-                System.out.println("Exception while removing reference: " + e);
-                e.printStackTrace();
+                System.out.println("Exception while removing reference.");
             }
         }
     }
@@ -177,7 +176,6 @@
                 rec.dispose();
             } catch (Exception e) {
                 System.out.println("Exception while disposing deferred rec.");
-                e.printStackTrace();
             }
         }
         deferredRecords.clear();
@@ -228,8 +226,7 @@
                 }
             }
         } catch (Exception e) {
-            System.out.println("Exception while removing reference: " + e);
-            e.printStackTrace();
+            System.out.println("Exception while removing reference.");
         } finally {
             pollingQueue = false;
         }
--- a/src/share/classes/sun/management/HotSpotDiagnostic.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/sun/management/HotSpotDiagnostic.java	Tue Oct 01 14:22:36 2013 -0700
@@ -40,7 +40,17 @@
     public HotSpotDiagnostic() {
     }
 
-    public native void dumpHeap(String outputFile, boolean live) throws IOException;
+    public void dumpHeap(String outputFile, boolean live) throws IOException {
+        SecurityManager security = System.getSecurityManager();
+        if (security != null) {
+            security.checkWrite(outputFile);
+            Util.checkControlAccess();
+        }
+
+        dumpHeap0(outputFile, live);
+    }
+
+    private native void dumpHeap0(String outputFile, boolean live) throws IOException;
 
     public List<VMOption> getDiagnosticOptions() {
         List<Flag> allFlags = Flag.getAllFlags();
--- a/src/share/classes/sun/misc/JavaLangAccess.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/sun/misc/JavaLangAccess.java	Tue Oct 01 14:22:36 2013 -0700
@@ -25,6 +25,7 @@
 
 package sun.misc;
 
+import java.security.AccessControlContext;
 import sun.reflect.ConstantPool;
 import sun.reflect.annotation.AnnotationType;
 import sun.nio.ch.Interruptible;
@@ -88,4 +89,10 @@
      * Returns the murmur hash value for the specified String.
      */
     int getStringHash32(String string);
+
+    /**
+     * Returns a new Thread with the given Runnable and an
+     * inherited AccessControlContext.
+     */
+    Thread newThreadWithAcc(Runnable target, AccessControlContext acc);
 }
--- a/src/share/classes/sun/nio/cs/ext/ExtendedCharsets.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/sun/nio/cs/ext/ExtendedCharsets.java	Tue Oct 01 14:22:36 2013 -0700
@@ -1031,6 +1031,24 @@
                     "ebcdic-s-871+euro"
                 });
 
+        charset("IBM290", "IBM290",
+                new String[] {
+                    "cp290",
+                    "ibm290",
+                    "ibm-290",
+                    "csIBM290",
+                    "EBCDIC-JP-kana",
+                    "290"
+                });
+
+        charset("x-IBM300", "IBM300",
+                new String[] {
+                    "cp300",
+                    "ibm300",
+                    "ibm-300",
+                    "300"
+                });
+
         // Macintosh MacOS/Apple char encodingd
 
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/share/classes/sun/nio/cs/ext/IBM300.java	Tue Oct 01 14:22:36 2013 -0700
@@ -0,0 +1,1875 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+// -- This file was mechanically generated: Do not edit! -- //
+
+package sun.nio.cs.ext;
+
+import java.nio.charset.Charset;
+import java.nio.charset.CharsetDecoder;
+import java.nio.charset.CharsetEncoder;
+import java.util.Arrays;
+import sun.nio.cs.HistoricallyNamedCharset;
+import sun.nio.cs.ext.DoubleByte;
+
+public class IBM300 extends Charset
+                        implements HistoricallyNamedCharset
+{
+    public IBM300() {
+        super("x-IBM300", ExtendedCharsets.aliasesFor("x-IBM300"));
+    }
+
+        public String historicalName() { return "Cp300"; }
+
+    public boolean contains(Charset cs) {
+        return (cs instanceof IBM300);
+    }
+
+    public CharsetDecoder newDecoder() {
+        initb2c();
+        return new  DoubleByte.Decoder_EBCDIC_DBCSONLY(this, b2c, 0x40, 0xfe);
+    }
+
+    public CharsetEncoder newEncoder() {
+        initc2b();
+        return new DoubleByte.Encoder_EBCDIC_DBCSONLY(
+            this, new byte[]{ (byte)0x42, (byte)0x6f }, c2b, c2bIndex);
+    }
+    static final String b2cSBStr =
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" ;
+
+        static final String[] b2cStr = {
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+        "\u3000\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" ,
+        "\uFFFD\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7" +
+        "\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF" +
+        "\u03C0\u03C1\u03C3\u03C4\u03C5\u03C6\u03C7\u03C8" +
+        "\u03C9\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\u0391\u0392\u0393\u0394\u0395\u0396\u0397" +
+        "\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F" +
+        "\u03A0\u03A1\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8" +
+        "\u03A9\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\u0430\u0431\u0432\u0433\u0434\u0435\u0451\u0436" +
+        "\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E" +
+        "\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446" +
+        "\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E" +
+        "\u044F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\u2170\u2171\u2172\u2173\u2174\u2175\u2176" +
+        "\u2177\u2178\u2179\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\u0410\u0411\u0412\u0413\u0414\u0415\u0401\u0416" +
+        "\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E" +
+        "\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426" +
+        "\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E" +
+        "\u042F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\u2160\u2161\u2162\u2163\u2164\u2165\u2166" +
+        "\u2167\u2168\u2169\uFFFD\uFFFD\uFFFD\uFFFD" ,
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFE1\uFF0E\uFF1C\uFF08\uFF0B\uFF5C" +
+        "\uFF06\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFF01\uFFE5\uFF0A\uFF09\uFF1B\uFFE2" +
+        "\uFF0D\uFF0F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFE4\uFF0C\uFF05\uFF3F\uFF1E\uFF1F" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFF40\uFF1A\uFF03\uFF20\uFF07\uFF1D\uFF02" +
+        "\uFFFD\uFF41\uFF42\uFF43\uFF44\uFF45\uFF46\uFF47" +
+        "\uFF48\uFF49\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFF4A\uFF4B\uFF4C\uFF4D\uFF4E\uFF4F\uFF50" +
+        "\uFF51\uFF52\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFE3\uFF53\uFF54\uFF55\uFF56\uFF57\uFF58" +
+        "\uFF59\uFF5A\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFF5B\uFF21\uFF22\uFF23\uFF24\uFF25\uFF26\uFF27" +
+        "\uFF28\uFF29\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFF5D\uFF2A\uFF2B\uFF2C\uFF2D\uFF2E\uFF2F\uFF30" +
+        "\uFF31\uFF32\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFF04\uFFFD\uFF33\uFF34\uFF35\uFF36\uFF37\uFF38" +
+        "\uFF39\uFF3A\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFF10\uFF11\uFF12\uFF13\uFF14\uFF15\uFF16\uFF17" +
+        "\uFF18\uFF19\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" ,
+        "\uFFFD\u3002\u300C\u300D\u3001\u30FB\u30F2\u30A1" +
+        "\u30A3\u30A5\uFFE0\u2220\u22A5\u2312\u2202\u2207" +
+        "\uFFFD\u30A7\u30A9\u30E3\u30E5\u30E7\u30C3\u30EE" +
+        "\u30FC\u30F5\u30F6\u2261\u2252\u226A\u226B\u221A" +
+        "\u223D\u221D\u222B\u222C\u2208\u220B\u2286\u2287" +
+        "\u2282\u2283\u222A\u2229\u2227\u2228\u21D2\u21D4" +
+        "\u2200\u2203\u212B\u2030\u266F\u266D\u266A\u2020" +
+        "\u2021\u00B6\u25EF\uFFFD\u2500\u2502\u250C\u2510" +
+        "\uFFFD\u30A2\u30A4\u30A6\u30A8\u30AA\u30AB\u30AD" +
+        "\u30AF\u30B1\u30B3\uFFFD\u30B5\u30B7\u30B9\u30BB" +
+        "\u30BD\u30BF\u30C1\u30C4\u30C6\u30C8\u30CA\u30CB" +
+        "\u30CC\u30CD\u30CE\uFFFD\uFFFD\u30CF\u30D2\u30D5" +
+        "\uFFFD\uFF5E\u30D8\u30DB\u30DE\u30DF\u30E0\u30E1" +
+        "\u30E2\u30E4\u30E6\uFFFD\u30E8\u30E9\u30EA\u30EB" +
+        "\u2518\u2514\u251C\u252C\u2524\u2534\u253C\u2501" +
+        "\u2503\u250F\u30EC\u30ED\u30EF\u30F3\u309B\u309C" +
+        "\u30AC\u30AE\u30B0\u30B2\u30B4\u30B6\u30B8\u30BA" +
+        "\u30BC\u30BE\u30C0\u30C2\u30C5\u30C7\u30C9\u30D0" +
+        "\u30D3\u30D6\u30D9\u30DC\u30F4\u30D1\u30D4\u30D7" +
+        "\u30DA\u30DD\u30F0\u30F1\u30FD\u30FE\uFFFD\uFFFD" +
+        "\uFF3C\u2513\u251B\u2517\u2523\u2533\u252B\u253B" +
+        "\u254B\u2520\u252F\u2528\u2537\u253F\u251D\u2530" +
+        "\u2525\u2538\u2542\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" ,
+        "\uFFFD\uFFFD\u300E\u300F\uFF3B\uFF3D\u3092\u3041" +
+        "\u3043\u3045\u2015\u00B1\u2260\u221E\u2103\uFFFD" +
+        "\u00B4\u3047\u3049\u3083\u3085\u3087\u3063\u308E" +
+        "\uFFFD\uFFFD\u2010\u3003\u4EDD\u3005\u3006\u3007" +
+        "\u00A8\u2018\u201C\u3014\u3008\u300A\u3010\u2266" +
+        "\u2234\u2642\u00A7\u203B\u3012\u3231\u2116\u2121" +
+        "\uFF3E\u2019\u201D\u3015\u3009\u300B\u3011\u2267" +
+        "\u2235\u2640\u00D7\u00F7\u2225\u3013\u2025\u2026" +
+        "\uFFFD\u3042\u3044\u3046\u3048\u304A\u304B\u304D" +
+        "\u304F\u3051\u3053\uFFFD\u3055\u3057\u3059\u305B" +
+        "\u305D\u305F\u3061\u3064\u3066\u3068\u306A\u306B" +
+        "\u306C\u306D\u306E\uFFFD\uFFFD\u306F\u3072\u3075" +
+        "\uFFFD\uFFFD\u3078\u307B\u307E\u307F\u3080\u3081" +
+        "\u3082\u3084\u3086\uFFFD\u3088\u3089\u308A\u308B" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\u308C\u308D\u308F\u3093\uFFFD\uFFFD" +
+        "\u304C\u304E\u3050\u3052\u3054\u3056\u3058\u305A" +
+        "\u305C\u305E\u3060\u3062\u3065\u3067\u3069\u3070" +
+        "\u3073\u3076\u3079\u307C\uFFFD\u3071\u3074\u3077" +
+        "\u307A\u307D\u3090\u3091\u309D\u309E\uFFFD\uFFFD" +
+        "\u25CB\u25CF\u25B3\u25B2\u25CE\u2606\u2605\u25C7" +
+        "\u25C6\u25A1\u25A0\u25BD\u25BC\u00B0\u2032\u2033" +
+        "\u2192\u2190\u2191\u2193\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" ,
+        "\uFFFD\u4E00\u4E8C\u4E09\u56DB\u4E94\u516D\u4E03" +
+        "\u516B\u4E5D\u5341\u767E\u5343\u4E07\u5104\u90FD" +
+        "\u9053\u5E9C\u770C\u5E02\u533A\u753A\u6751\u6771" +
+        "\u897F\u5357\u5317\u5927\u4E2D\u5C0F\u4E0A\u4E0B" +
+        "\u5E74\u6708\u65E5\u7530\u5B50\u5C71\u672C\u5DDD" +
+        "\u85E4\u91CE\u5DE5\u696D\u6728\u4E95\u90CE\u5CF6" +
+        "\u96C4\u9AD8\u5CA1\u592B\u539F\u4EAC\u4F50\u6B63" +
+        "\u677E\u6A5F\u548C\u88FD\u7537\u7F8E\u5409\u5D0E" +
+        "\u77F3\u8C37\u96FB\u9577\u6CBB\u6CA2\u91D1\u65B0" +
+        "\u53E3\u6A4B\u4E45\u798F\u6240\u5E73\u5185\u56FD" +
+        "\u5316\u962A\u5BAE\u4EBA\u4F5C\u90E8\u6E05\u6B21" +
+        "\u7FA9\u751F\u4EE3\u51FA\u6C34\u68EE\u5149\u52A0" +
+        "\u5408\u795E\u6797\u91CD\u884C\u4FE1\u660E\u6D77" +
+        "\u5B89\u5E78\u4FDD\u592A\u5BCC\u6C5F\u9234\u524D" +
+        "\u77E5\u6B66\u4F0A\u662D\u5206\u52DD\u7528\u5E83" +
+        "\u9020\u6C17\u6210\u898B\u5229\u4F1A\u5B66\u5CA9" +
+        "\u7523\u9593\u5730\u81EA\u826F\u95A2\u611B\u653F" +
+        "\u5C3E\u8A08\u6587\u624B\u7236\u65B9\u4E8B\u6238" +
+        "\u54C1\u559C\u6E21\u5F18\u53E4\u8FBA\u5009\u9244" +
+        "\u4E4B\u5834\u6D0B\u57CE\u6D25\u7ACB\u5EA6\u5348" +
+        "\u4ECA\u5F66\u8A2D\u901A\u52D5\u5F8C\u5948\u5B9A" +
+        "\u6C60\u5C4B\u6D5C\u7406\u5742\u5B9F\u82F1\u7684" +
+        "\u53F8\u79C0\u6A2A\u540D\u5B5D\u7AF9\u535A\u529B" +
+        "\u5EAB\u8449\u6804\u6C38\u5668\u7389\u591A" ,
+        "\uFFFD\u8CC0\u771F\u6075\u9759\u5186\u8302\u654F" +
+        "\u8C4A\u5175\u6CD5\u767A\u9752\u5897\u6599\u5FE0" +
+        "\u8CC7\u6642\u7269\u8ECA\u5FB3\u8981\u5BFE\u585A" +
+        "\u79CB\u767D\u6CB3\u702C\u6CB9\u9686\u8535\u5F53" +
+        "\u4FCA\u5FD7\u6625\u793E\u99AC\u5165\u5EFA\u6839" +
+        "\u6749\u9032\u8208\u6D66\u7CBE\u540C\u6027\u7C73" +
+        "\u8005\u52A9\u679D\u8FD1\u76F4\u76EE\u6765\u753B" +
+        "\u76F8\u9ED2\u4E38\u8239\u7531\u58EB\u7B2C\u718A" +
+        "\u7D19\u5065\u68B0\u82B3\u571F\u6709\u5BB6\u7DDA" +
+        "\u7D4C\u8ABF\u5929\u671F\u7F6E\u6D45\u6589\u5F0F" +
+        "\u5F62\u9762\u7A2E\u8F38\u5916\u5143\u4F53\u9E7F" +
+        "\u5FA1\u5973\u5EB7\u4E16\u52C7\u5800\u597D\u5150" +
+        "\u5BFA\u92FC\u7279\u57FC\u9054\u5411\u53D6\u7B49" +
+        "\u667A\u56DE\u9580\u904B\u5099\u601D\u963F\u4E0D" +
+        "\u9808\u5168\u5BFF\u5584\u677F\u98EF\u8C9E\u73FE" +
+        "\u98DF\u7D44\u985E\u516C\u6750\u9999\u5546\u7D50" +
+        "\u8868\u77E2\u6F5F\u79C1\u5236\u90A6\u6CBC\u7CF8" +
+        "\u5B8F\u7B56\u6CE2\u54E1\u6570\u958B\u6E96\u6A39" +
+        "\u8CBB\u660C\u5F37\u7814\u53CB\u5B87\u82E5\u83CA" +
+        "\u6301\u82B1\u5F15\u7D00\u8352\u5225\u4FEE\u8D8A" +
+        "\u4F4F\u85AC\u6BDB\u9060\u554F\u5965\u578B\u5FC3" +
+        "\u767B\u65E9\u67F3\u6D69\u8CEA\u52D9\u6CC9\u5E38" +
+        "\u5B88\u57FA\u7BA1\u6CF0\u4F38\u6700\u4EE5\u6B4C" +
+        "\u88D5\u8D64\u8DB3\u898F\u6D41\u8AA0\u6607" ,
+        "\uFFFD\u5DDE\u7167\u5869\u9001\u96C5\u672B\u54F2" +
+        "\u5CB8\u4E5F\u5C90\u521D\u8328\u5247\u6BD4\u80FD" +
+        "\u8A71\u6295\u8EE2\u83C5\u9023\u4ED6\u6C11\u7D66" +
+        "\u9152\u7E41\u4FA1\u6E80\u671D\u4ED8\u6761\u7121" +
+        "\u8003\u697D\u4E3B\u610F\u6226\u5207\u5264\u7247" +
+        "\u7D30\u6E08\u7A32\u5E03\u91CC\u5C5E\u7AE0\u5909" +
+        "\u4F55\u685C\u5F7C\u67FB\u76CA\u58F2\u4EC1\u6DF1" +
+        "\u53F0\u9CE5\u9DB4\u652F\u6574\u89D2\u5609\u5473" +
+        "\u885B\u8B70\u5727\u7387\u8DEF\u706B\u961C\u8F1D" +
+        "\u70B9\u4E0E\u6E1B\u7551\u9280\u7A7A\u4EA4\u7FBD" +
+        "\u534A\u53CE\u592E\u7DCF\u8A18\u6674\u69CB\u969B" +
+        "\u6885\u5370\u8A00\u6817\u8EAB\u66F8\u514B\u7D20" +
+        "\u96C6\u7BC0\u5148\u6EDD\u6C7A\u6559\u7D14\u67F4" +
+        "\u63A5\u661F\u7740\u7559\u6620\u5DF1\u754C\u5177" +
+        "\u656C\u7FA4\u9806\u5171\u6D3B\u91CF\u6307\u89E3" +
+        "\u5BA4\u679C\u5404\u671B\u9632\u7D04\u61B2\u967D" +
+        "\u4E80\u56F3\u4E88\u8272\u7A0E\u690D\u53EF\u6052" +
+        "\u4F4D\u5178\u5FC5\u7D9A\u6025\u5728\u57A3\u541B" +
+        "\u5EF6\u5D8B\u4F01\u6803\u670D\u71B1\u5272\u5354" +
+        "\u6B69\u53F2\u512A\u658E\u623F\u5B97\u683C\u8FB0" +
+        "\u7B20\u5712\u8AF8\u8107\u5553\u8CE2\u5F25\u98A8" +
+        "\u5F97\u6613\u6253\u982D\u65ED\u6BB5\u52E2\u7136" +
+        "\u56E3\u984D\u843D\u914D\u7A0B\u8FBB\u543E\u611F" +
+        "\u5BDB\u53CD\u7A14\u9700\u6E90\u6C96\u984C" ,
+        "\uFFFD\u8FBC\u8349\u7B97\u76DB\u8FB2\u90A3\u7701" +
+        "\u69D8\u6BBF\u5C11\u4ECB\u53D7\u97F3\u7DE8\u59D4" +
+        "\u5E84\u4FC2\u72B6\u793A\u5E97\u5A9B\u682A\u6ECB" +
+        "\u68A8\u7E04\u53F3\u5DE6\u53CA\u9078\u5C45\u60C5" +
+        "\u7DF4\u70AD\u9928\u9271\u6A21\u6B8A\u7E3E\u4E9C" +
+        "\u7E4A\u4EF2\u5857\u6D88\u8853\u691C\u6717\u5B85" +
+        "\u529F\u5C1A\u8CBF\u60A6\u8102\u7BE0\u4F73\u7D21" +
+        "\u51A8\u6851\u78BA\u7267\u4E26\u5024\u89B3\u8CB4" +
+        "\u7DAD\u7D71\u5BBF\u4E21\u7CD6\u89AA\u9332\u6F84" +
+        "\u65BD\u5BB9\u98DB\u5C40\u7950\u904E\u6C0F\u6539" +
+        "\u76E4\u7A4D\u6E0B\u5DFB\u6DF3\u5FDC\u4E89\u8ECD" +
+        "\u88C5\u9178\u7E54\u67D3\u5E1D\u7DBF\u7C89\u822A" +
+        "\u7532\u5468\u4ED9\u5F85\u4F4E\u7DD1\u8EFD\u9EBB" +
+        "\u6176\u52B4\u78EF\u4E39\u80B2\u9650\u5C0E\u653E" +
+        "\u6643\u5EA7\u4EF6\u60F3\u9A13\u4ED5\u4F7F\u8F2A" +
+        "\u9854\u756A\u5F35\u805E\u4F9B\u6E6F\u6EB6\u6821" +
+        "\u9285\u92F3\u878D\u9756\u5199\u5B8C\u6E2F\u935B" +
+        "\u591C\u5145\u9F8D\u7DB1\u83F1\u901F\u52C9\u5237" +
+        "\u8D77\u6469\u53C2\u55B6\u7A42\u63A8\u8FD4\u8077" +
+        "\u6B62\u4F1D\u5E79\u7403\u6A29\u5C55\u5E61\u845B" +
+        "\u5EAD\u975E\u53F7\u5358\u6B73\u62E1\u51E6\u8A9E" +
+        "\u6628\u57DF\u6DF5\u518D\u50CD\u79D1\u9B5A\u7AEF" +
+        "\u9014\u6848\u5B57\u8AD6\u517C\u53C8\u632F\u6280" +
+        "\u5FB9\u672D\u7CFB\u5F93\u51B7\u614B\u5CF0" ,
+        "\uFFFD\u5931\u539A\u5074\u6CE8\u6E2C\u9803\u4E57" +
+        "\u8A66\u576A\u8429\u515A\u6C7D\u5B9D\u606D\u6A0B" +
+        "\u6E29\u6577\u8AAC\u82B8\u544A\u6B74\u822C\u98FE" +
+        "\u793C\u5C06\u96E3\u7802\u5224\u5F79\u5F71\u66FD" +
+        "\u5E2F\u9678\u938C\u8AC7\u5F70\u60AA\u6A19\u7533" +
+        "\u5BB3\u6BCD\u88DC\u5E4C\u58F0\u9664\u7B39\u5A66" +
+        "\u4E7E\u7AF6\u829D\u725B\u8CB7\u79FB\u785D\u8336" +
+        "\u52B9\u990A\u52F2\u80A5\u8B19\u7089\u590F\u5802" +
+        "\u67CF\u6255\u5E30\u713C\u786B\u8001\u7A76\u5BE9" +
+        "\u91DD\u65AD\u5C04\u5DEE\u5D50\u6298\u8010\u5BA3" +
+        "\u59CB\u5F8B\u6B8B\u666F\u8C61\u90F7\u5353\u96E2" +
+        "\u85AB\u6B7B\u8015\u64CD\u4EAE\u4E91\u90E1\u52E4" +
+        "\u6C42\u8CAB\u5B98\u59BB\u88CF\u773C\u4F2F\u7AAF" +
+        "\u7BC9\u968E\u63DB\u6842\u99C5\u68B6\u5747\u8CA1" +
+        "\u547D\u738B\u84B2\u90C1\u78E8\u7B11\u66F2\u6975" +
+        "\u5831\u63D0\u8A3C\u96EA\u9055\u88C1\u9996\u75C5" +
+        "\u6850\u4F59\u74E6\u4EE4\u5439\u732A\u672A\u525B" +
+        "\u8CA0\u4F34\u5100\u542B\u9069\u8FC4\u5C3B\u5DCC" +
+        "\u7B54\u8FFD\u8A0E\u4E08\u925B\u71C3\u8AB2\u70BA" +
+        "\u9662\u679A\u76AE\u8B77\u7DBE\u96E8\u6211\u5BC4" +
+        "\u837B\u62BC\u7D0D\u76E3\u7E2B\u964D\u572D\u7ADC" +
+        "\u7BC4\u6BBA\u8C9D\u698E\u9047\u6F14\u5360\u8FEB" +
+        "\u5287\u624D\u6566\u7D1A\u7D42\u6BCE\u7D79\u7E2E" +
+        "\u666E\u7965\u500B\u5C02\u99D2\u8A55\u7560" ,
+        "\uFFFD\u5B58\u8089\u50BE\u5E2B\u6DB2\u4F8B\u81E3" +
+        "\u81F3\u56E0\u7D99\u5DF2\u899A\u6E9D\u6D17\u8AAD" +
+        "\u8996\u731B\u5DE8\u7DB2\u888B\u4EFB\u5BC6\u8896" +
+        "\u6CC1\u8457\u8F03\u6BC5\u97FF\u8CA9\u5E45\u82E6" +
+        "\u63AA\u5F81\u78C1\u821E\u52AA\u7AAA\u5999\u6297" +
+        "\u8F14\u7FD2\u4FC3\u54C9\u967A\u66F4\u8B1B\u5E72" +
+        "\u5FA9\u8A2A\u6D3E\u7763\u6483\u8B58\u614E\u5A5A" +
+        "\u8D85\u71D0\u983C\u72E9\u583A\u5DFE\u8A8D\u67C4" +
+        "\u7DE0\u4F11\u77ED\u4F0F\u5BC5\u629C\u5C3C\u533B" +
+        "\u6DC0\u81FC\u96D1\u904A\u6D6E\u93E1\u5C64\u98FC" +
+        "\u524A\u6DFB\u8584\u968A\u56FA\u5883\u7766\u9805" +
+        "\u4E73\u8C46\u8A31\u7DD2\u8FF0\u6D6A\u4F9D\u6B6F" +
+        "\u6B27\u62C5\u511F\u9769\u5374\u9AA8\u6775\u887F" +
+        "\u5305\u7570\u8D70\u864E\u5CEF\u8CDE\u5FF5\u725F" +
+        "\u7686\u609F\u80CC\u59EB\u8131\u5E0C\u8A17\u9676" +
+        "\u82D7\u74B0\u84B8\u50D5\u96F2\u7248\u7834\u6DD1" +
+        "\u6E09\u67FF\u6F54\u5915\u500D\u72AC\u9EC4\u7B46" +
+        "\u9B3C\u6563\u53BB\u8A98\u91DC\u9818\u6FC3\u65C5" +
+        "\u501F\u7F8A\u6F64\u9031\u5F3E\u63F4\u9038\u8B66" +
+        "\u7BE4\u7206\u6843\u72EC\u65CF\u82A6\u5BA2\u6960" +
+        "\u9EA6\u52DF\u6790\u639B\u7D75\u9855\u5DF3\u5805" +
+        "\u8ACB\u95A3\u8863\u8CA8\u5B63\u5E8A\u5449\u786C" +
+        "\u7D2B\u8CA2\u5352\u7D76\u8CB8\u7070\u547C\u6545" +
+        "\u6676\u73B2\u56F2\u7BB1\u58A8\u7A81\u66AE" ,
+        "\uFFFD\u8087\u59FF\u8840\u56F0\u7B51\u6DF7\u5F01" +
+        "\u934B\u9000\u4FE3\u675F\u4FBF\u8CC3\u526F\u63A1" +
+        "\u5442\u8907\u698A\u5E2D\u5A18\u7518\u514D\u5E7E" +
+        "\u50B5\u5BDD\u68D2\u745E\u69FB\u5FAE\u55E3\u8A70" +
+        "\u5BF8\u5824\u8358\u5F13\u5E95\u706F\u751A\u7D05" +
+        "\u60E3\u7E70\u5012\u5238\u83EF\u5373\u5F31\u6A2B" +
+        "\u9CF4\u53CC\u6D32\u4EAB\u4E92\u842C\u8A8C\u65E2" +
+        "\u6F01\u80A9\u9DF9\u8B72\u7B52\u9589\u6D74\u63A2" +
+        "\u6590\u5BD2\u6319\u8AB0\u76DF\u99A8\u7A74\u8236" +
+        "\u8846\u8061\u6557\u5922\u9644\u88AB\u9326\u7B4B" +
+        "\u62B5\u5371\u5E81\u5BDF\u4F75\u58C1\u7058\u7DCA" +
+        "\u5438\u73E0\u52D8\u5208\u78D0\u6B23\u6838\u4E43" +
+        "\u690E\u8377\u6ED1\u98F2\u8170\u8857\u8EF8\u798E" +
+        "\u83DC\u8FCE\u7E01\u5510\u4EA8\u8A33\u9162\u5EFB" +
+        "\u606F\u4E86\u664B\u6368\u5217\u8056\u51FD\u7642" +
+        "\u821F\u9685\u50CF\u662F\u4F3C\u4E59\u6A3D\u4E71" +
+        "\u523A\u8ACF\u6A58\u66FF\u670B\u653B\u9732\u5EC3" +
+        "\u8A13\u5782\u604B\u866B\u95D8\u60A9\u4E01\u63CF" +
+        "\u6FC0\u659C\u8CAC\u8305\u7CA7\u6050\u96F7\u5FCD" +
+        "\u640D\u5B54\u900F\u62D3\u59B9\u7159\u51AC\u79F0" +
+        "\u552F\u5275\u6697\u80F8\u4E98\u4ECF\u51CD\u9D5C" +
+        "\u5144\u7A93\u67F1\u5841\u7C21\u8861\u5C31\u68DA" +
+        "\u91E7\u9DF2\u63EE\u6575\u84EE\u523B\u6B32\u7C98" +
+        "\u5982\u969C\u8987\u7C9F\u9006\u62DB\u66DC" ,
+        "\uFFFD\u6355\u6982\u50AC\u623B\u5FD8\u63DA\u75DB" +
+        "\u627F\u616E\u8266\u7C95\u716E\u96C7\u7F6A\u5426" +
+        "\u5200\u83D3\u5211\u594F\u9D28\u574A\u66C7\u9858" +
+        "\u820E\u6614\u733F\u50B7\u6551\u5EB8\u5B6B\u55AC" +
+        "\u5FEB\u6388\u8CAF\u676F\u5951\u5A01\u71E5\u5DE3" +
+        "\u8C6A\u6271\u81F4\u5C3A\u5F92\u9045\u7384\u7149" +
+        "\u79D8\u796D\u9003\u83CC\u5FB4\u5B8D\u6279\u64AE" +
+        "\u7D18\u723E\u5BEE\u65E7\u8D08\u9E78\u52E7\u5D07" +
+        "\u9F62\u6069\u536F\u6681\u9663\u5E3D\u62B1\u722A" +
+        "\u6E4A\u93AE\u79E6\u53E5\u809D\u88FE\u53B3\u6C88" +
+        "\u6E7F\u5141\u9091\u6F6E\u84C4\u85EA\u8129\u6BD2" +
+        "\u663C\u7F72\u73C2\u5F1F\u790E\u60B2\u72ED\u58EE" +
+        "\u8179\u8E8D\u5C65\u5DE7\u6C37\u6DE1\u862D\u72AF" +
+        "\u8E0A\u7C92\u8218\u8033\u63A7\u9291\u5019\u8155" +
+        "\u8A69\u8EDF\u66B4\u8133\u7591\u6B20\u6669\u90F5" +
+        "\u4E32\u73EA\u693F\u7687\u707D\u7D3A\u6148\u8607" +
+        "\u99FF\u59C9\u7832\u7815\u907F\u80A1\u5C3F\u66A2" +
+        "\u9418\u6D44\u5E55\u5854\u7B95\u8DE1\u4EA1\u8C5A" +
+        "\u81E8\u89E6\u9670\u5263\u74F6\u9A5A\u6012\u520A" +
+        "\u7434\u9801\u907A\u5504\u7956\u5230\u54B2\u8A34" +
+        "\u96A3\u4FF3\u9283\u91E3\u7D39\u9688\u4F51\u7D61" +
+        "\u5DBA\u9BAE\u5F80\u795D\u8597\u8DA3\u7C60\u5C0A" +
+        "\u7565\u85A9\u63D6\u9E97\u7D22\u5375\u9AEA\u9042" +
+        "\u6B3D\u7D0B\u6392\u80AA\u7DE9\u9F3B\u99C6" ,
+        "\uFFFD\u6D78\u6731\u5531\u6398\u7825\u5CB3\u5DE1" +
+        "\u92AD\u98FD\u9810\u6CE3\u6B64\u5321\u6B53\u5E8F" +
+        "\u7AE5\u502B\u6E56\u62BD\u8276\u6A9C\u4E18\u57F7" +
+        "\u752B\u7C97\u82EB\u9802\u811A\u73CD\u8F9B\u5C0B" +
+        "\u63E1\u7372\u8150\u80E1\u5B99\u76D7\u6291\u65EC" +
+        "\u8A3A\u5947\u65E8\u6E7E\u6696\u55AB\u8F09\u92ED" +
+        "\u9396\u4EEE\u755C\u6F38\u8F9E\u7981\u5C01\u62E0" +
+        "\u9BE8\u91C8\u6276\u65CB\u8E0F\u8B21\u699B\u6216" +
+        "\u5A92\u90B8\u50DA\u79DF\u6C41\u5270\u9175\u8B39" +
+        "\u685D\u5875\u819C\u5B9C\u8A89\u8A72\u9D8F\u6377" +
+        "\u5974\u8AA4\u52B1\u6962\u5C48\u9CE9\u673A\u75B2" +
+        "\u6D1E\u4F0D\u7E6D\u7B48\u7FCC\u65E6\u59A5\u79E9" +
+        "\u6212\u6EDE\u770B\u8CA7\u65BC\u885D\u6ADB\u5C4A" +
+        "\u8074\u9084\u8ECC\u65D7\u57F9\u708E\u6F06\u5E7C" +
+        "\u77AC\u4FF5\u5949\u81ED\u9B45\u7FFC\u8178\u69FD" +
+        "\u6CCA\u69C7\u79D2\u8B1D\u9ED9\u81D3\u7A3C\u7968" +
+        "\u6F5C\u63B2\u8DDD\u6383\u6E9C\u5E33\u61F8\u76BF" +
+        "\u642C\u7DB4\u6247\u6458\u6816\u5F69\u9022\u7A1A" +
+        "\u82B9\u70C8\u9A12\u6163\u6FEF\u53EB\u9D3B\u62FE" +
+        "\u60A0\u9591\u6D99\u6162\u9298\u635C\u9707\u8972" +
+        "\u683D\u51E1\u9B54\u608C\u5B22\u99C4\u7126\u8A73" +
+        "\u971C\u7396\u67D4\u60A3\u4E11\u4EF0\u8CDB\u8CB0" +
+        "\u7912\u9774\u8986\u5146\u57DC\u99D0\u80C3\u8338" +
+        "\u78A7\u86CD\u7F85\u5049\u8247\u690B\u7C4D" ,
+        "\uFFFD\u53EA\u5F26\u6E25\u6881\u9375\u5DFD\u5347" +
+        "\u9727\u643A\u75C7\u6FA4\u73A9\u77E9\u9451\u8B5C" +
+        "\u808C\u674E\u4EAD\u582F\u7573\u8ED2\u6CE5\u9320" +
+        "\u8FF7\u7D33\u72C2\u8217\u7422\u82C5\u9A30\u773A" +
+        "\u5F84\u9673\u64AD\u920D\u74DC\u60C7\u86ED\u4FFA" +
+        "\u52A3\u6A3A\u7720\u5320\u61B6\u5674\u8776\u6CBF" +
+        "\u505C\u602A\u8466\u6B96\u6DBC\u97D3\u968F\u6876" +
+        "\u60D1\u5378\u64A4\u51A0\u9154\u5DF4\u629E\u5E63" +
+        "\u929A\u7693\u6C5A\u6597\u50E7\u7C82\u5F6B\u6CE1" +
+        "\u5F6C\u5AC1\u6F2C\u852D\u6442\u5750\u58C7\u8CFC" +
+        "\u8A5E\u7A7F\u689D\u7E26\u7A40\u7344\u8AEB\u4FD7" +
+        "\u7A63\u8036\u7DEF\u80C6\u8AED\u731F\u8FEA\u4F0E" +
+        "\u758B\u518A\u6734\u5FD9\u61C7\u65AF\u9CF3\u5ECA" +
+        "\u9262\u68DF\u6CB8\u80F4\u57CB\u6C99\u96A0\u5B64" +
+        "\u58F1\u68C4\u5410\u982C\u8A87\u4E5E\u6167\u9BAB" +
+        "\u90AA\u55B0\u82BD\u596A\u66F3\u8299\u5893\u719F" +
+        "\u6284\u67D1\u9063\u5ACC\u6C57\u7CE7\u5851\u64B2" +
+        "\u58CA\u830E\u5968\u5302\u5A46\u8702\u6065\u72D9" +
+        "\u89A7\u6689\u66F9\u5D6F\u5BB0\u96BC\u636E\u60DC" +
+        "\u7948\u51DD\u8606\u5EC9\u7554\u596E\u6B04\u4F43" +
+        "\u7B94\u67DA\u62DD\u628A\u971E\u62ED\u6EC5\u508D" +
+        "\u67B6\u80E4\u9EBF\u5EB5\u638C\u85CD\u9867\u52C5" +
+        "\u6016\u68CB\u61D0\u5751\u8F29\u5FAA\u81A8\u7D62" +
+        "\u71C8\u54C0\u69CC\u6B3E\u65AC\u63C3\u4F46" ,
+        "\uFFFD\u7B1B\u6B86\u88F8\u5203\u732E\u6687\u7D17" +
+        "\u57F4\u570F\u618E\u970A\u7C3F\u8B00\u7881\u8CE0" +
+        "\u548B\u7B87\u745B\u7C11\u8870\u5398\u5448\u6CF3" +
+        "\u6F22\u53F6\u88B4\u5301\u7A6B\u8695\u586B\u5D29" +
+        "\u88C2\u62D2\u4E1E\u5036\u96C0\u7363\u8A3B\u5176" +
+        "\u7199\u7FE0\u8888\u7E1E\u4E4F\u84CB\u6F2B\u5859" +
+        "\u936C\u53E9\u865A\u9149\u86EF\u5E06\u5507\u902E" +
+        "\u6795\u846C\u5BA5\u82A5\u8431\u6D8C\u63FA\u4EA5" +
+        "\u51C6\u6328\u7F70\u5B5F\u5DBD\u99C8\u53EC\u7985" +
+        "\u8A54\u7962\u88DF\u5B09\u4FB5\u4F91\u9B8E\u5192" +
+        "\u96F0\u6DAF\u622F\u8490\u8CDC\u5075\u5CE0\u4E14" +
+        "\u4F83\u7C54\u84D1\u77B3\u8AEE\u5CE8\u62F6\u663B" +
+        "\u8A93\u8526\u8A95\u65FA\u6714\u53D4\u62AB\u8CE6" +
+        "\u88F3\u5BE7\u868A\u668E\u582A\u6170\u696F\u9F13" +
+        "\u7A92\u7893\u6A7F\u9017\u9266\u7D10\u7BC7\u6EF4" +
+        "\u821C\u5C3D\u62CD\u85C1\u6F02\u6E67\u6691\u85A6" +
+        "\u637A\u821B\u4F8D\u5091\u8A02\u62EC\u9BC9\u7A3D" +
+        "\u7C9B\u50C5\u9019\u708A\u7C8B\u64EC\u665F\u6562" +
+        "\u732B\u5339\u67A0\u55A7\u6D2A\u7A3F\u64E6\u79A7" +
+        "\u67D8\u7B26\u96BB\u6311\u72A0\u5C6F\u7026\u97EE" +
+        "\u60DF\u8AFE\u8B04\u8494\u9BD6\u82AF\u932C\u6606" +
+        "\u9640\u5BC2\u86C7\u7949\u8017\u6919\u7092\u963B" +
+        "\u7C7E\u59D3\u5B5C\u7D1B\u91D8\u6A80\u85E9\u6905" +
+        "\u6C93\u502D\u4EA6\u7FC1\u61A4\u8CCA\u9665" ,
+        "\uFFFD\u93D1\u53F1\u598A\u8EAC\u62D8\u6867\u71D5" +
+        "\u7B67\u504F\u67D0\u82D1\u978D\u748B\u80BA\u7336" +
+        "\u514E\u8105\u90CA\u584A\u67FE\u6FF1\u5FFD\u76C6" +
+        "\u9A0E\u507D\u9694\u5EF7\u7BB8\u904D\u6C4E\u85FB" +
+        "\u819D\u67AF\u564C\u5606\u8C8C\u56DA\u73ED\u8CC4" +
+        "\u8FC5\u96F6\u6C50\u8944\u8F3F\u7D5E\u60E8\u72FC" +
+        "\u7D9C\u8463\u5CFB\u5446\u5D16\u6CA1\u81B3\u58FA" +
+        "\u5BB4\u8108\u541F\u8CBC\u6182\u78A9\u6FE1\u91A4" +
+        "\u76F2\u6020\u76FE\u84C9\u7F36\u4EC7\u755D\u7A17" +
+        "\u84EC\u75F4\u4F3A\u676D\u7460\u62F3\u6F20\u79E4" +
+        "\u87F9\u6094\u6234\u66AB\u820C\u8499\u723A\u5FCC" +
+        "\u6109\u70CF\u7261\u7A50\u5098\u9AED\u5D69\u601C" +
+        "\u6667\u99B4\u5E7B\u643E\u5830\u53C9\u7A9F\u990C" +
+        "\u9B42\u8F5F\u7AAE\u5B9B\u68A2\u6249\u7984\u9DFA" +
+        "\u5451\u932F\u8AC4\u5F90\u8DF3\u5A2F\u80DE\u6D29" +
+        "\u7A4F\u84BC\u9D2B\u9010\u6D38\u916A\u6FC1\u9905" +
+        "\u6BBB\u5EB6\u91B8\u5076\u6F0F\u4E19\u540F\u9675" +
+        "\u6C72\u51B4\u5631\u9F20\u66A6\u5F0A\u75AB\u51F8" +
+        "\u674F\u8DF5\u6C70\u8A6B\u757F\u5CAC\u6841\u8CD3" +
+        "\u9BDB\u8475\u6893\u840C\u72DB\u7577\u8568\u783A" +
+        "\u847A\u5F10\u831C\u6813\u6E1A\u9DAF\u51F9\u7980" +
+        "\u4E99\u5EE3\u908A\u80AF\u59A8\u77DB\u8D74\u8A1F" +
+        "\u673D\u533F\u8A0A\u5618\u6756\u53D9\u4F10\u7409" +
+        "\u5A41\u4FF8\u79B0\u9838\u8E2A\u9D60\u8F44" ,
+        "\uFFFD\u65A5\u75BE\u906D\u867B\u60BC\u51B6\u5937" +
+        "\u7D2F\u916C\u69AE\u7CE0\u792A\u5D14\u64C1\u58EC" +
+        "\u589C\u8D66\u66D9\u61F2\u912D\u6E58\u9435\u965B" +
+        "\u7272\u5F6A\u5E9A\u8F1B\u5B95\u5C39\u9013\u834F" +
+        "\u7CCE\u620A\u90ED\u691B\u6E15\u65DB\u66FE\u4E9F" +
+        "\u55AA\u7A83\u83E9\u8B83\u846D\u83F0\u7F50\u918D" +
+        "\u9190\u758E\u95A5\u81E7\u75E2\u61A9\u8A50\u95B2" +
+        "\u53A8\u59F6\u9813\u7891\u7C17\u6B3A\u57E0\u620E" +
+        "\u83D6\u8AD2\u75D4\u927E\u59DC\u5289\u9087\u6FFE" +
+        "\u7473\u5C09\u9D6C\u84FC\u7CDF\u7BAD\u8A6E\u594E" +
+        "\u56A2\u819A\u7947\u6636\u53E1\u7887\u58CC\u9397" +
+        "\u6E13\u5256\u828B\u9E9F\u9583\u658C\u9E93\u7345" +
+        "\u6E26\u9D07\u5983\u7DAC\u96C1\u61BE\u6762\u9ECE" +
+        "\u90A8\u9187\u9F0E\u7C38\u51F1\u8599\u524C\u540E" +
+        "\u7901\u655E\u6668\u5CE1\u7566\u76C8\u8679\u531D" +
+        "\u5506\u7926\u8912\u77EF\u7CC0\u570B\u515C\u7E8A" +
+        "\u535C\u8A60\u65A7\u8766\u5766\u6AE8\u87FB\u5E16" +
+        "\u7AEA\u8D73\u771E\u737A\u66E0\u9410\u816B\u7B08" +
+        "\u91FC\u5737\u6FE4\u856A\u7E55\u9957\u87BA\u694A" +
+        "\u818F\u5EFF\u891C\u72D0\u9846\u9EDB\u8D99\u5DD6" +
+        "\u62B9\u64AB\u4F76\u613F\u68AF\u5F14\u800C\u92F8" +
+        "\u7BC1\u52FE\u664F\u9177\u51F6\u97A0\u839E\u647A" +
+        "\u9C3A\u67F5\u7C4F\u685F\u9B6F\u9F4B\u7FFB\u9348" +
+        "\u4FF6\u9E92\u9197\u96DB\u5BE6\u6CCC\u7CFE" ,
+        "\uFFFD\u9453\u6822\u66B9\u5BD4\u98F4\u8AE6\u8154" +
+        "\u7827\u74BD\u6ED3\u9288\u5A20\u5B8B\u86F8\u760D" +
+        "\u865C\u6641\u91C9\u5589\u7A4E\u59E5\u6042\u932B" +
+        "\u5B5A\u849C\u5C91\u96CD\u62D9\u675C\u6787\u5E7D" +
+        "\u8650\u9EB9\u5CB1\u80CE\u7A00\u8ABC\u5700\u8096" +
+        "\u7D72\u9211\u8098\u907C\u7761\u8737\u9075\u817A" +
+        "\u7C3E\u6EA2\u965E\u7E90\u72D7\u58FD\u60B3\u9786" +
+        "\u7E88\u587E\u6E20\u84DC\u6961\u77AD\u5197\u652A" +
+        "\u6777\u5DCD\u6101\u932E\u5954\u6367\u798D\u7AFF" +
+        "\u80D6\u58B3\u6168\u6AC3\u7483\u9B92\u660A\u642D" +
+        "\u5118\u6763\u809B\u9C10\u4FC9\u6953\u7A1C\u52FF" +
+        "\u6055\u768E\u817F\u5642\u5F6D\u7194\u70BB\u7436" +
+        "\u8000\u874B\u55DA\u7435\u7690\u96EB\u66DD\u751C" +
+        "\u633D\u6EC9\u7C64\u7CA5\u6D35\u935C\u7027\u5E25" +
+        "\u701D\u54BD\u611A\u6973\u6C6A\u559A\u6D19\u96CC" +
+        "\u5BE1\u59FB\u697C\u914C\u7709\u8500\u7A46\u7872" +
+        "\u92E4\u8CED\u7CFA\u9D1B\u814E\u9AC4\u68A0\u6DCB" +
+        "\u5918\u83B1\u5629\u9B41\u6897\u70B3\u9771\u9419" +
+        "\u67A2\u6802\u7895\u68A7\u50D6\u80B1\u5EF8\u82D4" +
+        "\u797A\u67CA\u7E4D\u69CD\u51C4\u723D\u6829\u99B3" +
+        "\u5F3C\u8F61\u682B\u6155\u6591\u8FB1\u7E1B\u9798" +
+        "\u9952\u8877\u5B2C\u6631\u4FA0\u6939\u6AFB\u5BB5" +
+        "\u7AC8\u5026\u5944\u9059\u7B25\u7B4F\u8E74\u8543" +
+        "\u5858\u8B0E\u5039\u8654\u97F6\u7569\u72F8" ,
+        "\uFFFD\u4EF7\u9D89\u5016\u51CC\u62CC\u91C6\u8755" +
+        "\u649A\u88F4\u91E6\u6854\u695A\u6C40\u7B6C\u6741" +
+        "\u77D7\u8823\u5384\u8EAF\u7280\u8C6B\u788D\u7165" +
+        "\u8207\u68B1\u8D04\u9077\u701E\u8FE6\u810A\u81BF" +
+        "\u89DC\u68B3\u6ADF\u92EA\u95C7\u7957\u7A20\u53A9" +
+        "\u8E5F\u786F\u79B9\u5F27\u5ED6\u6853\u93AC\u919C" +
+        "\u691A\u5806\u64B0\u7E4B\u7D8F\u68F2\u6EA5\u82DB" +
+        "\u9192\u5243\u8EB0\u9081\u721B\u7DCB\u7656\u59AC" +
+        "\u6FE0\u8B28\u80A2\u5544\u6070\u5F4A\u68C8\u633A" +
+        "\u9438\u9B4F\u81E5\u6A17\u70DD\u69A7\u614C\u920E" +
+        "\u9310\u9BAD\u52D7\u925E\u92F9\u5993\u7696\u66FB" +
+        "\u5769\u73CA\u7678\u6A1F\u7E9C\u9811\u8CD1\u5840" +
+        "\u6349\u871C\u62D0\u60B4\u6B89\u86EE\u5764\u581D" +
+        "\u8549\u7235\u7652\u983B\u8237\u5351\u5C24\u59BE" +
+        "\u5815\u901D\u69B4\u834A\u9EA9\u976B\u8086\u53AD" +
+        "\u6068\u4FAE\u76C3\u6A05\u689B\u937E\u99D5\u91C7" +
+        "\u5C16\u585E\u61A7\u9699\u4FDF\u8278\u9C52\u5F45" +
+        "\u6108\u7C8D\u806F\u5DF7\u8D6B\u57B0\u98E2\u5703" +
+        "\u79BF\u5996\u7941\u540A\u83DF\u9C39\u52D2\u6BD8" +
+        "\u86CB\u4EC0\u9A28\u5366\u8006\u7337\u6492\u8FED" +
+        "\u5AC9\u5420\u537F\u4FAF\u807E\u543B\u7515\u7B18" +
+        "\u8749\u54B3\u704C\u8997\u6CAB\u85FA\u7114\u696E" +
+        "\u9328\u745A\u59D1\u6E5B\u617E\u53E2\u8317\u76E7" +
+        "\u848B\u85AF\u6925\u5C60\u7259\u75D5\u8B90" ,
+        "\uFFFD\u6E07\u82AD\u5C4F\u7BED\u9784\u6F70\u764C" +
+        "\u88B7\u92D2\u4F36\u5EFE\u9061\u88E1\u8471\u711A" +
+        "\u6D1B\u80B4\u74E2\u7433\u5A7F\u905C\u980C\u5319" +
+        "\u906E\u6BB4\u85AA\u7897\u7AFA\u6AAE\u8910\u958F" +
+        "\u620C\u4F3D\u4F7C\u79BE\u9D0E\u4ED4\u57A2\u51A5" +
+        "\u6900\u6089\u707C\u7AE3\u8956\u93A7\u9C2D\u5112" +
+        "\u52FA\u7CCA\u60F9\u7078\u81C6\u559D\u6991\u96C9" +
+        "\u553E\u805A\u8304\u8332\u54FA\u565B\u8FBF\u5634" +
+        "\u6760\u5265\u840E\u5E5F\u7B65\u9035\u8387\u6B4E" +
+        "\u58BE\u6309\u727D\u97AD\u69D0\u546A\u984E\u632B" +
+        "\u714E\u8557\u7CDE\u6372\u68F9\u7511\u8602\u6EBA" +
+        "\u5A3C\u7A84\u851A\u95A4\u59D0\u60DA\u51EA\u5A29" +
+        "\u7169\u6F15\u696B\u63BB\u75E9\u4E4E\u7DBB\u6934" +
+        "\u8521\u8FFA\u9354\u9C3B\u5F17\u5ED3\u8258\u895F" +
+        "\u82E7\u52C3\u5C51\u83AB\u7826\u79E1\u7FF0\u626E" +
+        "\u60F0\u5CA8\u6F97\u71A8\u9909\u5132\u5E37\u5F04" +
+        "\u637B\u6753\u68D7\u6652\u9CF6\u88B0\u52AB\u4FC4" +
+        "\u4E3C\u67B3\u7BAA\u7F4D\u8A23\u63B4\u71E6\u65A4" +
+        "\u6F09\u853D\u5072\u7DBA\u5516\u7B04\u72FD\u6CD3" +
+        "\u8422\u621F\u50AD\u8235\u8718\u5919\u6028\u677C" +
+        "\u6F23\u75B9\u695C\u520E\u8018\u8B01\u71ED\u5713" +
+        "\u660F\u83EB\u7164\u7D9B\u5617\u7D7D\u8F4D\u9318" +
+        "\u8569\u5D17\u678C\u67DE\u87C7\u79AE\u5835\u8404" +
+        "\u9041\u7FD4\u6E8C\u8A63\u9D08\u670F\u939A" ,
+        "\uFFFD\u63AC\u602F\u64E2\u608D\u96B7\u6357\u8461" +
+        "\u914B\u75D8\u60E7\u9913\u9C57\u5984\u6DEB\u5E96" +
+        "\u6D9C\u9BF0\u58BB\u7977\u60B6\u633F\u5BF5\u9812" +
+        "\u558B\u82D3\u5147\u6190\u7953\u79BD\u6C5D\u9EBA" +
+        "\u9C48\u8DA8\u5EE0\u7D43\u5EFC\u854E\u8CE4\u5AE1" +
+        "\u54E8\u5023\u52BE\u7DEC\u8511\u6666\u6C3E\u724C" +
+        "\u8ADC\u9C0D\u77A5\u8B02\u8D05\u6F11\u9834\u97FB" +
+        "\u50FB\u7F75\u5A03\u8513\u4FB6\u634C\u9D61\u808B" +
+        "\u5294\u65A1\u567A\u5957\u8D0B\u6A35\u6AD3\u70F9" +
+        "\u865E\u6FB1\u51E7\u7FEB\u59EA\u5E87\u6B6A\u754F" +
+        "\u717D\u914E\u7D2C\u8C79\u6062\u621A\u7FA8\u5F1B" +
+        "\u6C8C\u86FE\u7562\u7B86\u9AB8\u6627\u7ABA\u844E" +
+        "\u6F81\u8B2C\u86A4\u6FEB\u7B8B\u7F77\u8F2F\u8E44" +
+        "\u7E23\u4E4D\u79A6\u8AFA\u903C\u50D1\u9ECD\u5EDF" +
+        "\u758F\u631F\u53DB\u9910\u826E\u62F7\u68FA\u725D" +
+        "\u803D\u58D5\u5C4D\u86D9\u540B\u8805\u92F2\u9237" +
+        "\u5C61\u985B\u86E4\u966A\u7262\u6955\u6CD7\u6994" +
+        "\u9C2F\u77E7\u68C9\u8DE8\u6D6C\u67C1\u9BAA\u619A" +
+        "\u63A9\u7015\u9306\u934D\u6A61\u6258\u5283\u7525" +
+        "\u5687\u6C83\u6834\u649E\u4E9B\u7252\u59E6\u8FC2" +
+        "\u5FBD\u6DD8\u85F7\u8A51\u9817\u99C1\u63A0\u7C81" +
+        "\u5B30\u8139\u5403\u7E82\u8106\u532A\u6A8E\u7F6B" +
+        "\u54E9\u5678\u8AB9\u6715\u5BD3\u6478\u64FE\u6B1D" +
+        "\u8CC2\u51CB\u7E8F\uFFFD\uFFFD\uFFFD\uFFFD" ,
+        "\uFFFD\u5F0C\u4E10\u4E15\u4E28\u4E2A\u4E31\u4E36" +
+        "\u4E3F\u4E42\u4E56\u4E58\u4E62\u4E82\u4E85\u4E8A" +
+        "\u4E8E\u5F0D\u4E9E\u4EA0\u4EA2\u4EB0\u4EB3\u4EB6" +
+        "\u4ECE\u4ECD\u4EC4\u4EC6\u4EC2\u4EE1\u4ED7\u4EDE" +
+        "\u4EED\u4EDF\u4EFC\u4F09\u4F1C\u4F00\u4F03\u4F5A" +
+        "\u4F30\u4F5D\u4F39\u4F57\u4F47\u4F5E\u4F56\u4F5B" +
+        "\u4F92\u4F8A\u4F88\u4F8F\u4F9A\u4FAD\u4F98\u4F7B" +
+        "\u4FAB\u4F69\u4F70\u4F94\u4F6F\u4F86\u4F96\u4FD4" +
+        "\u4FCE\u4FD8\u4FDB\u4FD1\u4FDA\u4FD0\u4FCD\u4FE4" +
+        "\u4FE5\u501A\u5040\u5028\u5014\u502A\u5025\u5005" +
+        "\u5021\u5022\u5029\u502C\u4FFF\u4FFE\u4FEF\u5011" +
+        "\u501E\u5006\u5043\u5047\u5055\u5050\u5048\u505A" +
+        "\u5056\u500F\u5046\u5070\u5042\u506C\u5078\u5080" +
+        "\u5094\u509A\u5085\u50B4\u6703\u50B2\u50C9\u50CA" +
+        "\u50B3\u50C2\u50F4\u50DE\u50E5\u50D8\u50ED\u50E3" +
+        "\u50EE\u50F9\u50F5\u5109\u5101\u5102\u511A\u5115" +
+        "\u5114\u5116\u5121\u513A\u5137\u513C\u513B\u513F" +
+        "\u5140\u514A\u514C\u5152\u5154\u5162\u5164\u5169" +
+        "\u516A\u516E\u5180\u5182\u56D8\u518C\u5189\u518F" +
+        "\u5191\u5193\u5195\u5196\u519D\u51A4\u51A6\u51A2" +
+        "\u51A9\u51AA\u51AB\u51B3\u51B1\u51B2\u51B0\u51B5" +
+        "\u51BE\u51BD\u51C5\u51C9\u51DB\u51E0\u51E9\u51EC" +
+        "\u51ED\u51F0\u51F5\u51FE\u5204\u520B\u5214\u5215" +
+        "\u5227\u522A\u522E\u5233\u5239\u5244\u524B" ,
+        "\uFFFD\u524F\u525E\u5254\u5271\u526A\u5273\u5274" +
+        "\u5269\u527F\u527D\u528D\u5288\u5292\u5291\u529C" +
+        "\u52A6\u52AC\u52AD\u52BC\u52B5\u52C1\u52C0\u52CD" +
+        "\u52DB\u52DE\u52E3\u52E6\u52E0\u52F3\u52F5\u52F8" +
+        "\u52F9\u5300\u5306\u5307\u5308\u7538\u530D\u5310" +
+        "\u530F\u5315\u531A\u5324\u5323\u532F\u5331\u5333" +
+        "\u5338\u5340\u5345\u5346\u5349\u4E17\u534D\u51D6" +
+        "\u8209\u535E\u5369\u536E\u5372\u5377\u537B\u5382" +
+        "\u5393\u5396\u53A0\u53A6\u53A5\u53AE\u53B0\u53B2" +
+        "\u53B6\u53C3\u7C12\u53DD\u53DF\u66FC\uFA0E\u71EE" +
+        "\u53EE\u53E8\u53ED\u53FA\u5401\u543D\u5440\u542C" +
+        "\u542D\u543C\u542E\u5436\u5429\u541D\u544E\u548F" +
+        "\u5475\u548E\u545F\u5471\u5477\u5470\u5492\u547B" +
+        "\u5480\u549C\u5476\u5484\u5490\u5486\u548A\u54C7" +
+        "\u54BC\u54AF\u54A2\u54B8\u54A5\u54AC\u54C4\u54D8" +
+        "\u54C8\u54A8\u54AB\u54C2\u54A4\u54A9\u54BE\u54E5" +
+        "\u54FF\u54E6\u550F\u5514\u54FD\u54EE\u54ED\u54E2" +
+        "\u5539\u5540\u5563\u554C\u552E\u555C\u5545\u5556" +
+        "\u5557\u5538\u5533\u555D\u5599\u5580\u558A\u559F" +
+        "\u557B\u557E\u5598\u559E\u55AE\u557C\u5586\u5583" +
+        "\u55A9\u5587\u55A8\u55C5\u55DF\u55C4\u55DC\u55E4" +
+        "\u55D4\u55F9\u5614\u55F7\u5616\u55FE\u55FD\u561B" +
+        "\u564E\u5650\u5636\u5632\u5638\u566B\u5664\u5686" +
+        "\u562F\u566C\u566A\u71DF\u5694\u568F\u5680" ,
+        "\uFFFD\u568A\u56A0\u56A5\u56AE\u56B6\u56B4\u56C8" +
+        "\u56C2\u56BC\u56C1\u56C3\u56C0\u56CE\u56D3\u56D1" +
+        "\u56D7\u56EE\u56F9\u56FF\u5704\u5709\u5708\u570D" +
+        "\u55C7\u5718\u5716\u571C\u5726\u5738\u574E\u573B" +
+        "\u5759\u5740\u574F\u5765\u5788\u5761\u577F\u5789" +
+        "\u5793\u57A0\u57A4\u57B3\u57AC\u57AA\u57C3\u57C6" +
+        "\u57C8\u57C0\u57D4\u57C7\u57D2\u57D3\u57D6\uFA0F" +
+        "\u580A\u57E3\u580B\u5819\u5821\u584B\u5862\u6BC0" +
+        "\u583D\u5852\uFA10\u5870\u5879\u5885\u5872\u589F" +
+        "\u58AB\u58B8\u589E\u58AE\u58B2\u58B9\u58BA\u58C5" +
+        "\u58D3\u58D1\u58D7\u58D9\u58D8\u58DE\u58DC\u58DF" +
+        "\u58E4\u58E5\u58EF\u58F7\u58F9\u58FB\u58FC\u5902" +
+        "\u590A\u590B\u5910\u591B\u68A6\u5925\u592C\u592D" +
+        "\u5932\u5938\u593E\u5955\u5950\u5953\u595A\u5958" +
+        "\u595B\u595D\u5963\u5962\u5960\u5967\u596C\u5969" +
+        "\u5978\u5981\u598D\u599B\u599D\u59A3\u59A4\u59B2" +
+        "\u59BA\u59C6\u59E8\u59D9\u59DA\u5A25\u5A1F\u5A11" +
+        "\u5A1C\u5A1A\u5A09\u5A40\u5A6C\u5A49\u5A35\u5A36" +
+        "\u5A62\u5A6A\u5A9A\u5ABC\u5ABE\u5AD0\u5ACB\u5AC2" +
+        "\u5ABD\u5AE3\u5AD7\u5AE6\u5AE9\u5AD6\u5AFA\u5AFB" +
+        "\u5B0C\u5B0B\u5B16\u5B32\u5B2A\u5B36\u5B3E\u5B43" +
+        "\u5B45\u5B40\u5B51\u5B55\u5B56\u6588\u5B5B\u5B65" +
+        "\u5B69\u5B70\u5B73\u5B75\u5B78\u5B7A\u5B80\u5B83" +
+        "\u5BA6\u5BB8\u5BC3\u5BC7\u5BC0\u5BC9\u752F" ,
+        "\uFFFD\u5BD0\u5BD8\u5BDE\u5BEC\u5BE4\u5BE2\u5BE5" +
+        "\u5BEB\u5BF0\u5BF3\u5BF6\u5C05\u5C07\u5C08\u5C0D" +
+        "\u5C13\u5C1E\u5C20\u5C22\u5C28\u5C38\u5C41\u5C46" +
+        "\u5C4E\u5C53\u5C50\u5B71\u5C6C\u5C6E\u5C76\u5C79" +
+        "\u5C8C\u5C94\u5CBE\u5CAB\u5CBB\u5CB6\u5CB7\u5CA6" +
+        "\u5CBA\u5CC5\u5CBC\u5CC7\u5CD9\u5CE9\u5CFD\u5CFA" +
+        "\u5CF5\u5CED\u5CEA\u5D0B\u5D15\u5D1F\u5D1B\u5D11" +
+        "\u5D27\u5D22\u5D1A\u5D19\u5D18\u5D4C\u5D52\u5D53" +
+        "\uFA11\u5D5C\u5D4E\u5D4B\u5D42\u5D6C\u5D73\u5D6D" +
+        "\u5D76\u5D87\u5D84\u5D82\u5D8C\u5DA2\u5D9D\u5D90" +
+        "\u5DAC\u5DAE\u5DB7\u5DB8\u5DBC\u5DB9\u5DC9\u5DD0" +
+        "\u5DD3\u5DD2\u5DDB\u5DEB\u5DF5\u5E0B\u5E1A\u5E19" +
+        "\u5E11\u5E1B\u5E36\u5E44\u5E43\u5E40\u5E47\u5E4E" +
+        "\u5E57\u5E54\u5E62\u5E64\u5E75\u5E76\u5E7A\u5E7F" +
+        "\u5EA0\u5EC1\u5EC2\u5EC8\u5ED0\u5ECF\u5EDD\u5EDA" +
+        "\u5EDB\u5EE2\u5EE1\u5EE8\u5EE9\u5EEC\u5EF0\u5EF1" +
+        "\u5EF3\u5EF4\u5F03\u5F09\u5F0B\u5F11\u5F16\u5F21" +
+        "\u5F29\u5F2D\u5F2F\u5F34\u5F38\u5F41\u5F48\u5F4C" +
+        "\u5F4E\u5F51\u5F56\u5F57\u5F59\u5F5C\u5F5D\u5F61" +
+        "\u5F67\u5F73\u5F77\u5F83\u5F82\u5F7F\u5F8A\u5F88" +
+        "\u5F87\u5F91\u5F99\u5F9E\u5F98\u5FA0\u5FA8\u5FAD" +
+        "\u5FB7\u5FBC\u5FD6\u5FFB\u5FE4\u5FF8\u5FF1\u5FF0" +
+        "\u5FDD\u5FDE\u5FFF\u6021\u6019\u6010\u6029\u600E" +
+        "\u6031\u601B\u6015\u602B\u6026\u600F\u603A" ,
+        "\uFFFD\u605A\u6041\u6060\u605D\u606A\u6077\u605F" +
+        "\u604A\u6046\u604D\u6063\u6043\u6064\u606C\u606B" +
+        "\u6059\u6085\u6081\u6083\u609A\u6084\u609B\u608A" +
+        "\u6096\u6097\u6092\u60A7\u608B\u60E1\u60B8\u60DE" +
+        "\u60E0\u60D3\u60BD\u60C6\u60B5\u60D5\u60D8\u6120" +
+        "\u60F2\u6115\u6106\u60F6\u60F7\u6100\u60F4\u60FA" +
+        "\u6103\u6121\u60FB\u60F1\u610D\u610E\u6111\u6147" +
+        "\u614D\u6137\u6128\u6127\u613E\u614A\u6130\u613C" +
+        "\u612C\u6134\u6165\u615D\u613D\u6142\u6144\u6173" +
+        "\u6187\u6177\u6158\u6159\u615A\u616B\u6174\u616F" +
+        "\u6171\u615F\u6153\u6175\u6198\u6199\u6196\u61AC" +
+        "\u6194\u618A\u6191\u61AB\u61AE\u61CC\u61CA\u61C9" +
+        "\u61C8\u61C3\u61C6\u61BA\u61CB\u7F79\u61CD\u61E6" +
+        "\u61E3\u61F4\u61F7\u61F6\u61FD\u61FA\u61FF\u61FC" +
+        "\u61FE\u6200\u6208\u6209\u620D\u6213\u6214\u621B" +
+        "\u621E\u6221\u622A\u622E\u6230\u6232\u6233\u6241" +
+        "\u624E\u625E\u6263\u625B\u6260\u6268\u627C\u6282" +
+        "\u6289\u6292\u627E\u6293\u6296\u6283\u6294\u62D7" +
+        "\u62D1\u62BB\u62CF\u62AC\u62C6\u62C8\u62DC\u62D4" +
+        "\u62CA\u62C2\u62A6\u62C7\u629B\u62C9\u630C\u62EE" +
+        "\u62F1\u6327\u6302\u6308\u62EF\u62F5\u62FF\u6350" +
+        "\u634D\u633E\u634F\u6396\u638E\u6380\u63AB\u6376" +
+        "\u63A3\u638F\u6389\u639F\u636B\u6369\u63B5\u63BE" +
+        "\u63E9\u63C0\u63C6\u63F5\u63E3\u63C9\u63D2" ,
+        "\uFFFD\u63F6\u63C4\u6434\u6406\u6413\u6426\u6436" +
+        "\u641C\u6417\u6428\u640F\u6416\u644E\u6467\u646F" +
+        "\u6460\u6476\u64B9\u649D\u64CE\u6495\u64BB\u6493" +
+        "\u64A5\u64A9\u6488\u64BC\u64DA\u64D2\u64C5\u64C7" +
+        "\u64D4\u64D8\u64C2\u64F1\u64E7\u64E0\u64E1\u64E3" +
+        "\u64EF\u64F4\u64F6\u64F2\u64FA\u6500\u64FD\u6518" +
+        "\u651C\u651D\u6505\u6524\u6523\u652B\u652C\u6534" +
+        "\u6535\u6537\u6536\u6538\u754B\u6548\u654E\u6556" +
+        "\u654D\u6558\u6555\u655D\u6572\u6578\u6582\u6583" +
+        "\u8B8A\u659B\u659F\u65AB\u65B7\u65C3\u65C6\u65C1" +
+        "\u65C4\u65CC\u65D2\u65D9\u65E1\u65E0\u65F1\u6600" +
+        "\u6615\u6602\u6772\u6603\u65FB\u6609\u663F\u6635" +
+        "\u662E\u661E\u6634\u661C\u6624\u6644\u6649\u6665" +
+        "\u6657\u665E\u6664\u6659\u6662\u665D\uFA12\u6673" +
+        "\u6670\u6683\u6688\u6684\u6699\u6698\u66A0\u669D" +
+        "\u66B2\u66C4\u66C1\u66BF\u66C9\u66BE\u66BC\u66B8" +
+        "\u66D6\u66DA\u66E6\u66E9\u66F0\u66F5\u66F7\u66FA" +
+        "\u670E\uF929\u6716\u671E\u7E22\u6726\u6727\u9738" +
+        "\u672E\u673F\u6736\u6737\u6738\u6746\u675E\u6759" +
+        "\u6766\u6764\u6789\u6785\u6770\u67A9\u676A\u678B" +
+        "\u6773\u67A6\u67A1\u67BB\u67B7\u67EF\u67B4\u67EC" +
+        "\u67E9\u67B8\u67E7\u67E4\u6852\u67DD\u67E2\u67EE" +
+        "\u67C0\u67CE\u67B9\u6801\u67C6\u681E\u6846\u684D" +
+        "\u6840\u6844\u6832\u684E\u6863\u6859\u688D" ,
+        "\uFFFD\u6877\u687F\u689F\u687E\u688F\u68AD\u6894" +
+        "\u6883\u68BC\u68B9\u6874\u68B5\u68BA\u690F\u6901" +
+        "\u68CA\u6908\u68D8\u6926\u68E1\u690C\u68CD\u68D4" +
+        "\u68E7\u68D5\u6912\u68EF\u6904\u68E3\u68E0\u68CF" +
+        "\u68C6\u6922\u692A\u6921\u6923\u6928\uFA13\u6979" +
+        "\u6977\u6936\u6978\u6954\u696A\u6974\u6968\u693D" +
+        "\u6959\u6930\u695E\u695D\u697E\u6981\u69B2\u69BF" +
+        "\uFA14\u6998\u69C1\u69D3\u69BE\u69CE\u5BE8\u69CA" +
+        "\u69B1\u69DD\u69BB\u69C3\u69A0\u699C\u6995\u69DE" +
+        "\u6A2E\u69E8\u6A02\u6A1B\u69FF\u69F9\u69F2\u69E7" +
+        "\u69E2\u6A1E\u69ED\u6A14\u69EB\u6A0A\u6A22\u6A12" +
+        "\u6A23\u6A13\u6A30\u6A6B\u6A44\u6A0C\u6AA0\u6A36" +
+        "\u6A78\u6A47\u6A62\u6A59\u6A66\u6A48\u6A46\u6A38" +
+        "\u6A72\u6A73\u6A90\u6A8D\u6A84\u6AA2\u6AA3\u6A7E" +
+        "\u6A97\u6AAC\u6AAA\u6ABB\u6AC2\u6AB8\u6AB3\u6AC1" +
+        "\u6ADE\u6AE2\u6AD1\u6ADA\u6AE4\u8616\u8617\u6AEA" +
+        "\u6B05\u6B0A\u6AFA\u6B12\u6B16\u6B1F\u6B38\u6B37" +
+        "\u6B39\u76DC\u98EE\u6B47\u6B43\u6B49\u6B50\u6B59" +
+        "\u6B54\u6B5B\u6B5F\u6B61\u6B78\u6B79\u6B7F\u6B80" +
+        "\u6B84\u6B83\u6B8D\u6B98\u6B95\u6B9E\u6BA4\u6BAA" +
+        "\u6BAB\u6BAF\u6BB1\u6BB2\u6BB3\u6BB7\u6BBC\u6BC6" +
+        "\u6BCB\u6BD3\u6BD6\u6BDF\u6BEC\u6BEB\u6BF3\u6BEF" +
+        "\u6C08\u6C13\u6C14\u6C1B\u6C24\u6C23\u6C3F\u6C5E" +
+        "\u6C55\u6C5C\u6C62\u6C82\u6C8D\u6C86\u6C6F" ,
+        "\uFFFD\u6C9A\u6C81\u6C9B\u6C7E\u6C68\u6C73\u6C92" +
+        "\u6C90\u6CC4\u6CF1\u6CBD\u6CC5\u6CAE\u6CDA\u6CDD" +
+        "\u6CB1\u6CBE\u6CBA\u6CDB\u6CEF\u6CD9\u6CEA\u6D1F" +
+        "\u6D04\u6D36\u6D2B\u6D3D\u6D33\u6D12\u6D0C\u6D63" +
+        "\u6D87\u6D93\u6D6F\u6D64\u6D5A\u6D79\u6D59\u6D8E" +
+        "\u6D95\u6D9B\u6D85\u6D96\u6DF9\u6E0A\u6E2E\u6DB5" +
+        "\u6DE6\u6DC7\u6DAC\u6DB8\u6DCF\u6DC6\u6DEC\u6DDE" +
+        "\u6DCC\u6DE8\u6DF8\u6DD2\u6DC5\u6DFA\u6DD9\u6DF2" +
+        "\u6DFC\u6DE4\u6DD5\u6DEA\u6DEE\u6E2D\u6E6E\u6E19" +
+        "\u6E72\u6E5F\u6E39\u6E3E\u6E23\u6E6B\u6E5C\u6E2B" +
+        "\u6E76\u6E4D\u6E1F\u6E27\u6E43\u6E3C\u6E3A\u6E4E" +
+        "\u6E24\u6E1D\u6E38\u6E82\u6EAA\u6E98\u6EB7\u6EBD" +
+        "\u6EAF\u6EC4\u6EB2\u6ED4\u6ED5\u6E8F\u6EBF\u6EC2" +
+        "\u6E9F\u6F41\u6F45\u6EEC\u6EF8\u6EFE\u6F3F\u6EF2" +
+        "\u6F31\u6EEF\u6F32\u6ECC\u6EFF\u6F3E\u6F13\u6EF7" +
+        "\u6F86\u6F7A\u6F78\u6F80\u6F6F\u6F5B\u6F6D\u6F74" +
+        "\u6F82\u6F88\u6F7C\u6F58\u6FC6\u6F8E\u6F91\u6F66" +
+        "\u6FB3\u6FA3\u6FB5\u6FA1\u6FB9\u6FDB\u6FAA\u6FC2" +
+        "\u6FDF\u6FD5\u6FEC\u6FD8\u6FD4\u6FF5\u6FEE\u7005" +
+        "\u7007\u7009\u700B\u6FFA\u7011\u7001\u700F\u701B" +
+        "\u701A\u701F\u6FF3\u7028\u7018\u7030\u703E\u7032" +
+        "\u7051\u7063\u7085\u7099\u70AF\u70AB\u70AC\u70B8" +
+        "\u70AE\u70DF\u70CB\u70D9\u7109\u710F\u7104\u70F1" +
+        "\u70FD\u711C\u7119\u715C\u7146\u7147\u7166" ,
+        "\uFFFD\u7162\u714C\u7156\u716C\u7188\u718F\u7184" +
+        "\u7195\uFA15\u71AC\u71C1\u71B9\u71BE\u71D2\u71E7" +
+        "\u71C9\u71D4\u71D7\u71CE\u71F5\u71E0\u71EC\u71FB" +
+        "\u71FC\u71F9\u71FE\u71FF\u720D\u7210\u7228\u722D" +
+        "\u722C\u7230\u7232\u723B\u723C\u723F\u7240\u7246" +
+        "\u724B\u7258\u7274\u727E\u7281\u7287\u7282\u7292" +
+        "\u7296\u72A2\u72A7\u72B1\u72B2\u72BE\u72C3\u72C6" +
+        "\u72C4\u72B9\u72CE\u72D2\u72E2\u72E0\u72E1\u72F9" +
+        "\u72F7\u7317\u730A\u731C\u7316\u731D\u7324\u7334" +
+        "\u7329\u732F\uFA16\u7325\u733E\u734F\u734E\u7357" +
+        "\u9ED8\u736A\u7368\u7370\u7377\u7378\u7375\u737B" +
+        "\u73C8\u73BD\u73B3\u73CE\u73BB\u73C0\u73C9\u73D6" +
+        "\u73E5\u73E3\u73D2\u73EE\u73F1\u73DE\u73F8\u7407" +
+        "\u73F5\u7405\u7426\u742A\u7425\u7429\u742E\u7432" +
+        "\u743A\u7455\u743F\u745F\u7459\u7441\u745C\u7469" +
+        "\u7470\u7463\u746A\u7464\u7462\u7489\u746F\u747E" +
+        "\u749F\u749E\u74A2\u74A7\u74CA\u74CF\u74D4\u74E0" +
+        "\u74E3\u74E7\u74E9\u74EE\u74F0\u74F2\u74F1\u74F7" +
+        "\u74F8\u7501\u7504\u7503\u7505\u750D\u750C\u750E" +
+        "\u7513\u751E\u7526\u752C\u753C\u7544\u754D\u754A" +
+        "\u7549\u7546\u755B\u755A\u7564\u7567\u756B\u756F" +
+        "\u7574\u756D\u7578\u7576\u7582\u7586\u7587\u758A" +
+        "\u7589\u7594\u759A\u759D\u75A5\u75A3\u75C2\u75B3" +
+        "\u75C3\u75B5\u75BD\u75B8\u75BC\u75B1\u75CD" ,
+        "\uFFFD\u75CA\u75D2\u75D9\u75E3\u75DE\u75FE\u75FF" +
+        "\u75FC\u7601\u75F0\u75FA\u75F2\u75F3\u760B\u7609" +
+        "\u761F\u7627\u7620\u7621\u7622\u7624\u7634\u7630" +
+        "\u763B\u7647\u7648\u7658\u7646\u765C\u7661\u7662" +
+        "\u7668\u7669\u7667\u766A\u766C\u7670\u7672\u7676" +
+        "\u767C\u7682\u7680\u7683\u7688\u768B\u7699\u769A" +
+        "\u769C\u769E\u769B\u76A6\u76B0\u76B4\u76B8\u76B9" +
+        "\u76BA\u76C2\uFA17\u76CD\u76D6\u76D2\u76DE\u76E1" +
+        "\u76E5\u76EA\u862F\u76FB\u7708\u7707\u7704\u7724" +
+        "\u7729\u7725\u7726\u771B\u7737\u7738\u7746\u7747" +
+        "\u775A\u7768\u776B\u775B\u7765\u777F\u777E\u7779" +
+        "\u778E\u778B\u7791\u77A0\u779E\u77B0\u77B6\u77B9" +
+        "\u77BF\u77BC\u77BD\u77BB\u77C7\u77CD\u77DA\u77DC" +
+        "\u77E3\u77EE\u52AF\u77FC\u780C\u7812\u7821\u783F" +
+        "\u7820\u7845\u784E\u7864\u7874\u788E\u787A\u7886" +
+        "\u789A\u787C\u788C\u78A3\u78B5\u78AA\u78AF\u78D1" +
+        "\u78C6\u78CB\u78D4\u78BE\u78BC\u78C5\u78CA\u78EC" +
+        "\u78E7\u78DA\u78FD\u78F4\u7907\u7911\u7919\u792C" +
+        "\u792B\u7930\uFA18\u7940\u7960\uFA19\u795F\u795A" +
+        "\u7955\uFA1A\u797F\u798A\u7994\uFA1B\u799D\u799B" +
+        "\u79AA\u79B3\u79BA\u79C9\u79D5\u79E7\u79EC\u79E3" +
+        "\u7A08\u7A0D\u7A18\u7A19\u7A1F\u7A31\u7A3E\u7A37" +
+        "\u7A3B\u7A43\u7A57\u7A49\u7A62\u7A61\u7A69\u9F9D" +
+        "\u7A70\u7A79\u7A7D\u7A88\u7A95\u7A98\u7A96" ,
+        "\uFFFD\u7A97\u7AA9\u7AB0\u7AB6\u9083\u7AC3\u7ABF" +
+        "\u7AC5\u7AC4\u7AC7\u7ACA\u7ACD\u7ACF\u7AD2\u7AD1" +
+        "\u7AD5\u7AD3\u7AD9\u7ADA\u7ADD\u7AE1\u7AE2\u7AE6" +
+        "\u7AE7\uFA1C\u7AEB\u7AED\u7AF0\u7AF8\u7B02\u7B0F" +
+        "\u7B0B\u7B0A\u7B06\u7B33\u7B36\u7B19\u7B1E\u7B35" +
+        "\u7B28\u7B50\u7B4D\u7B4C\u7B45\u7B5D\u7B75\u7B7A" +
+        "\u7B74\u7B70\u7B71\u7B6E\u7B9D\u7B98\u7B9F\u7B8D" +
+        "\u7B9C\u7B9A\u7B92\u7B8F\u7B99\u7BCF\u7BCB\u7BCC" +
+        "\u7BB4\u7BC6\u7B9E\u7BDD\u7BE9\u7BE6\u7BF7\u7BE5" +
+        "\u7C14\u7C00\u7C13\u7C07\u7BF3\u7C0D\u7BF6\u7C23" +
+        "\u7C27\u7C2A\u7C1F\u7C37\u7C2B\u7C3D\u7C40\u7C4C" +
+        "\u7C43\u7C56\u7C50\u7C58\u7C5F\u7C65\u7C6C\u7C75" +
+        "\u7C83\u7C90\u7CA4\u7CA2\u7CAB\u7CA1\u7CAD\u7CA8" +
+        "\u7CB3\u7CB2\u7CB1\u7CAE\u7CB9\uFA1D\u7CBD\u7CC5" +
+        "\u7CC2\u7CD2\u7CE2\u7CD8\u7CDC\u7CEF\u7CF2\u7CF4" +
+        "\u7CF6\u7D06\u7D02\u7D1C\u7D15\u7D0A\u7D45\u7D4B" +
+        "\u7D2E\u7D32\u7D3F\u7D35\u7D48\u7D46\u7D5C\u7D73" +
+        "\u7D56\u7D4E\u7D68\u7D6E\u7D4F\u7D63\u7D93\u7D89" +
+        "\u7D5B\u7DAE\u7DA3\u7DB5\u7DB7\u7DC7\u7DBD\u7DAB" +
+        "\u7DA2\u7DAF\u7DA0\u7DB8\u7D9F\u7DB0\u7DD5\u7DD8" +
+        "\u7DDD\u7DD6\u7DE4\u7DDE\u7DFB\u7E0B\u7DF2\u7DE1" +
+        "\u7DDC\u7E05\u7E0A\u7E21\u7E12\u7E1F\u7E09\u7E3A" +
+        "\u7E46\u7E66\u7E31\u7E3D\u7E35\u7E3B\u7E39\u7E43" +
+        "\u7E37\u7E32\u7E5D\u7E56\u7E5E\u7E52\u7E59" ,
+        "\uFFFD\u7E5A\u7E67\u7E79\u7E6A\u7E69\u7E7C\u7E7B" +
+        "\u7E7D\u8FAE\u7E7F\u7E83\u7E89\u7E8E\u7E8C\u7E92" +
+        "\u7E93\u7E94\u7E96\u7E9B\u7F38\u7F3A\u7F45\u7F47" +
+        "\u7F4C\u7F4E\u7F51\u7F55\u7F54\u7F58\u7F5F\u7F60" +
+        "\u7F68\u7F67\u7F69\u7F78\u7F82\u7F86\u7F83\u7F87" +
+        "\u7F88\u7F8C\u7F94\u7F9E\u7F9D\u7F9A\u7FA1\u7FA3" +
+        "\u7FAF\u7FAE\u7FB2\u7FB9\u7FB6\u7FB8\u8B71\uFA1E" +
+        "\u7FC5\u7FC6\u7FCA\u7FD5\u7FE1\u7FE6\u7FE9\u7FF3" +
+        "\u7FF9\u8004\u800B\u8012\u8019\u801C\u8021\u8028" +
+        "\u803F\u803B\u804A\u8046\u8052\u8058\u805F\u8062" +
+        "\u8068\u8073\u8072\u8070\u8076\u8079\u807D\u807F" +
+        "\u8084\u8085\u8093\u809A\u80AD\u5190\u80AC\u80DB" +
+        "\u80E5\u80D9\u80DD\u80C4\u80DA\u8109\u80EF\u80F1" +
+        "\u811B\u8123\u812F\u814B\u8146\u813E\u8153\u8151" +
+        "\u80FC\u8171\u816E\u8165\u815F\u8166\u8174\u8183" +
+        "\u8188\u818A\u8180\u8182\u81A0\u8195\u81A3\u8193" +
+        "\u81B5\u81A4\u81A9\u81B8\u81B0\u81C8\u81BE\u81BD" +
+        "\u81C0\u81C2\u81BA\u81C9\u81CD\u81D1\u81D8\u81D9" +
+        "\u81DA\u81DF\u81E0\u81FA\u81FB\u81FE\u8201\u8202" +
+        "\u8205\u820D\u8210\u8212\u8216\u8229\u822B\u822E" +
+        "\u8238\u8233\u8240\u8259\u825A\u825D\u825F\u8264" +
+        "\u8262\u8268\u826A\u826B\u8271\u8277\u827E\u828D" +
+        "\u8292\u82AB\u829F\u82BB\u82AC\u82E1\u82E3\u82DF" +
+        "\u8301\u82D2\u82F4\u82F3\u8303\u82FB\u82F9" ,
+        "\uFFFD\u82DE\u8306\u82DC\u82FA\u8309\u82D9\u8335" +
+        "\u8362\u8334\u8316\u8331\u8340\u8339\u8350\u8345" +
+        "\u832F\u832B\u8318\u839A\u83AA\u839F\u83A2\u8396" +
+        "\u8323\u838E\u8375\u837F\u838A\u837C\u83B5\u8373" +
+        "\u8393\u83A0\u8385\u8389\u83A8\u83F4\u8413\u83C7" +
+        "\u83CE\u83F7\u83FD\u8403\u83D8\u840B\u83C1\u8407" +
+        "\u83E0\u83F2\u840D\u8420\u83F6\u83BD\u83FB\u842A" +
+        "\u8462\u843C\u8484\u8477\u846B\u8479\u8448\u846E" +
+        "\u8482\u8469\u8446\u846F\u8438\u8435\u84CA\u84B9" +
+        "\u84BF\u849F\u84B4\u84CD\u84BB\u84DA\u84D0\u84C1" +
+        "\u84AD\u84C6\u84D6\u84A1\u84D9\u84FF\u84F4\u8517" +
+        "\u8518\u852C\u851F\u8515\u8514\u8506\u8553\u855A" +
+        "\u8540\u8559\u8563\u8558\u8548\u8541\u854A\u854B" +
+        "\u856B\u8555\u8580\u85A4\u8588\u8591\u858A\u85A8" +
+        "\u856D\u8594\u859B\u85AE\u8587\u859C\u8577\u857E" +
+        "\u8590\uFA1F\u820A\u85B0\u85C9\u85BA\u85CF\u85B9" +
+        "\u85D0\u85D5\u85DD\u85E5\u85DC\u85F9\u860A\u8613" +
+        "\u860B\u85FE\u8622\u861A\u8630\u863F\uFA20\u864D" +
+        "\u4E55\u8655\u865F\u8667\u8671\u8693\u86A3\u86A9" +
+        "\u868B\u86AA\u868C\u86B6\u86AF\u86C4\u86C6\u86B0" +
+        "\u86C9\u86CE\uFA21\u86AB\u86D4\u86DE\u86E9\u86EC" +
+        "\u86DF\u86DB\u8712\u8706\u8708\u8700\u8703\u86FB" +
+        "\u8711\u8709\u870D\u86F9\u870A\u8734\u873F\u873B" +
+        "\u8725\u8729\u871A\u875F\u8778\u874C\u874E" ,
+        "\uFFFD\u8774\u8757\u8768\u8782\u876A\u8760\u876E" +
+        "\u8759\u8753\u8763\u877F\u87A2\u87C6\u879F\u87AF" +
+        "\u87CB\u87BD\u87C0\u87D0\u96D6\u87AB\u87C4\u87B3" +
+        "\u87D2\u87BB\u87EF\u87F2\u87E0\u880E\u8807\u880F" +
+        "\u8816\u880D\u87FE\u87F6\u87F7\u8811\u8815\u8822" +
+        "\u8821\u8827\u8831\u8836\u8839\u883B\u8842\u8844" +
+        "\u884D\u8852\u8859\u885E\u8862\u886B\u8881\u887E" +
+        "\u8875\u887D\u8872\u8882\u889E\u8897\u8892\u88AE" +
+        "\u8899\u88A2\u888D\u88A4\u88BF\u88B5\u88B1\u88C3" +
+        "\u88C4\u88D4\u88D8\u88D9\u88DD\u88F9\u8902\u88FC" +
+        "\u88F5\u88E8\u88F2\u8904\u890C\u892A\u891D\u890A" +
+        "\u8913\u891E\u8925\u892B\u8941\u893B\u8936\u8943" +
+        "\u8938\u894D\u894C\u8960\u895E\u8966\u896A\u8964" +
+        "\u896D\u896F\u8974\u8977\u897E\u8983\u8988\u898A" +
+        "\u8993\u8998\u89A1\u89A9\u89A6\u89AC\u89AF\u89B2" +
+        "\u89BA\u89BF\u89BD\u89C0\u89DA\u89DD\u89E7\u89F4" +
+        "\u89F8\u8A03\u8A16\u8A10\u8A0C\u8A12\u8A1B\u8A1D" +
+        "\u8A25\u8A36\u8A41\u8A37\u8A5B\u8A52\u8A46\u8A48" +
+        "\u8A7C\u8A6D\u8A6C\u8A62\u8A79\u8A85\u8A82\u8A84" +
+        "\u8AA8\u8AA1\u8A91\u8AA5\u8AA6\u8A9A\u8AA3\u8AA7" +
+        "\u8ACC\u8ABE\u8ACD\u8AC2\u8ADA\u8AF3\u8AE7\u8AE4" +
+        "\u8AF1\u8B14\u8AE0\u8AE2\u8AE1\u8ADF\uFA22\u8AF6" +
+        "\u8AF7\u8ADE\u8ADB\u8B0C\u8B07\u8B1A\u8B16\u8B10" +
+        "\u8B17\u8B20\u8B33\u8B41\u97AB\u8B26\u8B2B" ,
+        "\uFFFD\u8B3E\u8B4C\u8B4F\u8B4E\u8B53\u8B49\u8B56" +
+        "\u8B5B\u8B5A\u8B74\u8B6B\u8B5F\u8B6C\u8B6F\u8B7D" +
+        "\u8B7F\u8B80\u8B8C\u8B8E\u8B99\u8B92\u8B93\u8B96" +
+        "\u8B9A\u8C3A\u8C41\u8C3F\u8C48\u8C4C\u8C4E\u8C50" +
+        "\u8C55\u8C62\u8C6C\u8C78\u8C7A\u8C7C\u8C82\u8C89" +
+        "\u8C85\u8C8A\u8C8D\u8C8E\u8C98\u8C94\u621D\u8CAD" +
+        "\u8CAA\u8CAE\u8CBD\u8CB2\u8CB3\u8CC1\u8CB6\u8CC8" +
+        "\u8CCE\u8CCD\u8CE3\u8CDA\u8CF0\u8CF4\u8CFD\u8CFA" +
+        "\u8CFB\u8D07\u8D0A\u8D0F\u8D0D\u8D12\u8D10\u8D13" +
+        "\u8D14\u8D16\u8D67\u8D6D\u8D71\u8D76\uFA23\u8D81" +
+        "\u8DC2\u8DBE\u8DBA\u8DCF\u8DDA\u8DD6\u8DCC\u8DDB" +
+        "\u8DCB\u8DEA\u8DEB\u8DDF\u8DE3\u8DFC\u8E08\u8DFF" +
+        "\u8E09\u8E1D\u8E1E\u8E10\u8E1F\u8E42\u8E35\u8E30" +
+        "\u8E34\u8E4A\u8E47\u8E49\u8E4C\u8E50\u8E48\u8E59" +
+        "\u8E64\u8E60\u8E55\u8E63\u8E76\u8E72\u8E87\u8E7C" +
+        "\u8E81\u8E85\u8E84\u8E8B\u8E8A\u8E93\u8E91\u8E94" +
+        "\u8E99\u8EA1\u8EAA\u8EB1\u8EBE\u8EC6\u8EC5\u8EC8" +
+        "\u8ECB\u8ECF\u8EDB\u8EE3\u8EFC\u8EFB\u8EEB\u8EFE" +
+        "\u8F0A\u8F0C\u8F05\u8F15\u8F12\u8F13\u8F1C\u8F19" +
+        "\u8F1F\u8F26\u8F33\u8F3B\u8F39\u8F45\u8F42\u8F3E" +
+        "\u8F49\u8F46\u8F4C\u8F4E\u8F57\u8F5C\u8F62\u8F63" +
+        "\u8F64\u8F9C\u8F9F\u8FA3\u8FA8\u8FA7\u8FAD\u8FAF" +
+        "\u8FB7\uFA24\u8FDA\u8FE5\u8FE2\u8FEF\u8FE9\u8FF4" +
+        "\u9005\u8FF9\u8FF8\u9011\u9015\u900E\u9021" ,
+        "\uFFFD\u900D\u901E\u9016\u900B\u9027\u9036\u9039" +
+        "\u904F\uFA25\u9050\u9051\u9052\u9049\u903E\u9056" +
+        "\u9058\u905E\u9068\u9067\u906F\u9076\u96A8\u9072" +
+        "\u9082\u907D\u9089\u9080\u908F\u6248\u90AF\u90B1" +
+        "\u90B5\u90E2\u90E4\u90DB\u90DE\u9102\uFA26\u9115" +
+        "\u9112\u9119\u9132\u9127\u9130\u914A\u9156\u9158" +
+        "\u9163\u9165\u9169\u9173\u9172\u918B\u9189\u9182" +
+        "\u91A2\u91AB\u91AF\u91AA\u91B5\u91B4\u91BA\u91C0" +
+        "\u91C1\u91CB\u91D0\u91DA\u91DB\u91D7\u91DE\u91D6" +
+        "\u91DF\u91E1\u91ED\u91F5\u91EE\u91E4\u91F6\u91E5" +
+        "\u9206\u921E\u91FF\u9210\u9214\u920A\u922C\u9215" +
+        "\u9229\u9257\u9245\u923A\u9249\u9264\u9240\u923C" +
+        "\u9248\u924E\u9250\u9259\u923F\u9251\u9239\u924B" +
+        "\u9267\u925A\u929C\u92A7\u9277\u9278\u9296\u9293" +
+        "\u929B\u9295\u92E9\u92CF\u92E7\u92D7\u92D9\u92D0" +
+        "\uFA27\u92D5\u92B9\u92B7\u92E0\u92D3\u933A\u9335" +
+        "\u930F\u9325\u92FA\u9321\u9344\u92FB\uFA28\u9319" +
+        "\u931E\u92FF\u9322\u931A\u931D\u9323\u9302\u933B" +
+        "\u9370\u9360\u937C\u936E\u9356\u9357\u93B9\u93B0" +
+        "\u93A4\u93AD\u9394\u93C8\u93D6\u93C6\u93D7\u93E8" +
+        "\u93E5\u93D8\u93C3\u93DD\u93DE\u93D0\u93E4\u941A" +
+        "\u93F8\u9414\u9413\u9421\u9403\u9407\u9436\u942B" +
+        "\u9431\u943A\u9441\u9452\u9445\u9444\u9448\u945B" +
+        "\u945A\u9460\u9462\u945E\u946A\u9475\u9470" ,
+        "\uFFFD\u9477\u947F\u947D\u947C\u947E\u9481\u9582" +
+        "\u9587\u958A\u9592\u9594\u9596\u9598\u9599\u95A0" +
+        "\u95A8\u95A7\u95AD\u95BC\u95BB\u95B9\u95BE\u95CA" +
+        "\u6FF6\u95C3\u95CD\u95CC\u95D5\u95D4\u95D6\u95DC" +
+        "\u95E1\u95E5\u95E2\u9621\u9628\u962E\u962F\u9642" +
+        "\u964F\u964C\u964B\u965C\u965D\u965F\u9666\u9677" +
+        "\u9672\u966C\u968D\u968B\uF9DC\u9698\u9695\u9697" +
+        "\uFA29\u969D\u96A7\u96AA\u96B1\u96B2\u96B0\u96AF" +
+        "\u96B4\u96B6\u96B8\u96B9\u96CE\u96CB\u96D5\u96DC" +
+        "\u96D9\u96F9\u9704\u9706\u9708\u9719\u970D\u9713" +
+        "\u970E\u9711\u970F\u9716\u9724\u972A\u9730\u9733" +
+        "\u9739\u973B\u973D\u973E\u9746\u9744\u9743\u9748" +
+        "\u9742\u9749\u974D\u974F\u9751\u9755\u975C\u9760" +
+        "\u9764\u9766\u9768\u976D\u9779\u9785\u977C\u9781" +
+        "\u977A\u978B\u978F\u9790\u979C\u97A8\u97A6\u97A3" +
+        "\u97B3\u97B4\u97C3\u97C6\u97C8\u97CB\u97DC\u97ED" +
+        "\u97F2\u7ADF\u97F5\u980F\u981A\u9824\u9821\u9837" +
+        "\u983D\u984F\u984B\u9857\u9865\u986B\u986F\u9870" +
+        "\u9871\u9874\u9873\u98AA\u98AF\u98B1\u98B6\u98C4" +
+        "\u98C3\u98C6\u98DC\u98ED\u98E9\uFA2A\u98EB\uFA2B" +
+        "\u9903\u991D\u9912\u9914\u9918\u9927\uFA2C\u9921" +
+        "\u991E\u9924\u9920\u992C\u992E\u993D\u993E\u9942" +
+        "\u9949\u9945\u9950\u994B\u9951\u994C\u9955\u9997" +
+        "\u9998\u999E\u99A5\u99AD\u99AE\u99BC\u99DF" ,
+        "\uFFFD\u99DB\u99DD\u99D8\u99D1\u99ED\u99EE\u99E2" +
+        "\u99F1\u99F2\u99FB\u99F8\u9A01\u9A0F\u9A05\u9A19" +
+        "\u9A2B\u9A37\u9A40\u9A45\u9A42\u9A43\u9A3E\u9A55" +
+        "\u9A4D\u9A4E\u9A5B\u9A57\u9A5F\u9A62\u9A69\u9A65" +
+        "\u9A64\u9A6A\u9A6B\u9AAD\u9AB0\u9ABC\u9AC0\u9ACF" +
+        "\u9AD3\u9AD4\u9AD1\u9AD9\u9ADC\u9ADE\u9ADF\u9AE2" +
+        "\u9AE3\u9AE6\u9AEF\u9AEB\u9AEE\u9AF4\u9AF1\u9AF7" +
+        "\u9AFB\u9B06\u9B18\u9B1A\u9B1F\u9B22\u9B23\u9B25" +
+        "\u9B27\u9B28\u9B29\u9B2A\u9B2E\u9B2F\u9B31\u9B32" +
+        "\u9B3B\u9B44\u9B43\u9B4D\u9B4E\u9B51\u9B58\u9B75" +
+        "\u9B74\u9B72\u9B93\u9B8F\u9B83\u9B91\u9B96\u9B97" +
+        "\u9B9F\u9BA0\u9BA8\u9BB1\u9BB4\u9BC0\u9BCA\u9BBB" +
+        "\u9BB9\u9BC6\u9BCF\u9BD1\u9BD2\u9BE3\u9BE2\u9BE4" +
+        "\u9BD4\u9BE1\u9BF5\u9BF1\u9BF2\u9C04\u9C1B\u9C15" +
+        "\u9C14\u9C00\u9C09\u9C13\u9C0C\u9C06\u9C08\u9C12" +
+        "\u9C0A\u9C2E\u9C25\u9C24\u9C21\u9C30\u9C47\u9C32" +
+        "\u9C46\u9C3E\u9C5A\u9C60\u9C67\u9C76\u9C78\u9CEB" +
+        "\u9CE7\u9CEC\u9CF0\u9D09\u9D03\u9D06\u9D2A\u9D26" +
+        "\u9D2C\u9D23\u9D1F\u9D15\u9D12\u9D41\u9D3F\u9D44" +
+        "\u9D3E\u9D46\u9D48\u9D5D\u9D5E\u9D59\u9D51\u9D50" +
+        "\u9D64\u9D72\u9D70\u9D87\u9D6B\u9D6F\u9D7A\u9D9A" +
+        "\u9DA4\u9DA9\u9DAB\u9DB2\u9DC4\u9DC1\u9DBB\u9DB8" +
+        "\u9DBA\u9DC6\u9DCF\u9DC2\uFA2D\u9DD9\u9DD3\u9DF8" +
+        "\u9DE6\u9DED\u9DEF\u9DFD\u9E1A\u9E1B\u9E19" ,
+        "\uFFFD\u9E1E\u9E75\u9E79\u9E7D\u9E81\u9E88\u9E8B" +
+        "\u9E8C\u9E95\u9E91\u9E9D\u9EA5\u9EB8\u9EAA\u9EAD" +
+        "\u9EBC\u9EBE\u9761\u9ECC\u9ECF\u9ED0\u9ED1\u9ED4" +
+        "\u9EDC\u9EDE\u9EDD\u9EE0\u9EE5\u9EE8\u9EEF\u9EF4" +
+        "\u9EF6\u9EF7\u9EF9\u9EFB\u9EFC\u9EFD\u9F07\u9F08" +
+        "\u76B7\u9F15\u9F21\u9F2C\u9F3E\u9F4A\u9F4E\u9F4F" +
+        "\u9F52\u9F54\u9F63\u9F5F\u9F60\u9F61\u9F66\u9F67" +
+        "\u9F6C\u9F6A\u9F77\u9F72\u9F76\u9F95\u9F9C\u9FA0" +
+        "\u5C2D\u69D9\u9065\u7476\u51DC\u7155\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
+        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" ,
+        "\uFFFD\uE000\uE001\uE002\uE003\uE004\uE005\uE006" +
+        "\uE007\uE008\uE009\uE00A\uE00B\uE00C\uE00D\uE00E" +
+        "\uE00F\uE010\uE011\uE012\uE013\uE014\uE015\uE016" +
+        "\uE017\uE018\uE019\uE01A\uE01B\uE01C\uE01D\uE01E" +
+        "\uE01F\uE020\uE021\uE022\uE023\uE024\uE025\uE026" +
+        "\uE027\uE028\uE029\uE02A\uE02B\uE02C\uE02D\uE02E" +
+        "\uE02F\uE030\uE031\uE032\uE033\uE034\uE035\uE036" +
+        "\uE037\uE038\uE039\uE03A\uE03B\uE03C\uE03D\uE03E" +
+        "\uE03F\uE040\uE041\uE042\uE043\uE044\uE045\uE046" +
+        "\uE047\uE048\uE049\uE04A\uE04B\uE04C\uE04D\uE04E" +
+        "\uE04F\uE050\uE051\uE052\uE053\uE054\uE055\uE056" +
+        "\uE057\uE058\uE059\uE05A\uE05B\uE05C\uE05D\uE05E" +
+        "\uE05F\uE060\uE061\uE062\uE063\uE064\uE065\uE066" +
+        "\uE067\uE068\uE069\uE06A\uE06B\uE06C\uE06D\uE06E" +
+        "\uE06F\uE070\uE071\uE072\uE073\uE074\uE075\uE076" +
+        "\uE077\uE078\uE079\uE07A\uE07B\uE07C\uE07D\uE07E" +
+        "\uE07F\uE080\uE081\uE082\uE083\uE084\uE085\uE086" +
+        "\uE087\uE088\uE089\uE08A\uE08B\uE08C\uE08D\uE08E" +
+        "\uE08F\uE090\uE091\uE092\uE093\uE094\uE095\uE096" +
+        "\uE097\uE098\uE099\uE09A\uE09B\uE09C\uE09D\uE09E" +
+        "\uE09F\uE0A0\uE0A1\uE0A2\uE0A3\uE0A4\uE0A5\uE0A6" +
+        "\uE0A7\uE0A8\uE0A9\uE0AA\uE0AB\uE0AC\uE0AD\uE0AE" +
+        "\uE0AF\uE0B0\uE0B1\uE0B2\uE0B3\uE0B4\uE0B5\uE0B6" +
+        "\uE0B7\uE0B8\uE0B9\uE0BA\uE0BB\uE0BC\uE0BD" ,
+        "\uFFFD\uE0BE\uE0BF\uE0C0\uE0C1\uE0C2\uE0C3\uE0C4" +
+        "\uE0C5\uE0C6\uE0C7\uE0C8\uE0C9\uE0CA\uE0CB\uE0CC" +
+        "\uE0CD\uE0CE\uE0CF\uE0D0\uE0D1\uE0D2\uE0D3\uE0D4" +
+        "\uE0D5\uE0D6\uE0D7\uE0D8\uE0D9\uE0DA\uE0DB\uE0DC" +
+        "\uE0DD\uE0DE\uE0DF\uE0E0\uE0E1\uE0E2\uE0E3\uE0E4" +
+        "\uE0E5\uE0E6\uE0E7\uE0E8\uE0E9\uE0EA\uE0EB\uE0EC" +
+        "\uE0ED\uE0EE\uE0EF\uE0F0\uE0F1\uE0F2\uE0F3\uE0F4" +
+        "\uE0F5\uE0F6\uE0F7\uE0F8\uE0F9\uE0FA\uE0FB\uE0FC" +
+        "\uE0FD\uE0FE\uE0FF\uE100\uE101\uE102\uE103\uE104" +
+        "\uE105\uE106\uE107\uE108\uE109\uE10A\uE10B\uE10C" +
+        "\uE10D\uE10E\uE10F\uE110\uE111\uE112\uE113\uE114" +
+        "\uE115\uE116\uE117\uE118\uE119\uE11A\uE11B\uE11C" +
+        "\uE11D\uE11E\uE11F\uE120\uE121\uE122\uE123\uE124" +
+        "\uE125\uE126\uE127\uE128\uE129\uE12A\uE12B\uE12C" +
+        "\uE12D\uE12E\uE12F\uE130\uE131\uE132\uE133\uE134" +
+        "\uE135\uE136\uE137\uE138\uE139\uE13A\uE13B\uE13C" +
+        "\uE13D\uE13E\uE13F\uE140\uE141\uE142\uE143\uE144" +
+        "\uE145\uE146\uE147\uE148\uE149\uE14A\uE14B\uE14C" +
+        "\uE14D\uE14E\uE14F\uE150\uE151\uE152\uE153\uE154" +
+        "\uE155\uE156\uE157\uE158\uE159\uE15A\uE15B\uE15C" +
+        "\uE15D\uE15E\uE15F\uE160\uE161\uE162\uE163\uE164" +
+        "\uE165\uE166\uE167\uE168\uE169\uE16A\uE16B\uE16C" +
+        "\uE16D\uE16E\uE16F\uE170\uE171\uE172\uE173\uE174" +
+        "\uE175\uE176\uE177\uE178\uE179\uE17A\uE17B" ,
+        "\uFFFD\uE17C\uE17D\uE17E\uE17F\uE180\uE181\uE182" +
+        "\uE183\uE184\uE185\uE186\uE187\uE188\uE189\uE18A" +
+        "\uE18B\uE18C\uE18D\uE18E\uE18F\uE190\uE191\uE192" +
+        "\uE193\uE194\uE195\uE196\uE197\uE198\uE199\uE19A" +
+        "\uE19B\uE19C\uE19D\uE19E\uE19F\uE1A0\uE1A1\uE1A2" +
+        "\uE1A3\uE1A4\uE1A5\uE1A6\uE1A7\uE1A8\uE1A9\uE1AA" +
+        "\uE1AB\uE1AC\uE1AD\uE1AE\uE1AF\uE1B0\uE1B1\uE1B2" +
+        "\uE1B3\uE1B4\uE1B5\uE1B6\uE1B7\uE1B8\uE1B9\uE1BA" +
+        "\uE1BB\uE1BC\uE1BD\uE1BE\uE1BF\uE1C0\uE1C1\uE1C2" +
+        "\uE1C3\uE1C4\uE1C5\uE1C6\uE1C7\uE1C8\uE1C9\uE1CA" +
+        "\uE1CB\uE1CC\uE1CD\uE1CE\uE1CF\uE1D0\uE1D1\uE1D2" +
+        "\uE1D3\uE1D4\uE1D5\uE1D6\uE1D7\uE1D8\uE1D9\uE1DA" +
+        "\uE1DB\uE1DC\uE1DD\uE1DE\uE1DF\uE1E0\uE1E1\uE1E2" +
+        "\uE1E3\uE1E4\uE1E5\uE1E6\uE1E7\uE1E8\uE1E9\uE1EA" +
+        "\uE1EB\uE1EC\uE1ED\uE1EE\uE1EF\uE1F0\uE1F1\uE1F2" +
+        "\uE1F3\uE1F4\uE1F5\uE1F6\uE1F7\uE1F8\uE1F9\uE1FA" +
+        "\uE1FB\uE1FC\uE1FD\uE1FE\uE1FF\uE200\uE201\uE202" +
+        "\uE203\uE204\uE205\uE206\uE207\uE208\uE209\uE20A" +
+        "\uE20B\uE20C\uE20D\uE20E\uE20F\uE210\uE211\uE212" +
+        "\uE213\uE214\uE215\uE216\uE217\uE218\uE219\uE21A" +
+        "\uE21B\uE21C\uE21D\uE21E\uE21F\uE220\uE221\uE222" +
+        "\uE223\uE224\uE225\uE226\uE227\uE228\uE229\uE22A" +
+        "\uE22B\uE22C\uE22D\uE22E\uE22F\uE230\uE231\uE232" +
+        "\uE233\uE234\uE235\uE236\uE237\uE238\uE239" ,
+        "\uFFFD\uE23A\uE23B\uE23C\uE23D\uE23E\uE23F\uE240" +
+        "\uE241\uE242\uE243\uE244\uE245\uE246\uE247\uE248" +
+        "\uE249\uE24A\uE24B\uE24C\uE24D\uE24E\uE24F\uE250" +
+        "\uE251\uE252\uE253\uE254\uE255\uE256\uE257\uE258" +
+        "\uE259\uE25A\uE25B\uE25C\uE25D\uE25E\uE25F\uE260" +
+        "\uE261\uE262\uE263\uE264\uE265\uE266\uE267\uE268" +
+        "\uE269\uE26A\uE26B\uE26C\uE26D\uE26E\uE26F\uE270" +
+        "\uE271\uE272\uE273\uE274\uE275\uE276\uE277\uE278" +
+        "\uE279\uE27A\uE27B\uE27C\uE27D\uE27E\uE27F\uE280" +
+        "\uE281\uE282\uE283\uE284\uE285\uE286\uE287\uE288" +
+        "\uE289\uE28A\uE28B\uE28C\uE28D\uE28E\uE28F\uE290" +
+        "\uE291\uE292\uE293\uE294\uE295\uE296\uE297\uE298" +
+        "\uE299\uE29A\uE29B\uE29C\uE29D\uE29E\uE29F\uE2A0" +
+        "\uE2A1\uE2A2\uE2A3\uE2A4\uE2A5\uE2A6\uE2A7\uE2A8" +
+        "\uE2A9\uE2AA\uE2AB\uE2AC\uE2AD\uE2AE\uE2AF\uE2B0" +
+        "\uE2B1\uE2B2\uE2B3\uE2B4\uE2B5\uE2B6\uE2B7\uE2B8" +
+        "\uE2B9\uE2BA\uE2BB\uE2BC\uE2BD\uE2BE\uE2BF\uE2C0" +
+        "\uE2C1\uE2C2\uE2C3\uE2C4\uE2C5\uE2C6\uE2C7\uE2C8" +
+        "\uE2C9\uE2CA\uE2CB\uE2CC\uE2CD\uE2CE\uE2CF\uE2D0" +
+        "\uE2D1\uE2D2\uE2D3\uE2D4\uE2D5\uE2D6\uE2D7\uE2D8" +
+        "\uE2D9\uE2DA\uE2DB\uE2DC\uE2DD\uE2DE\uE2DF\uE2E0" +
+        "\uE2E1\uE2E2\uE2E3\uE2E4\uE2E5\uE2E6\uE2E7\uE2E8" +
+        "\uE2E9\uE2EA\uE2EB\uE2EC\uE2ED\uE2EE\uE2EF\uE2F0" +
+        "\uE2F1\uE2F2\uE2F3\uE2F4\uE2F5\uE2F6\uE2F7" ,
+        "\uFFFD\uE2F8\uE2F9\uE2FA\uE2FB\uE2FC\uE2FD\uE2FE" +
+        "\uE2FF\uE300\uE301\uE302\uE303\uE304\uE305\uE306" +
+        "\uE307\uE308\uE309\uE30A\uE30B\uE30C\uE30D\uE30E" +
+        "\uE30F\uE310\uE311\uE312\uE313\uE314\uE315\uE316" +
+        "\uE317\uE318\uE319\uE31A\uE31B\uE31C\uE31D\uE31E" +
+        "\uE31F\uE320\uE321\uE322\uE323\uE324\uE325\uE326" +
+        "\uE327\uE328\uE329\uE32A\uE32B\uE32C\uE32D\uE32E" +
+        "\uE32F\uE330\uE331\uE332\uE333\uE334\uE335\uE336" +
+        "\uE337\uE338\uE339\uE33A\uE33B\uE33C\uE33D\uE33E" +
+        "\uE33F\uE340\uE341\uE342\uE343\uE344\uE345\uE346" +
+        "\uE347\uE348\uE349\uE34A\uE34B\uE34C\uE34D\uE34E" +
+        "\uE34F\uE350\uE351\uE352\uE353\uE354\uE355\uE356" +
+        "\uE357\uE358\uE359\uE35A\uE35B\uE35C\uE35D\uE35E" +
+        "\uE35F\uE360\uE361\uE362\uE363\uE364\uE365\uE366" +
+        "\uE367\uE368\uE369\uE36A\uE36B\uE36C\uE36D\uE36E" +
+        "\uE36F\uE370\uE371\uE372\uE373\uE374\uE375\uE376" +
+        "\uE377\uE378\uE379\uE37A\uE37B\uE37C\uE37D\uE37E" +
+        "\uE37F\uE380\uE381\uE382\uE383\uE384\uE385\uE386" +
+        "\uE387\uE388\uE389\uE38A\uE38B\uE38C\uE38D\uE38E" +
+        "\uE38F\uE390\uE391\uE392\uE393\uE394\uE395\uE396" +
+        "\uE397\uE398\uE399\uE39A\uE39B\uE39C\uE39D\uE39E" +
+        "\uE39F\uE3A0\uE3A1\uE3A2\uE3A3\uE3A4\uE3A5\uE3A6" +
+        "\uE3A7\uE3A8\uE3A9\uE3AA\uE3AB\uE3AC\uE3AD\uE3AE" +
+        "\uE3AF\uE3B0\uE3B1\uE3B2\uE3B3\uE3B4\uE3B5" ,
+        "\uFFFD\uE3B6\uE3B7\uE3B8\uE3B9\uE3BA\uE3BB\uE3BC" +
+        "\uE3BD\uE3BE\uE3BF\uE3C0\uE3C1\uE3C2\uE3C3\uE3C4" +
+        "\uE3C5\uE3C6\uE3C7\uE3C8\uE3C9\uE3CA\uE3CB\uE3CC" +
+        "\uE3CD\uE3CE\uE3CF\uE3D0\uE3D1\uE3D2\uE3D3\uE3D4" +
+        "\uE3D5\uE3D6\uE3D7\uE3D8\uE3D9\uE3DA\uE3DB\uE3DC" +
+        "\uE3DD\uE3DE\uE3DF\uE3E0\uE3E1\uE3E2\uE3E3\uE3E4" +
+        "\uE3E5\uE3E6\uE3E7\uE3E8\uE3E9\uE3EA\uE3EB\uE3EC" +
+        "\uE3ED\uE3EE\uE3EF\uE3F0\uE3F1\uE3F2\uE3F3\uE3F4" +
+        "\uE3F5\uE3F6\uE3F7\uE3F8\uE3F9\uE3FA\uE3FB\uE3FC" +
+        "\uE3FD\uE3FE\uE3FF\uE400\uE401\uE402\uE403\uE404" +
+        "\uE405\uE406\uE407\uE408\uE409\uE40A\uE40B\uE40C" +
+        "\uE40D\uE40E\uE40F\uE410\uE411\uE412\uE413\uE414" +
+        "\uE415\uE416\uE417\uE418\uE419\uE41A\uE41B\uE41C" +
+        "\uE41D\uE41E\uE41F\uE420\uE421\uE422\uE423\uE424" +
+        "\uE425\uE426\uE427\uE428\uE429\uE42A\uE42B\uE42C" +
+        "\uE42D\uE42E\uE42F\uE430\uE431\uE432\uE433\uE434" +
+        "\uE435\uE436\uE437\uE438\uE439\uE43A\uE43B\uE43C" +
+        "\uE43D\uE43E\uE43F\uE440\uE441\uE442\uE443\uE444" +
+        "\uE445\uE446\uE447\uE448\uE449\uE44A\uE44B\uE44C" +
+        "\uE44D\uE44E\uE44F\uE450\uE451\uE452\uE453\uE454" +
+        "\uE455\uE456\uE457\uE458\uE459\uE45A\uE45B\uE45C" +
+        "\uE45D\uE45E\uE45F\uE460\uE461\uE462\uE463\uE464" +
+        "\uE465\uE466\uE467\uE468\uE469\uE46A\uE46B\uE46C" +
+        "\uE46D\uE46E\uE46F\uE470\uE471\uE472\uE473" ,
+        "\uFFFD\uE474\uE475\uE476\uE477\uE478\uE479\uE47A" +
+        "\uE47B\uE47C\uE47D\uE47E\uE47F\uE480\uE481\uE482" +
+        "\uE483\uE484\uE485\uE486\uE487\uE488\uE489\uE48A" +
+        "\uE48B\uE48C\uE48D\uE48E\uE48F\uE490\uE491\uE492" +
+        "\uE493\uE494\uE495\uE496\uE497\uE498\uE499\uE49A" +
+        "\uE49B\uE49C\uE49D\uE49E\uE49F\uE4A0\uE4A1\uE4A2" +
+        "\uE4A3\uE4A4\uE4A5\uE4A6\uE4A7\uE4A8\uE4A9\uE4AA" +
+        "\uE4AB\uE4AC\uE4AD\uE4AE\uE4AF\uE4B0\uE4B1\uE4B2" +
+        "\uE4B3\uE4B4\uE4B5\uE4B6\uE4B7\uE4B8\uE4B9\uE4BA" +
+        "\uE4BB\uE4BC\uE4BD\uE4BE\uE4BF\uE4C0\uE4C1\uE4C2" +
+        "\uE4C3\uE4C4\uE4C5\uE4C6\uE4C7\uE4C8\uE4C9\uE4CA" +
+        "\uE4CB\uE4CC\uE4CD\uE4CE\uE4CF\uE4D0\uE4D1\uE4D2" +
+        "\uE4D3\uE4D4\uE4D5\uE4D6\uE4D7\uE4D8\uE4D9\uE4DA" +
+        "\uE4DB\uE4DC\uE4DD\uE4DE\uE4DF\uE4E0\uE4E1\uE4E2" +
+        "\uE4E3\uE4E4\uE4E5\uE4E6\uE4E7\uE4E8\uE4E9\uE4EA" +
+        "\uE4EB\uE4EC\uE4ED\uE4EE\uE4EF\uE4F0\uE4F1\uE4F2" +
+        "\uE4F3\uE4F4\uE4F5\uE4F6\uE4F7\uE4F8\uE4F9\uE4FA" +
+        "\uE4FB\uE4FC\uE4FD\uE4FE\uE4FF\uE500\uE501\uE502" +
+        "\uE503\uE504\uE505\uE506\uE507\uE508\uE509\uE50A" +
+        "\uE50B\uE50C\uE50D\uE50E\uE50F\uE510\uE511\uE512" +
+        "\uE513\uE514\uE515\uE516\uE517\uE518\uE519\uE51A" +
+        "\uE51B\uE51C\uE51D\uE51E\uE51F\uE520\uE521\uE522" +
+        "\uE523\uE524\uE525\uE526\uE527\uE528\uE529\uE52A" +
+        "\uE52B\uE52C\uE52D\uE52E\uE52F\uE530\uE531" ,
+        "\uFFFD\uE532\uE533\uE534\uE535\uE536\uE537\uE538" +
+        "\uE539\uE53A\uE53B\uE53C\uE53D\uE53E\uE53F\uE540" +
+        "\uE541\uE542\uE543\uE544\uE545\uE546\uE547\uE548" +
+        "\uE549\uE54A\uE54B\uE54C\uE54D\uE54E\uE54F\uE550" +
+        "\uE551\uE552\uE553\uE554\uE555\uE556\uE557\uE558" +
+        "\uE559\uE55A\uE55B\uE55C\uE55D\uE55E\uE55F\uE560" +
+        "\uE561\uE562\uE563\uE564\uE565\uE566\uE567\uE568" +
+        "\uE569\uE56A\uE56B\uE56C\uE56D\uE56E\uE56F\uE570" +
+        "\uE571\uE572\uE573\uE574\uE575\uE576\uE577\uE578" +
+        "\uE579\uE57A\uE57B\uE57C\uE57D\uE57E\uE57F\uE580" +
+        "\uE581\uE582\uE583\uE584\uE585\uE586\uE587\uE588" +
+        "\uE589\uE58A\uE58B\uE58C\uE58D\uE58E\uE58F\uE590" +
+        "\uE591\uE592\uE593\uE594\uE595\uE596\uE597\uE598" +
+        "\uE599\uE59A\uE59B\uE59C\uE59D\uE59E\uE59F\uE5A0" +
+        "\uE5A1\uE5A2\uE5A3\uE5A4\uE5A5\uE5A6\uE5A7\uE5A8" +
+        "\uE5A9\uE5AA\uE5AB\uE5AC\uE5AD\uE5AE\uE5AF\uE5B0" +
+        "\uE5B1\uE5B2\uE5B3\uE5B4\uE5B5\uE5B6\uE5B7\uE5B8" +
+        "\uE5B9\uE5BA\uE5BB\uE5BC\uE5BD\uE5BE\uE5BF\uE5C0" +
+        "\uE5C1\uE5C2\uE5C3\uE5C4\uE5C5\uE5C6\uE5C7\uE5C8" +
+        "\uE5C9\uE5CA\uE5CB\uE5CC\uE5CD\uE5CE\uE5CF\uE5D0" +
+        "\uE5D1\uE5D2\uE5D3\uE5D4\uE5D5\uE5D6\uE5D7\uE5D8" +
+        "\uE5D9\uE5DA\uE5DB\uE5DC\uE5DD\uE5DE\uE5DF\uE5E0" +
+        "\uE5E1\uE5E2\uE5E3\uE5E4\uE5E5\uE5E6\uE5E7\uE5E8" +
+        "\uE5E9\uE5EA\uE5EB\uE5EC\uE5ED\uE5EE\uE5EF" ,
+        "\uFFFD\uE5F0\uE5F1\uE5F2\uE5F3\uE5F4\uE5F5\uE5F6" +
+        "\uE5F7\uE5F8\uE5F9\uE5FA\uE5FB\uE5FC\uE5FD\uE5FE" +
+        "\uE5FF\uE600\uE601\uE602\uE603\uE604\uE605\uE606" +
+        "\uE607\uE608\uE609\uE60A\uE60B\uE60C\uE60D\uE60E" +
+        "\uE60F\uE610\uE611\uE612\uE613\uE614\uE615\uE616" +
+        "\uE617\uE618\uE619\uE61A\uE61B\uE61C\uE61D\uE61E" +
+        "\uE61F\uE620\uE621\uE622\uE623\uE624\uE625\uE626" +
+        "\uE627\uE628\uE629\uE62A\uE62B\uE62C\uE62D\uE62E" +
+        "\uE62F\uE630\uE631\uE632\uE633\uE634\uE635\uE636" +
+        "\uE637\uE638\uE639\uE63A\uE63B\uE63C\uE63D\uE63E" +
+        "\uE63F\uE640\uE641\uE642\uE643\uE644\uE645\uE646" +
+        "\uE647\uE648\uE649\uE64A\uE64B\uE64C\uE64D\uE64E" +
+        "\uE64F\uE650\uE651\uE652\uE653\uE654\uE655\uE656" +
+        "\uE657\uE658\uE659\uE65A\uE65B\uE65C\uE65D\uE65E" +
+        "\uE65F\uE660\uE661\uE662\uE663\uE664\uE665\uE666" +
+        "\uE667\uE668\uE669\uE66A\uE66B\uE66C\uE66D\uE66E" +
+        "\uE66F\uE670\uE671\uE672\uE673\uE674\uE675\uE676" +
+        "\uE677\uE678\uE679\uE67A\uE67B\uE67C\uE67D\uE67E" +
+        "\uE67F\uE680\uE681\uE682\uE683\uE684\uE685\uE686" +
+        "\uE687\uE688\uE689\uE68A\uE68B\uE68C\uE68D\uE68E" +
+        "\uE68F\uE690\uE691\uE692\uE693\uE694\uE695\uE696" +
+        "\uE697\uE698\uE699\uE69A\uE69B\uE69C\uE69D\uE69E" +
+        "\uE69F\uE6A0\uE6A1\uE6A2\uE6A3\uE6A4\uE6A5\uE6A6" +
+        "\uE6A7\uE6A8\uE6A9\uE6AA\uE6AB\uE6AC\uE6AD" ,
+        "\uFFFD\uE6AE\uE6AF\uE6B0\uE6B1\uE6B2\uE6B3\uE6B4" +
+        "\uE6B5\uE6B6\uE6B7\uE6B8\uE6B9\uE6BA\uE6BB\uE6BC" +
+        "\uE6BD\uE6BE\uE6BF\uE6C0\uE6C1\uE6C2\uE6C3\uE6C4" +
+        "\uE6C5\uE6C6\uE6C7\uE6C8\uE6C9\uE6CA\uE6CB\uE6CC" +
+        "\uE6CD\uE6CE\uE6CF\uE6D0\uE6D1\uE6D2\uE6D3\uE6D4" +
+        "\uE6D5\uE6D6\uE6D7\uE6D8\uE6D9\uE6DA\uE6DB\uE6DC" +
+        "\uE6DD\uE6DE\uE6DF\uE6E0\uE6E1\uE6E2\uE6E3\uE6E4" +
+        "\uE6E5\uE6E6\uE6E7\uE6E8\uE6E9\uE6EA\uE6EB\uE6EC" +
+        "\uE6ED\uE6EE\uE6EF\uE6F0\uE6F1\uE6F2\uE6F3\uE6F4" +
+        "\uE6F5\uE6F6\uE6F7\uE6F8\uE6F9\uE6FA\uE6FB\uE6FC" +
+        "\uE6FD\uE6FE\uE6FF\uE700\uE701\uE702\uE703\uE704" +
+        "\uE705\uE706\uE707\uE708\uE709\uE70A\uE70B\uE70C" +
+        "\uE70D\uE70E\uE70F\uE710\uE711\uE712\uE713\uE714" +
+        "\uE715\uE716\uE717\uE718\uE719\uE71A\uE71B\uE71C" +
+        "\uE71D\uE71E\uE71F\uE720\uE721\uE722\uE723\uE724" +
+        "\uE725\uE726\uE727\uE728\uE729\uE72A\uE72B\uE72C" +
+        "\uE72D\uE72E\uE72F\uE730\uE731\uE732\uE733\uE734" +
+        "\uE735\uE736\uE737\uE738\uE739\uE73A\uE73B\uE73C" +
+        "\uE73D\uE73E\uE73F\uE740\uE741\uE742\uE743\uE744" +
+        "\uE745\uE746\uE747\uE748\uE749\uE74A\uE74B\uE74C" +
+        "\uE74D\uE74E\uE74F\uE750\uE751\uE752\uE753\uE754" +
+        "\uE755\uE756\uE757\uE758\uE759\uE75A\uE75B\uE75C" +
+        "\uE75D\uE75E\uE75F\uE760\uE761\uE762\uE763\uE764" +
+        "\uE765\uE766\uE767\uE768\uE769\uE76A\uE76B" ,
+        "\uFFFD\uE76C\uE76D\uE76E\uE76F\uE770\uE771\uE772" +
+        "\uE773\uE774\uE775\uE776\uE777\uE778\uE779\uE77A" +
+        "\uE77B\uE77C\uE77D\uE77E\uE77F\uE780\uE781\uE782" +
+        "\uE783\uE784\uE785\uE786\uE787\uE788\uE789\uE78A" +
+        "\uE78B\uE78C\uE78D\uE78E\uE78F\uE790\uE791\uE792" +
+        "\uE793\uE794\uE795\uE796\uE797\uE798\uE799\uE79A" +
+        "\uE79B\uE79C\uE79D\uE79E\uE79F\uE7A0\uE7A1\uE7A2" +
+        "\uE7A3\uE7A4\uE7A5\uE7A6\uE7A7\uE7A8\uE7A9\uE7AA" +
+        "\uE7AB\uE7AC\uE7AD\uE7AE\uE7AF\uE7B0\uE7B1\uE7B2" +
+        "\uE7B3\uE7B4\uE7B5\uE7B6\uE7B7\uE7B8\uE7B9\uE7BA" +
+        "\uE7BB\uE7BC\uE7BD\uE7BE\uE7BF\uE7C0\uE7C1\uE7C2" +
+        "\uE7C3\uE7C4\uE7C5\uE7C6\uE7C7\uE7C8\uE7C9\uE7CA" +
+        "\uE7CB\uE7CC\uE7CD\uE7CE\uE7CF\uE7D0\uE7D1\uE7D2" +
+        "\uE7D3\uE7D4\uE7D5\uE7D6\uE7D7\uE7D8\uE7D9\uE7DA" +
+        "\uE7DB\uE7DC\uE7DD\uE7DE\uE7DF\uE7E0\uE7E1\uE7E2" +
+        "\uE7E3\uE7E4\uE7E5\uE7E6\uE7E7\uE7E8\uE7E9\uE7EA" +
+        "\uE7EB\uE7EC\uE7ED\uE7EE\uE7EF\uE7F0\uE7F1\uE7F2" +
+        "\uE7F3\uE7F4\uE7F5\uE7F6\uE7F7\uE7F8\uE7F9\uE7FA" +
+        "\uE7FB\uE7FC\uE7FD\uE7FE\uE7FF\uE800\uE801\uE802" +
+        "\uE803\uE804\uE805\uE806\uE807\uE808\uE809\uE80A" +
+        "\uE80B\uE80C\uE80D\uE80E\uE80F\uE810\uE811\uE812" +
+        "\uE813\uE814\uE815\uE816\uE817\uE818\uE819\uE81A" +
+        "\uE81B\uE81C\uE81D\uE81E\uE81F\uE820\uE821\uE822" +
+        "\uE823\uE824\uE825\uE826\uE827\uE828\uE829" ,
+        "\uFFFD\uE82A\uE82B\uE82C\uE82D\uE82E\uE82F\uE830" +
+        "\uE831\uE832\uE833\uE834\uE835\uE836\uE837\uE838" +
+        "\uE839\uE83A\uE83B\uE83C\uE83D\uE83E\uE83F\uE840" +
+        "\uE841\uE842\uE843\uE844\uE845\uE846\uE847\uE848" +
+        "\uE849\uE84A\uE84B\uE84C\uE84D\uE84E\uE84F\uE850" +
+        "\uE851\uE852\uE853\uE854\uE855\uE856\uE857\uE858" +
+        "\uE859\uE85A\uE85B\uE85C\uE85D\uE85E\uE85F\uE860" +
+        "\uE861\uE862\uE863\uE864\uE865\uE866\uE867\uE868" +
+        "\uE869\uE86A\uE86B\uE86C\uE86D\uE86E\uE86F\uE870" +
+        "\uE871\uE872\uE873\uE874\uE875\uE876\uE877\uE878" +
+        "\uE879\uE87A\uE87B\uE87C\uE87D\uE87E\uE87F\uE880" +
+        "\uE881\uE882\uE883\uE884\uE885\uE886\uE887\uE888" +
+        "\uE889\uE88A\uE88B\uE88C\uE88D\uE88E\uE88F\uE890" +
+        "\uE891\uE892\uE893\uE894\uE895\uE896\uE897\uE898" +
+        "\uE899\uE89A\uE89B\uE89C\uE89D\uE89E\uE89F\uE8A0" +
+        "\uE8A1\uE8A2\uE8A3\uE8A4\uE8A5\uE8A6\uE8A7\uE8A8" +
+        "\uE8A9\uE8AA\uE8AB\uE8AC\uE8AD\uE8AE\uE8AF\uE8B0" +
+        "\uE8B1\uE8B2\uE8B3\uE8B4\uE8B5\uE8B6\uE8B7\uE8B8" +
+        "\uE8B9\uE8BA\uE8BB\uE8BC\uE8BD\uE8BE\uE8BF\uE8C0" +
+        "\uE8C1\uE8C2\uE8C3\uE8C4\uE8C5\uE8C6\uE8C7\uE8C8" +
+        "\uE8C9\uE8CA\uE8CB\uE8CC\uE8CD\uE8CE\uE8CF\uE8D0" +
+        "\uE8D1\uE8D2\uE8D3\uE8D4\uE8D5\uE8D6\uE8D7\uE8D8" +
+        "\uE8D9\uE8DA\uE8DB\uE8DC\uE8DD\uE8DE\uE8DF\uE8E0" +
+        "\uE8E1\uE8E2\uE8E3\uE8E4\uE8E5\uE8E6\uE8E7" ,
+        "\uFFFD\uE8E8\uE8E9\uE8EA\uE8EB\uE8EC\uE8ED\uE8EE" +
+        "\uE8EF\uE8F0\uE8F1\uE8F2\uE8F3\uE8F4\uE8F5\uE8F6" +
+        "\uE8F7\uE8F8\uE8F9\uE8FA\uE8FB\uE8FC\uE8FD\uE8FE" +
+        "\uE8FF\uE900\uE901\uE902\uE903\uE904\uE905\uE906" +
+        "\uE907\uE908\uE909\uE90A\uE90B\uE90C\uE90D\uE90E" +
+        "\uE90F\uE910\uE911\uE912\uE913\uE914\uE915\uE916" +
+        "\uE917\uE918\uE919\uE91A\uE91B\uE91C\uE91D\uE91E" +
+        "\uE91F\uE920\uE921\uE922\uE923\uE924\uE925\uE926" +
+        "\uE927\uE928\uE929\uE92A\uE92B\uE92C\uE92D\uE92E" +
+        "\uE92F\uE930\uE931\uE932\uE933\uE934\uE935\uE936" +
+        "\uE937\uE938\uE939\uE93A\uE93B\uE93C\uE93D\uE93E" +
+        "\uE93F\uE940\uE941\uE942\uE943\uE944\uE945\uE946" +
+        "\uE947\uE948\uE949\uE94A\uE94B\uE94C\uE94D\uE94E" +
+        "\uE94F\uE950\uE951\uE952\uE953\uE954\uE955\uE956" +
+        "\uE957\uE958\uE959\uE95A\uE95B\uE95C\uE95D\uE95E" +
+        "\uE95F\uE960\uE961\uE962\uE963\uE964\uE965\uE966" +
+        "\uE967\uE968\uE969\uE96A\uE96B\uE96C\uE96D\uE96E" +
+        "\uE96F\uE970\uE971\uE972\uE973\uE974\uE975\uE976" +
+        "\uE977\uE978\uE979\uE97A\uE97B\uE97C\uE97D\uE97E" +
+        "\uE97F\uE980\uE981\uE982\uE983\uE984\uE985\uE986" +
+        "\uE987\uE988\uE989\uE98A\uE98B\uE98C\uE98D\uE98E" +
+        "\uE98F\uE990\uE991\uE992\uE993\uE994\uE995\uE996" +
+        "\uE997\uE998\uE999\uE99A\uE99B\uE99C\uE99D\uE99E" +
+        "\uE99F\uE9A0\uE9A1\uE9A2\uE9A3\uE9A4\uE9A5" ,
+        "\uFFFD\uE9A6\uE9A7\uE9A8\uE9A9\uE9AA\uE9AB\uE9AC" +
+        "\uE9AD\uE9AE\uE9AF\uE9B0\uE9B1\uE9B2\uE9B3\uE9B4" +
+        "\uE9B5\uE9B6\uE9B7\uE9B8\uE9B9\uE9BA\uE9BB\uE9BC" +
+        "\uE9BD\uE9BE\uE9BF\uE9C0\uE9C1\uE9C2\uE9C3\uE9C4" +
+        "\uE9C5\uE9C6\uE9C7\uE9C8\uE9C9\uE9CA\uE9CB\uE9CC" +
+        "\uE9CD\uE9CE\uE9CF\uE9D0\uE9D1\uE9D2\uE9D3\uE9D4" +
+        "\uE9D5\uE9D6\uE9D7\uE9D8\uE9D9\uE9DA\uE9DB\uE9DC" +
+        "\uE9DD\uE9DE\uE9DF\uE9E0\uE9E1\uE9E2\uE9E3\uE9E4" +
+        "\uE9E5\uE9E6\uE9E7\uE9E8\uE9E9\uE9EA\uE9EB\uE9EC" +
+        "\uE9ED\uE9EE\uE9EF\uE9F0\uE9F1\uE9F2\uE9F3\uE9F4" +
+        "\uE9F5\uE9F6\uE9F7\uE9F8\uE9F9\uE9FA\uE9FB\uE9FC" +
+        "\uE9FD\uE9FE\uE9FF\uEA00\uEA01\uEA02\uEA03\uEA04" +
+        "\uEA05\uEA06\uEA07\uEA08\uEA09\uEA0A\uEA0B\uEA0C" +
+        "\uEA0D\uEA0E\uEA0F\uEA10\uEA11\uEA12\uEA13\uEA14" +
+        "\uEA15\uEA16\uEA17\uEA18\uEA19\uEA1A\uEA1B\uEA1C" +
+        "\uEA1D\uEA1E\uEA1F\uEA20\uEA21\uEA22\uEA23\uEA24" +
+        "\uEA25\uEA26\uEA27\uEA28\uEA29\uEA2A\uEA2B\uEA2C" +
+        "\uEA2D\uEA2E\uEA2F\uEA30\uEA31\uEA32\uEA33\uEA34" +
+        "\uEA35\uEA36\uEA37\uEA38\uEA39\uEA3A\uEA3B\uEA3C" +
+        "\uEA3D\uEA3E\uEA3F\uEA40\uEA41\uEA42\uEA43\uEA44" +
+        "\uEA45\uEA46\uEA47\uEA48\uEA49\uEA4A\uEA4B\uEA4C" +
+        "\uEA4D\uEA4E\uEA4F\uEA50\uEA51\uEA52\uEA53\uEA54" +
+        "\uEA55\uEA56\uEA57\uEA58\uEA59\uEA5A\uEA5B\uEA5C" +
+        "\uEA5D\uEA5E\uEA5F\uEA60\uEA61\uEA62\uEA63" ,
+        "\uFFFD\uEA64\uEA65\uEA66\uEA67\uEA68\uEA69\uEA6A" +
+        "\uEA6B\uEA6C\uEA6D\uEA6E\uEA6F\uEA70\uEA71\uEA72" +
+        "\uEA73\uEA74\uEA75\uEA76\uEA77\uEA78\uEA79\uEA7A" +
+        "\uEA7B\uEA7C\uEA7D\uEA7E\uEA7F\uEA80\uEA81\uEA82" +
+        "\uEA83\uEA84\uEA85\uEA86\uEA87\uEA88\uEA89\uEA8A" +
+        "\uEA8B\uEA8C\uEA8D\uEA8E\uEA8F\uEA90\uEA91\uEA92" +
+        "\uEA93\uEA94\uEA95\uEA96\uEA97\uEA98\uEA99\uEA9A" +
+        "\uEA9B\uEA9C\uEA9D\uEA9E\uEA9F\uEAA0\uEAA1\uEAA2" +
+        "\uEAA3\uEAA4\uEAA5\uEAA6\uEAA7\uEAA8\uEAA9\uEAAA" +
+        "\uEAAB\uEAAC\uEAAD\uEAAE\uEAAF\uEAB0\uEAB1\uEAB2" +
+        "\uEAB3\uEAB4\uEAB5\uEAB6\uEAB7\uEAB8\uEAB9\uEABA" +
+        "\uEABB\uEABC\uEABD\uEABE\uEABF\uEAC0\uEAC1\uEAC2" +
+        "\uEAC3\uEAC4\uEAC5\uEAC6\uEAC7\uEAC8\uEAC9\uEACA" +
+        "\uEACB\uEACC\uEACD\uEACE\uEACF\uEAD0\uEAD1\uEAD2" +
+        "\uEAD3\uEAD4\uEAD5\uEAD6\uEAD7\uEAD8\uEAD9\uEADA" +
+        "\uEADB\uEADC\uEADD\uEADE\uEADF\uEAE0\uEAE1\uEAE2" +
+        "\uEAE3\uEAE4\uEAE5\uEAE6\uEAE7\uEAE8\uEAE9\uEAEA" +
+        "\uEAEB\uEAEC\uEAED\uEAEE\uEAEF\uEAF0\uEAF1\uEAF2" +
+        "\uEAF3\uEAF4\uEAF5\uEAF6\uEAF7\uEAF8\uEAF9\uEAFA" +
+        "\uEAFB\uEAFC\uEAFD\uEAFE\uEAFF\uEB00\uEB01\uEB02" +
+        "\uEB03\uEB04\uEB05\uEB06\uEB07\uEB08\uEB09\uEB0A" +
+        "\uEB0B\uEB0C\uEB0D\uEB0E\uEB0F\uEB10\uEB11\uEB12" +
+        "\uEB13\uEB14\uEB15\uEB16\uEB17\uEB18\uEB19\uEB1A" +
+        "\uEB1B\uEB1C\uEB1D\uEB1E\uEB1F\uEB20\uEB21" ,
+        "\uFFFD\uEB22\uEB23\uEB24\uEB25\uEB26\uEB27\uEB28" +
+        "\uEB29\uEB2A\uEB2B\uEB2C\uEB2D\uEB2E\uEB2F\uEB30" +
+        "\uEB31\uEB32\uEB33\uEB34\uEB35\uEB36\uEB37\uEB38" +
+        "\uEB39\uEB3A\uEB3B\uEB3C\uEB3D\uEB3E\uEB3F\uEB40" +
+        "\uEB41\uEB42\uEB43\uEB44\uEB45\uEB46\uEB47\uEB48" +
+        "\uEB49\uEB4A\uEB4B\uEB4C\uEB4D\uEB4E\uEB4F\uEB50" +
+        "\uEB51\uEB52\uEB53\uEB54\uEB55\uEB56\uEB57\uEB58" +
+        "\uEB59\uEB5A\uEB5B\uEB5C\uEB5D\uEB5E\uEB5F\uEB60" +
+        "\uEB61\uEB62\uEB63\uEB64\uEB65\uEB66\uEB67\uEB68" +
+        "\uEB69\uEB6A\uEB6B\uEB6C\uEB6D\uEB6E\uEB6F\uEB70" +
+        "\uEB71\uEB72\uEB73\uEB74\uEB75\uEB76\uEB77\uEB78" +
+        "\uEB79\uEB7A\uEB7B\uEB7C\uEB7D\uEB7E\uEB7F\uEB80" +
+        "\uEB81\uEB82\uEB83\uEB84\uEB85\uEB86\uEB87\uEB88" +
+        "\uEB89\uEB8A\uEB8B\uEB8C\uEB8D\uEB8E\uEB8F\uEB90" +
+        "\uEB91\uEB92\uEB93\uEB94\uEB95\uEB96\uEB97\uEB98" +
+        "\uEB99\uEB9A\uEB9B\uEB9C\uEB9D\uEB9E\uEB9F\uEBA0" +
+        "\uEBA1\uEBA2\uEBA3\uEBA4\uEBA5\uEBA6\uEBA7\uEBA8" +
+        "\uEBA9\uEBAA\uEBAB\uEBAC\uEBAD\uEBAE\uEBAF\uEBB0" +
+        "\uEBB1\uEBB2\uEBB3\uEBB4\uEBB5\uEBB6\uEBB7\uEBB8" +
+        "\uEBB9\uEBBA\uEBBB\uEBBC\uEBBD\uEBBE\uEBBF\uEBC0" +
+        "\uEBC1\uEBC2\uEBC3\uEBC4\uEBC5\uEBC6\uEBC7\uEBC8" +
+        "\uEBC9\uEBCA\uEBCB\uEBCC\uEBCD\uEBCE\uEBCF\uEBD0" +
+        "\uEBD1\uEBD2\uEBD3\uEBD4\uEBD5\uEBD6\uEBD7\uEBD8" +
+        "\uEBD9\uEBDA\uEBDB\uEBDC\uEBDD\uEBDE\uEBDF" ,
+        "\uFFFD\uEBE0\uEBE1\uEBE2\uEBE3\uEBE4\uEBE5\uEBE6" +
+        "\uEBE7\uEBE8\uEBE9\uEBEA\uEBEB\uEBEC\uEBED\uEBEE" +
+        "\uEBEF\uEBF0\uEBF1\uEBF2\uEBF3\uEBF4\uEBF5\uEBF6" +
+        "\uEBF7\uEBF8\uEBF9\uEBFA\uEBFB\uEBFC\uEBFD\uEBFE" +
+        "\uEBFF\uEC00\uEC01\uEC02\uEC03\uEC04\uEC05\uEC06" +
+        "\uEC07\uEC08\uEC09\uEC0A\uEC0B\uEC0C\uEC0D\uEC0E" +
+        "\uEC0F\uEC10\uEC11\uEC12\uEC13\uEC14\uEC15\uEC16" +
+        "\uEC17\uEC18\uEC19\uEC1A\uEC1B\uEC1C\uEC1D\uEC1E" +
+        "\uEC1F\uEC20\uEC21\uEC22\uEC23\uEC24\uEC25\uEC26" +
+        "\uEC27\uEC28\uEC29\uEC2A\uEC2B\uEC2C\uEC2D\uEC2E" +
+        "\uEC2F\uEC30\uEC31\uEC32\uEC33\uEC34\uEC35\uEC36" +
+        "\uEC37\uEC38\uEC39\uEC3A\uEC3B\uEC3C\uEC3D\uEC3E" +
+        "\uEC3F\uEC40\uEC41\uEC42\uEC43\uEC44\uEC45\uEC46" +
+        "\uEC47\uEC48\uEC49\uEC4A\uEC4B\uEC4C\uEC4D\uEC4E" +
+        "\uEC4F\uEC50\uEC51\uEC52\uEC53\uEC54\uEC55\uEC56" +
+        "\uEC57\uEC58\uEC59\uEC5A\uEC5B\uEC5C\uEC5D\uEC5E" +
+        "\uEC5F\uEC60\uEC61\uEC62\uEC63\uEC64\uEC65\uEC66" +
+        "\uEC67\uEC68\uEC69\uEC6A\uEC6B\uEC6C\uEC6D\uEC6E" +
+        "\uEC6F\uEC70\uEC71\uEC72\uEC73\uEC74\uEC75\uEC76" +
+        "\uEC77\uEC78\uEC79\uEC7A\uEC7B\uEC7C\uEC7D\uEC7E" +
+        "\uEC7F\uEC80\uEC81\uEC82\uEC83\uEC84\uEC85\uEC86" +
+        "\uEC87\uEC88\uEC89\uEC8A\uEC8B\uEC8C\uEC8D\uEC8E" +
+        "\uEC8F\uEC90\uEC91\uEC92\uEC93\uEC94\uEC95\uEC96" +
+        "\uEC97\uEC98\uEC99\uEC9A\uEC9B\uEC9C\uEC9D" ,
+        "\uFFFD\uEC9E\uEC9F\uECA0\uECA1\uECA2\uECA3\uECA4" +
+        "\uECA5\uECA6\uECA7\uECA8\uECA9\uECAA\uECAB\uECAC" +
+        "\uECAD\uECAE\uECAF\uECB0\uECB1\uECB2\uECB3\uECB4" +
+        "\uECB5\uECB6\uECB7\uECB8\uECB9\uECBA\uECBB\uECBC" +
+        "\uECBD\uECBE\uECBF\uECC0\uECC1\uECC2\uECC3\uECC4" +
+        "\uECC5\uECC6\uECC7\uECC8\uECC9\uECCA\uECCB\uECCC" +
+        "\uECCD\uECCE\uECCF\uECD0\uECD1\uECD2\uECD3\uECD4" +
+        "\uECD5\uECD6\uECD7\uECD8\uECD9\uECDA\uECDB\uECDC" +
+        "\uECDD\uECDE\uECDF\uECE0\uECE1\uECE2\uECE3\uECE4" +
+        "\uECE5\uECE6\uECE7\uECE8\uECE9\uECEA\uECEB\uECEC" +
+        "\uECED\uECEE\uECEF\uECF0\uECF1\uECF2\uECF3\uECF4" +
+        "\uECF5\uECF6\uECF7\uECF8\uECF9\uECFA\uECFB\uECFC" +
+        "\uECFD\uECFE\uECFF\uED00\uED01\uED02\uED03\uED04" +
+        "\uED05\uED06\uED07\uED08\uED09\uED0A\uED0B\uED0C" +
+        "\uED0D\uED0E\uED0F\uED10\uED11\uED12\uED13\uED14" +
+        "\uED15\uED16\uED17\uED18\uED19\uED1A\uED1B\uED1C" +
+        "\uED1D\uED1E\uED1F\uED20\uED21\uED22\uED23\uED24" +
+        "\uED25\uED26\uED27\uED28\uED29\uED2A\uED2B\uED2C" +
+        "\uED2D\uED2E\uED2F\uED30\uED31\uED32\uED33\uED34" +
+        "\uED35\uED36\uED37\uED38\uED39\uED3A\uED3B\uED3C" +
+        "\uED3D\uED3E\uED3F\uED40\uED41\uED42\uED43\uED44" +
+        "\uED45\uED46\uED47\uED48\uED49\uED4A\uED4B\uED4C" +
+        "\uED4D\uED4E\uED4F\uED50\uED51\uED52\uED53\uED54" +
+        "\uED55\uED56\uED57\uED58\uED59\uED5A\uED5B" ,
+        "\uFFFD\uED5C\uED5D\uED5E\uED5F\uED60\uED61\uED62" +
+        "\uED63\uED64\uED65\uED66\uED67\uED68\uED69\uED6A" +
+        "\uED6B\uED6C\uED6D\uED6E\uED6F\uED70\uED71\uED72" +
+        "\uED73\uED74\uED75\uED76\uED77\uED78\uED79\uED7A" +
+        "\uED7B\uED7C\uED7D\uED7E\uED7F\uED80\uED81\uED82" +
+        "\uED83\uED84\uED85\uED86\uED87\uED88\uED89\uED8A" +
+        "\uED8B\uED8C\uED8D\uED8E\uED8F\uED90\uED91\uED92" +
+        "\uED93\uED94\uED95\uED96\uED97\uED98\uED99\uED9A" +
+        "\uED9B\uED9C\uED9D\uED9E\uED9F\uEDA0\uEDA1\uEDA2" +
+        "\uEDA3\uEDA4\uEDA5\uEDA6\uEDA7\uEDA8\uEDA9\uEDAA" +
+        "\uEDAB\uEDAC\uEDAD\uEDAE\uEDAF\uEDB0\uEDB1\uEDB2" +
+        "\uEDB3\uEDB4\uEDB5\uEDB6\uEDB7\uEDB8\uEDB9\uEDBA" +
+        "\uEDBB\uEDBC\uEDBD\uEDBE\uEDBF\uEDC0\uEDC1\uEDC2" +
+        "\uEDC3\uEDC4\uEDC5\uEDC6\uEDC7\uEDC8\uEDC9\uEDCA" +
+        "\uEDCB\uEDCC\uEDCD\uEDCE\uEDCF\uEDD0\uEDD1\uEDD2" +
+        "\uEDD3\uEDD4\uEDD5\uEDD6\uEDD7\uEDD8\uEDD9\uEDDA" +
+        "\uEDDB\uEDDC\uEDDD\uEDDE\uEDDF\uEDE0\uEDE1\uEDE2" +
+        "\uEDE3\uEDE4\uEDE5\uEDE6\uEDE7\uEDE8\uEDE9\uEDEA" +
+        "\uEDEB\uEDEC\uEDED\uEDEE\uEDEF\uEDF0\uEDF1\uEDF2" +
+        "\uEDF3\uEDF4\uEDF5\uEDF6\uEDF7\uEDF8\uEDF9\uEDFA" +
+        "\uEDFB\uEDFC\uEDFD\uEDFE\uEDFF\uEE00\uEE01\uEE02" +
+        "\uEE03\uEE04\uEE05\uEE06\uEE07\uEE08\uEE09\uEE0A" +
+        "\uEE0B\uEE0C\uEE0D\uEE0E\uEE0F\uEE10\uEE11\uEE12" +
+        "\uEE13\uEE14\uEE15\uEE16\uEE17\uEE18\uEE19" ,
+        "\uFFFD\uEE1A\uEE1B\uEE1C\uEE1D\uEE1E\uEE1F\uEE20" +
+        "\uEE21\uEE22\uEE23\uEE24\uEE25\uEE26\uEE27\uEE28" +
+        "\uEE29\uEE2A\uEE2B\uEE2C\uEE2D\uEE2E\uEE2F\uEE30" +
+        "\uEE31\uEE32\uEE33\uEE34\uEE35\uEE36\uEE37\uEE38" +
+        "\uEE39\uEE3A\uEE3B\uEE3C\uEE3D\uEE3E\uEE3F\uEE40" +
+        "\uEE41\uEE42\uEE43\uEE44\uEE45\uEE46\uEE47\uEE48" +
+        "\uEE49\uEE4A\uEE4B\uEE4C\uEE4D\uEE4E\uEE4F\uEE50" +
+        "\uEE51\uEE52\uEE53\uEE54\uEE55\uEE56\uEE57\uEE58" +
+        "\uEE59\uEE5A\uEE5B\uEE5C\uEE5D\uEE5E\uEE5F\uEE60" +
+        "\uEE61\uEE62\uEE63\uEE64\uEE65\uEE66\uEE67\uEE68" +
+        "\uEE69\uEE6A\uEE6B\uEE6C\uEE6D\uEE6E\uEE6F\uEE70" +
+        "\uEE71\uEE72\uEE73\uEE74\uEE75\uEE76\uEE77\uEE78" +
+        "\uEE79\uEE7A\uEE7B\uEE7C\uEE7D\uEE7E\uEE7F\uEE80" +
+        "\uEE81\uEE82\uEE83\uEE84\uEE85\uEE86\uEE87\uEE88" +
+        "\uEE89\uEE8A\uEE8B\uEE8C\uEE8D\uEE8E\uEE8F\uEE90" +
+        "\uEE91\uEE92\uEE93\uEE94\uEE95\uEE96\uEE97\uEE98" +
+        "\uEE99\uEE9A\uEE9B\uEE9C\uEE9D\uEE9E\uEE9F\uEEA0" +
+        "\uEEA1\uEEA2\uEEA3\uEEA4\uEEA5\uEEA6\uEEA7\uEEA8" +
+        "\uEEA9\uEEAA\uEEAB\uEEAC\uEEAD\uEEAE\uEEAF\uEEB0" +
+        "\uEEB1\uEEB2\uEEB3\uEEB4\uEEB5\uEEB6\uEEB7\uEEB8" +
+        "\uEEB9\uEEBA\uEEBB\uEEBC\uEEBD\uEEBE\uEEBF\uEEC0" +
+        "\uEEC1\uEEC2\uEEC3\uEEC4\uEEC5\uEEC6\uEEC7\uEEC8" +
+        "\uEEC9\uEECA\uEECB\uEECC\uEECD\uEECE\uEECF\uEED0" +
+        "\uEED1\uEED2\uEED3\uEED4\uEED5\uEED6\uEED7" ,
+        "\uFFFD\uEED8\uEED9\uEEDA\uEEDB\uEEDC\uEEDD\uEEDE" +
+        "\uEEDF\uEEE0\uEEE1\uEEE2\uEEE3\uEEE4\uEEE5\uEEE6" +
+        "\uEEE7\uEEE8\uEEE9\uEEEA\uEEEB\uEEEC\uEEED\uEEEE" +
+        "\uEEEF\uEEF0\uEEF1\uEEF2\uEEF3\uEEF4\uEEF5\uEEF6" +
+        "\uEEF7\uEEF8\uEEF9\uEEFA\uEEFB\uEEFC\uEEFD\uEEFE" +
+        "\uEEFF\uEF00\uEF01\uEF02\uEF03\uEF04\uEF05\uEF06" +
+        "\uEF07\uEF08\uEF09\uEF0A\uEF0B\uEF0C\uEF0D\uEF0E" +
+        "\uEF0F\uEF10\uEF11\uEF12\uEF13\uEF14\uEF15\uEF16" +
+        "\uEF17\uEF18\uEF19\uEF1A\uEF1B\uEF1C\uEF1D\uEF1E" +
+        "\uEF1F\uEF20\uEF21\uEF22\uEF23\uEF24\uEF25\uEF26" +
+        "\uEF27\uEF28\uEF29\uEF2A\uEF2B\uEF2C\uEF2D\uEF2E" +
+        "\uEF2F\uEF30\uEF31\uEF32\uEF33\uEF34\uEF35\uEF36" +
+        "\uEF37\uEF38\uEF39\uEF3A\uEF3B\uEF3C\uEF3D\uEF3E" +
+        "\uEF3F\uEF40\uEF41\uEF42\uEF43\uEF44\uEF45\uEF46" +
+        "\uEF47\uEF48\uEF49\uEF4A\uEF4B\uEF4C\uEF4D\uEF4E" +
+        "\uEF4F\uEF50\uEF51\uEF52\uEF53\uEF54\uEF55\uEF56" +
+        "\uEF57\uEF58\uEF59\uEF5A\uEF5B\uEF5C\uEF5D\uEF5E" +
+        "\uEF5F\uEF60\uEF61\uEF62\uEF63\uEF64\uEF65\uEF66" +
+        "\uEF67\uEF68\uEF69\uEF6A\uEF6B\uEF6C\uEF6D\uEF6E" +
+        "\uEF6F\uEF70\uEF71\uEF72\uEF73\uEF74\uEF75\uEF76" +
+        "\uEF77\uEF78\uEF79\uEF7A\uEF7B\uEF7C\uEF7D\uEF7E" +
+        "\uEF7F\uEF80\uEF81\uEF82\uEF83\uEF84\uEF85\uEF86" +
+        "\uEF87\uEF88\uEF89\uEF8A\uEF8B\uEF8C\uEF8D\uEF8E" +
+        "\uEF8F\uEF90\uEF91\uEF92\uEF93\uEF94\uEF95" ,
+        "\uFFFD\uEF96\uEF97\uEF98\uEF99\uEF9A\uEF9B\uEF9C" +
+        "\uEF9D\uEF9E\uEF9F\uEFA0\uEFA1\uEFA2\uEFA3\uEFA4" +
+        "\uEFA5\uEFA6\uEFA7\uEFA8\uEFA9\uEFAA\uEFAB\uEFAC" +
+        "\uEFAD\uEFAE\uEFAF\uEFB0\uEFB1\uEFB2\uEFB3\uEFB4" +
+        "\uEFB5\uEFB6\uEFB7\uEFB8\uEFB9\uEFBA\uEFBB\uEFBC" +
+        "\uEFBD\uEFBE\uEFBF\uEFC0\uEFC1\uEFC2\uEFC3\uEFC4" +
+        "\uEFC5\uEFC6\uEFC7\uEFC8\uEFC9\uEFCA\uEFCB\uEFCC" +
+        "\uEFCD\uEFCE\uEFCF\uEFD0\uEFD1\uEFD2\uEFD3\uEFD4" +
+        "\uEFD5\uEFD6\uEFD7\uEFD8\uEFD9\uEFDA\uEFDB\uEFDC" +
+        "\uEFDD\uEFDE\uEFDF\uEFE0\uEFE1\uEFE2\uEFE3\uEFE4" +
+        "\uEFE5\uEFE6\uEFE7\uEFE8\uEFE9\uEFEA\uEFEB\uEFEC" +
+        "\uEFED\uEFEE\uEFEF\uEFF0\uEFF1\uEFF2\uEFF3\uEFF4" +
+        "\uEFF5\uEFF6\uEFF7\uEFF8\uEFF9\uEFFA\uEFFB\uEFFC" +
+        "\uEFFD\uEFFE\uEFFF\uF000\uF001\uF002\uF003\uF004" +
+        "\uF005\uF006\uF007\uF008\uF009\uF00A\uF00B\uF00C" +
+        "\uF00D\uF00E\uF00F\uF010\uF011\uF012\uF013\uF014" +
+        "\uF015\uF016\uF017\uF018\uF019\uF01A\uF01B\uF01C" +
+        "\uF01D\uF01E\uF01F\uF020\uF021\uF022\uF023\uF024" +
+        "\uF025\uF026\uF027\uF028\uF029\uF02A\uF02B\uF02C" +
+        "\uF02D\uF02E\uF02F\uF030\uF031\uF032\uF033\uF034" +
+        "\uF035\uF036\uF037\uF038\uF039\uF03A\uF03B\uF03C" +
+        "\uF03D\uF03E\uF03F\uF040\uF041\uF042\uF043\uF044" +
+        "\uF045\uF046\uF047\uF048\uF049\uF04A\uF04B\uF04C" +
+        "\uF04D\uF04E\uF04F\uF050\uF051\uF052\uF053" ,
+        "\uFFFD\uF054\uF055\uF056\uF057\uF058\uF059\uF05A" +
+        "\uF05B\uF05C\uF05D\uF05E\uF05F\uF060\uF061\uF062" +
+        "\uF063\uF064\uF065\uF066\uF067\uF068\uF069\uF06A" +
+        "\uF06B\uF06C\uF06D\uF06E\uF06F\uF070\uF071\uF072" +
+        "\uF073\uF074\uF075\uF076\uF077\uF078\uF079\uF07A" +
+        "\uF07B\uF07C\uF07D\uF07E\uF07F\uF080\uF081\uF082" +
+        "\uF083\uF084\uF085\uF086\uF087\uF088\uF089\uF08A" +
+        "\uF08B\uF08C\uF08D\uF08E\uF08F\uF090\uF091\uF092" +
+        "\uF093\uF094\uF095\uF096\uF097\uF098\uF099\uF09A" +
+        "\uF09B\uF09C\uF09D\uF09E\uF09F\uF0A0\uF0A1\uF0A2" +
+        "\uF0A3\uF0A4\uF0A5\uF0A6\uF0A7\uF0A8\uF0A9\uF0AA" +
+        "\uF0AB\uF0AC\uF0AD\uF0AE\uF0AF\uF0B0\uF0B1\uF0B2" +
+        "\uF0B3\uF0B4\uF0B5\uF0B6\uF0B7\uF0B8\uF0B9\uF0BA" +
+        "\uF0BB\uF0BC\uF0BD\uF0BE\uF0BF\uF0C0\uF0C1\uF0C2" +
+        "\uF0C3\uF0C4\uF0C5\uF0C6\uF0C7\uF0C8\uF0C9\uF0CA" +
+        "\uF0CB\uF0CC\uF0CD\uF0CE\uF0CF\uF0D0\uF0D1\uF0D2" +
+        "\uF0D3\uF0D4\uF0D5\uF0D6\uF0D7\uF0D8\uF0D9\uF0DA" +
+        "\uF0DB\uF0DC\uF0DD\uF0DE\uF0DF\uF0E0\uF0E1\uF0E2" +
+        "\uF0E3\uF0E4\uF0E5\uF0E6\uF0E7\uF0E8\uF0E9\uF0EA" +
+        "\uF0EB\uF0EC\uF0ED\uF0EE\uF0EF\uF0F0\uF0F1\uF0F2" +
+        "\uF0F3\uF0F4\uF0F5\uF0F6\uF0F7\uF0F8\uF0F9\uF0FA" +
+        "\uF0FB\uF0FC\uF0FD\uF0FE\uF0FF\uF100\uF101\uF102" +
+        "\uF103\uF104\uF105\uF106\uF107\uF108\uF109\uF10A" +
+        "\uF10B\uF10C\uF10D\uF10E\uF10F\uF110\uF111" ,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+        };
+
+    static char[][] b2c = new char[b2cStr.length][];
+    private static volatile boolean b2cInitialized = false;
+
+    static void initb2c() {
+        if (b2cInitialized)
+            return;
+        synchronized (b2c) {
+            if (b2cInitialized)
+                return;
+            for (int i = 0; i < b2cStr.length; i++) {
+                if (b2cStr[i] == null)
+                    b2c[i] = DoubleByte.B2C_UNMAPPABLE;
+                else
+                    b2c[i] = b2cStr[i].toCharArray();
+            }
+            b2cInitialized = true;
+        }
+    }
+
+    static char[] c2b = new char[0x7400];
+    static char[] c2bIndex = new char[0x100];
+    private static volatile boolean c2bInitialized = false;
+
+    static void initc2b() {
+        if (c2bInitialized)
+            return;
+        synchronized (c2b) {
+            if (c2bInitialized)
+                return;
+            String b2cNR = null;
+            String c2bNR =
+        "\u4260\u2212\u426A\u00A6\u43A1\u301C\u444A\u2014" +
+        "\u446E\uF86F\u447C\u2016\u4C7D\u9E7C\u4EB3\u9830" +
+        "\u4F5E\u5861\u507F\u91AC\u5190\u56CA\u51F1\u6805" +
+        "\u51FA\u91B1\u5261\u9EB4\u52A1\u881F\u52C9\u840A" +
+        "\u52DA\u7E61\u52EC\u4FE0\u5353\u8EC0\u5373\u7E6B" +
+        "\u53B3\u8346\u53DA\u9A52\u53E8\u87EC\u53EE\u7130" +
+        "\u53F8\u8523\u5443\u5C5B\u5464\u9DD7\u547D\u5699" +
+        "\u5481\u525D\u54A3\u6414\u54A4\u7626\u54CA\u7C1E" +
+        "\u54CD\u6451\u54D4\u555E\u54FA\u6F51\u5550\u7006" +
+        "\u5553\u79B1\u555F\u9EB5\u55C0\u5C62\u55C1\u985A" +
+        "\u5B72\u6522\u5BFE\u688E\u60F1\u7E48\u61B0\u8141" +
+        "\u66C8\u9839" ;
+
+            DoubleByte.Encoder.initC2B(b2cStr, b2cSBStr, b2cNR, c2bNR,
+                                       0x40, 0xfe,
+                                       c2b, c2bIndex);
+            c2bInitialized = true;
+        }
+    }
+}
--- a/src/share/classes/sun/reflect/misc/ReflectUtil.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/sun/reflect/misc/ReflectUtil.java	Tue Oct 01 14:22:36 2013 -0700
@@ -26,8 +26,10 @@
 
 package sun.reflect.misc;
 
+import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
 import java.lang.reflect.Proxy;
+import java.util.Arrays;
 import sun.reflect.Reflection;
 
 public final class ReflectUtil {
@@ -249,4 +251,50 @@
         String pkg = (i != -1) ? name.substring(0, i) : "";
         return Proxy.isProxyClass(cls) && !pkg.equals(PROXY_PACKAGE);
     }
+
+    /**
+     * Check if the given method is a method declared in the proxy interface
+     * implemented by the given proxy instance.
+     *
+     * @param proxy a proxy instance
+     * @param method an interface method dispatched to a InvocationHandler
+     *
+     * @throws IllegalArgumentException if the given proxy or method is invalid.
+     */
+    public static void checkProxyMethod(Object proxy, Method method) {
+        // check if it is a valid proxy instance
+        if (proxy == null || !Proxy.isProxyClass(proxy.getClass())) {
+            throw new IllegalArgumentException("Not a Proxy instance");
 }
+        if (Modifier.isStatic(method.getModifiers())) {
+            throw new IllegalArgumentException("Can't handle static method");
+        }
+
+        Class<?> c = method.getDeclaringClass();
+        if (c == Object.class) {
+            String name = method.getName();
+            if (name.equals("hashCode") || name.equals("equals") || name.equals("toString")) {
+                return;
+            }
+        }
+
+        if (isSuperInterface(proxy.getClass(), c)) {
+            return;
+        }
+
+        // disallow any method not declared in one of the proxy intefaces
+        throw new IllegalArgumentException("Can't handle: " + method);
+    }
+
+    private static boolean isSuperInterface(Class<?> c, Class<?> intf) {
+        for (Class<?> i : c.getInterfaces()) {
+            if (i == intf) {
+                return true;
+            }
+            if (isSuperInterface(i, intf)) {
+                return true;
+            }
+        }
+        return false;
+    }
+}
--- a/src/share/classes/sun/security/ec/ECPrivateKeyImpl.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/sun/security/ec/ECPrivateKeyImpl.java	Tue Oct 01 14:22:36 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2006, 2013 Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -153,12 +153,4 @@
             throw new InvalidKeyException("Invalid EC private key", e);
         }
     }
-
-    // return a string representation of this key for debugging
-    public String toString() {
-        return "Sun EC private key, " + params.getCurve().getField().getFieldSize()
-            + " bits\n  private value:  "
-            + s + "\n  parameters: " + params;
-    }
-
 }
--- a/src/share/classes/sun/security/jgss/GSSCredentialImpl.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/sun/security/jgss/GSSCredentialImpl.java	Tue Oct 01 14:22:36 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -630,7 +630,7 @@
                 buffer.append(element.isAcceptorCredential() ?
                               " Accept" : "");
                 buffer.append(" [");
-                buffer.append(element.toString());
+                buffer.append(element.getClass());
                 buffer.append(']');
             } catch (GSSException e) {
                 // skip to next element
--- a/src/share/classes/sun/security/krb5/KdcComm.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/sun/security/krb5/KdcComm.java	Tue Oct 01 14:22:36 2013 -0700
@@ -239,11 +239,15 @@
                 savedException = e;
             }
         }
-        if (ibuf == null && savedException != null) {
-            if (savedException instanceof IOException) {
-                throw (IOException) savedException;
+        if (ibuf == null) {
+            if (savedException != null) {
+                if (savedException instanceof IOException) {
+                    throw (IOException) savedException;
+                } else {
+                    throw (KrbException) savedException;
+                }
             } else {
-                throw (KrbException) savedException;
+                throw new IOException("Cannot get a KDC reply");
             }
         }
         return ibuf;
--- a/src/share/classes/sun/security/krb5/internal/NetClient.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/sun/security/krb5/internal/NetClient.java	Tue Oct 01 14:22:36 2013 -0700
@@ -31,6 +31,8 @@
 
 package sun.security.krb5.internal;
 
+import sun.misc.IOUtils;
+
 import java.io.*;
 import java.net.*;
 
@@ -102,17 +104,15 @@
             return null;
         }
 
-        byte data[] = new byte[len];
-        count = readFully(data, len);
-        if (count != len) {
+        try {
+            return IOUtils.readFully(in, len, true);
+        } catch (IOException ioe) {
             if (Krb5.DEBUG) {
                 System.out.println(
                     ">>>DEBUG: TCPClient could not read complete packet (" +
                     len + "/" + count + ")");
             }
             return null;
-        } else {
-            return data;
         }
     }
 
--- a/src/share/classes/sun/security/pkcs/PKCS8Key.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/sun/security/pkcs/PKCS8Key.java	Tue Oct 01 14:22:36 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 2004, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -304,17 +304,6 @@
         return encodedKey.clone();
     }
 
-    /*
-     * Returns a printable representation of the key
-     */
-    public String toString ()
-    {
-        HexDumpEncoder  encoder = new HexDumpEncoder ();
-
-        return "algorithm = " + algid.toString ()
-            + ", unparsed keybits = \n" + encoder.encodeBuffer (key);
-    }
-
     /**
      * Initialize an PKCS8Key object from an input stream.  The data
      * on that input stream must be encoded using DER, obeying the
--- a/src/share/classes/sun/security/pkcs11/P11Key.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/sun/security/pkcs11/P11Key.java	Tue Oct 01 14:22:36 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -542,27 +542,6 @@
             fetchValues();
             return coeff;
         }
-        public String toString() {
-            fetchValues();
-            StringBuilder sb = new StringBuilder(super.toString());
-            sb.append("\n  modulus:          ");
-            sb.append(n);
-            sb.append("\n  public exponent:  ");
-            sb.append(e);
-            sb.append("\n  private exponent: ");
-            sb.append(d);
-            sb.append("\n  prime p:          ");
-            sb.append(p);
-            sb.append("\n  prime q:          ");
-            sb.append(q);
-            sb.append("\n  prime exponent p: ");
-            sb.append(pe);
-            sb.append("\n  prime exponent q: ");
-            sb.append(qe);
-            sb.append("\n  crt coefficient:  ");
-            sb.append(coeff);
-            return sb.toString();
-        }
     }
 
     // RSA non-CRT private key
@@ -616,15 +595,6 @@
             fetchValues();
             return d;
         }
-        public String toString() {
-            fetchValues();
-            StringBuilder sb = new StringBuilder(super.toString());
-            sb.append("\n  modulus:          ");
-            sb.append(n);
-            sb.append("\n  private exponent: ");
-            sb.append(d);
-            return sb.toString();
-        }
     }
 
     private static final class P11RSAPublicKey extends P11Key
@@ -794,11 +764,6 @@
             fetchValues();
             return params;
         }
-        public String toString() {
-            fetchValues();
-            return super.toString() +  "\n  x: " + x + "\n  p: " + params.getP()
-                + "\n  q: " + params.getQ() + "\n  g: " + params.getG();
-        }
     }
 
     private static final class P11DHPrivateKey extends P11Key
@@ -856,11 +821,6 @@
             fetchValues();
             return params;
         }
-        public String toString() {
-            fetchValues();
-            return super.toString() +  "\n  x: " + x + "\n  p: " + params.getP()
-                + "\n  g: " + params.getG();
-        }
     }
 
     private static final class P11DHPublicKey extends P11Key
@@ -977,12 +937,6 @@
             fetchValues();
             return params;
         }
-        public String toString() {
-            fetchValues();
-        return super.toString()
-            + "\n  private value:  " + s
-            + "\n  parameters: " + params;
-        }
     }
 
     private static final class P11ECPublicKey extends P11Key
--- a/src/share/classes/sun/security/provider/DSAPrivateKey.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/sun/security/provider/DSAPrivateKey.java	Tue Oct 01 14:22:36 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 2002, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -142,11 +142,6 @@
         }
     }
 
-    public String toString() {
-        return "Sun DSA Private Key \nparameters:" + algid + "\nx: " +
-            Debug.toHexString(x) + "\n";
-    }
-
     protected void parseKeyBits() throws InvalidKeyException {
         try {
             DerInputStream in = new DerInputStream(key);
--- a/src/share/classes/sun/security/rsa/RSAPrivateCrtKeyImpl.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/sun/security/rsa/RSAPrivateCrtKeyImpl.java	Tue Oct 01 14:22:36 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -225,29 +225,4 @@
         }
         return b;
     }
-
-    // return a string representation of this key for debugging
-    public String toString() {
-        StringBuffer sb = new StringBuffer();
-        sb.append("Sun RSA private CRT key, ");
-        sb.append(n.bitLength());
-        sb.append(" bits\n  modulus:          ");
-        sb.append(n);
-        sb.append("\n  public exponent:  ");
-        sb.append(e);
-        sb.append("\n  private exponent: ");
-        sb.append(d);
-        sb.append("\n  prime p:          ");
-        sb.append(p);
-        sb.append("\n  prime q:          ");
-        sb.append(q);
-        sb.append("\n  prime exponent p: ");
-        sb.append(pe);
-        sb.append("\n  prime exponent q: ");
-        sb.append(qe);
-        sb.append("\n  crt coefficient:  ");
-        sb.append(coeff);
-        return sb.toString();
-    }
-
 }
--- a/src/share/classes/sun/security/rsa/RSAPrivateKeyImpl.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/sun/security/rsa/RSAPrivateKeyImpl.java	Tue Oct 01 14:22:36 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -98,11 +98,4 @@
     public BigInteger getPrivateExponent() {
         return d;
     }
-
-    // return a string representation of this key for debugging
-    public String toString() {
-        return "Sun RSA private key, " + n.bitLength() + " bits\n  modulus: "
-                + n + "\n  private exponent: " + d;
-    }
-
 }
--- a/src/share/classes/sun/swing/SwingLazyValue.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/sun/swing/SwingLazyValue.java	Tue Oct 01 14:22:36 2013 -0700
@@ -30,6 +30,7 @@
 import java.security.AccessController;
 import java.security.PrivilegedAction;
 import javax.swing.UIDefaults;
+import sun.reflect.misc.ReflectUtil;
 
 /**
  * SwingLazyValue is a copy of ProxyLazyValue that does not snapshot the
@@ -63,7 +64,7 @@
 
     public Object createValue(final UIDefaults table) {
         try {
-            Object cl;
+            ReflectUtil.checkPackageAccess(className);
             Class<?> c = Class.forName(className, true, null);
             if (methodName != null) {
                 Class[] types = getClassArray(args);
--- a/src/share/classes/sun/swing/SwingUtilities2.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/classes/sun/swing/SwingUtilities2.java	Tue Oct 01 14:22:36 2013 -0700
@@ -1349,6 +1349,19 @@
     }
 
     /**
+     * Utility method that throws SecurityException if SecurityManager is set
+     * and modifiers are not public
+     *
+     * @param modifiers a set of modifiers
+     */
+    public static void checkAccess(int modifiers) {
+        if (System.getSecurityManager() != null
+                && !Modifier.isPublic(modifiers)) {
+            throw new SecurityException("Resource is not accessible");
+        }
+    }
+
+    /**
      * Returns true if EventQueue.getCurrentEvent() has the permissions to
      * access the system clipboard and if it is allowed gesture (if
      * checkGesture true)
--- a/src/share/demo/jvmti/hprof/hprof_class.c	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/demo/jvmti/hprof/hprof_class.c	Tue Oct 01 14:22:36 2013 -0700
@@ -527,7 +527,12 @@
     jmethodID  method;
 
     info = get_info(index);
-    HPROF_ASSERT(mnum < info->method_count);
+    if (mnum >= info->method_count) {
+        jclass newExcCls = (*env)->FindClass(env, "java/lang/IllegalArgumentException");
+        (*env)->ThrowNew(env, newExcCls, "Illegal mnum");
+
+        return NULL;
+    }
     method = info->method[mnum].method_id;
     if ( method == NULL ) {
         char * name;
@@ -535,7 +540,12 @@
         jclass clazz;
 
         name  = (char *)string_get(info->method[mnum].name_index);
-        HPROF_ASSERT(name!=NULL);
+        if (name==NULL) {
+            jclass newExcCls = (*env)->FindClass(env, "java/lang/IllegalArgumentException");
+            (*env)->ThrowNew(env, newExcCls, "Name not found");
+
+            return NULL;
+        }
         sig   = (char *)string_get(info->method[mnum].sig_index);
         HPROF_ASSERT(sig!=NULL);
         clazz = class_get_class(env, index);
--- a/src/share/demo/jvmti/hprof/hprof_event.c	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/demo/jvmti/hprof/hprof_event.c	Tue Oct 01 14:22:36 2013 -0700
@@ -195,7 +195,12 @@
 
     HPROF_ASSERT(env!=NULL);
     HPROF_ASSERT(thread!=NULL);
-    HPROF_ASSERT(cnum!=0 && cnum!=gdata->tracker_cnum);
+    if (cnum == 0 || cnum == gdata->tracker_cnum) {
+        jclass newExcCls = (*env)->FindClass(env, "java/lang/IllegalArgumentException");
+        (*env)->ThrowNew(env, newExcCls, "Illegal cnum.");
+
+        return;
+    }
 
     /* Prevent recursion into any BCI function for this thread (pstatus). */
     if ( tls_get_tracker_status(env, thread, JNI_FALSE,
@@ -204,8 +209,10 @@
 
         (*pstatus) = 1;
         method      = class_get_methodID(env, cnum, mnum);
-        HPROF_ASSERT(method!=NULL);
-        tls_push_method(tls_index, method);
+        if (method != NULL) {
+            tls_push_method(tls_index, method);
+        }
+
         (*pstatus) = 0;
     }
 }
@@ -248,7 +255,13 @@
 
     HPROF_ASSERT(env!=NULL);
     HPROF_ASSERT(thread!=NULL);
-    HPROF_ASSERT(cnum!=0 && cnum!=gdata->tracker_cnum);
+
+    if (cnum == 0 || cnum == gdata->tracker_cnum) {
+        jclass newExcCls = (*env)->FindClass(env, "java/lang/IllegalArgumentException");
+        (*env)->ThrowNew(env, newExcCls, "Illegal cnum.");
+
+        return;
+    }
 
     /* Prevent recursion into any BCI function for this thread (pstatus). */
     if ( tls_get_tracker_status(env, thread, JNI_FALSE,
@@ -257,8 +270,10 @@
 
         (*pstatus) = 1;
         method      = class_get_methodID(env, cnum, mnum);
-        HPROF_ASSERT(method!=NULL);
-        tls_pop_method(tls_index, thread, method);
+        if (method != NULL) {
+            tls_pop_method(tls_index, thread, method);
+        }
+
         (*pstatus) = 0;
     }
 }
--- a/src/share/lib/security/java.security-linux	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/lib/security/java.security-linux	Tue Oct 01 14:22:36 2013 -0700
@@ -129,6 +129,7 @@
                com.sun.istack.internal.,\
                com.sun.jmx.,\
                com.sun.proxy.,\
+               com.sun.script.,\
                com.sun.org.apache.bcel.internal.,\
                com.sun.org.apache.regexp.internal.,\
                com.sun.org.apache.xerces.internal.,\
@@ -166,6 +167,7 @@
                    com.sun.istack.internal.,\
                    com.sun.jmx.,\
                    com.sun.proxy.,\
+                   com.sun.script.,\
                    com.sun.org.apache.bcel.internal.,\
                    com.sun.org.apache.regexp.internal.,\
                    com.sun.org.apache.xerces.internal.,\
--- a/src/share/lib/security/java.security-macosx	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/lib/security/java.security-macosx	Tue Oct 01 14:22:36 2013 -0700
@@ -130,6 +130,7 @@
                com.sun.istack.internal.,\
                com.sun.jmx.,\
                com.sun.proxy.,\
+               com.sun.script.,\
                com.sun.org.apache.bcel.internal.,\
                com.sun.org.apache.regexp.internal.,\
                com.sun.org.apache.xerces.internal.,\
@@ -169,6 +170,7 @@
                    com.sun.istack.internal.,\
                    com.sun.jmx.,\
                    com.sun.proxy.,\
+                   com.sun.script.,\
                    com.sun.org.apache.bcel.internal.,\
                    com.sun.org.apache.regexp.internal.,\
                    com.sun.org.apache.xerces.internal.,\
--- a/src/share/lib/security/java.security-solaris	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/lib/security/java.security-solaris	Tue Oct 01 14:22:36 2013 -0700
@@ -131,6 +131,7 @@
                com.sun.istack.internal.,\
                com.sun.jmx.,\
                com.sun.proxy.,\
+               com.sun.script.,\
                com.sun.org.apache.bcel.internal.,\
                com.sun.org.apache.regexp.internal.,\
                com.sun.org.apache.xerces.internal.,\
@@ -169,6 +170,7 @@
                    com.sun.istack.internal.,\
                    com.sun.jmx.,\
                    com.sun.proxy.,\
+                   com.sun.script.,\
                    com.sun.org.apache.bcel.internal.,\
                    com.sun.org.apache.regexp.internal.,\
                    com.sun.org.apache.xerces.internal.,\
--- a/src/share/lib/security/java.security-windows	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/lib/security/java.security-windows	Tue Oct 01 14:22:36 2013 -0700
@@ -130,6 +130,7 @@
                com.sun.istack.internal.,\
                com.sun.jmx.,\
                com.sun.proxy.,\
+               com.sun.script.,\
                com.sun.org.apache.bcel.internal.,\
                com.sun.org.apache.regexp.internal.,\
                com.sun.org.apache.xerces.internal.,\
@@ -169,6 +170,7 @@
                    com.sun.istack.internal.,\
                    com.sun.jmx.,\
                    com.sun.proxy.,\
+                   com.sun.script.,\
                    com.sun.org.apache.bcel.internal.,\
                    com.sun.org.apache.regexp.internal.,\
                    com.sun.org.apache.xerces.internal.,\
--- a/src/share/native/com/sun/java/util/jar/pack/zip.cpp	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/native/com/sun/java/util/jar/pack/zip.cpp	Tue Oct 01 14:22:36 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -340,6 +340,10 @@
   struct tm sbuf;
   (void)memset((void*)&sbuf,0, sizeof(sbuf));
   struct tm* s = gmtime_r(&t, &sbuf);
+  if (s == NULL) {
+    fprintf(u->errstrm, "Error: gmtime failure, invalid input archive\n");
+    exit(2);
+  }
   modtime_cache = modtime;
   dostime_cache = dostime(s->tm_year + 1900, s->tm_mon + 1, s->tm_mday,
                           s->tm_hour, s->tm_min, s->tm_sec);
@@ -384,7 +388,7 @@
   }
 
   deflated.empty();
-  zs.next_out  = (uchar*) deflated.grow(len + (len/2));
+  zs.next_out  = (uchar*) deflated.grow(add_size(len, (len/2)));
   zs.avail_out = (int)deflated.size();
 
   zs.next_in = (uchar*)head.ptr;
--- a/src/share/native/java/lang/Class.c	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/native/java/lang/Class.c	Tue Oct 01 14:22:36 2013 -0700
@@ -70,7 +70,7 @@
     {"getProtectionDomain0", "()" PD,       (void *)&JVM_GetProtectionDomain},
     {"setProtectionDomain0", "(" PD ")V",   (void *)&JVM_SetProtectionDomain},
     {"getDeclaredClasses0",  "()[" CLS,      (void *)&JVM_GetDeclaredClasses},
-    {"getDeclaringClass",   "()" CLS,      (void *)&JVM_GetDeclaringClass},
+    {"getDeclaringClass0",   "()" CLS,      (void *)&JVM_GetDeclaringClass},
     {"getGenericSignature", "()" STR,       (void *)&JVM_GetClassSignature},
     {"getRawAnnotations",      "()" BA,        (void *)&JVM_GetClassAnnotations},
     {"getConstantPool",     "()" CPL,       (void *)&JVM_GetClassConstantPool},
--- a/src/share/native/java/net/Inet6Address.c	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/native/java/net/Inet6Address.c	Tue Oct 01 14:22:36 2013 -0700
@@ -33,6 +33,8 @@
  */
 
 jclass ia6_class;
+jfieldID ia6_holder6ID;
+
 jfieldID ia6_ipaddressID;
 jfieldID ia6_scopeidID;
 jfieldID ia6_cachedscopeidID;
@@ -48,21 +50,26 @@
  */
 JNIEXPORT void JNICALL
 Java_java_net_Inet6Address_init(JNIEnv *env, jclass cls) {
+    jclass ia6h_class;
     jclass c = (*env)->FindClass(env, "java/net/Inet6Address");
     CHECK_NULL(c);
     ia6_class = (*env)->NewGlobalRef(env, c);
     CHECK_NULL(ia6_class);
-    ia6_ipaddressID = (*env)->GetFieldID(env, ia6_class, "ipaddress", "[B");
+    ia6h_class = (*env)->FindClass(env, "java/net/Inet6Address$Inet6AddressHolder");
+    CHECK_NULL(ia6h_class);
+    ia6_holder6ID = (*env)->GetFieldID(env, ia6_class, "holder6", "Ljava/net/Inet6Address$Inet6AddressHolder;");
+    CHECK_NULL(ia6_holder6ID);
+    ia6_ipaddressID = (*env)->GetFieldID(env, ia6h_class, "ipaddress", "[B");
     CHECK_NULL(ia6_ipaddressID);
-    ia6_scopeidID = (*env)->GetFieldID(env, ia6_class, "scope_id", "I");
+    ia6_scopeidID = (*env)->GetFieldID(env, ia6h_class, "scope_id", "I");
     CHECK_NULL(ia6_scopeidID);
     ia6_cachedscopeidID = (*env)->GetFieldID(env, ia6_class, "cached_scope_id", "I");
     CHECK_NULL(ia6_cachedscopeidID);
-    ia6_scopeidsetID = (*env)->GetFieldID(env, ia6_class, "scope_id_set", "Z");
+    ia6_scopeidsetID = (*env)->GetFieldID(env, ia6h_class, "scope_id_set", "Z");
     CHECK_NULL(ia6_scopeidID);
-    ia6_scopeifnameID = (*env)->GetFieldID(env, ia6_class, "scope_ifname", "Ljava/net/NetworkInterface;");
+    ia6_scopeifnameID = (*env)->GetFieldID(env, ia6h_class, "scope_ifname", "Ljava/net/NetworkInterface;");
     CHECK_NULL(ia6_scopeifnameID);
-    ia6_scopeifnamesetID = (*env)->GetFieldID(env, ia6_class, "scope_ifname_set", "Z");
+    ia6_scopeifnamesetID = (*env)->GetFieldID(env, ia6h_class, "scope_ifname_set", "Z");
     CHECK_NULL(ia6_scopeifnamesetID);
     ia6_ctrID = (*env)->GetMethodID(env, ia6_class, "<init>", "()V");
     CHECK_NULL(ia6_ctrID);
--- a/src/share/native/java/net/net_util.c	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/native/java/net/net_util.c	Tue Oct 01 14:22:36 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -94,6 +94,111 @@
 extern jfieldID iac_addressID;
 extern jfieldID iac_familyID;
 
+/**
+ * set_ methods return JNI_TRUE on success JNI_FALSE on error
+ * get_ methods that return +ve int return -1 on error
+ * get_ methods that return objects return NULL on error.
+ */
+jobject getInet6Address_scopeifname(JNIEnv *env, jobject iaObj) {
+    jobject holder;
+
+    initInetAddrs(env);
+    holder = (*env)->GetObjectField(env, iaObj, ia6_holder6ID);
+    CHECK_NULL_RETURN(holder, NULL);
+    return (*env)->GetObjectField(env, holder, ia6_scopeifnameID);
+}
+
+int setInet6Address_scopeifname(JNIEnv *env, jobject iaObj, jobject scopeifname) {
+    jobject holder;
+
+    initInetAddrs(env);
+    holder = (*env)->GetObjectField(env, iaObj, ia6_holder6ID);
+    CHECK_NULL_RETURN(holder, JNI_FALSE);
+    (*env)->SetObjectField(env, holder, ia6_scopeifnameID, scopeifname);
+    return JNI_TRUE;
+}
+
+int getInet6Address_scopeifname_set(JNIEnv *env, jobject iaObj) {
+    jobject holder;
+
+    initInetAddrs(env);
+    holder = (*env)->GetObjectField(env, iaObj, ia6_holder6ID);
+    CHECK_NULL_RETURN(holder, -1);
+    return (*env)->GetBooleanField(env, holder, ia6_scopeifnamesetID);
+}
+
+int setInet6Address_scopeifname_set(JNIEnv *env, jobject iaObj, int scopeifname_set) {
+    jobject holder;
+
+    initInetAddrs(env);
+    holder = (*env)->GetObjectField(env, iaObj, ia6_holder6ID);
+    CHECK_NULL_RETURN(holder, JNI_FALSE);
+    (*env)->SetBooleanField(env, holder, ia6_scopeifnamesetID, scopeifname_set);
+    return JNI_TRUE;
+}
+
+int getInet6Address_scopeid_set(JNIEnv *env, jobject iaObj) {
+    jobject holder;
+
+    initInetAddrs(env);
+    holder = (*env)->GetObjectField(env, iaObj, ia6_holder6ID);
+    CHECK_NULL_RETURN(holder, -1);
+    return (*env)->GetBooleanField(env, holder, ia6_scopeidsetID);
+}
+
+int getInet6Address_scopeid(JNIEnv *env, jobject iaObj) {
+    jobject holder;
+
+    initInetAddrs(env);
+    holder = (*env)->GetObjectField(env, iaObj, ia6_holder6ID);
+    CHECK_NULL_RETURN(holder, -1);
+    return (*env)->GetIntField(env, holder, ia6_scopeidID);
+}
+
+int setInet6Address_scopeid(JNIEnv *env, jobject iaObj, int scopeid) {
+    jobject holder;
+
+    initInetAddrs(env);
+    holder = (*env)->GetObjectField(env, iaObj, ia6_holder6ID);
+    CHECK_NULL_RETURN(holder, JNI_FALSE);
+    (*env)->SetIntField(env, holder, ia6_scopeidID, scopeid);
+    if (scopeid > 0) {
+            (*env)->SetBooleanField(env, holder, ia6_scopeidsetID, JNI_TRUE);
+    }
+    return JNI_TRUE;
+}
+
+
+int getInet6Address_ipaddress(JNIEnv *env, jobject iaObj, char *dest) {
+    jobject holder, addr;
+    jbyteArray barr;
+
+    initInetAddrs(env);
+    holder = (*env)->GetObjectField(env, iaObj, ia6_holder6ID);
+    CHECK_NULL_RETURN(holder, JNI_FALSE);
+    addr =  (*env)->GetObjectField(env, holder, ia6_ipaddressID);
+    CHECK_NULL_RETURN(addr, JNI_FALSE);
+    (*env)->GetByteArrayRegion(env, addr, 0, 16, (jbyte *)dest);
+    return JNI_TRUE;
+}
+
+int setInet6Address_ipaddress(JNIEnv *env, jobject iaObj, char *address) {
+    jobject holder;
+    jbyteArray addr;
+
+    initInetAddrs(env);
+    holder = (*env)->GetObjectField(env, iaObj, ia6_holder6ID);
+    CHECK_NULL_RETURN(holder, JNI_FALSE);
+    addr =  (jbyteArray)(*env)->GetObjectField(env, holder, ia6_ipaddressID);
+    if (addr == NULL) {
+        addr = (*env)->NewByteArray(env, 16);
+        CHECK_NULL_RETURN(addr, JNI_FALSE);
+        (*env)->SetObjectField(env, holder, ia6_ipaddressID, addr);
+    }
+    (*env)->SetByteArrayRegion(env, addr, 0, 16, (jbyte *)address);
+    return JNI_TRUE;
+}
+
 void setInetAddress_addr(JNIEnv *env, jobject iaObj, int address) {
     jobject holder;
     initInetAddrs(env);
@@ -168,6 +273,7 @@
         } else {
             static jclass inet6Cls = 0;
             jint scope;
+            int ret;
             if (inet6Cls == 0) {
                 jclass c = (*env)->FindClass(env, "java/net/Inet6Address");
                 CHECK_NULL_RETURN(c, NULL);
@@ -177,18 +283,11 @@
             }
             iaObj = (*env)->NewObject(env, inet6Cls, ia6_ctrID);
             CHECK_NULL_RETURN(iaObj, NULL);
-            ipaddress = (*env)->NewByteArray(env, 16);
-            CHECK_NULL_RETURN(ipaddress, NULL);
-            (*env)->SetByteArrayRegion(env, ipaddress, 0, 16,
-                                       (jbyte *)&(him6->sin6_addr));
-
-            (*env)->SetObjectField(env, iaObj, ia6_ipaddressID, ipaddress);
-
+            ret = setInet6Address_ipaddress(env, iaObj, (char *)&(him6->sin6_addr));
+            CHECK_NULL_RETURN(ret, NULL);
             setInetAddress_family(env, iaObj, IPv6);
             scope = getScopeID(him);
-            (*env)->SetIntField(env, iaObj, ia6_scopeidID, scope);
-            if (scope > 0)
-                (*env)->SetBooleanField(env, iaObj, ia6_scopeidsetID, JNI_TRUE);
+            setInet6Address_scopeid(env, iaObj, scope);
         }
         *port = ntohs(him6->sin6_port);
     } else
@@ -248,9 +347,8 @@
             if (family == AF_INET) {
                 return JNI_FALSE;
             }
-            ipaddress = (*env)->GetObjectField(env, iaObj, ia6_ipaddressID);
-            scope = (*env)->GetIntField(env, iaObj, ia6_scopeidID);
-            (*env)->GetByteArrayRegion(env, ipaddress, 0, 16, caddrCur);
+            scope = getInet6Address_scopeid(env, iaObj);
+            getInet6Address_ipaddress(env, iaObj, (char *)caddrCur);
             if (NET_IsEqual(caddrNew, caddrCur) && cmpScopeID(scope, him)) {
                 return JNI_TRUE;
             } else {
--- a/src/share/native/java/net/net_util.h	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/native/java/net/net_util.h	Tue Oct 01 14:22:36 2013 -0700
@@ -58,6 +58,22 @@
 extern jfieldID iac_hostNameID;
 extern jfieldID ia_preferIPv6AddressID;
 
+/** (Inet6Address accessors)
+ * set_ methods return JNI_TRUE on success JNI_FALSE on error
+ * get_ methods that return int/boolean, return -1 on error
+ * get_ methods that return objects return NULL on error.
+ */
+extern jobject getInet6Address_scopeifname(JNIEnv *env, jobject ia6Obj);
+extern int setInet6Address_scopeifname(JNIEnv *env, jobject ia6Obj, jobject scopeifname);
+extern int getInet6Address_scopeifname_set(JNIEnv *env, jobject ia6Obj);
+extern int setInet6Address_scopeifname_set(JNIEnv *env, jobject ia6Obj,
+        int scopeifname_set);
+extern int getInet6Address_scopeid_set(JNIEnv *env, jobject ia6Obj);
+extern int getInet6Address_scopeid(JNIEnv *env, jobject ia6Obj);
+extern int setInet6Address_scopeid(JNIEnv *env, jobject ia6Obj, int scopeid);
+extern int getInet6Address_ipaddress(JNIEnv *env, jobject ia6Obj, char *dest);
+extern int setInet6Address_ipaddress(JNIEnv *env, jobject ia6Obj, char *address);
+
 extern void setInetAddress_addr(JNIEnv *env, jobject iaObj, int address);
 extern void setInetAddress_family(JNIEnv *env, jobject iaObj, int family);
 extern void setInetAddress_hostName(JNIEnv *env, jobject iaObj, jobject h);
@@ -93,6 +109,7 @@
 
 /* Inet6Address fields */
 extern jclass ia6_class;
+extern jfieldID ia6_holder6ID;
 extern jfieldID ia6_ipaddressID;
 extern jfieldID ia6_scopeidID;
 extern jfieldID ia6_cachedscopeidID;
--- a/src/share/native/sun/awt/image/awt_parseImage.c	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/native/sun/awt/image/awt_parseImage.c	Tue Oct 01 14:22:36 2013 -0700
@@ -808,363 +808,204 @@
     return 1;
 }
 
-/*
- * This routine will fill in a buffer of data for either 1 band or all
- * bands (if band == -1).
- */
 #define MAX_TO_GRAB (10240)
 
-int awt_getPixelByte(JNIEnv *env, int band, RasterS_t *rasterP,
-                     unsigned char *bufferP) {
-    int w = rasterP->width;
-    int h = rasterP->height;
-    int numBands = rasterP->numBands;
+typedef union {
+    void *pv;
+    unsigned char *pb;
+    unsigned short *ps;
+} PixelData_t;
+
+
+int awt_getPixels(JNIEnv *env, RasterS_t *rasterP, void *bufferP) {
+    const int w = rasterP->width;
+    const int h = rasterP->height;
+    const int numBands = rasterP->numBands;
     int y;
     int i;
-    int maxLines = (h < MAX_TO_GRAB/w ? h : MAX_TO_GRAB/w);
+    int maxLines;
     jobject jsm;
-    int off;
+    int off = 0;
     jarray jdata = NULL;
     jobject jdatabuffer;
     int *dataP;
-    int maxBytes = w;
+    int maxSamples;
+    PixelData_t p;
+
+    if (bufferP == NULL) {
+        return -1;
+    }
+
+    if (rasterP->dataType != BYTE_DATA_TYPE &&
+        rasterP->dataType != SHORT_DATA_TYPE)
+    {
+        return -1;
+    }
+
+    p.pv = bufferP;
+
+    if (!SAFE_TO_MULT(w, numBands)) {
+        return -1;
+    }
+    maxSamples = w * numBands;
+
+    maxLines = maxSamples > MAX_TO_GRAB ? 1 : (MAX_TO_GRAB / maxSamples);
+    if (maxLines > h) {
+        maxLines = h;
+    }
+
+    if (!SAFE_TO_MULT(maxSamples, maxLines)) {
+        return -1;
+    }
+
+    maxSamples *= maxLines;
 
     jsm = (*env)->GetObjectField(env, rasterP->jraster, g_RasterSampleModelID);
     jdatabuffer = (*env)->GetObjectField(env, rasterP->jraster,
                                          g_RasterDataBufferID);
-    jdata = (*env)->NewIntArray(env, maxBytes*rasterP->numBands*maxLines);
+
+    jdata = (*env)->NewIntArray(env, maxSamples);
     if (JNU_IsNull(env, jdata)) {
         JNU_ThrowOutOfMemoryError(env, "Out of Memory");
         return -1;
     }
 
-    /* Here is the generic code */
-    if (band >= 0) {
-        int dOff;
-        if (band >= numBands) {
+    for (y = 0; y < h; y += maxLines) {
+        if (y + maxLines > h) {
+            maxLines = h - y;
+            maxSamples = w * numBands * maxLines;
+        }
+
+        (*env)->CallObjectMethod(env, jsm, g_SMGetPixelsMID,
+                                 0, y, w,
+                                 maxLines, jdata, jdatabuffer);
+
+        if ((*env)->ExceptionOccurred(env)) {
             (*env)->DeleteLocalRef(env, jdata);
-            JNU_ThrowInternalError(env, "Band out of range.");
             return -1;
         }
-        off = 0;
-        for (y=0; y < h; ) {
-            (*env)->CallObjectMethod(env, jsm, g_SMGetPixelsMID,
-                                     0, y, w,
-                                     maxLines, jdata, jdatabuffer);
-            dataP = (int *) (*env)->GetPrimitiveArrayCritical(env, jdata,
-                                                              NULL);
-            if (dataP == NULL) {
-                (*env)->DeleteLocalRef(env, jdata);
-                return -1;
-            }
-            dOff = band;
-            for (i=0; i < maxBytes; i++, dOff += numBands) {
-                bufferP[off++] = (unsigned char) dataP[dOff];
-            }
 
-            (*env)->ReleasePrimitiveArrayCritical(env, jdata, dataP,
-                                                  JNI_ABORT);
-
-            if (y+maxLines < h) {
-                y += maxLines;
-            }
-            else {
-                y++;
-                maxBytes = w;
-            }
-        }
-    }
-    else {
-        off = 0;
-        maxBytes *= numBands;
-        for (y=0; y < h; ) {
-            (*env)->CallObjectMethod(env, jsm, g_SMGetPixelsMID,
-                                     0, y, w,
-                                     maxLines, jdata, jdatabuffer);
-            dataP = (int *) (*env)->GetPrimitiveArrayCritical(env, jdata,
-                                                              NULL);
-            if (dataP == NULL) {
-                (*env)->DeleteLocalRef(env, jdata);
-                return -1;
-            }
-            for (i=0; i < maxBytes; i++) {
-                bufferP[off++] = (unsigned char) dataP[i];
-            }
-
-            (*env)->ReleasePrimitiveArrayCritical(env, jdata, dataP,
-                                                  JNI_ABORT);
-
-            if (y+maxLines < h) {
-                y += maxLines;
-            }
-            else {
-                y++;
-                maxBytes = w*numBands;
-            }
+        dataP = (int *) (*env)->GetPrimitiveArrayCritical(env, jdata,
+                                                          NULL);
+        if (dataP == NULL) {
+            (*env)->DeleteLocalRef(env, jdata);
+            return -1;
         }
 
+        switch (rasterP->dataType) {
+        case BYTE_DATA_TYPE:
+            for (i = 0; i < maxSamples; i ++) {
+                p.pb[off++] = (unsigned char) dataP[i];
+            }
+            break;
+        case SHORT_DATA_TYPE:
+            for (i = 0; i < maxSamples; i ++) {
+                p.ps[off++] = (unsigned short) dataP[i];
+            }
+            break;
+        }
+
+        (*env)->ReleasePrimitiveArrayCritical(env, jdata, dataP,
+                                              JNI_ABORT);
     }
     (*env)->DeleteLocalRef(env, jdata);
 
-    return 0;
+    return 1;
 }
-int awt_setPixelByte(JNIEnv *env, int band, RasterS_t *rasterP,
-                     unsigned char *bufferP) {
-    int w = rasterP->width;
-    int h = rasterP->height;
-    int numBands = rasterP->numBands;
+
+int awt_setPixels(JNIEnv *env, RasterS_t *rasterP, void *bufferP) {
+    const int w = rasterP->width;
+    const int h = rasterP->height;
+    const int numBands = rasterP->numBands;
+
     int y;
     int i;
-    int maxLines = (h < MAX_TO_GRAB/w ? h : MAX_TO_GRAB/w);
+    int maxLines;
     jobject jsm;
-    int off;
+    int off = 0;
     jarray jdata = NULL;
     jobject jdatabuffer;
     int *dataP;
-    int maxBytes = w;
+    int maxSamples;
+    PixelData_t p;
+
+    if (bufferP == NULL) {
+        return -1;
+    }
+
+    if (rasterP->dataType != BYTE_DATA_TYPE &&
+        rasterP->dataType != SHORT_DATA_TYPE)
+    {
+        return -1;
+    }
+
+    p.pv = bufferP;
+
+    if (!SAFE_TO_MULT(w, numBands)) {
+        return -1;
+    }
+    maxSamples = w * numBands;
+
+    maxLines = maxSamples > MAX_TO_GRAB ? 1 : (MAX_TO_GRAB / maxSamples);
+    if (maxLines > h) {
+        maxLines = h;
+    }
+
+    if (!SAFE_TO_MULT(maxSamples, maxLines)) {
+        return -1;
+    }
+
+    maxSamples *= maxLines;
 
     jsm = (*env)->GetObjectField(env, rasterP->jraster, g_RasterSampleModelID);
     jdatabuffer = (*env)->GetObjectField(env, rasterP->jraster,
                                          g_RasterDataBufferID);
-    /* Here is the generic code */
-    jdata = (*env)->NewIntArray(env, maxBytes*rasterP->numBands*maxLines);
+
+    jdata = (*env)->NewIntArray(env, maxSamples);
     if (JNU_IsNull(env, jdata)) {
         JNU_ThrowOutOfMemoryError(env, "Out of Memory");
         return -1;
     }
-    if (band >= 0) {
-        int dOff;
-        if (band >= numBands) {
+
+    for (y = 0; y < h; y += maxLines) {
+        if (y + maxLines > h) {
+            maxLines = h - y;
+            maxSamples = w * numBands * maxLines;
+        }
+        dataP = (int *) (*env)->GetPrimitiveArrayCritical(env, jdata,
+                                                          NULL);
+        if (dataP == NULL) {
             (*env)->DeleteLocalRef(env, jdata);
-            JNU_ThrowInternalError(env, "Band out of range.");
             return -1;
         }
-        off = 0;
-        for (y=0; y < h; y+=maxLines) {
-            if (y+maxLines > h) {
-                maxBytes = w*numBands;
-                maxLines = h - y;
+
+        switch (rasterP->dataType) {
+        case BYTE_DATA_TYPE:
+            for (i = 0; i < maxSamples; i ++) {
+                dataP[i] = p.pb[off++];
             }
-            dataP = (int *) (*env)->GetPrimitiveArrayCritical(env, jdata,
-                                                              NULL);
-            if (dataP == NULL) {
-                (*env)->DeleteLocalRef(env, jdata);
-                return -1;
+            break;
+        case SHORT_DATA_TYPE:
+            for (i = 0; i < maxSamples; i ++) {
+                dataP[i] = p.ps[off++];
             }
-            dOff = band;
-            for (i=0; i < maxBytes; i++, dOff += numBands) {
-                dataP[dOff] = bufferP[off++];
-            }
-
-            (*env)->ReleasePrimitiveArrayCritical(env, jdata, dataP,
-                                                  JNI_ABORT);
-
-            (*env)->CallVoidMethod(env, jsm, g_SMSetPixelsMID,
-                                   0, y, w,
-                                   maxLines, jdata, jdatabuffer);
-        }
-    }
-    else {
-        off = 0;
-        maxBytes *= numBands;
-        for (y=0; y < h; y+=maxLines) {
-            if (y+maxLines > h) {
-                maxBytes = w*numBands;
-                maxLines = h - y;
-            }
-            dataP = (int *) (*env)->GetPrimitiveArrayCritical(env, jdata,
-                                                              NULL);
-            if (dataP == NULL) {
-                (*env)->DeleteLocalRef(env, jdata);
-                return -1;
-            }
-            for (i=0; i < maxBytes; i++) {
-                dataP[i] = bufferP[off++];
-            }
-
-            (*env)->ReleasePrimitiveArrayCritical(env, jdata, dataP,
-                                                  JNI_ABORT);
-
-            (*env)->CallVoidMethod(env, jsm, g_SMSetPixelsMID,
-                                     0, y, w,
-                                     maxLines, jdata, jdatabuffer);
+            break;
         }
 
+        (*env)->ReleasePrimitiveArrayCritical(env, jdata, dataP,
+                                              JNI_ABORT);
+
+        (*env)->CallVoidMethod(env, jsm, g_SMSetPixelsMID,
+                               0, y, w,
+                               maxLines, jdata, jdatabuffer);
+
+        if ((*env)->ExceptionOccurred(env)) {
+            (*env)->DeleteLocalRef(env, jdata);
+            return -1;
+        }
     }
 
     (*env)->DeleteLocalRef(env, jdata);
 
-    return 0;
+    return 1;
 }
-int awt_getPixelShort(JNIEnv *env, int band, RasterS_t *rasterP,
-                     unsigned short *bufferP) {
-    int w = rasterP->width;
-    int h = rasterP->height;
-    int numBands = rasterP->numBands;
-    int y;
-    int i;
-    int maxLines = (h < MAX_TO_GRAB/w ? h : MAX_TO_GRAB/w);
-    jobject jsm;
-    int off;
-    jarray jdata = NULL;
-    jobject jdatabuffer;
-    int *dataP;
-    int maxBytes = w*maxLines;
-
-    jsm = (*env)->GetObjectField(env, rasterP->jraster, g_RasterSampleModelID);
-    jdatabuffer = (*env)->GetObjectField(env, rasterP->jraster,
-                                         g_RasterDataBufferID);
-    jdata = (*env)->NewIntArray(env, maxBytes*rasterP->numBands*maxLines);
-    if (JNU_IsNull(env, jdata)) {
-        JNU_ThrowOutOfMemoryError(env, "Out of Memory");
-        return -1;
-    }
-    /* Here is the generic code */
-    if (band >= 0) {
-        int dOff;
-        if (band >= numBands) {
-            (*env)->DeleteLocalRef(env, jdata);
-            JNU_ThrowInternalError(env, "Band out of range.");
-            return -1;
-        }
-        off = 0;
-        for (y=0; y < h; y += maxLines) {
-            if (y+maxLines > h) {
-                maxBytes = w*numBands;
-                maxLines = h - y;
-            }
-            (*env)->CallObjectMethod(env, jsm, g_SMGetPixelsMID,
-                                     0, y, w,
-                                     maxLines, jdata, jdatabuffer);
-            dataP = (int *) (*env)->GetPrimitiveArrayCritical(env, jdata,
-                                                              NULL);
-            if (dataP == NULL) {
-                (*env)->DeleteLocalRef(env, jdata);
-                return -1;
-            }
-
-            dOff = band;
-            for (i=0; i < maxBytes; i++, dOff += numBands) {
-                bufferP[off++] = (unsigned short) dataP[dOff];
-            }
-
-            (*env)->ReleasePrimitiveArrayCritical(env, jdata, dataP,
-                                                  JNI_ABORT);
-        }
-    }
-    else {
-        off = 0;
-        maxBytes *= numBands;
-        for (y=0; y < h; y+=maxLines) {
-            if (y+maxLines > h) {
-                maxBytes = w*numBands;
-                maxLines = h - y;
-            }
-            (*env)->CallObjectMethod(env, jsm, g_SMGetPixelsMID,
-                                     0, y, w,
-                                     maxLines, jdata, jdatabuffer);
-            dataP = (int *) (*env)->GetPrimitiveArrayCritical(env, jdata,
-                                                              NULL);
-            if (dataP == NULL) {
-                (*env)->DeleteLocalRef(env, jdata);
-                return -1;
-            }
-            for (i=0; i < maxBytes; i++) {
-                bufferP[off++] = (unsigned short) dataP[i];
-            }
-
-            (*env)->ReleasePrimitiveArrayCritical(env, jdata, dataP,
-                                                  JNI_ABORT);
-        }
-
-    }
-
-    (*env)->DeleteLocalRef(env, jdata);
-    return 0;
-}
-int awt_setPixelShort(JNIEnv *env, int band, RasterS_t *rasterP,
-                      unsigned short *bufferP) {
-    int w = rasterP->width;
-    int h = rasterP->height;
-    int numBands = rasterP->numBands;
-    int y;
-    int i;
-    int maxLines = (h < MAX_TO_GRAB/w ? h : MAX_TO_GRAB/w);
-    jobject jsm;
-    int off;
-    jarray jdata = NULL;
-    jobject jdatabuffer;
-    int *dataP;
-    int maxBytes = w;
-
-    jsm = (*env)->GetObjectField(env, rasterP->jraster, g_RasterSampleModelID);
-    jdatabuffer = (*env)->GetObjectField(env, rasterP->jraster,
-                                         g_RasterDataBufferID);
-    if (band >= numBands) {
-        JNU_ThrowInternalError(env, "Band out of range.");
-        return -1;
-    }
-    /* Here is the generic code */
-    jdata = (*env)->NewIntArray(env, maxBytes*rasterP->numBands*maxLines);
-    if (JNU_IsNull(env, jdata)) {
-        JNU_ThrowOutOfMemoryError(env, "Out of Memory");
-        return -1;
-    }
-    if (band >= 0) {
-        int dOff;
-        off = 0;
-        for (y=0; y < h; y+=maxLines) {
-            if (y+maxLines > h) {
-                maxBytes = w*numBands;
-                maxLines = h - y;
-            }
-            dataP = (int *) (*env)->GetPrimitiveArrayCritical(env, jdata,
-                                                              NULL);
-            if (dataP == NULL) {
-                (*env)->DeleteLocalRef(env, jdata);
-                return -1;
-            }
-            dOff = band;
-            for (i=0; i < maxBytes; i++, dOff += numBands) {
-                dataP[dOff] = bufferP[off++];
-            }
-
-            (*env)->ReleasePrimitiveArrayCritical(env, jdata, dataP,
-                                                  JNI_ABORT);
-
-            (*env)->CallVoidMethod(env, jsm, g_SMSetPixelsMID,
-                                   0, y, w,
-                                   maxLines, jdata, jdatabuffer);
-        }
-    }
-    else {
-        off = 0;
-        maxBytes *= numBands;
-        for (y=0; y < h; y+=maxLines) {
-            if (y+maxLines > h) {
-                maxBytes = w*numBands;
-                maxLines = h - y;
-            }
-            dataP = (int *) (*env)->GetPrimitiveArrayCritical(env, jdata,
-                                                              NULL);
-            if (dataP == NULL) {
-                (*env)->DeleteLocalRef(env, jdata);
-                return -1;
-            }
-            for (i=0; i < maxBytes; i++) {
-                dataP[i] = bufferP[off++];
-            }
-
-            (*env)->ReleasePrimitiveArrayCritical(env, jdata, dataP,
-                                                  JNI_ABORT);
-
-            (*env)->CallVoidMethod(env, jsm, g_SMSetPixelsMID,
-                                   0, y, w,
-                                   maxLines, jdata, jdatabuffer);
-        }
-
-    }
-
-    (*env)->DeleteLocalRef(env, jdata);
-    return 0;
-}
--- a/src/share/native/sun/awt/image/awt_parseImage.h	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/native/sun/awt/image/awt_parseImage.h	Tue Oct 01 14:22:36 2013 -0700
@@ -188,13 +188,8 @@
 
 void awt_freeParsedImage(BufImageS_t *imageP, int freeImageP);
 
-int awt_getPixelByte(JNIEnv *env, int band, RasterS_t *rasterP,
-                     unsigned char *bufferP);
-int awt_setPixelByte(JNIEnv *env, int band, RasterS_t *rasterP,
-                     unsigned char *bufferP);
-int awt_getPixelShort(JNIEnv *env, int band, RasterS_t *rasterP,
-                     unsigned short *bufferP);
-int awt_setPixelShort(JNIEnv *env, int band, RasterS_t *rasterP,
-                      unsigned short *bufferP);
+int awt_getPixels(JNIEnv *env, RasterS_t *rasterP, void *bufferP);
+
+int awt_setPixels(JNIEnv *env, RasterS_t *rasterP, void *bufferP);
 
 #endif /* AWT_PARSE_IMAGE_H */
--- a/src/share/native/sun/awt/image/jpeg/imageioJPEG.c	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/native/sun/awt/image/jpeg/imageioJPEG.c	Tue Oct 01 14:22:36 2013 -0700
@@ -930,9 +930,10 @@
      * Now fill a complete buffer, or as much of one as the stream
      * will give us if we are near the end.
      */
+    RELEASE_ARRAYS(env, data, src->next_input_byte);
+
     GET_IO_REF(input);
 
-    RELEASE_ARRAYS(env, data, src->next_input_byte);
     ret = (*env)->CallIntMethod(env,
                                 input,
                                 JPEGImageReader_readInputDataID,
@@ -1017,9 +1018,11 @@
         memcpy(sb->buf, src->next_input_byte, offset);
     }
 
+
+    RELEASE_ARRAYS(env, data, src->next_input_byte);
+
     GET_IO_REF(input);
 
-    RELEASE_ARRAYS(env, data, src->next_input_byte);
     buflen = sb->bufferLength - offset;
     if (buflen <= 0) {
         if (!GET_ARRAYS(env, data, &(src->next_input_byte))) {
@@ -1121,9 +1124,10 @@
         return;
     }
 
+    RELEASE_ARRAYS(env, data, src->next_input_byte);
+
     GET_IO_REF(input);
 
-    RELEASE_ARRAYS(env, data, src->next_input_byte);
     ret = (*env)->CallLongMethod(env,
                                  input,
                                  JPEGImageReader_skipInputBytesID,
@@ -2306,10 +2310,10 @@
     JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
     jobject output = NULL;
 
+    RELEASE_ARRAYS(env, data, (const JOCTET *)(dest->next_output_byte));
+
     GET_IO_REF(output);
 
-    RELEASE_ARRAYS(env, data, (const JOCTET *)(dest->next_output_byte));
-
     (*env)->CallVoidMethod(env,
                            output,
                            JPEGImageWriter_writeOutputDataID,
@@ -2348,10 +2352,10 @@
     if (datacount != 0) {
         jobject output = NULL;
 
+        RELEASE_ARRAYS(env, data, (const JOCTET *)(dest->next_output_byte));
+
         GET_IO_REF(output);
 
-        RELEASE_ARRAYS(env, data, (const JOCTET *)(dest->next_output_byte));
-
         (*env)->CallVoidMethod(env,
                                output,
                                JPEGImageWriter_writeOutputDataID,
@@ -2702,6 +2706,15 @@
     bandSize = (*env)->GetIntArrayElements(env, bandSizes, NULL);
 
     for (i = 0; i < numBands; i++) {
+        if (bandSize[i] <= 0 || bandSize[i] > JPEG_BAND_SIZE) {
+            (*env)->ReleaseIntArrayElements(env, bandSizes,
+                                            bandSize, JNI_ABORT);
+            JNU_ThrowByName(env, "javax/imageio/IIOException", "Invalid Image");
+            return JNI_FALSE;;
+        }
+    }
+
+    for (i = 0; i < numBands; i++) {
         if (bandSize[i] != JPEG_BAND_SIZE) {
             if (scale == NULL) {
                 scale = (UINT8**) calloc(numBands, sizeof(UINT8*));
--- a/src/share/native/sun/awt/medialib/awt_ImagingLib.c	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/native/sun/awt/medialib/awt_ImagingLib.c	Tue Oct 01 14:22:36 2013 -0700
@@ -700,22 +700,7 @@
 
     /* Means that we couldn't write directly into the destination buffer */
     if (ddata == NULL) {
-        unsigned char *bdataP;
-        unsigned short *sdataP;
-
-        /* Punt for now */
-        switch (dstRasterP->dataType) {
-        case BYTE_DATA_TYPE:
-            bdataP  = (unsigned char *) mlib_ImageGetData(dst);
-            retStatus = (awt_setPixelByte(env, -1, dstRasterP, bdataP) >= 0) ;
-            break;
-        case SHORT_DATA_TYPE:
-            sdataP  = (unsigned short *) mlib_ImageGetData(dst);
-            retStatus = (awt_setPixelShort(env, -1, dstRasterP, sdataP) >= 0) ;
-            break;
-        default:
-            retStatus = 0;
-        }
+        retStatus = awt_setPixels(env, dstRasterP, mlib_ImageGetData(dst));
     }
 
     /* Release the pinned memory */
@@ -1119,24 +1104,9 @@
 
     /* Means that we couldn't write directly into the destination buffer */
     if (ddata == NULL) {
-        unsigned char *bdataP;
-        unsigned short *sdataP;
-
         /* Need to store it back into the array */
         if (storeRasterArray(env, srcRasterP, dstRasterP, dst) < 0) {
-            /* Punt for now */
-            switch (dst->type) {
-            case MLIB_BYTE:
-                bdataP  = (unsigned char *) mlib_ImageGetData(dst);
-                retStatus = (awt_setPixelByte(env, -1, dstRasterP, bdataP) >= 0) ;
-                break;
-            case MLIB_SHORT:
-                sdataP  = (unsigned short *) mlib_ImageGetData(dst);
-                retStatus = (awt_setPixelShort(env, -1, dstRasterP, sdataP) >= 0) ;
-                break;
-            default:
-                retStatus = 0;
-            }
+            retStatus = awt_setPixels(env, dstRasterP, mlib_ImageGetData(dst));
         }
     }
 
@@ -1704,21 +1674,7 @@
      * the destination buffer
      */
     if (ddata == NULL) {
-        unsigned char*  bdataP;
-        unsigned short* sdataP;
-
-        switch (dstRasterP->dataType) {
-          case BYTE_DATA_TYPE:
-            bdataP  = (unsigned char *) mlib_ImageGetData(dst);
-            retStatus = (awt_setPixelByte(env, -1, dstRasterP, bdataP) >= 0) ;
-            break;
-          case SHORT_DATA_TYPE:
-            sdataP  = (unsigned short *) mlib_ImageGetData(dst);
-            retStatus = (awt_setPixelShort(env, -1, dstRasterP, sdataP) >= 0) ;
-            break;
-          default:
-            retStatus = 0;
-        }
+        retStatus = awt_setPixels(env, dstRasterP, mlib_ImageGetData(dst));
     }
 
     /* Release the LUT */
@@ -2029,21 +1985,25 @@
     return 0;
 }
 
+#define NUM_LINES    10
+
 static int
 cvtCustomToDefault(JNIEnv *env, BufImageS_t *imageP, int component,
                    unsigned char *dataP) {
-    ColorModelS_t *cmP = &imageP->cmodel;
-    RasterS_t *rasterP = &imageP->raster;
+    const RasterS_t *rasterP = &imageP->raster;
+    const int w = rasterP->width;
+    const int h = rasterP->height;
+
     int y;
-    jobject jpixels = NULL;
+    jintArray jpixels = NULL;
     jint *pixels;
     unsigned char *dP = dataP;
-#define NUM_LINES    10
-    int numLines = NUM_LINES;
+    int numLines = h > NUM_LINES ? NUM_LINES : h;
+
     /* it is safe to calculate the scan length, because width has been verified
      * on creation of the mlib image
      */
-    int scanLength = rasterP->width * 4;
+    const int scanLength = w * 4;
 
     int nbytes = 0;
     if (!SAFE_TO_MULT(numLines, scanLength)) {
@@ -2052,71 +2012,99 @@
 
     nbytes = numLines * scanLength;
 
-    for (y=0; y < rasterP->height; y+=numLines) {
-        /* getData, one scanline at a time */
-        if (y+numLines > rasterP->height) {
-            numLines = rasterP->height - y;
-            nbytes = numLines * scanLength;
-        }
-        jpixels = (*env)->CallObjectMethod(env, imageP->jimage,
-                                           g_BImgGetRGBMID, 0, y,
-                                           rasterP->width, numLines,
-                                           jpixels,0, rasterP->width);
-        if (jpixels == NULL) {
-            JNU_ThrowInternalError(env, "Can't retrieve pixels.");
-            return -1;
-        }
-
-        pixels = (*env)->GetPrimitiveArrayCritical(env, jpixels, NULL);
-        memcpy(dP, pixels, nbytes);
-        dP += nbytes;
-        (*env)->ReleasePrimitiveArrayCritical(env, jpixels, pixels,
-                                              JNI_ABORT);
-    }
-    return 0;
-}
-
-static int
-cvtDefaultToCustom(JNIEnv *env, BufImageS_t *imageP, int component,
-                   unsigned char *dataP) {
-    ColorModelS_t *cmP = &imageP->cmodel;
-    RasterS_t *rasterP = &imageP->raster;
-    int y;
-    jint *pixels;
-    unsigned char *dP = dataP;
-#define NUM_LINES    10
-    int numLines = NUM_LINES;
-    int nbytes = rasterP->width*4*NUM_LINES;
-    jintArray jpixels;
-
     jpixels = (*env)->NewIntArray(env, nbytes);
     if (JNU_IsNull(env, jpixels)) {
         JNU_ThrowOutOfMemoryError(env, "Out of Memory");
         return -1;
     }
 
-    for (y=0; y < rasterP->height; y+=NUM_LINES) {
-        if (y+numLines > rasterP->height) {
-            numLines = rasterP->height - y;
-            nbytes = rasterP->width*4*numLines;
+    for (y = 0; y < h; y += numLines) {
+        if (y + numLines > h) {
+            numLines = h - y;
+            nbytes = numLines * scanLength;
         }
+
+        (*env)->CallObjectMethod(env, imageP->jimage,
+                                 g_BImgGetRGBMID, 0, y,
+                                 w, numLines,
+                                 jpixels, 0, w);
+        if ((*env)->ExceptionOccurred(env)) {
+            (*env)->DeleteLocalRef(env, jpixels);
+            return -1;
+        }
+
         pixels = (*env)->GetPrimitiveArrayCritical(env, jpixels, NULL);
         if (pixels == NULL) {
-            /* JNI error */
+            (*env)->DeleteLocalRef(env, jpixels);
             return -1;
         }
 
+        memcpy(dP, pixels, nbytes);
+        dP += nbytes;
+
+        (*env)->ReleasePrimitiveArrayCritical(env, jpixels, pixels,
+                                              JNI_ABORT);
+    }
+
+    /* Need to release the array */
+    (*env)->DeleteLocalRef(env, jpixels);
+
+    return 0;
+}
+
+static int
+cvtDefaultToCustom(JNIEnv *env, BufImageS_t *imageP, int component,
+                   unsigned char *dataP) {
+    const RasterS_t *rasterP = &imageP->raster;
+    const int w = rasterP->width;
+    const int h = rasterP->height;
+
+    int y;
+    jintArray jpixels = NULL;
+    jint *pixels;
+    unsigned char *dP = dataP;
+    int numLines = h > NUM_LINES ? NUM_LINES : h;
+
+    /* it is safe to calculate the scan length, because width has been verified
+     * on creation of the mlib image
+     */
+    const int scanLength = w * 4;
+
+    int nbytes = 0;
+    if (!SAFE_TO_MULT(numLines, scanLength)) {
+        return -1;
+    }
+
+    nbytes = numLines * scanLength;
+
+    jpixels = (*env)->NewIntArray(env, nbytes);
+    if (JNU_IsNull(env, jpixels)) {
+        JNU_ThrowOutOfMemoryError(env, "Out of Memory");
+        return -1;
+    }
+
+    for (y = 0; y < h; y += numLines) {
+        if (y + numLines > h) {
+            numLines = h - y;
+            nbytes = numLines * scanLength;
+        }
+
+        pixels = (*env)->GetPrimitiveArrayCritical(env, jpixels, NULL);
+        if (pixels == NULL) {
+            (*env)->DeleteLocalRef(env, jpixels);
+            return -1;
+        }
+
         memcpy(pixels, dP, nbytes);
         dP += nbytes;
 
        (*env)->ReleasePrimitiveArrayCritical(env, jpixels, pixels, 0);
 
-       /* setData, one scanline at a time */
-       /* Fix 4223648, 4184283 */
        (*env)->CallVoidMethod(env, imageP->jimage, g_BImgSetRGBMID, 0, y,
-                                rasterP->width, numLines, jpixels, 0,
-                                rasterP->width);
+                                w, numLines, jpixels,
+                                0, w);
        if ((*env)->ExceptionOccurred(env)) {
+           (*env)->DeleteLocalRef(env, jpixels);
            return -1;
        }
     }
@@ -2298,7 +2286,6 @@
                     mlib_image **mlibImagePP, void **dataPP, int isSrc) {
     void *dataP;
     unsigned char *cDataP;
-    unsigned short *sdataP;
     int dataType = BYTE_DATA_TYPE;
     int width;
     int height;
@@ -2484,8 +2471,7 @@
             return -1;
         }
         if (isSrc) {
-            cDataP  = (unsigned char *) mlib_ImageGetData(*mlibImagePP);
-            if (awt_getPixelByte(env, -1, rasterP, cDataP) < 0) {
+            if (awt_getPixels(env, rasterP, mlib_ImageGetData(*mlibImagePP)) < 0) {
                 (*sMlibSysFns.deleteImageFP)(*mlibImagePP);
                 return -1;
             }
@@ -2499,8 +2485,7 @@
             return -1;
         }
         if (isSrc) {
-            sdataP  = (unsigned short *) mlib_ImageGetData(*mlibImagePP);
-            if (awt_getPixelShort(env, -1, rasterP, sdataP) < 0) {
+            if (awt_getPixels(env, rasterP, mlib_ImageGetData(*mlibImagePP)) < 0) {
                 (*sMlibSysFns.deleteImageFP)(*mlibImagePP);
                 return -1;
             }
@@ -2550,60 +2535,6 @@
     }
 }
 
-static int
-storeDstArray(JNIEnv *env,  BufImageS_t *srcP, BufImageS_t *dstP,
-              mlibHintS_t *hintP, mlib_image *mlibImP, void *ddata) {
-    RasterS_t *rasterP = &dstP->raster;
-
-    /* Nothing to do since it is the same image type */
-    if (srcP->imageType == dstP->imageType
-        && srcP->imageType != java_awt_image_BufferedImage_TYPE_CUSTOM
-        && srcP->imageType != java_awt_image_BufferedImage_TYPE_BYTE_INDEXED
-        && srcP->imageType != java_awt_image_BufferedImage_TYPE_BYTE_BINARY) {
-        /* REMIND: Should check the ICM LUTS to see if it is the same */
-        return 0;
-    }
-
-    /* These types are compatible with TYPE_INT_RGB */
-    if (srcP->imageType == java_awt_image_BufferedImage_TYPE_INT_RGB
-        && (dstP->imageType == java_awt_image_BufferedImage_TYPE_INT_ARGB ||
-           dstP->imageType == java_awt_image_BufferedImage_TYPE_INT_ARGB_PRE)){
-        return 0;
-    }
-
-    if (hintP->cvtSrcToDefault &&
-        (srcP->cmodel.isAlphaPre == dstP->cmodel.isAlphaPre)) {
-        if (srcP->cmodel.isAlphaPre) {
-            if (dstP->imageType ==
-                java_awt_image_BufferedImage_TYPE_INT_ARGB_PRE)
-            {
-                return 0;
-            }
-            if (!srcP->cmodel.supportsAlpha &&
-                dstP->imageType == java_awt_image_BufferedImage_TYPE_INT_RGB){
-                return 0;
-            }
-        }
-        else {
-            /* REMIND: */
-        }
-    }
-
-    if (dstP->cmodel.cmType == DIRECT_CM_TYPE) {
-        /* Just need to move bits */
-        if (mlibImP->type == MLIB_BYTE) {
-            return awt_setPixelByte(env, -1, &dstP->raster,
-                                    (unsigned char *) mlibImP->data);
-        }
-        else if (mlibImP->type == MLIB_SHORT) {
-            return awt_setPixelByte(env, -1, &dstP->raster,
-                                    (unsigned char *) mlibImP->data);
-        }
-    }
-
-    return 0;
-}
-
 #define ERR_BAD_IMAGE_LAYOUT (-2)
 
 #define CHECK_DST_ARRAY(start_offset, elements_per_scan, elements_per_pixel) \
@@ -2709,8 +2640,7 @@
             }
         }
         else if (mlibImP->type == MLIB_SHORT) {
-            return awt_setPixelShort(env, -1, rasterP,
-                                    (unsigned short *) mlibImP->data);
+            return awt_setPixels(env, rasterP, mlibImP->data);
         }
     }
     else {
--- a/src/share/native/sun/font/layout/GlyphIterator.cpp	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/native/sun/font/layout/GlyphIterator.cpp	Tue Oct 01 14:22:36 2013 -0700
@@ -66,6 +66,7 @@
         nextLimit = -1;
         prevLimit = glyphCount;
     }
+    filterResetCache();
 }
 
 GlyphIterator::GlyphIterator(GlyphIterator &that)
@@ -84,6 +85,7 @@
     glyphGroup  = that.glyphGroup;
     glyphClassDefinitionTable = that.glyphClassDefinitionTable;
     markAttachClassDefinitionTable = that.markAttachClassDefinitionTable;
+    filterResetCache();
 }
 
 GlyphIterator::GlyphIterator(GlyphIterator &that, FeatureMask newFeatureMask)
@@ -102,6 +104,7 @@
     glyphGroup  = 0;
     glyphClassDefinitionTable = that.glyphClassDefinitionTable;
     markAttachClassDefinitionTable = that.markAttachClassDefinitionTable;
+    filterResetCache();
 }
 
 GlyphIterator::GlyphIterator(GlyphIterator &that, le_uint16 newLookupFlags)
@@ -120,6 +123,7 @@
     glyphGroup  = that.glyphGroup;
     glyphClassDefinitionTable = that.glyphClassDefinitionTable;
     markAttachClassDefinitionTable = that.markAttachClassDefinitionTable;
+    filterResetCache();
 }
 
 GlyphIterator::~GlyphIterator()
@@ -133,6 +137,7 @@
     featureMask  = newFeatureMask;
     glyphGroup   = 0;
     lookupFlags  = newLookupFlags;
+    filterResetCache();
 }
 
 LEGlyphID *GlyphIterator::insertGlyphs(le_int32 count, LEErrorCode& success)
@@ -381,53 +386,68 @@
     glyphPositionAdjustments->setCursiveGlyph(position, baselineIsLogicalEnd());
 }
 
-le_bool GlyphIterator::filterGlyph(le_uint32 index) const
-{
-    LEErrorCode success = LE_NO_ERROR;
-    LEGlyphID glyphID = glyphStorage[index];
-    le_int32 glyphClass = gcdNoGlyphClass;
-
-    if (LE_GET_GLYPH(glyphID) >= 0xFFFE) {
-        return TRUE;
+void GlyphIterator::filterResetCache(void) {
+  filterCacheValid = FALSE;
     }
 
+le_bool GlyphIterator::filterGlyph(le_uint32 index)
+{
+    LEGlyphID glyphID = glyphStorage[index];
+
+    if (!filterCacheValid || filterCache.id != glyphID) {
+      filterCache.id = glyphID;
+
+      le_bool &filterResult = filterCache.result;  // NB: Making this a reference to accept the updated value, in case
+                                               // we want more fancy cacheing in the future.
+    if (LE_GET_GLYPH(glyphID) >= 0xFFFE) {
+        filterResult = TRUE;
+      } else {
+        LEErrorCode success = LE_NO_ERROR;
+        le_int32 glyphClass = gcdNoGlyphClass;
     if (glyphClassDefinitionTable.isValid()) {
       glyphClass = glyphClassDefinitionTable->getGlyphClass(glyphClassDefinitionTable, glyphID, success);
     }
-
-    switch (glyphClass)
-    {
+        switch (glyphClass) {
     case gcdNoGlyphClass:
-        return FALSE;
+          filterResult = FALSE;
+          break;
 
     case gcdSimpleGlyph:
-        return (lookupFlags & lfIgnoreBaseGlyphs) != 0;
+          filterResult = (lookupFlags & lfIgnoreBaseGlyphs) != 0;
+          break;
 
     case gcdLigatureGlyph:
-        return (lookupFlags & lfIgnoreLigatures) != 0;
+          filterResult = (lookupFlags & lfIgnoreLigatures) != 0;
+          break;
 
     case gcdMarkGlyph:
-    {
         if ((lookupFlags & lfIgnoreMarks) != 0) {
-            return TRUE;
-        }
-
+            filterResult = TRUE;
+          } else {
         le_uint16 markAttachType = (lookupFlags & lfMarkAttachTypeMask) >> lfMarkAttachTypeShift;
 
         if ((markAttachType != 0) && (markAttachClassDefinitionTable.isValid())) {
-          return markAttachClassDefinitionTable
-            -> getGlyphClass(markAttachClassDefinitionTable, glyphID, success) != markAttachType;
+              filterResult = (markAttachClassDefinitionTable
+                          -> getGlyphClass(markAttachClassDefinitionTable, glyphID, success) != markAttachType);
+            } else {
+              filterResult = FALSE;
+        }
+    }
+          break;
+
+    case gcdComponentGlyph:
+          filterResult = ((lookupFlags & lfIgnoreBaseGlyphs) != 0);
+          break;
+
+    default:
+          filterResult = FALSE;
+          break;
+    }
+      }
+      filterCacheValid = TRUE;
         }
 
-        return FALSE;
-    }
-
-    case gcdComponentGlyph:
-        return (lookupFlags & lfIgnoreBaseGlyphs) != 0;
-
-    default:
-        return FALSE;
-    }
+    return filterCache.result;
 }
 
 le_bool GlyphIterator::hasFeatureTag(le_bool matchGroup) const
--- a/src/share/native/sun/font/layout/GlyphIterator.h	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/native/sun/font/layout/GlyphIterator.h	Tue Oct 01 14:22:36 2013 -0700
@@ -98,7 +98,7 @@
     le_int32 applyInsertions();
 
 private:
-    le_bool filterGlyph(le_uint32 index) const;
+    le_bool filterGlyph(le_uint32 index);
     le_bool hasFeatureTag(le_bool matchGroup) const;
     le_bool nextInternal(le_uint32 delta = 1);
     le_bool prevInternal(le_uint32 delta = 1);
@@ -121,6 +121,14 @@
     LEReferenceTo<MarkAttachClassDefinitionTable> markAttachClassDefinitionTable;
 
     GlyphIterator &operator=(const GlyphIterator &other); // forbid copying of this class
+
+    struct {
+      LEGlyphID   id;
+      le_bool     result;
+    } filterCache;
+    le_bool   filterCacheValid;
+
+    void filterResetCache(void);
 };
 
 U_NAMESPACE_END
--- a/src/share/native/sun/font/layout/LETableReference.h	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/native/sun/font/layout/LETableReference.h	Tue Oct 01 14:22:36 2013 -0700
@@ -377,7 +377,7 @@
    * @param success error status
    * @param atPtr location of reference - if NULL, will be at offset zero (i.e. downcast of parent). Otherwise must be a pointer within parent's bounds.
    */
-  LEReferenceTo(const LETableReference &parent, LEErrorCode &success, const void* atPtr)
+ inline LEReferenceTo(const LETableReference &parent, LEErrorCode &success, const void* atPtr)
     : LETableReference(parent, parent.ptrToOffset(atPtr, success), LE_UINTPTR_MAX, success) {
     verifyLength(0, LETableVarSizer<T>::getSize(), success);
     if(LE_FAILURE(success)) clear();
@@ -385,31 +385,31 @@
   /**
    * ptr plus offset
    */
- LEReferenceTo(const LETableReference &parent, LEErrorCode &success, const void* atPtr, size_t offset)
+ inline LEReferenceTo(const LETableReference &parent, LEErrorCode &success, const void* atPtr, size_t offset)
     : LETableReference(parent, parent.ptrToOffset(atPtr, success)+offset, LE_UINTPTR_MAX, success) {
     verifyLength(0, LETableVarSizer<T>::getSize(), success);
     if(LE_FAILURE(success)) clear();
   }
-  LEReferenceTo(const LETableReference &parent, LEErrorCode &success, size_t offset)
+ inline LEReferenceTo(const LETableReference &parent, LEErrorCode &success, size_t offset)
     : LETableReference(parent, offset, LE_UINTPTR_MAX, success) {
     verifyLength(0, LETableVarSizer<T>::getSize(), success);
     if(LE_FAILURE(success)) clear();
   }
-  LEReferenceTo(const LETableReference &parent, LEErrorCode &success)
+ inline LEReferenceTo(const LETableReference &parent, LEErrorCode &success)
     : LETableReference(parent, 0, LE_UINTPTR_MAX, success) {
     verifyLength(0, LETableVarSizer<T>::getSize(), success);
     if(LE_FAILURE(success)) clear();
   }
- LEReferenceTo(const LEFontInstance *font, LETag tableTag, LEErrorCode &success)
+ inline LEReferenceTo(const LEFontInstance *font, LETag tableTag, LEErrorCode &success)
    : LETableReference(font, tableTag, success) {
     verifyLength(0, LETableVarSizer<T>::getSize(), success);
     if(LE_FAILURE(success)) clear();
   }
- LEReferenceTo(const le_uint8 *data, size_t length = LE_UINTPTR_MAX) : LETableReference(data, length) {}
- LEReferenceTo(const T *data, size_t length = LE_UINTPTR_MAX) : LETableReference((const le_uint8*)data, length) {}
-  LEReferenceTo() : LETableReference(NULL) {}
+ inline LEReferenceTo(const le_uint8 *data, size_t length = LE_UINTPTR_MAX) : LETableReference(data, length) {}
+ inline LEReferenceTo(const T *data, size_t length = LE_UINTPTR_MAX) : LETableReference((const le_uint8*)data, length) {}
+ inline LEReferenceTo() : LETableReference(NULL) {}
 
-  LEReferenceTo<T>& operator=(const T* other) {
+ inline LEReferenceTo<T>& operator=(const T* other) {
     setRaw(other);
     return *this;
   }
--- a/src/share/native/sun/font/layout/OpenTypeUtilities.cpp	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/native/sun/font/layout/OpenTypeUtilities.cpp	Tue Oct 01 14:22:36 2013 -0700
@@ -79,6 +79,7 @@
 
 Offset OpenTypeUtilities::getTagOffset(LETag tag, const LEReferenceToArrayOf<TagAndOffsetRecord> &records, LEErrorCode &success)
 {
+  const TagAndOffsetRecord *r0 = (const TagAndOffsetRecord*)records.getAlias();
   if(LE_FAILURE(success)) return 0;
 
   le_uint32 recordCount = records.getCount();
@@ -89,17 +90,17 @@
   le_int32 index = 0;
 
   {
-    const ATag &aTag = records.getAlias(extra,success)->tag;
+    const ATag &aTag = (r0+extra)->tag;
     if (SWAPT(aTag) <= tag) {
       index = extra;
     }
   }
 
-  while (probe > (1 << 0) && LE_SUCCESS(success)) {
+  while (probe > (1 << 0)) {
     probe >>= 1;
 
     {
-      const ATag &aTag = records.getAlias(index+probe,success)->tag;
+      const ATag &aTag = (r0+index+probe)->tag;
       if (SWAPT(aTag) <= tag) {
         index += probe;
       }
@@ -107,9 +108,9 @@
   }
 
   {
-    const ATag &aTag = records.getAlias(index,success)->tag;
+    const ATag &aTag = (r0+index)->tag;
     if (SWAPT(aTag) == tag) {
-      return SWAPW(records.getAlias(index,success)->offset);
+      return SWAPW((r0+index)->offset);
     }
   }
 
--- a/src/share/native/sun/font/layout/SunLayoutEngine.cpp	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/native/sun/font/layout/SunLayoutEngine.cpp	Tue Oct 01 14:22:36 2013 -0700
@@ -104,6 +104,10 @@
 
 int putGV(JNIEnv* env, jint gmask, jint baseIndex, jobject gvdata, const LayoutEngine* engine, int glyphCount) {
     int count = env->GetIntField(gvdata, gvdCountFID);
+    if (count < 0) {
+      JNU_ThrowInternalError(env, "count negative");
+      return 0;
+    }
 
     jarray glyphArray = (jarray)env->GetObjectField(gvdata, gvdGlyphsFID);
     if (IS_NULL(glyphArray)) {
--- a/src/share/native/sun/java2d/cmm/lcms/cmsio0.c	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/native/sun/java2d/cmm/lcms/cmsio0.c	Tue Oct 01 14:22:36 2013 -0700
@@ -1074,6 +1074,27 @@
 }
 
 
+static
+cmsBool SanityCheck(_cmsICCPROFILE* profile)
+{
+    cmsIOHANDLER* io = profile->IOhandler;
+    if (!io) {
+        return FALSE;
+    }
+
+    if (!io->Seek ||
+        !(io->Seek==NULLSeek || io->Seek==MemorySeek || io->Seek==FileSeek))
+    {
+        return FALSE;
+    }
+    if (!io->Read ||
+        !(io->Read==NULLRead || io->Read==MemoryRead || io->Read==FileRead))
+    {
+        return FALSE;
+    }
+
+    return TRUE;
+}
 
 // Dump tag contents. If the profile is being modified, untouched tags are copied from FileOrig
 static
@@ -1087,6 +1108,7 @@
     cmsTagTypeSignature TypeBase;
     cmsTagTypeHandler* TypeHandler;
 
+    if (!SanityCheck(FileOrig)) return FALSE;
 
     for (i=0; i < Icc -> TagCount; i++) {
 
@@ -1292,8 +1314,8 @@
     // Should we just calculate the needed space?
     if (MemPtr == NULL) {
 
-           *BytesNeeded =  cmsSaveProfileToIOhandler(hProfile, NULL);
-            return TRUE;
+        *BytesNeeded = cmsSaveProfileToIOhandler(hProfile, NULL);
+        return (*BytesNeeded == 0 ? FALSE : TRUE);
     }
 
     // That is a real write operation
--- a/src/share/native/sun/management/HotSpotDiagnostic.c	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/share/native/sun/management/HotSpotDiagnostic.c	Tue Oct 01 14:22:36 2013 -0700
@@ -29,7 +29,7 @@
 #include "sun_management_HotSpotDiagnostic.h"
 
 JNIEXPORT void JNICALL
-Java_sun_management_HotSpotDiagnostic_dumpHeap
+Java_sun_management_HotSpotDiagnostic_dumpHeap0
   (JNIEnv *env, jobject dummy, jstring outputfile, jboolean live)
 {
     jmm_interface->DumpHeap0(env, outputfile, live);
--- a/src/solaris/bin/java_md_solinux.c	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/solaris/bin/java_md_solinux.c	Tue Oct 01 14:22:36 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -956,9 +956,27 @@
 
 void* SplashProcAddress(const char* name) {
     if (!hSplashLib) {
-        const char * splashLibPath;
-        splashLibPath = SPLASHSCREEN_SO;
-        hSplashLib = dlopen(splashLibPath, RTLD_LAZY | RTLD_GLOBAL);
+        int ret;
+        char jrePath[MAXPATHLEN];
+        char splashPath[MAXPATHLEN];
+
+        if (!GetJREPath(jrePath, sizeof(jrePath), GetArch(), JNI_FALSE)) {
+            JLI_ReportErrorMessage(JRE_ERROR1);
+            return NULL;
+        }
+        ret = JLI_Snprintf(splashPath, sizeof(splashPath), "%s/lib/%s/%s",
+                     jrePath, GetArch(), SPLASHSCREEN_SO);
+
+        if (ret >= (int) sizeof(splashPath)) {
+            JLI_ReportErrorMessage(JRE_ERROR11);
+            return NULL;
+        }
+        if (ret < 0) {
+            JLI_ReportErrorMessage(JRE_ERROR13);
+            return NULL;
+        }
+        hSplashLib = dlopen(splashPath, RTLD_LAZY | RTLD_GLOBAL);
+        JLI_TraceLauncher("Info: loaded %s\n", splashPath);
     }
     if (hSplashLib) {
         void* sym = dlsym(hSplashLib, name);
--- a/src/solaris/classes/sun/nio/ch/DevPollArrayWrapper.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/solaris/classes/sun/nio/ch/DevPollArrayWrapper.java	Tue Oct 01 14:22:36 2013 -0700
@@ -26,9 +26,11 @@
 package sun.nio.ch;
 
 import java.io.IOException;
+import java.security.AccessController;
 import java.util.BitSet;
 import java.util.Map;
 import java.util.HashMap;
+import sun.security.action.GetIntegerAction;
 
 
 /**
@@ -78,10 +80,11 @@
     static final int   NUM_POLLFDS   = Math.min(OPEN_MAX-1, 8192);
 
     // Initial size of arrays for fd registration changes
-    private final int INITIAL_PENDING_UPDATE_SIZE = 64;
+    private static final int INITIAL_PENDING_UPDATE_SIZE = 64;
 
     // maximum size of updatesLow
-    private final int MAX_UPDATE_ARRAY_SIZE = Math.min(OPEN_MAX, 64*1024);
+    private static final int MAX_UPDATE_ARRAY_SIZE = AccessController.doPrivileged(
+        new GetIntegerAction("sun.nio.ch.maxUpdateArraySize", Math.min(OPEN_MAX, 64*1024)));
 
     // The pollfd array for results from devpoll driver
     private final AllocatedNativeObject pollArray;
--- a/src/solaris/classes/sun/nio/ch/EPollArrayWrapper.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/solaris/classes/sun/nio/ch/EPollArrayWrapper.java	Tue Oct 01 14:22:36 2013 -0700
@@ -26,9 +26,11 @@
 package sun.nio.ch;
 
 import java.io.IOException;
+import java.security.AccessController;
 import java.util.BitSet;
 import java.util.HashMap;
 import java.util.Map;
+import sun.security.action.GetIntegerAction;
 
 /**
  * Manipulates a native array of epoll_event structs on Linux:
@@ -78,8 +80,8 @@
     private static final int INITIAL_PENDING_UPDATE_SIZE = 64;
 
     // maximum size of updatesLow
-    private static final int MAX_UPDATE_ARRAY_SIZE = Math.min(OPEN_MAX, 64*1024);
-
+    private static final int MAX_UPDATE_ARRAY_SIZE = AccessController.doPrivileged(
+        new GetIntegerAction("sun.nio.ch.maxUpdateArraySize", Math.min(OPEN_MAX, 64*1024)));
 
     // The fd of the epoll driver
     private final int epfd;
@@ -164,6 +166,16 @@
     }
 
     /**
+     * Returns {@code true} if updates for the given key (file
+     * descriptor) are killed.
+     */
+    private boolean isEventsHighKilled(Integer key) {
+        assert key >= MAX_UPDATE_ARRAY_SIZE;
+        Byte value = eventsHigh.get(key);
+        return (value != null && value == KILLED);
+    }
+
+    /**
      * Sets the pending update events for the given file descriptor. This
      * method has no effect if the update events is already set to KILLED,
      * unless {@code force} is {@code true}.
@@ -175,7 +187,7 @@
             }
         } else {
             Integer key = Integer.valueOf(fd);
-            if ((eventsHigh.get(key) != KILLED) || force) {
+            if (!isEventsHighKilled(key) || force) {
                 eventsHigh.put(key, Byte.valueOf(events));
             }
         }
--- a/src/solaris/classes/sun/nio/ch/EventPortWrapper.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/solaris/classes/sun/nio/ch/EventPortWrapper.java	Tue Oct 01 14:22:36 2013 -0700
@@ -25,9 +25,14 @@
 
 package sun.nio.ch;
 
+import java.io.IOException;
+import java.security.AccessController;
+import java.util.BitSet;
+import java.util.HashMap;
+import java.util.Map;
+
 import sun.misc.Unsafe;
-import java.io.IOException;
-import java.util.*;
+import sun.security.action.GetIntegerAction;
 import static sun.nio.ch.SolarisEventPort.*;
 
 /**
@@ -49,7 +54,8 @@
     private final int INITIAL_PENDING_UPDATE_SIZE = 256;
 
     // maximum size of updateArray
-    private final int MAX_UPDATE_ARRAY_SIZE = Math.min(OPEN_MAX, 64*1024);
+    private static final int MAX_UPDATE_ARRAY_SIZE = AccessController.doPrivileged(
+        new GetIntegerAction("sun.nio.ch.maxUpdateArraySize", Math.min(OPEN_MAX, 64*1024)));
 
     // special update status to indicate that it should be ignored
     private static final byte IGNORE = -1;
--- a/src/solaris/native/java/net/Inet6AddressImpl.c	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/solaris/native/java/net/Inet6AddressImpl.c	Tue Oct 01 14:22:36 2013 -0700
@@ -122,7 +122,6 @@
 static jclass ni_ia6cls;
 static jmethodID ni_ia4ctrID;
 static jmethodID ni_ia6ctrID;
-static jfieldID ni_ia6ipaddressID;
 static int initialized = 0;
 
 /*
@@ -158,7 +157,6 @@
       ni_ia6cls = (*env)->NewGlobalRef(env, ni_ia6cls);
       ni_ia4ctrID = (*env)->GetMethodID(env, ni_ia4cls, "<init>", "()V");
       ni_ia6ctrID = (*env)->GetMethodID(env, ni_ia6cls, "<init>", "()V");
-      ni_ia6ipaddressID = (*env)->GetFieldID(env, ni_ia6cls, "ipaddress", "[B");
       initialized = 1;
     }
 
@@ -306,6 +304,7 @@
             }
 
             while (iterator != NULL) {
+              int ret1;
               if (iterator->ai_family == AF_INET) {
                 jobject iaObj = (*env)->NewObject(env, ni_ia4cls, ni_ia4ctrID);
                 if (IS_NULL(iaObj)) {
@@ -318,20 +317,17 @@
                 inetIndex++;
               } else if (iterator->ai_family == AF_INET6) {
                 jint scope = 0;
-                jbyteArray ipaddress;
 
                 jobject iaObj = (*env)->NewObject(env, ni_ia6cls, ni_ia6ctrID);
                 if (IS_NULL(iaObj)) {
                   ret = NULL;
                   goto cleanupAndReturn;
                 }
-                ipaddress = (*env)->NewByteArray(env, 16);
-                if (IS_NULL(ipaddress)) {
-                  ret = NULL;
-                  goto cleanupAndReturn;
+                ret1 = setInet6Address_ipaddress(env, iaObj, (char *)&(((struct sockaddr_in6*)iterator->ai_addr)->sin6_addr));
+                if (!ret1) {
+                    ret = NULL;
+                    goto cleanupAndReturn;
                 }
-                (*env)->SetByteArrayRegion(env, ipaddress, 0, 16,
-                                           (jbyte *)&(((struct sockaddr_in6*)iterator->ai_addr)->sin6_addr));
 #ifdef __linux__
                 if (!kernelIsV22()) {
                   scope = ((struct sockaddr_in6*)iterator->ai_addr)->sin6_scope_id;
@@ -340,10 +336,8 @@
                 scope = ((struct sockaddr_in6*)iterator->ai_addr)->sin6_scope_id;
 #endif
                 if (scope != 0) { /* zero is default value, no need to set */
-                  (*env)->SetIntField(env, iaObj, ia6_scopeidID, scope);
-                  (*env)->SetBooleanField(env, iaObj, ia6_scopeidsetID, JNI_TRUE);
+                  setInet6Address_scopeid(env, iaObj, scope);
                 }
-                (*env)->SetObjectField(env, iaObj, ni_ia6ipaddressID, ipaddress);
                 setInetAddress_hostName(env, iaObj, host);
                 (*env)->SetObjectArrayElement(env, ret, inet6Index, iaObj);
                 inet6Index++;
--- a/src/solaris/native/java/net/NetworkInterface.c	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/solaris/native/java/net/NetworkInterface.c	Tue Oct 01 14:22:36 2013 -0700
@@ -118,7 +118,6 @@
 static jmethodID ni_ia4ctrID;
 static jmethodID ni_ia6ctrID;
 static jmethodID ni_ibctrID;
-static jfieldID ni_ia6ipaddressID;
 static jfieldID ni_ibaddressID;
 static jfieldID ni_ib4broadcastID;
 static jfieldID ni_ib4maskID;
@@ -193,7 +192,6 @@
     ni_ia4ctrID = (*env)->GetMethodID(env, ni_ia4cls, "<init>", "()V");
     ni_ia6ctrID = (*env)->GetMethodID(env, ni_ia6cls, "<init>", "()V");
     ni_ibctrID = (*env)->GetMethodID(env, ni_ibcls, "<init>", "()V");
-    ni_ia6ipaddressID = (*env)->GetFieldID(env, ni_ia6cls, "ipaddress", "[B");
     ni_ibaddressID = (*env)->GetFieldID(env, ni_ibcls, "address", "Ljava/net/InetAddress;");
     ni_ib4broadcastID = (*env)->GetFieldID(env, ni_ibcls, "broadcast", "Ljava/net/Inet4Address;");
     ni_ib4maskID = (*env)->GetFieldID(env, ni_ibcls, "maskLength", "S");
@@ -332,11 +330,9 @@
 #ifdef AF_INET6
                 if (family == AF_INET6) {
                     jbyte *bytes = (jbyte *)&(((struct sockaddr_in6*)addrP->addr)->sin6_addr);
-                    jbyteArray ipaddress = (*env)->GetObjectField(env, iaObj, ni_ia6ipaddressID);
                     jbyte caddr[16];
                     int i;
-
-                    (*env)->GetByteArrayRegion(env, ipaddress, 0, 16, caddr);
+                    getInet6Address_ipaddress(env, iaObj, (char *)caddr);
                     i = 0;
                     while (i < 16) {
                         if (caddr[i] != bytes[i]) {
@@ -670,21 +666,17 @@
             int scope=0;
             iaObj = (*env)->NewObject(env, ni_ia6cls, ni_ia6ctrID);
             if (iaObj) {
-                jbyteArray ipaddress = (*env)->NewByteArray(env, 16);
-                if (ipaddress == NULL) {
+                int ret = setInet6Address_ipaddress(env, iaObj, (char *)&(((struct sockaddr_in6*)addrP->addr)->sin6_addr));
+                if (ret == JNI_FALSE) {
                     return NULL;
                 }
-                (*env)->SetByteArrayRegion(env, ipaddress, 0, 16,
-                                                                        (jbyte *)&(((struct sockaddr_in6*)addrP->addr)->sin6_addr));
 
                 scope = ((struct sockaddr_in6*)addrP->addr)->sin6_scope_id;
 
                 if (scope != 0) { /* zero is default value, no need to set */
-                    (*env)->SetIntField(env, iaObj, ia6_scopeidID, scope);
-                    (*env)->SetBooleanField(env, iaObj, ia6_scopeidsetID, JNI_TRUE);
-                    (*env)->SetObjectField(env, iaObj, ia6_scopeifnameID, netifObj);
+                    setInet6Address_scopeid(env, iaObj, scope);
+                    setInet6Address_scopeifname(env, iaObj, netifObj);
                 }
-                (*env)->SetObjectField(env, iaObj, ni_ia6ipaddressID, ipaddress);
             }
             ibObj = (*env)->NewObject(env, ni_ibcls, ni_ibctrID);
             if (ibObj) {
--- a/src/solaris/native/java/net/PlainDatagramSocketImpl.c	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/solaris/native/java/net/PlainDatagramSocketImpl.c	Tue Oct 01 14:22:36 2013 -0700
@@ -2359,8 +2359,7 @@
             caddr[14] = ((address >> 8) & 0xff);
             caddr[15] = (address & 0xff);
         } else {
-            ipaddress = (*env)->GetObjectField(env, iaObj, ia6_ipaddressID);
-            (*env)->GetByteArrayRegion(env, ipaddress, 0, 16, caddr);
+            getInet6Address_ipaddress(env, iaObj, caddr);
         }
 
         memcpy((void *)&(mname6.ipv6mr_multiaddr), caddr, sizeof(struct in6_addr));
--- a/src/solaris/native/java/net/net_util_md.c	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/solaris/native/java/net/net_util_md.c	Tue Oct 01 14:22:36 2013 -0700
@@ -823,7 +823,6 @@
     /* needs work. 1. family 2. clean up him6 etc deallocate memory */
     if (ipv6_available() && !(family == IPv4 && v4MappedAddress == JNI_FALSE)) {
         struct sockaddr_in6 *him6 = (struct sockaddr_in6 *)him;
-        jbyteArray ipaddress;
         jbyte caddr[16];
         jint address;
 
@@ -844,8 +843,7 @@
                 caddr[15] = (address & 0xff);
             }
         } else {
-            ipaddress = (*env)->GetObjectField(env, iaObj, ia6_ipaddressID);
-            (*env)->GetByteArrayRegion(env, ipaddress, 0, 16, caddr);
+            getInet6Address_ipaddress(env, iaObj, (char *)caddr);
         }
         memset((char *)him6, 0, sizeof(struct sockaddr_in6));
         him6->sin6_port = htons(port);
@@ -882,7 +880,7 @@
                  */
                 if (!cached_scope_id) {
                     if (ia6_scopeidID) {
-                        scope_id = (int)(*env)->GetIntField(env,iaObj,ia6_scopeidID);
+                        scope_id = getInet6Address_scopeid(env, iaObj);
                     }
                     if (scope_id != 0) {
                         /* check user-specified value for loopback case
@@ -928,7 +926,7 @@
 
         if (family != IPv4) {
             if (ia6_scopeidID) {
-                him6->sin6_scope_id = (int)(*env)->GetIntField(env, iaObj, ia6_scopeidID);
+                him6->sin6_scope_id = getInet6Address_scopeid(env, iaObj);
             }
         }
 #endif
--- a/src/windows/native/java/net/Inet6AddressImpl.c	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/windows/native/java/net/Inet6AddressImpl.c	Tue Oct 01 14:22:36 2013 -0700
@@ -77,7 +77,6 @@
 static jclass ni_ia6cls;
 static jmethodID ni_ia4ctrID;
 static jmethodID ni_ia6ctrID;
-static jfieldID ni_ia6ipaddressID;
 static int initialized = 0;
 
 JNIEXPORT jobjectArray JNICALL
@@ -101,7 +100,6 @@
       ni_ia6cls = (*env)->NewGlobalRef(env, ni_ia6cls);
       ni_ia4ctrID = (*env)->GetMethodID(env, ni_ia4cls, "<init>", "()V");
       ni_ia6ctrID = (*env)->GetMethodID(env, ni_ia6cls, "<init>", "()V");
-      ni_ia6ipaddressID = (*env)->GetFieldID(env, ni_ia6cls, "ipaddress", "[B");
       initialized = 1;
     }
     if (IS_NULL(host)) {
@@ -242,26 +240,22 @@
               (*env)->SetObjectArrayElement(env, ret, inetIndex, iaObj);
                 inetIndex ++;
             } else if (iterator->ai_family == AF_INET6) {
-              jint scope = 0;
-              jbyteArray ipaddress;
+              jint scope = 0, ret1;
               jobject iaObj = (*env)->NewObject(env, ni_ia6cls, ni_ia6ctrID);
               if (IS_NULL(iaObj)) {
                 ret = NULL;
                 goto cleanupAndReturn;
               }
-              ipaddress = (*env)->NewByteArray(env, 16);
-              if (IS_NULL(ipaddress)) {
+              ret1 = setInet6Address_ipaddress(env, iaObj, (jbyte *)&(((struct sockaddr_in6*)iterator->ai_addr)->sin6_addr));
+
+              if (ret1 == JNI_FALSE) {
                 ret = NULL;
                 goto cleanupAndReturn;
               }
-              (*env)->SetByteArrayRegion(env, ipaddress, 0, 16,
-                                         (jbyte *)&(((struct sockaddr_in6*)iterator->ai_addr)->sin6_addr));
               scope = ((struct sockaddr_in6*)iterator->ai_addr)->sin6_scope_id;
               if (scope != 0) { /* zero is default value, no need to set */
-                (*env)->SetIntField(env, iaObj, ia6_scopeidID, scope);
-                (*env)->SetBooleanField(env, iaObj, ia6_scopeidsetID, JNI_TRUE);
+                setInet6Address_scopeid(env, iaObj, scope);
               }
-              (*env)->SetObjectField(env, iaObj, ni_ia6ipaddressID, ipaddress);
               setInetAddress_hostName(env, iaObj, host);
               (*env)->SetObjectArrayElement(env, ret, inet6Index, iaObj);
               inet6Index ++;
--- a/src/windows/native/java/net/NetworkInterface.c	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/windows/native/java/net/NetworkInterface.c	Tue Oct 01 14:22:36 2013 -0700
@@ -72,8 +72,6 @@
 
 jclass ni_ia6cls;           /* Inet6Address */
 jmethodID ni_ia6ctrID;      /* Inet6Address() */
-jfieldID ni_ia6ipaddressID;
-jfieldID ni_ia6ipaddressID;
 
 jclass ni_ibcls;            /* InterfaceAddress */
 jmethodID ni_ibctrID;       /* InterfaceAddress() */
@@ -482,7 +480,6 @@
     ni_ia6cls = (*env)->FindClass(env, "java/net/Inet6Address");
     ni_ia6cls = (*env)->NewGlobalRef(env, ni_ia6cls);
     ni_ia6ctrID = (*env)->GetMethodID(env, ni_ia6cls, "<init>", "()V");
-    ni_ia6ipaddressID = (*env)->GetFieldID(env, ni_ia6cls, "ipaddress", "[B");
 
     ni_ibcls = (*env)->FindClass(env, "java/net/InterfaceAddress");
     ni_ibcls = (*env)->NewGlobalRef(env, ni_ibcls);
@@ -583,19 +580,16 @@
             int scope;
             iaObj = (*env)->NewObject(env, ni_ia6cls, ni_ia6ctrID);
             if (iaObj) {
-                jbyteArray ipaddress = (*env)->NewByteArray(env, 16);
-                if (ipaddress == NULL) {
+                int ret = setInet6Address_ipaddress(env, iaObj,  (jbyte *)&(addrs->addr.him6.sin6_addr.s6_addr));
+                if (ret == JNI_FALSE) {
                     return NULL;
                 }
-                (*env)->SetByteArrayRegion(env, ipaddress, 0, 16,
-                    (jbyte *)&(addrs->addr.him6.sin6_addr.s6_addr));
+
                 scope = addrs->addr.him6.sin6_scope_id;
                 if (scope != 0) { /* zero is default value, no need to set */
-                    (*env)->SetIntField(env, iaObj, ia6_scopeidID, scope);
-                    (*env)->SetBooleanField(env, iaObj, ia6_scopeidsetID, JNI_TRUE);
-                    (*env)->SetObjectField(env, iaObj, ia6_scopeifnameID, netifObj);
+                    setInet6Address_scopeid(env, iaObj, scope);
+                    setInet6Address_scopeifname(env, iaObj, netifObj);
                 }
-                (*env)->SetObjectField(env, iaObj, ni_ia6ipaddressID, ipaddress);
                 ibObj = (*env)->NewObject(env, ni_ibcls, ni_ibctrID);
                 if (ibObj == NULL) {
                   free_netaddr(netaddrP);
--- a/src/windows/native/java/net/NetworkInterface_winXP.c	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/windows/native/java/net/NetworkInterface_winXP.c	Tue Oct 01 14:22:36 2013 -0700
@@ -499,19 +499,15 @@
             int scope;
             iaObj = (*env)->NewObject(env, ni_ia6cls, ni_ia6ctrID);
             if (iaObj) {
-                jbyteArray ipaddress = (*env)->NewByteArray(env, 16);
-                if (ipaddress == NULL) {
+                int ret = setInet6Address_ipaddress(env, iaObj, (jbyte *)&(addrs->addr.him6.sin6_addr.s6_addr));
+                if (ret == JNI_FALSE) {
                     return NULL;
                 }
-                (*env)->SetByteArrayRegion(env, ipaddress, 0, 16,
-                    (jbyte *)&(addrs->addr.him6.sin6_addr.s6_addr));
                 scope = addrs->addr.him6.sin6_scope_id;
                 if (scope != 0) { /* zero is default value, no need to set */
-                    (*env)->SetIntField(env, iaObj, ia6_scopeidID, scope);
-                    (*env)->SetBooleanField(env, iaObj, ia6_scopeidsetID, JNI_TRUE);
-                    (*env)->SetObjectField(env, iaObj, ia6_scopeifnameID, netifObj);
+                    setInet6Address_scopeid(env, iaObj, scope);
+                    setInet6Address_scopeifname(env, iaObj, netifObj);
                 }
-                (*env)->SetObjectField(env, iaObj, ni_ia6ipaddressID, ipaddress);
                 ibObj = (*env)->NewObject(env, ni_ibcls, ni_ibctrID);
                 if (ibObj == NULL) {
                   free_netaddr(netaddrP);
--- a/src/windows/native/java/net/TwoStacksPlainSocketImpl.c	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/windows/native/java/net/TwoStacksPlainSocketImpl.c	Tue Oct 01 14:22:36 2013 -0700
@@ -728,7 +728,6 @@
         setInetAddress_family(env, socketAddressObj, IPv4);
         (*env)->SetObjectField(env, socket, psi_addressID, socketAddressObj);
     } else {
-        jbyteArray addr;
         /* AF_INET6 -> Inet6Address */
         if (inet6Cls == 0) {
             jclass c = (*env)->FindClass(env, "java/net/Inet6Address");
@@ -751,10 +750,10 @@
             NET_SocketClose(fd);
             return;
         }
-        addr = (*env)->GetObjectField (env, socketAddressObj, ia6_ipaddressID);
-        (*env)->SetByteArrayRegion (env, addr, 0, 16, (const char *)&him.him6.sin6_addr);
+        setInet6Address_ipaddress(env, socketAddressObj, (const char *)&him.him6.sin6_addr);
+
         setInetAddress_family(env, socketAddressObj, IPv6);
-        (*env)->SetIntField(env, socketAddressObj, ia6_scopeidID, him.him6.sin6_scope_id);
+        setInet6Address_scopeid(env, socketAddressObj, him.him6.sin6_scope_id);
     }
     /* fields common to AF_INET and AF_INET6 */
 
--- a/src/windows/native/java/net/net_util_md.c	Wed Sep 18 13:51:23 2013 -0700
+++ b/src/windows/native/java/net/net_util_md.c	Tue Oct 01 14:22:36 2013 -0700
@@ -851,7 +851,6 @@
     family = (iafam == IPv4)? AF_INET : AF_INET6;
     if (ipv6_available() && !(family == AF_INET && v4MappedAddress == JNI_FALSE)) {
         struct SOCKADDR_IN6 *him6 = (struct SOCKADDR_IN6 *)him;
-        jbyteArray ipaddress;
         jbyte caddr[16];
         jint address, scopeid = 0;
         jint cached_scope_id = 0;
@@ -872,10 +871,9 @@
                 caddr[15] = (address & 0xff);
             }
         } else {
-            ipaddress = (*env)->GetObjectField(env, iaObj, ia6_ipaddressID);
-            scopeid = (jint)(*env)->GetIntField(env, iaObj, ia6_scopeidID);
+            getInet6Address_ipaddress(env, iaObj, (char *)caddr);
+            scopeid = getInet6Address_scopeid(env, iaObj);
             cached_scope_id = (jint)(*env)->GetIntField(env, iaObj, ia6_cachedscopeidID);
-            (*env)->GetByteArrayRegion(env, ipaddress, 0, 16, caddr);
         }
 
         memset((char *)him6, 0, sizeof(struct SOCKADDR_IN6));
--- a/test/java/io/File/createTempFile/SpecialTempFile.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/test/java/io/File/createTempFile/SpecialTempFile.java	Tue Oct 01 14:22:36 2013 -0700
@@ -23,7 +23,7 @@
 
 /*
  * @test
- * @bug 8013827 8011950
+ * @bug 8013827 8011950 8025128
  * @summary Check whether File.createTempFile can handle special parameters
  *          on Windows platforms
  * @author Dan Xu
@@ -34,7 +34,9 @@
 
 public class SpecialTempFile {
 
-    private static void test(String name, String[] prefix, String[] suffix) {
+    private static void test(String name, String[] prefix, String[] suffix,
+                             boolean expectedException) throws IOException
+    {
         if (prefix == null || suffix == null
             || prefix.length != suffix.length)
         {
@@ -42,39 +44,59 @@
         }
 
         final String exceptionMsg = "Unable to create temporary file";
-        final String errMsg = "IOException is expected";
 
         for (int i = 0; i < prefix.length; i++) {
             boolean exceptionThrown = false;
             File f = null;
-            System.out.println("In test " + name
-                               + ", creating temp file with prefix, "
-                               + prefix[i] + ", suffix, " + suffix[i]);
-            try {
-                f = File.createTempFile(prefix[i], suffix[i]);
-            } catch (IOException e) {
-                if (exceptionMsg.equals(e.getMessage()))
-                    exceptionThrown = true;
-                else
-                    System.out.println("Wrong error message:" + e.getMessage());
+
+            String[] dirs = { null, "." };
+
+            for (String dir : dirs ) {
+                System.out.println("In test " + name +
+                                   ", creating temp file with prefix, " +
+                                   prefix[i] + ", suffix, " + suffix[i] +
+                                   ", in dir, " + dir);
+
+                try {
+                    if (dir == null || dir.isEmpty())
+                        f = File.createTempFile(prefix[i], suffix[i]);
+                    else
+                        f = File.createTempFile(prefix[i], suffix[i], new File(dir));
+                } catch (IOException e) {
+                    if (expectedException) {
+                        if (e.getMessage().startsWith(exceptionMsg))
+                            exceptionThrown = true;
+                        else
+                            System.out.println("Wrong error message:" +
+                                               e.getMessage());
+                    } else {
+                        throw e;
+                    }
+                }
+
+                if (expectedException && (!exceptionThrown || f != null))
+                    throw new RuntimeException("IOException is expected");
             }
-            if (!exceptionThrown || f != null)
-                throw new RuntimeException(errMsg);
         }
     }
 
     public static void main(String[] args) throws Exception {
+        // Test JDK-8025128
+        String[] goodPre = { "///..///", "/foo" };
+        String[] goodSuf = { ".temp", ".tmp" };
+        test("goodName", goodPre, goodSuf, false);
+
+        // Test JDK-8011950
+        String[] slashPre = { "temp", "///..///", "/foo" };
+        String[] slashSuf = { "///..///..", "///..///..", "///..///.." };
+        test("SlashedName", slashPre, slashSuf, true);
+
         if (!System.getProperty("os.name").startsWith("Windows"))
             return;
 
         // Test JDK-8013827
         String[] resvPre = { "LPT1.package.zip", "com7.4.package.zip" };
         String[] resvSuf = { ".temp", ".temp" };
-        test("ReservedName", resvPre, resvSuf);
-
-        // Test JDK-8011950
-        String[] slashPre = { "///..///", "temp", "///..///" };
-        String[] slashSuf = { ".temp", "///..///..", "///..///.." };
-        test("SlashedName", slashPre, slashSuf);
+        test("ReservedName", resvPre, resvSuf, true);
     }
 }
--- a/test/java/io/IOException/LastErrorString.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/test/java/io/IOException/LastErrorString.java	Tue Oct 01 14:22:36 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -22,7 +22,7 @@
  */
 
 /* @test
-   @bug 4167937
+   @bug 4167937 8023964
    @ignore Test truncates system files when run as root, see 7042603
    @summary Test code paths that use the JVM_LastErrorString procedure
  */
--- a/test/java/lang/SecurityManager/CheckPackageAccess.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/test/java/lang/SecurityManager/CheckPackageAccess.java	Tue Oct 01 14:22:36 2013 -0700
@@ -74,6 +74,7 @@
         "com.sun.org.apache.xml.internal.serializer.utils.",
         "com.sun.org.apache.xml.internal.utils.",
         "com.sun.org.glassfish.",
+        "com.sun.script.",
         "oracle.jrockit.jfr.",
         "org.jcp.xml.dsig.internal.",
     };
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/lang/invoke/MethodHandleConstants.java	Tue Oct 01 14:22:36 2013 -0700
@@ -0,0 +1,188 @@
+/*
+ * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/* @test
+ * @bug 8022066
+ * @summary smoke test for method handle constants
+ * @build indify.Indify
+ * @compile MethodHandleConstants.java
+ * @run main/othervm
+ *      indify.Indify
+ *      --verify-specifier-count=0
+ *      --expand-properties --classpath ${test.classes}
+ *      --java test.java.lang.invoke.MethodHandleConstants --check-output
+ * @run main/othervm
+ *      indify.Indify
+ *      --expand-properties --classpath ${test.classes}
+ *      --java test.java.lang.invoke.MethodHandleConstants --security-manager
+ */
+
+package test.java.lang.invoke;
+
+import java.util.*;
+import java.io.*;
+import java.lang.invoke.*;
+import java.security.*;
+
+import static java.lang.invoke.MethodHandles.*;
+import static java.lang.invoke.MethodType.*;
+
+public class MethodHandleConstants {
+    public static void main(String... av) throws Throwable {
+        if (av.length > 0 && av[0].equals("--check-output"))  openBuf();
+        if (av.length > 0 && av[0].equals("--security-manager"))  setSM();
+        System.out.println("Obtaining method handle constants:");
+        testCase(MH_String_replace_C2(), String.class, "replace", String.class, String.class, char.class, char.class);
+        testCase(MH_MethodHandle_invokeExact_SC2(), MethodHandle.class, "invokeExact", String.class, MethodHandle.class, String.class, char.class, char.class);
+        testCase(MH_MethodHandle_invoke_SC2(), MethodHandle.class, "invoke", String.class, MethodHandle.class, String.class, char.class, char.class);
+        testCase(MH_Class_forName_S(), Class.class, "forName", Class.class, String.class);
+        testCase(MH_Class_forName_SbCL(), Class.class, "forName", Class.class, String.class, boolean.class, ClassLoader.class);
+        System.out.println("Done.");
+        closeBuf();
+    }
+
+    private static void testCase(MethodHandle mh, Class<?> defc, String name, Class<?> rtype, Class<?>... ptypes) throws Throwable {
+        System.out.println(mh);
+        // we include defc, because we assume it is a non-static MH:
+        MethodType mt = methodType(rtype, ptypes);
+        assertEquals(mh.type(), mt);
+        // FIXME: Use revealDirect to find out more
+    }
+    private static void assertEquals(Object exp, Object act) {
+        if (exp == act || (exp != null && exp.equals(act)))  return;
+        throw new AssertionError("not equal: "+exp+", "+act);
+    }
+
+    private static void setSM() {
+        Policy.setPolicy(new TestPolicy());
+        System.setSecurityManager(new SecurityManager());
+    }
+
+    private static PrintStream oldOut;
+    private static ByteArrayOutputStream buf;
+    private static void openBuf() {
+        oldOut = System.out;
+        buf = new ByteArrayOutputStream();
+        System.setOut(new PrintStream(buf));
+    }
+    private static void closeBuf() {
+        if (buf == null)  return;
+        System.out.flush();
+        System.setOut(oldOut);
+        String[] haveLines = new String(buf.toByteArray()).split("[\n\r]+");
+        for (String line : haveLines)  System.out.println(line);
+        Iterator<String> iter = Arrays.asList(haveLines).iterator();
+        for (String want : EXPECT_OUTPUT) {
+            String have = iter.hasNext() ? iter.next() : "[EOF]";
+            if (want.equals(have))  continue;
+            System.err.println("want line: "+want);
+            System.err.println("have line: "+have);
+            throw new AssertionError("unexpected output: "+have);
+        }
+        if (iter.hasNext())
+            throw new AssertionError("unexpected output: "+iter.next());
+    }
+    private static final String[] EXPECT_OUTPUT = {
+        "Obtaining method handle constants:",
+        "MethodHandle(String,char,char)String",
+        "MethodHandle(MethodHandle,String,char,char)String",
+        "MethodHandle(MethodHandle,String,char,char)String",
+        "MethodHandle(String)Class",
+        "MethodHandle(String,boolean,ClassLoader)Class",
+        "Done."
+    };
+
+    // String.replace(String, char, char)
+    private static MethodType MT_String_replace_C2() {
+        shouldNotCallThis();
+        return methodType(String.class, char.class, char.class);
+    }
+    private static MethodHandle MH_String_replace_C2() throws ReflectiveOperationException {
+        shouldNotCallThis();
+        return lookup().findVirtual(String.class, "replace", MT_String_replace_C2());
+    }
+
+    // MethodHandle.invokeExact(...)
+    private static MethodType MT_MethodHandle_invokeExact_SC2() {
+        shouldNotCallThis();
+        return methodType(String.class, String.class, char.class, char.class);
+    }
+    private static MethodHandle MH_MethodHandle_invokeExact_SC2() throws ReflectiveOperationException {
+        shouldNotCallThis();
+        return lookup().findVirtual(MethodHandle.class, "invokeExact", MT_MethodHandle_invokeExact_SC2());
+    }
+
+    // MethodHandle.invoke(...)
+    private static MethodType MT_MethodHandle_invoke_SC2() {
+        shouldNotCallThis();
+        return methodType(String.class, String.class, char.class, char.class);
+    }
+    private static MethodHandle MH_MethodHandle_invoke_SC2() throws ReflectiveOperationException {
+        shouldNotCallThis();
+        return lookup().findVirtual(MethodHandle.class, "invoke", MT_MethodHandle_invoke_SC2());
+    }
+
+    // Class.forName(String)
+    private static MethodType MT_Class_forName_S() {
+        shouldNotCallThis();
+        return methodType(Class.class, String.class);
+    }
+    private static MethodHandle MH_Class_forName_S() throws ReflectiveOperationException {
+        shouldNotCallThis();
+        return lookup().findStatic(Class.class, "forName", MT_Class_forName_S());
+    }
+
+    // Class.forName(String, boolean, ClassLoader)
+    private static MethodType MT_Class_forName_SbCL() {
+        shouldNotCallThis();
+        return methodType(Class.class, String.class, boolean.class, ClassLoader.class);
+    }
+    private static MethodHandle MH_Class_forName_SbCL() throws ReflectiveOperationException {
+        shouldNotCallThis();
+        return lookup().findStatic(Class.class, "forName", MT_Class_forName_SbCL());
+    }
+
+    private static void shouldNotCallThis() {
+        // if this gets called, the transformation has not taken place
+        if (System.getProperty("MethodHandleConstants.allow-untransformed") != null)  return;
+        throw new AssertionError("this code should be statically transformed away by Indify");
+    }
+
+    static class TestPolicy extends Policy {
+        final PermissionCollection permissions = new Permissions();
+        TestPolicy() {
+            permissions.add(new java.io.FilePermission("<<ALL FILES>>", "read"));
+        }
+        public PermissionCollection getPermissions(ProtectionDomain domain) {
+            return permissions;
+        }
+
+        public PermissionCollection getPermissions(CodeSource codesource) {
+            return permissions;
+        }
+
+        public boolean implies(ProtectionDomain domain, Permission perm) {
+            return permissions.implies(perm);
+        }
+    }
+}
--- a/test/java/net/Inet6Address/serialize/Serialize.java	Wed Sep 18 13:51:23 2013 -0700
+++ b/test/java/net/Inet6Address/serialize/Serialize.java	Tue Oct 01 14:22:36 2013 -0700
@@ -94,7 +94,26 @@
          } finally {
              ois.close();
          }
-         System.out.println(nobj);
+
+         nobj = (Inet6Address)InetAddress.getByAddress("foo.com", new byte[] {
+             (byte)0xfe,(byte)0x80,(byte)0,(byte)0,(byte)0,(byte)0,(byte)0,(byte)0,
+             (byte)0,(byte)0,(byte)0,(byte)0,(byte)0,(byte)0,(byte)0,(byte)1
+         });
+         if (!test1(nobj, addr1)) {
+             throw new RuntimeException("failed with " + nobj.toString());
+         }
+         nobj = (Inet6Address)InetAddress.getByAddress("x.bar.com", new byte[] {
+             (byte)0xfe,(byte)0xC0,(byte)0,(byte)0,(byte)0,(byte)0,(byte)0,(byte)0,
+             (byte)0,(byte)0,(byte)0,(byte)0,(byte)0,(byte)0,(byte)0,(byte)1
+         });
+         if (!test1(nobj, addr2)) {
+             throw new RuntimeException("failed with " + nobj.toString());
+         }
+         nobj = (Inet6Address)InetAddress.getByName("::1");
+         if (!test1(nobj, addr3)) {
+             throw new RuntimeException("failed with " + nobj.toString());
+         }
+
          System.out.println("All tests passed");
      }
 
@@ -113,4 +132,162 @@
              return false;
          }
      }
- }
+
+    static boolean test1 (Inet6Address obj, byte[] buf) throws Exception {
+         ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(buf));
+         Inet6Address nobj = (Inet6Address) ois.readObject();
+         ois.close();
+
+         if (nobj.equals(obj)) {
+             return true;
+         } else {
+             return false;
+         }
+    }
+
+    // Inet6Address instances serialized with JDK 6
+
+    static byte[] addr1 = {
+        (byte)0xac,(byte)0xed,(byte)0x00,(byte)0x05,(byte)0x73,(byte)0x72,
+        (byte)0x00,(byte)0x15,(byte)0x6a,(byte)0x61,(byte)0x76,(byte)0x61,
+        (byte)0x2e,(byte)0x6e,(byte)0x65,(byte)0x74,(byte)0x2e,(byte)0x49,
+        (byte)0x6e,(byte)0x65,(byte)0x74,(byte)0x36,(byte)0x41,(byte)0x64,
+        (byte)0x64,(byte)0x72,(byte)0x65,(byte)0x73,(byte)0x73,(byte)0x5f,
+        (byte)0x7c,(byte)0x20,(byte)0x81,(byte)0x52,(byte)0x2c,(byte)0x80,
+        (byte)0x21,(byte)0x03,(byte)0x00,(byte)0x05,(byte)0x49,(byte)0x00,
+        (byte)0x08,(byte)0x73,(byte)0x63,(byte)0x6f,(byte)0x70,(byte)0x65,
+        (byte)0x5f,(byte)0x69,(byte)0x64,(byte)0x5a,(byte)0x00,(byte)0x0c,
+        (byte)0x73,(byte)0x63,(byte)0x6f,(byte)0x70,(byte)0x65,(byte)0x5f,
+        (byte)0x69,(byte)0x64,(byte)0x5f,(byte)0x73,(byte)0x65,(byte)0x74,
+        (byte)0x5a,(byte)0x00,(byte)0x10,(byte)0x73,(byte)0x63,(byte)0x6f,
+        (byte)0x70,(byte)0x65,(byte)0x5f,(byte)0x69,(byte)0x66,(byte)0x6e,
+        (byte)0x61,(byte)0x6d,(byte)0x65,(byte)0x5f,(byte)0x73,(byte)0x65,
+        (byte)0x74,(byte)0x4c,(byte)0x00,(byte)0x06,(byte)0x69,(byte)0x66,
+        (byte)0x6e,(byte)0x61,(byte)0x6d,(byte)0x65,(byte)0x74,(byte)0x00,
+        (byte)0x12,(byte)0x4c,(byte)0x6a,(byte)0x61,(byte)0x76,(byte)0x61,
+        (byte)0x2f,(byte)0x6c,(byte)0x61,(byte)0x6e,(byte)0x67,(byte)0x2f,
+        (byte)0x53,(byte)0x74,(byte)0x72,(byte)0x69,(byte)0x6e,(byte)0x67,
+        (byte)0x3b,(byte)0x5b,(byte)0x00,(byte)0x09,(byte)0x69,(byte)0x70,
+        (byte)0x61,(byte)0x64,(byte)0x64,(byte)0x72,(byte)0x65,(byte)0x73,
+        (byte)0x73,(byte)0x74,(byte)0x00,(byte)0x02,(byte)0x5b,(byte)0x42,
+        (byte)0x78,(byte)0x72,(byte)0x00,(byte)0x14,(byte)0x6a,(byte)0x61,
+        (byte)0x76,(byte)0x61,(byte)0x2e,(byte)0x6e,(byte)0x65,(byte)0x74,
+        (byte)0x2e,(byte)0x49,(byte)0x6e,(byte)0x65,(byte)0x74,(byte)0x41,
+        (byte)0x64,(byte)0x64,(byte)0x72,(byte)0x65,(byte)0x73,(byte)0x73,
+        (byte)0x2d,(byte)0x9b,(byte)0x57,(byte)0xaf,(byte)0x9f,(byte)0xe3,
+        (byte)0xeb,(byte)0xdb,(byte)0x02,(byte)0x00,(byte)0x03,(byte)0x49,
+        (byte)0x00,(byte)0x07,(byte)0x61,(byte)0x64,(byte)0x64,(byte)0x72,
+        (byte)0x65,(byte)0x73,(byte)0x73,(byte)0x49,(byte)0x00,(byte)0x06,
+        (byte)0x66,(byte)0x61,(byte)0x6d,(byte)0x69,(byte)0x6c,(byte)0x79,
+        (byte)0x4c,(byte)0x00,(byte)0x08,(byte)0x68,(byte)0x6f,(byte)0x73,
+        (byte)0x74,(byte)0x4e,(byte)0x61,(byte)0x6d,(byte)0x65,(byte)0x71,
+        (byte)0x00,(byte)0x7e,(byte)0x00,(byte)0x01,(byte)0x78,(byte)0x70,
+        (byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,
+        (byte)0x00,(byte)0x02,(byte)0x74,(byte)0x00,(byte)0x07,(byte)0x66,
+        (byte)0x6f,(byte)0x6f,(byte)0x2e,(byte)0x63,(byte)0x6f,(byte)0x6d,
+        (byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,
+        (byte)0x70,(byte)0x75,(byte)0x72,(byte)0x00,(byte)0x02,(byte)0x5b,
+        (byte)0x42,(byte)0xac,(byte)0xf3,(byte)0x17,(byte)0xf8,(byte)0x06,
+        (byte)0x08,(byte)0x54,(byte)0xe0,(byte)0x02,(byte)0x00,(byte)0x00,
+        (byte)0x78,(byte)0x70,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x10,
+        (byte)0xfe,(byte)0x80,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,
+        (byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,
+        (byte)0x00,(byte)0x00,(byte)0x00,(byte)0x01,(byte)0x78
+    };
+
+    static byte[] addr2 = {
+        (byte)0xac,(byte)0xed,(byte)0x00,(byte)0x05,(byte)0x73,(byte)0x72,
+        (byte)0x00,(byte)0x15,(byte)0x6a,(byte)0x61,(byte)0x76,(byte)0x61,
+        (byte)0x2e,(byte)0x6e,(byte)0x65,(byte)0x74,(byte)0x2e,(byte)0x49,
+        (byte)0x6e,(byte)0x65,(byte)0x74,(byte)0x36,(byte)0x41,(byte)0x64,
+        (byte)0x64,(byte)0x72,(byte)0x65,(byte)0x73,(byte)0x73,(byte)0x5f,
+        (byte)0x7c,(byte)0x20,(byte)0x81,(byte)0x52,(byte)0x2c,(byte)0x80,
+        (byte)0x21,(byte)0x03,(byte)0x00,(byte)0x05,(byte)0x49,(byte)0x00,
+        (byte)0x08,(byte)0x73,(byte)0x63,(byte)0x6f,(byte)0x70,(byte)0x65,
+        (byte)0x5f,(byte)0x69,(byte)0x64,(byte)0x5a,(byte)0x00,(byte)0x0c,
+        (byte)0x73,(byte)0x63,(byte)0x6f,(byte)0x70,(byte)0x65,(byte)0x5f,
+        (byte)0x69,(byte)0x64,(byte)0x5f,(byte)0x73,(byte)0x65,(byte)0x74,
+        (byte)0x5a,(byte)0x00,(byte)0x10,(byte)0x73,(byte)0x63,(byte)0x6f,
+        (byte)0x70,(byte)0x65,(byte)0x5f,(byte)0x69,(byte)0x66,(byte)0x6e,
+        (byte)0x61,(byte)0x6d,(byte)0x65,(byte)0x5f,(byte)0x73,(byte)0x65,
+        (byte)0x74,(byte)0x4c,(byte)0x00,(byte)0x06,(byte)0x69,(byte)0x66,
+        (byte)0x6e,(byte)0x61,(byte)0x6d,(byte)0x65,(byte)0x74,(byte)0x00,
+        (byte)0x12,(byte)0x4c,(byte)0x6a,(byte)0x61,(byte)0x76,(byte)0x61,<