Merge
authorlana
Fri, 19 Feb 2010 15:13:37 -0800
changeset 4914 ec04396710d4
parent 4913 9b3caa50afcf (current diff)
parent 4912 576ba2f49ac4 (diff)
child 4924 5751e91f963a
Merge
--- a/.hgtags	Fri Feb 12 19:58:10 2010 +0300
+++ b/.hgtags	Fri Feb 19 15:13:37 2010 -0800
@@ -55,3 +55,6 @@
 4061c66ba1af1a2e27c2c839ba887407dd3ce050 jdk7-b78
 e9c98378f6b9256c0595ef2985ca5899f0c0e274 jdk7-b79
 e6abd38682d237306d6c147c17538ec9e7f8e3a7 jdk7-b80
+dcc938ac40cc45f1ef454d76020b5db5d943001c jdk7-b81
+a30062be6d9ca1d48579826f870f85974300004e jdk7-b82
+34c8199936a1682aa8587857f44cfaf37c2b6381 jdk7-b83
--- a/.hgtags-top-repo	Fri Feb 12 19:58:10 2010 +0300
+++ b/.hgtags-top-repo	Fri Feb 19 15:13:37 2010 -0800
@@ -55,3 +55,6 @@
 ab4ae8f4514693a9fe17ca2fec0239d8f8450d2c jdk7-b78
 20aeeb51713990dbea6929a2e100a8bbf5df70d4 jdk7-b79
 a3242906c7747b5d9bcc3d118c7c3c69aa40f4b7 jdk7-b80
+8403096d1fe7ff5318df9708cfec84a3fd3e1cf9 jdk7-b81
+e1176f86805fe07fd9fb9da065dc51b47712ce76 jdk7-b82
+6880a3af9addb41541e80ebe8cde6f79ec402a58 jdk7-b83
--- a/corba/.hgtags	Fri Feb 12 19:58:10 2010 +0300
+++ b/corba/.hgtags	Fri Feb 19 15:13:37 2010 -0800
@@ -55,3 +55,6 @@
 a7f7276b48cd74d8eb1baa83fbf3d1ef4a2603c8 jdk7-b78
 ec0421b5703b677e2226cf4bf7ae4eaafd8061c5 jdk7-b79
 0336e70ca0aeabc783cc01658f36cb6e27ea7934 jdk7-b80
+e08a42a2a94d97ea8eedb187a94dbff822c8fbba jdk7-b81
+1e8c1bfad1abb4b81407a0f2645e0fb85764ca48 jdk7-b82
+fde0df7a2384f7fe33204a79678989807d9c2b98 jdk7-b83
--- a/hotspot/.hgtags	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/.hgtags	Fri Feb 19 15:13:37 2010 -0800
@@ -55,3 +55,28 @@
 e703499b4b51e3af756ae77c3d5e8b3058a14e4e jdk7-b78
 a5a6adfca6ecefb5894a848debabfe442ff50e25 jdk7-b79
 3003ddd1d4330b06cb4691ae74d600d3685899eb jdk7-b80
+1f9b07674480c224828852ffe137beea36b3cab5 jdk7-b81
+1999f5b12482d66c8b0daf6709daea4f51893a04 jdk7-b82
+a94714c550658fd6741793ef036cb9625dc2ab1a hs17-b01
+faf94d94786b621f8e13cbcc941ca69c6d967c3f hs17-b02
+f4b900403d6e4b0af51447bd13bbe23fe3a1dac7 hs17-b03
+d8dd291a362acb656026a9c0a9da48501505a1e7 hs17-b04
+9174bb32e934965288121f75394874eeb1fcb649 hs17-b05
+a5a6adfca6ecefb5894a848debabfe442ff50e25 hs17-b06
+3003ddd1d4330b06cb4691ae74d600d3685899eb hs17-b07
+1f9b07674480c224828852ffe137beea36b3cab5 hs17-b08
+ff3232b68fbb35185b338d7ff4695b52460243f3 hs17-b09
+981375ca07b7f0605f92f57aad95122e8c385a4d hs16-b01
+f4cbf78110c726919f46b59a3b054c54c7e889b4 hs16-b02
+07c1c01e031513bfe6a7d17c6cf30d2752824ae9 hs16-b03
+08f86fa55a31113df626a75c8a626e66a543a1bd hs16-b04
+32c83fb84370a35344676991a48440378e6b6c8a hs16-b05
+ba313800759b678979434d6da8ed3bf49eb8bea4 hs16-b06
+3c0f729815607e1678bd0c41ae68494c700dcc71 hs16-b07
+ac59d4e6dae51ac5fc31a9a4940d1857f91161b1 hs16-b08
+3f844a28c5f4912bd04043b44f21b25b0805ffc2 hs15-b01
+1605bb4eb5a7a1703b13d5b077a22cc665fe45f7 hs15-b02
+2581d90c6c9b2012da930eb4742add94a03069a0 hs15-b03
+9ab385cb0c42997e16a7761ebcd25c90560a2714 hs15-b04
+fafab5d5349c7c066d677538db67a1ee0fb33bd2 hs15-b05
+3f370a32906eb5ba993fabd7b4279be7f31052b9 jdk7-b83
--- a/hotspot/make/Makefile	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/make/Makefile	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 #
-# Copyright 2005-2008 Sun Microsystems, Inc.  All Rights Reserved.
+# Copyright 2005-2010 Sun Microsystems, Inc.  All Rights Reserved.
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 #
 # This code is free software; you can redistribute it and/or modify it
@@ -312,10 +312,13 @@
 $(EXPORT_LIB_DIR)/%.jar: $(GEN_DIR)/%.jar
 	$(install-file)
 
-# Include files (jvmti.h, jni.h, $(JDK_INCLUDE_SUBDIR)/jni_md.h, jmm.h)
+# Include files (jvmti.h, jvmticmlr.h, jni.h, $(JDK_INCLUDE_SUBDIR)/jni_md.h, jmm.h)
 $(EXPORT_INCLUDE_DIR)/%: $(GEN_DIR)/jvmtifiles/%
 	$(install-file)
 
+$(EXPORT_INCLUDE_DIR)/%: $(HS_SRC_DIR)/share/vm/code/%
+	$(install-file)
+
 $(EXPORT_INCLUDE_DIR)/%: $(HS_SRC_DIR)/share/vm/prims/%
 	$(install-file)
 
--- a/hotspot/make/defs.make	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/make/defs.make	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 #
-# Copyright 2006-2008 Sun Microsystems, Inc.  All Rights Reserved.
+# Copyright 2006-2010 Sun Microsystems, Inc.  All Rights Reserved.
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 #
 # This code is free software; you can redistribute it and/or modify it
@@ -261,6 +261,7 @@
 
 # Common export list of files
 EXPORT_LIST += $(EXPORT_INCLUDE_DIR)/jvmti.h
+EXPORT_LIST += $(EXPORT_INCLUDE_DIR)/jvmticmlr.h
 EXPORT_LIST += $(EXPORT_INCLUDE_DIR)/jni.h
 EXPORT_LIST += $(EXPORT_INCLUDE_DIR)/$(JDK_INCLUDE_SUBDIR)/jni_md.h
 EXPORT_LIST += $(EXPORT_INCLUDE_DIR)/jmm.h
--- a/hotspot/make/hotspot_version	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/make/hotspot_version	Fri Feb 19 15:13:37 2010 -0800
@@ -35,7 +35,7 @@
 
 HS_MAJOR_VER=17
 HS_MINOR_VER=0
-HS_BUILD_NUMBER=08
+HS_BUILD_NUMBER=09
 
 JDK_MAJOR_VER=1
 JDK_MINOR_VER=7
--- a/hotspot/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2009 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 2000-2010 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -357,7 +357,7 @@
 }
 
 
-void LIR_Assembler::emit_exception_handler() {
+int LIR_Assembler::emit_exception_handler() {
   // if the last instruction is a call (typically to do a throw which
   // is coming at the end after block reordering) the return address
   // must still point into the code area in order to avoid assertion
@@ -373,15 +373,12 @@
   if (handler_base == NULL) {
     // not enough space left for the handler
     bailout("exception handler overflow");
-    return;
+    return -1;
   }
-#ifdef ASSERT
+
   int offset = code_offset();
-#endif // ASSERT
-  compilation()->offsets()->set_value(CodeOffsets::Exceptions, code_offset());
-
-
-  if (compilation()->has_exception_handlers() || compilation()->env()->jvmti_can_post_exceptions()) {
+
+  if (compilation()->has_exception_handlers() || compilation()->env()->jvmti_can_post_on_exceptions()) {
     __ call(Runtime1::entry_for(Runtime1::handle_exception_id), relocInfo::runtime_call_type);
     __ delayed()->nop();
   }
@@ -390,11 +387,13 @@
   __ delayed()->nop();
   debug_only(__ stop("should have gone to the caller");)
   assert(code_offset() - offset <= exception_handler_size, "overflow");
-
   __ end_a_stub();
+
+  return offset;
 }
 
-void LIR_Assembler::emit_deopt_handler() {
+
+int LIR_Assembler::emit_deopt_handler() {
   // if the last instruction is a call (typically to do a throw which
   // is coming at the end after block reordering) the return address
   // must still point into the code area in order to avoid assertion
@@ -408,23 +407,18 @@
   if (handler_base == NULL) {
     // not enough space left for the handler
     bailout("deopt handler overflow");
-    return;
+    return -1;
   }
-#ifdef ASSERT
+
   int offset = code_offset();
-#endif // ASSERT
-  compilation()->offsets()->set_value(CodeOffsets::Deopt, code_offset());
-
   AddressLiteral deopt_blob(SharedRuntime::deopt_blob()->unpack());
-
   __ JUMP(deopt_blob, G3_scratch, 0); // sethi;jmp
   __ delayed()->nop();
-
   assert(code_offset() - offset <= deopt_handler_size, "overflow");
-
   debug_only(__ stop("should have gone to the caller");)
-
   __ end_a_stub();
+
+  return offset;
 }
 
 
--- a/hotspot/src/cpu/sparc/vm/frame_sparc.cpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/cpu/sparc/vm/frame_sparc.cpp	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 1997-2008 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 1997-2010 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -366,8 +366,9 @@
   // as get_original_pc() needs correct value for unextended_sp()
   if (_pc != NULL) {
     _cb = CodeCache::find_blob(_pc);
-    if (_cb != NULL && _cb->is_nmethod() && ((nmethod*)_cb)->is_deopt_pc(_pc)) {
-      _pc = ((nmethod*)_cb)->get_original_pc(this);
+    address original_pc = nmethod::get_deopt_original_pc(this);
+    if (original_pc != NULL) {
+      _pc = original_pc;
       _deopt_state = is_deoptimized;
     } else {
       _deopt_state = not_deoptimized;
@@ -519,9 +520,9 @@
   _cb = CodeCache::find_blob(pc);
   *O7_addr() = pc - pc_return_offset;
   _cb = CodeCache::find_blob(_pc);
-  if (_cb != NULL && _cb->is_nmethod() && ((nmethod*)_cb)->is_deopt_pc(_pc)) {
-    address orig = ((nmethod*)_cb)->get_original_pc(this);
-    assert(orig == _pc, "expected original to be stored before patching");
+  address original_pc = nmethod::get_deopt_original_pc(this);
+  if (original_pc != NULL) {
+    assert(original_pc == _pc, "expected original to be stored before patching");
     _deopt_state = is_deoptimized;
   } else {
     _deopt_state = not_deoptimized;
--- a/hotspot/src/cpu/sparc/vm/interp_masm_sparc.cpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/cpu/sparc/vm/interp_masm_sparc.cpp	Fri Feb 19 15:13:37 2010 -0800
@@ -1681,11 +1681,8 @@
     // If no method data exists, go to profile_continue.
     test_method_data_pointer(profile_continue);
 
-    // We are making a call.  Increment the count.
-    increment_mdp_data_at(in_bytes(CounterData::count_offset()), scratch);
-
     // Record the receiver type.
-    record_klass_in_profile(receiver, scratch);
+    record_klass_in_profile(receiver, scratch, true);
 
     // The method data pointer needs to be updated to reflect the new target.
     update_mdp_by_constant(in_bytes(VirtualCallData::virtual_call_data_size()));
@@ -1695,9 +1692,13 @@
 
 void InterpreterMacroAssembler::record_klass_in_profile_helper(
                                         Register receiver, Register scratch,
-                                        int start_row, Label& done) {
-  if (TypeProfileWidth == 0)
+                                        int start_row, Label& done, bool is_virtual_call) {
+  if (TypeProfileWidth == 0) {
+    if (is_virtual_call) {
+      increment_mdp_data_at(in_bytes(CounterData::count_offset()), scratch);
+    }
     return;
+  }
 
   int last_row = VirtualCallData::row_limit() - 1;
   assert(start_row <= last_row, "must be work left to do");
@@ -1714,6 +1715,7 @@
     // See if the receiver is receiver[n].
     int recvr_offset = in_bytes(VirtualCallData::receiver_offset(row));
     test_mdp_data_at(recvr_offset, receiver, next_test, scratch);
+    // delayed()->tst(scratch);
 
     // The receiver is receiver[n].  Increment count[n].
     int count_offset = in_bytes(VirtualCallData::receiver_count_offset(row));
@@ -1723,20 +1725,31 @@
     bind(next_test);
 
     if (test_for_null_also) {
+      Label found_null;
       // Failed the equality check on receiver[n]...  Test for null.
       if (start_row == last_row) {
         // The only thing left to do is handle the null case.
-        brx(Assembler::notZero, false, Assembler::pt, done);
-        delayed()->nop();
+        if (is_virtual_call) {
+          brx(Assembler::zero, false, Assembler::pn, found_null);
+          delayed()->nop();
+          // Receiver did not match any saved receiver and there is no empty row for it.
+          // Increment total counter to indicate polimorphic case.
+          increment_mdp_data_at(in_bytes(CounterData::count_offset()), scratch);
+          ba(false, done);
+          delayed()->nop();
+          bind(found_null);
+        } else {
+          brx(Assembler::notZero, false, Assembler::pt, done);
+          delayed()->nop();
+        }
         break;
       }
       // Since null is rare, make it be the branch-taken case.
-      Label found_null;
       brx(Assembler::zero, false, Assembler::pn, found_null);
       delayed()->nop();
 
       // Put all the "Case 3" tests here.
-      record_klass_in_profile_helper(receiver, scratch, start_row + 1, done);
+      record_klass_in_profile_helper(receiver, scratch, start_row + 1, done, is_virtual_call);
 
       // Found a null.  Keep searching for a matching receiver,
       // but remember that this is an empty (unused) slot.
@@ -1753,16 +1766,18 @@
   int count_offset = in_bytes(VirtualCallData::receiver_count_offset(start_row));
   mov(DataLayout::counter_increment, scratch);
   set_mdp_data_at(count_offset, scratch);
-  ba(false, done);
-  delayed()->nop();
+  if (start_row > 0) {
+    ba(false, done);
+    delayed()->nop();
+  }
 }
 
 void InterpreterMacroAssembler::record_klass_in_profile(Register receiver,
-                                                        Register scratch) {
+                                                        Register scratch, bool is_virtual_call) {
   assert(ProfileInterpreter, "must be profiling");
   Label done;
 
-  record_klass_in_profile_helper(receiver, scratch, 0, done);
+  record_klass_in_profile_helper(receiver, scratch, 0, done, is_virtual_call);
 
   bind (done);
 }
@@ -1840,7 +1855,7 @@
       mdp_delta = in_bytes(VirtualCallData::virtual_call_data_size());
 
       // Record the object type.
-      record_klass_in_profile(klass, scratch);
+      record_klass_in_profile(klass, scratch, false);
     }
 
     // The method data pointer needs to be updated.
--- a/hotspot/src/cpu/sparc/vm/interp_masm_sparc.hpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/cpu/sparc/vm/interp_masm_sparc.hpp	Fri Feb 19 15:13:37 2010 -0800
@@ -290,9 +290,9 @@
   void test_mdp_data_at(int offset, Register value, Label& not_equal_continue,
                         Register scratch);
 
-  void record_klass_in_profile(Register receiver, Register scratch);
+  void record_klass_in_profile(Register receiver, Register scratch, bool is_virtual_call);
   void record_klass_in_profile_helper(Register receiver, Register scratch,
-                                      int start_row, Label& done);
+                                      int start_row, Label& done, bool is_virtual_call);
 
   void update_mdp_by_offset(int offset_of_disp, Register scratch);
   void update_mdp_by_offset(Register reg, int offset_of_disp,
--- a/hotspot/src/cpu/sparc/vm/sharedRuntime_sparc.cpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/cpu/sparc/vm/sharedRuntime_sparc.cpp	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 2003-2009 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 2003-2010 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -1189,7 +1189,8 @@
                                                             // VMReg max_arg,
                                                             int comp_args_on_stack, // VMRegStackSlots
                                                             const BasicType *sig_bt,
-                                                            const VMRegPair *regs) {
+                                                            const VMRegPair *regs,
+                                                            AdapterFingerPrint* fingerprint) {
   address i2c_entry = __ pc();
 
   AdapterGenerator agen(masm);
@@ -1258,7 +1259,7 @@
   agen.gen_c2i_adapter(total_args_passed, comp_args_on_stack, sig_bt, regs, skip_fixup);
 
   __ flush();
-  return new AdapterHandlerEntry(i2c_entry, c2i_entry, c2i_unverified_entry);
+  return AdapterHandlerLibrary::new_entry(fingerprint, i2c_entry, c2i_entry, c2i_unverified_entry);
 
 }
 
--- a/hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2009 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 2000-2010 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -418,13 +418,12 @@
 }
 
 
-void LIR_Assembler::emit_exception_handler() {
+int LIR_Assembler::emit_exception_handler() {
   // if the last instruction is a call (typically to do a throw which
   // is coming at the end after block reordering) the return address
   // must still point into the code area in order to avoid assertion
   // failures when searching for the corresponding bci => add a nop
   // (was bug 5/14/1999 - gri)
-
   __ nop();
 
   // generate code for exception handler
@@ -432,17 +431,14 @@
   if (handler_base == NULL) {
     // not enough space left for the handler
     bailout("exception handler overflow");
-    return;
+    return -1;
   }
-#ifdef ASSERT
+
   int offset = code_offset();
-#endif // ASSERT
-
-  compilation()->offsets()->set_value(CodeOffsets::Exceptions, code_offset());
 
   // if the method does not have an exception handler, then there is
   // no reason to search for one
-  if (compilation()->has_exception_handlers() || compilation()->env()->jvmti_can_post_exceptions()) {
+  if (compilation()->has_exception_handlers() || compilation()->env()->jvmti_can_post_on_exceptions()) {
     // the exception oop and pc are in rax, and rdx
     // no other registers need to be preserved, so invalidate them
     __ invalidate_registers(false, true, true, false, true, true);
@@ -474,19 +470,19 @@
   // unwind activation and forward exception to caller
   // rax,: exception
   __ jump(RuntimeAddress(Runtime1::entry_for(Runtime1::unwind_exception_id)));
-
   assert(code_offset() - offset <= exception_handler_size, "overflow");
-
   __ end_a_stub();
+
+  return offset;
 }
 
-void LIR_Assembler::emit_deopt_handler() {
+
+int LIR_Assembler::emit_deopt_handler() {
   // if the last instruction is a call (typically to do a throw which
   // is coming at the end after block reordering) the return address
   // must still point into the code area in order to avoid assertion
   // failures when searching for the corresponding bci => add a nop
   // (was bug 5/14/1999 - gri)
-
   __ nop();
 
   // generate code for exception handler
@@ -494,23 +490,17 @@
   if (handler_base == NULL) {
     // not enough space left for the handler
     bailout("deopt handler overflow");
-    return;
+    return -1;
   }
-#ifdef ASSERT
+
   int offset = code_offset();
-#endif // ASSERT
-
-  compilation()->offsets()->set_value(CodeOffsets::Deopt, code_offset());
-
   InternalAddress here(__ pc());
   __ pushptr(here.addr());
-
   __ jump(RuntimeAddress(SharedRuntime::deopt_blob()->unpack()));
-
   assert(code_offset() - offset <= deopt_handler_size, "overflow");
-
   __ end_a_stub();
 
+  return offset;
 }
 
 
@@ -3219,7 +3209,6 @@
   Register mdo  = op->mdo()->as_register();
   __ movoop(mdo, md->constant_encoding());
   Address counter_addr(mdo, md->byte_offset_of_slot(data, CounterData::count_offset()));
-  __ addl(counter_addr, DataLayout::counter_increment);
   Bytecodes::Code bc = method->java_code_at_bci(bci);
   // Perform additional virtual call profiling for invokevirtual and
   // invokeinterface bytecodes
@@ -3286,14 +3275,18 @@
         __ jcc(Assembler::notEqual, next_test);
         __ movptr(recv_addr, recv);
         __ movl(Address(mdo, md->byte_offset_of_slot(data, VirtualCallData::receiver_count_offset(i))), DataLayout::counter_increment);
-        if (i < (VirtualCallData::row_limit() - 1)) {
-          __ jmp(update_done);
-        }
+        __ jmp(update_done);
         __ bind(next_test);
       }
+      // Receiver did not match any saved receiver and there is no empty row for it.
+      // Increment total counter to indicate polimorphic case.
+      __ addl(counter_addr, DataLayout::counter_increment);
 
       __ bind(update_done);
     }
+  } else {
+    // Static call
+    __ addl(counter_addr, DataLayout::counter_increment);
   }
 }
 
--- a/hotspot/src/cpu/x86/vm/frame_x86.cpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/cpu/x86/vm/frame_x86.cpp	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 1997-2009 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 1997-2010 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -222,9 +222,9 @@
   }
   ((address *)sp())[-1] = pc;
   _cb = CodeCache::find_blob(pc);
-  if (_cb != NULL && _cb->is_nmethod() && ((nmethod*)_cb)->is_deopt_pc(_pc)) {
-    address orig = (((nmethod*)_cb)->get_original_pc(this));
-    assert(orig == _pc, "expected original to be stored before patching");
+  address original_pc = nmethod::get_deopt_original_pc(this);
+  if (original_pc != NULL) {
+    assert(original_pc == _pc, "expected original PC to be stored before patching");
     _deopt_state = is_deoptimized;
     // leave _pc as is
   } else {
@@ -323,19 +323,61 @@
   return fr;
 }
 
+
+//------------------------------------------------------------------------------
+// frame::verify_deopt_original_pc
+//
+// Verifies the calculated original PC of a deoptimization PC for the
+// given unextended SP.  The unextended SP might also be the saved SP
+// for MethodHandle call sites.
+#if ASSERT
+void frame::verify_deopt_original_pc(nmethod* nm, intptr_t* unextended_sp, bool is_method_handle_return) {
+  frame fr;
+
+  // This is ugly but it's better than to change {get,set}_original_pc
+  // to take an SP value as argument.  And it's only a debugging
+  // method anyway.
+  fr._unextended_sp = unextended_sp;
+
+  address original_pc = nm->get_original_pc(&fr);
+  assert(nm->code_contains(original_pc), "original PC must be in nmethod");
+  assert(nm->is_method_handle_return(original_pc) == is_method_handle_return, "must be");
+}
+#endif
+
+
+//------------------------------------------------------------------------------
+// frame::sender_for_interpreter_frame
 frame frame::sender_for_interpreter_frame(RegisterMap* map) const {
-  // sp is the raw sp from the sender after adapter or interpreter extension
-  intptr_t* sp = (intptr_t*) addr_at(sender_sp_offset);
+  // SP is the raw SP from the sender after adapter or interpreter
+  // extension.
+  intptr_t* sender_sp = this->sender_sp();
 
   // This is the sp before any possible extension (adapter/locals).
   intptr_t* unextended_sp = interpreter_frame_sender_sp();
 
+  // Stored FP.
+  intptr_t* saved_fp = link();
+
   address sender_pc = this->sender_pc();
   CodeBlob* sender_cb = CodeCache::find_blob_unsafe(sender_pc);
   assert(sender_cb, "sanity");
   nmethod* sender_nm = sender_cb->as_nmethod_or_null();
-  if (sender_nm != NULL && sender_nm->is_method_handle_return(sender_pc)) {
-    unextended_sp = (intptr_t*) at(link_offset);
+
+  if (sender_nm != NULL) {
+    // If the sender PC is a deoptimization point, get the original
+    // PC.  For MethodHandle call site the unextended_sp is stored in
+    // saved_fp.
+    if (sender_nm->is_deopt_mh_entry(sender_pc)) {
+      DEBUG_ONLY(verify_deopt_mh_original_pc(sender_nm, saved_fp));
+      unextended_sp = saved_fp;
+    }
+    else if (sender_nm->is_deopt_entry(sender_pc)) {
+      DEBUG_ONLY(verify_deopt_original_pc(sender_nm, unextended_sp));
+    }
+    else if (sender_nm->is_method_handle_return(sender_pc)) {
+      unextended_sp = saved_fp;
+    }
   }
 
   // The interpreter and compiler(s) always save EBP/RBP in a known
@@ -359,40 +401,51 @@
     }
 #endif // AMD64
   }
-#endif /* COMPILER2 */
-  return frame(sp, unextended_sp, link(), sender_pc);
+#endif // COMPILER2
+
+  return frame(sender_sp, unextended_sp, saved_fp, sender_pc);
 }
 
 
-//------------------------------sender_for_compiled_frame-----------------------
+//------------------------------------------------------------------------------
+// frame::sender_for_compiled_frame
 frame frame::sender_for_compiled_frame(RegisterMap* map) const {
   assert(map != NULL, "map must be set");
-  const bool c1_compiled = _cb->is_compiled_by_c1();
 
   // frame owned by optimizing compiler
-  intptr_t* sender_sp = NULL;
-
   assert(_cb->frame_size() >= 0, "must have non-zero frame size");
-  sender_sp = unextended_sp() + _cb->frame_size();
+  intptr_t* sender_sp = unextended_sp() + _cb->frame_size();
+  intptr_t* unextended_sp = sender_sp;
 
   // On Intel the return_address is always the word on the stack
   address sender_pc = (address) *(sender_sp-1);
 
-  // This is the saved value of ebp which may or may not really be an fp.
-  // it is only an fp if the sender is an interpreter frame (or c1?)
-
-  intptr_t *saved_fp = (intptr_t*)*(sender_sp - frame::sender_sp_offset);
+  // This is the saved value of EBP which may or may not really be an FP.
+  // It is only an FP if the sender is an interpreter frame (or C1?).
+  intptr_t* saved_fp = (intptr_t*) *(sender_sp - frame::sender_sp_offset);
 
-  intptr_t* unextended_sp = sender_sp;
-  // If we are returning to a compiled method handle call site,
-  // the saved_fp will in fact be a saved value of the unextended SP.
-  // The simplest way to tell whether we are returning to such a call
-  // site is as follows:
+  // If we are returning to a compiled MethodHandle call site, the
+  // saved_fp will in fact be a saved value of the unextended SP.  The
+  // simplest way to tell whether we are returning to such a call site
+  // is as follows:
   CodeBlob* sender_cb = CodeCache::find_blob_unsafe(sender_pc);
   assert(sender_cb, "sanity");
   nmethod* sender_nm = sender_cb->as_nmethod_or_null();
-  if (sender_nm != NULL && sender_nm->is_method_handle_return(sender_pc)) {
-    unextended_sp = saved_fp;
+
+  if (sender_nm != NULL) {
+    // If the sender PC is a deoptimization point, get the original
+    // PC.  For MethodHandle call site the unextended_sp is stored in
+    // saved_fp.
+    if (sender_nm->is_deopt_mh_entry(sender_pc)) {
+      DEBUG_ONLY(verify_deopt_mh_original_pc(sender_nm, saved_fp));
+      unextended_sp = saved_fp;
+    }
+    else if (sender_nm->is_deopt_entry(sender_pc)) {
+      DEBUG_ONLY(verify_deopt_original_pc(sender_nm, unextended_sp));
+    }
+    else if (sender_nm->is_method_handle_return(sender_pc)) {
+      unextended_sp = saved_fp;
+    }
   }
 
   if (map->update_map()) {
@@ -403,7 +456,7 @@
     if (_cb->oop_maps() != NULL) {
       OopMapSet::update_register_map(this, map);
     }
-    // Since the prolog does the save and restore of epb there is no oopmap
+    // Since the prolog does the save and restore of EBP there is no oopmap
     // for it so we must fill in its location as if there was an oopmap entry
     // since if our caller was compiled code there could be live jvm state in it.
     map->set_location(rbp->as_VMReg(), (address) (sender_sp - frame::sender_sp_offset));
@@ -422,6 +475,9 @@
   return frame(sender_sp, unextended_sp, saved_fp, sender_pc);
 }
 
+
+//------------------------------------------------------------------------------
+// frame::sender
 frame frame::sender(RegisterMap* map) const {
   // Default is we done have to follow them. The sender_for_xxx will
   // update it accordingly
--- a/hotspot/src/cpu/x86/vm/frame_x86.hpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/cpu/x86/vm/frame_x86.hpp	Fri Feb 19 15:13:37 2010 -0800
@@ -163,6 +163,14 @@
     return (intptr_t*) addr_at(offset);
   }
 
+#if ASSERT
+  // Used in frame::sender_for_{interpreter,compiled}_frame
+  static void verify_deopt_original_pc(   nmethod* nm, intptr_t* unextended_sp, bool is_method_handle_return = false);
+  static void verify_deopt_mh_original_pc(nmethod* nm, intptr_t* unextended_sp) {
+    verify_deopt_original_pc(nm, unextended_sp, true);
+  }
+#endif
+
  public:
   // Constructors
 
--- a/hotspot/src/cpu/x86/vm/frame_x86.inline.hpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/cpu/x86/vm/frame_x86.inline.hpp	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 1997-2009 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 1997-2010 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -35,32 +35,35 @@
   _deopt_state = unknown;
 }
 
-inline frame:: frame(intptr_t* sp, intptr_t* fp, address pc) {
+inline frame::frame(intptr_t* sp, intptr_t* fp, address pc) {
   _sp = sp;
   _unextended_sp = sp;
   _fp = fp;
   _pc = pc;
   assert(pc != NULL, "no pc?");
   _cb = CodeCache::find_blob(pc);
-  _deopt_state = not_deoptimized;
-  if (_cb != NULL && _cb->is_nmethod() && ((nmethod*)_cb)->is_deopt_pc(_pc)) {
-    _pc = (((nmethod*)_cb)->get_original_pc(this));
+
+  address original_pc = nmethod::get_deopt_original_pc(this);
+  if (original_pc != NULL) {
+    _pc = original_pc;
     _deopt_state = is_deoptimized;
   } else {
     _deopt_state = not_deoptimized;
   }
 }
 
-inline frame:: frame(intptr_t* sp, intptr_t* unextended_sp, intptr_t* fp, address pc) {
+inline frame::frame(intptr_t* sp, intptr_t* unextended_sp, intptr_t* fp, address pc) {
   _sp = sp;
   _unextended_sp = unextended_sp;
   _fp = fp;
   _pc = pc;
   assert(pc != NULL, "no pc?");
   _cb = CodeCache::find_blob(pc);
-  _deopt_state = not_deoptimized;
-  if (_cb != NULL && _cb->is_nmethod() && ((nmethod*)_cb)->is_deopt_pc(_pc)) {
-    _pc = (((nmethod*)_cb)->get_original_pc(this));
+
+  address original_pc = nmethod::get_deopt_original_pc(this);
+  if (original_pc != NULL) {
+    _pc = original_pc;
+    assert(((nmethod*)_cb)->code_contains(_pc), "original PC must be in nmethod");
     _deopt_state = is_deoptimized;
   } else {
     _deopt_state = not_deoptimized;
@@ -86,9 +89,9 @@
 
   _cb = CodeCache::find_blob(_pc);
 
-  _deopt_state = not_deoptimized;
-  if (_cb != NULL && _cb->is_nmethod() && ((nmethod*)_cb)->is_deopt_pc(_pc)) {
-    _pc = (((nmethod*)_cb)->get_original_pc(this));
+  address original_pc = nmethod::get_deopt_original_pc(this);
+  if (original_pc != NULL) {
+    _pc = original_pc;
     _deopt_state = is_deoptimized;
   } else {
     _deopt_state = not_deoptimized;
--- a/hotspot/src/cpu/x86/vm/interp_masm_x86_32.cpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/cpu/x86/vm/interp_masm_x86_32.cpp	Fri Feb 19 15:13:37 2010 -0800
@@ -1239,17 +1239,19 @@
     // If no method data exists, go to profile_continue.
     test_method_data_pointer(mdp, profile_continue);
 
-    // We are making a call.  Increment the count.
-    increment_mdp_data_at(mdp, in_bytes(CounterData::count_offset()));
-
     Label skip_receiver_profile;
     if (receiver_can_be_null) {
+      Label not_null;
       testptr(receiver, receiver);
-      jcc(Assembler::zero, skip_receiver_profile);
+      jccb(Assembler::notZero, not_null);
+      // We are making a call.  Increment the count for null receiver.
+      increment_mdp_data_at(mdp, in_bytes(CounterData::count_offset()));
+      jmp(skip_receiver_profile);
+      bind(not_null);
     }
 
     // Record the receiver type.
-    record_klass_in_profile(receiver, mdp, reg2);
+    record_klass_in_profile(receiver, mdp, reg2, true);
     bind(skip_receiver_profile);
 
     // The method data pointer needs to be updated to reflect the new target.
@@ -1263,10 +1265,14 @@
 
 void InterpreterMacroAssembler::record_klass_in_profile_helper(
                                         Register receiver, Register mdp,
-                                        Register reg2,
-                                        int start_row, Label& done) {
-  if (TypeProfileWidth == 0)
+                                        Register reg2, int start_row,
+                                        Label& done, bool is_virtual_call) {
+  if (TypeProfileWidth == 0) {
+    if (is_virtual_call) {
+      increment_mdp_data_at(mdp, in_bytes(CounterData::count_offset()));
+    }
     return;
+  }
 
   int last_row = VirtualCallData::row_limit() - 1;
   assert(start_row <= last_row, "must be work left to do");
@@ -1294,19 +1300,28 @@
     bind(next_test);
 
     if (row == start_row) {
+      Label found_null;
       // Failed the equality check on receiver[n]...  Test for null.
       testptr(reg2, reg2);
       if (start_row == last_row) {
         // The only thing left to do is handle the null case.
-        jcc(Assembler::notZero, done);
+        if (is_virtual_call) {
+          jccb(Assembler::zero, found_null);
+          // Receiver did not match any saved receiver and there is no empty row for it.
+          // Increment total counter to indicate polimorphic case.
+          increment_mdp_data_at(mdp, in_bytes(CounterData::count_offset()));
+          jmp(done);
+          bind(found_null);
+        } else {
+          jcc(Assembler::notZero, done);
+        }
         break;
       }
       // Since null is rare, make it be the branch-taken case.
-      Label found_null;
       jcc(Assembler::zero, found_null);
 
       // Put all the "Case 3" tests here.
-      record_klass_in_profile_helper(receiver, mdp, reg2, start_row + 1, done);
+      record_klass_in_profile_helper(receiver, mdp, reg2, start_row + 1, done, is_virtual_call);
 
       // Found a null.  Keep searching for a matching receiver,
       // but remember that this is an empty (unused) slot.
@@ -1323,16 +1338,18 @@
   int count_offset = in_bytes(VirtualCallData::receiver_count_offset(start_row));
   movptr(reg2, (int32_t)DataLayout::counter_increment);
   set_mdp_data_at(mdp, count_offset, reg2);
-  jmp(done);
+  if (start_row > 0) {
+    jmp(done);
+  }
 }
 
 void InterpreterMacroAssembler::record_klass_in_profile(Register receiver,
-                                                        Register mdp,
-                                                        Register reg2) {
+                                                        Register mdp, Register reg2,
+                                                        bool is_virtual_call) {
   assert(ProfileInterpreter, "must be profiling");
   Label done;
 
-  record_klass_in_profile_helper(receiver, mdp, reg2, 0, done);
+  record_klass_in_profile_helper(receiver, mdp, reg2, 0, done, is_virtual_call);
 
   bind (done);
 }
@@ -1425,7 +1442,7 @@
       mdp_delta = in_bytes(VirtualCallData::virtual_call_data_size());
 
       // Record the object type.
-      record_klass_in_profile(klass, mdp, reg2);
+      record_klass_in_profile(klass, mdp, reg2, false);
       assert(reg2 == rdi, "we know how to fix this blown reg");
       restore_locals();         // Restore EDI
     }
--- a/hotspot/src/cpu/x86/vm/interp_masm_x86_32.hpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/cpu/x86/vm/interp_masm_x86_32.hpp	Fri Feb 19 15:13:37 2010 -0800
@@ -213,10 +213,10 @@
                         Label& not_equal_continue);
 
   void record_klass_in_profile(Register receiver, Register mdp,
-                               Register reg2);
+                               Register reg2, bool is_virtual_call);
   void record_klass_in_profile_helper(Register receiver, Register mdp,
-                                      Register reg2,
-                                      int start_row, Label& done);
+                                      Register reg2, int start_row,
+                                      Label& done, bool is_virtual_call);
 
   void update_mdp_by_offset(Register mdp_in, int offset_of_offset);
   void update_mdp_by_offset(Register mdp_in, Register reg, int offset_of_disp);
--- a/hotspot/src/cpu/x86/vm/interp_masm_x86_64.cpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/cpu/x86/vm/interp_masm_x86_64.cpp	Fri Feb 19 15:13:37 2010 -0800
@@ -1262,17 +1262,19 @@
     // If no method data exists, go to profile_continue.
     test_method_data_pointer(mdp, profile_continue);
 
-    // We are making a call.  Increment the count.
-    increment_mdp_data_at(mdp, in_bytes(CounterData::count_offset()));
-
     Label skip_receiver_profile;
     if (receiver_can_be_null) {
+      Label not_null;
       testptr(receiver, receiver);
-      jcc(Assembler::zero, skip_receiver_profile);
+      jccb(Assembler::notZero, not_null);
+      // We are making a call.  Increment the count for null receiver.
+      increment_mdp_data_at(mdp, in_bytes(CounterData::count_offset()));
+      jmp(skip_receiver_profile);
+      bind(not_null);
     }
 
     // Record the receiver type.
-    record_klass_in_profile(receiver, mdp, reg2);
+    record_klass_in_profile(receiver, mdp, reg2, true);
     bind(skip_receiver_profile);
 
     // The method data pointer needs to be updated to reflect the new target.
@@ -1296,10 +1298,14 @@
 // See below for example code.
 void InterpreterMacroAssembler::record_klass_in_profile_helper(
                                         Register receiver, Register mdp,
-                                        Register reg2,
-                                        int start_row, Label& done) {
-  if (TypeProfileWidth == 0)
+                                        Register reg2, int start_row,
+                                        Label& done, bool is_virtual_call) {
+  if (TypeProfileWidth == 0) {
+    if (is_virtual_call) {
+      increment_mdp_data_at(mdp, in_bytes(CounterData::count_offset()));
+    }
     return;
+  }
 
   int last_row = VirtualCallData::row_limit() - 1;
   assert(start_row <= last_row, "must be work left to do");
@@ -1327,19 +1333,28 @@
     bind(next_test);
 
     if (test_for_null_also) {
+      Label found_null;
       // Failed the equality check on receiver[n]...  Test for null.
       testptr(reg2, reg2);
       if (start_row == last_row) {
         // The only thing left to do is handle the null case.
-        jcc(Assembler::notZero, done);
+        if (is_virtual_call) {
+          jccb(Assembler::zero, found_null);
+          // Receiver did not match any saved receiver and there is no empty row for it.
+          // Increment total counter to indicate polimorphic case.
+          increment_mdp_data_at(mdp, in_bytes(CounterData::count_offset()));
+          jmp(done);
+          bind(found_null);
+        } else {
+          jcc(Assembler::notZero, done);
+        }
         break;
       }
       // Since null is rare, make it be the branch-taken case.
-      Label found_null;
       jcc(Assembler::zero, found_null);
 
       // Put all the "Case 3" tests here.
-      record_klass_in_profile_helper(receiver, mdp, reg2, start_row + 1, done);
+      record_klass_in_profile_helper(receiver, mdp, reg2, start_row + 1, done, is_virtual_call);
 
       // Found a null.  Keep searching for a matching receiver,
       // but remember that this is an empty (unused) slot.
@@ -1356,7 +1371,9 @@
   int count_offset = in_bytes(VirtualCallData::receiver_count_offset(start_row));
   movl(reg2, DataLayout::counter_increment);
   set_mdp_data_at(mdp, count_offset, reg2);
-  jmp(done);
+  if (start_row > 0) {
+    jmp(done);
+  }
 }
 
 // Example state machine code for three profile rows:
@@ -1368,7 +1385,7 @@
 //     if (row[1].rec != NULL) {
 //       // degenerate decision tree, rooted at row[2]
 //       if (row[2].rec == rec) { row[2].incr(); goto done; }
-//       if (row[2].rec != NULL) { goto done; } // overflow
+//       if (row[2].rec != NULL) { count.incr(); goto done; } // overflow
 //       row[2].init(rec); goto done;
 //     } else {
 //       // remember row[1] is empty
@@ -1381,14 +1398,15 @@
 //     if (row[2].rec == rec) { row[2].incr(); goto done; }
 //     row[0].init(rec); goto done;
 //   }
+//   done:
 
 void InterpreterMacroAssembler::record_klass_in_profile(Register receiver,
-                                                        Register mdp,
-                                                        Register reg2) {
+                                                        Register mdp, Register reg2,
+                                                        bool is_virtual_call) {
   assert(ProfileInterpreter, "must be profiling");
   Label done;
 
-  record_klass_in_profile_helper(receiver, mdp, reg2, 0, done);
+  record_klass_in_profile_helper(receiver, mdp, reg2, 0, done, is_virtual_call);
 
   bind (done);
 }
@@ -1484,7 +1502,7 @@
       mdp_delta = in_bytes(VirtualCallData::virtual_call_data_size());
 
       // Record the object type.
-      record_klass_in_profile(klass, mdp, reg2);
+      record_klass_in_profile(klass, mdp, reg2, false);
     }
     update_mdp_by_constant(mdp, mdp_delta);
 
--- a/hotspot/src/cpu/x86/vm/interp_masm_x86_64.hpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/cpu/x86/vm/interp_masm_x86_64.hpp	Fri Feb 19 15:13:37 2010 -0800
@@ -222,10 +222,10 @@
                         Label& not_equal_continue);
 
   void record_klass_in_profile(Register receiver, Register mdp,
-                               Register reg2);
+                               Register reg2, bool is_virtual_call);
   void record_klass_in_profile_helper(Register receiver, Register mdp,
-                                      Register reg2,
-                                      int start_row, Label& done);
+                                      Register reg2, int start_row,
+                                      Label& done, bool is_virtual_call);
 
   void update_mdp_by_offset(Register mdp_in, int offset_of_offset);
   void update_mdp_by_offset(Register mdp_in, Register reg, int offset_of_disp);
--- a/hotspot/src/cpu/x86/vm/sharedRuntime_x86_32.cpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/cpu/x86/vm/sharedRuntime_x86_32.cpp	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 2003-2009 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 2003-2010 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -907,7 +907,8 @@
                                                             int total_args_passed,
                                                             int comp_args_on_stack,
                                                             const BasicType *sig_bt,
-                                                            const VMRegPair *regs) {
+                                                            const VMRegPair *regs,
+                                                            AdapterFingerPrint* fingerprint) {
   address i2c_entry = __ pc();
 
   gen_i2c_adapter(masm, total_args_passed, comp_args_on_stack, sig_bt, regs);
@@ -954,7 +955,7 @@
   gen_c2i_adapter(masm, total_args_passed, comp_args_on_stack, sig_bt, regs, skip_fixup);
 
   __ flush();
-  return new AdapterHandlerEntry(i2c_entry, c2i_entry, c2i_unverified_entry);
+  return AdapterHandlerLibrary::new_entry(fingerprint, i2c_entry, c2i_entry, c2i_unverified_entry);
 }
 
 int SharedRuntime::c_calling_convention(const BasicType *sig_bt,
--- a/hotspot/src/cpu/x86/vm/sharedRuntime_x86_64.cpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/cpu/x86/vm/sharedRuntime_x86_64.cpp	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 2003-2009 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 2003-2010 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -778,7 +778,8 @@
                                                             int total_args_passed,
                                                             int comp_args_on_stack,
                                                             const BasicType *sig_bt,
-                                                            const VMRegPair *regs) {
+                                                            const VMRegPair *regs,
+                                                            AdapterFingerPrint* fingerprint) {
   address i2c_entry = __ pc();
 
   gen_i2c_adapter(masm, total_args_passed, comp_args_on_stack, sig_bt, regs);
@@ -824,7 +825,7 @@
   gen_c2i_adapter(masm, total_args_passed, comp_args_on_stack, sig_bt, regs, skip_fixup);
 
   __ flush();
-  return new AdapterHandlerEntry(i2c_entry, c2i_entry, c2i_unverified_entry);
+  return AdapterHandlerLibrary::new_entry(fingerprint, i2c_entry, c2i_entry, c2i_unverified_entry);
 }
 
 int SharedRuntime::c_calling_convention(const BasicType *sig_bt,
--- a/hotspot/src/cpu/x86/vm/stubGenerator_x86_32.cpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/cpu/x86/vm/stubGenerator_x86_32.cpp	Fri Feb 19 15:13:37 2010 -0800
@@ -718,10 +718,8 @@
       case BarrierSet::G1SATBCTLogging:
         {
           __ pusha();                      // push registers
-          __ push(count);
-          __ push(start);
-          __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, BarrierSet::static_write_ref_array_pre)));
-          __ addptr(rsp, 2*wordSize);
+          __ call_VM_leaf(CAST_FROM_FN_PTR(address, BarrierSet::static_write_ref_array_pre),
+                          start, count);
           __ popa();
         }
         break;
@@ -752,10 +750,8 @@
       case BarrierSet::G1SATBCTLogging:
         {
           __ pusha();                      // push registers
-          __ push(count);
-          __ push(start);
-          __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, BarrierSet::static_write_ref_array_post)));
-          __ addptr(rsp, 2*wordSize);
+          __ call_VM_leaf(CAST_FROM_FN_PTR(address, BarrierSet::static_write_ref_array_post),
+                          start, count);
           __ popa();
         }
         break;
--- a/hotspot/src/cpu/x86/vm/stubGenerator_x86_64.cpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/cpu/x86/vm/stubGenerator_x86_64.cpp	Fri Feb 19 15:13:37 2010 -0800
@@ -1172,7 +1172,7 @@
             __ movptr(c_rarg0, addr);
             __ movptr(c_rarg1, count);
           }
-          __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, BarrierSet::static_write_ref_array_pre)));
+          __ call_VM_leaf(CAST_FROM_FN_PTR(address, BarrierSet::static_write_ref_array_pre), 2);
           __ popa();
         }
         break;
@@ -1212,7 +1212,7 @@
           __ shrptr(scratch, LogBytesPerHeapOop);  // convert to element count
           __ mov(c_rarg0, start);
           __ mov(c_rarg1, scratch);
-          __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, BarrierSet::static_write_ref_array_post)));
+          __ call_VM_leaf(CAST_FROM_FN_PTR(address, BarrierSet::static_write_ref_array_post), 2);
           __ popa();
         }
         break;
--- a/hotspot/src/cpu/x86/vm/x86_32.ad	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/cpu/x86/vm/x86_32.ad	Fri Feb 19 15:13:37 2010 -0800
@@ -235,6 +235,11 @@
 //----------SOURCE BLOCK-------------------------------------------------------
 // This is a block of C++ code which provides values, functions, and
 // definitions necessary in the rest of the architecture description
+source_hpp %{
+// Must be visible to the DFA in dfa_x86_32.cpp
+extern bool is_operand_hi32_zero(Node* n);
+%}
+
 source %{
 #define   RELOC_IMM32    Assembler::imm_operand
 #define   RELOC_DISP32   Assembler::disp32_operand
@@ -1485,6 +1490,21 @@
   return EBP_REG_mask;
 }
 
+// Returns true if the high 32 bits of the value is known to be zero.
+bool is_operand_hi32_zero(Node* n) {
+  int opc = n->Opcode();
+  if (opc == Op_LoadUI2L) {
+    return true;
+  }
+  if (opc == Op_AndL) {
+    Node* o2 = n->in(2);
+    if (o2->is_Con() && (o2->get_long() & 0xFFFFFFFF00000000LL) == 0LL) {
+      return true;
+    }
+  }
+  return false;
+}
+
 %}
 
 //----------ENCODING BLOCK-----------------------------------------------------
@@ -8599,6 +8619,63 @@
   ins_pipe( pipe_slow );
 %}
 
+// Multiply Register Long where the left operand's high 32 bits are zero
+instruct mulL_eReg_lhi0(eADXRegL dst, eRegL src, eRegI tmp, eFlagsReg cr) %{
+  predicate(is_operand_hi32_zero(n->in(1)));
+  match(Set dst (MulL dst src));
+  effect(KILL cr, TEMP tmp);
+  ins_cost(2*100+2*400);
+// Basic idea: lo(result) = lo(x_lo * y_lo)
+//             hi(result) = hi(x_lo * y_lo) + lo(x_lo * y_hi) where lo(x_hi * y_lo) = 0 because x_hi = 0
+  format %{ "MOV    $tmp,$src.hi\n\t"
+            "IMUL   $tmp,EAX\n\t"
+            "MUL    EDX:EAX,$src.lo\n\t"
+            "ADD    EDX,$tmp" %}
+  ins_encode %{
+    __ movl($tmp$$Register, HIGH_FROM_LOW($src$$Register));
+    __ imull($tmp$$Register, rax);
+    __ mull($src$$Register);
+    __ addl(rdx, $tmp$$Register);
+  %}
+  ins_pipe( pipe_slow );
+%}
+
+// Multiply Register Long where the right operand's high 32 bits are zero
+instruct mulL_eReg_rhi0(eADXRegL dst, eRegL src, eRegI tmp, eFlagsReg cr) %{
+  predicate(is_operand_hi32_zero(n->in(2)));
+  match(Set dst (MulL dst src));
+  effect(KILL cr, TEMP tmp);
+  ins_cost(2*100+2*400);
+// Basic idea: lo(result) = lo(x_lo * y_lo)
+//             hi(result) = hi(x_lo * y_lo) + lo(x_hi * y_lo) where lo(x_lo * y_hi) = 0 because y_hi = 0
+  format %{ "MOV    $tmp,$src.lo\n\t"
+            "IMUL   $tmp,EDX\n\t"
+            "MUL    EDX:EAX,$src.lo\n\t"
+            "ADD    EDX,$tmp" %}
+  ins_encode %{
+    __ movl($tmp$$Register, $src$$Register);
+    __ imull($tmp$$Register, rdx);
+    __ mull($src$$Register);
+    __ addl(rdx, $tmp$$Register);
+  %}
+  ins_pipe( pipe_slow );
+%}
+
+// Multiply Register Long where the left and the right operands' high 32 bits are zero
+instruct mulL_eReg_hi0(eADXRegL dst, eRegL src, eFlagsReg cr) %{
+  predicate(is_operand_hi32_zero(n->in(1)) && is_operand_hi32_zero(n->in(2)));
+  match(Set dst (MulL dst src));
+  effect(KILL cr);
+  ins_cost(1*400);
+// Basic idea: lo(result) = lo(x_lo * y_lo)
+//             hi(result) = hi(x_lo * y_lo) where lo(x_hi * y_lo) = 0 and lo(x_lo * y_hi) = 0 because x_hi = 0 and y_hi = 0
+  format %{ "MUL    EDX:EAX,$src.lo\n\t" %}
+  ins_encode %{
+    __ mull($src$$Register);
+  %}
+  ins_pipe( pipe_slow );
+%}
+
 // Multiply Register Long by small constant
 instruct mulL_eReg_con(eADXRegL dst, immL_127 src, eRegI tmp, eFlagsReg cr) %{
   match(Set dst (MulL dst src));
--- a/hotspot/src/cpu/zero/vm/interpreter_zero.cpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/cpu/zero/vm/interpreter_zero.cpp	Fri Feb 19 15:13:37 2010 -0800
@@ -1,6 +1,6 @@
 /*
  * Copyright 2003-2007 Sun Microsystems, Inc.  All Rights Reserved.
- * Copyright 2007, 2008 Red Hat, Inc.
+ * Copyright 2007, 2008, 2009, 2010 Red Hat, Inc.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -47,6 +47,10 @@
   return ShouldNotCallThisEntry();
 }
 
+bool AbstractInterpreter::can_be_compiled(methodHandle m) {
+  return true;
+}
+
 int AbstractInterpreter::size_activation(methodOop method,
                                          int tempcount,
                                          int popframe_extra_args,
--- a/hotspot/src/cpu/zero/vm/sharedRuntime_zero.cpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/cpu/zero/vm/sharedRuntime_zero.cpp	Fri Feb 19 15:13:37 2010 -0800
@@ -1,6 +1,6 @@
 /*
  * Copyright 2003-2007 Sun Microsystems, Inc.  All Rights Reserved.
- * Copyright 2007, 2008, 2009 Red Hat, Inc.
+ * Copyright 2007, 2008, 2009, 2010 Red Hat, Inc.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -47,8 +47,10 @@
                         int total_args_passed,
                         int comp_args_on_stack,
                         const BasicType *sig_bt,
-                        const VMRegPair *regs) {
-  return new AdapterHandlerEntry(
+                        const VMRegPair *regs,
+                        AdapterFingerPrint *fingerprint) {
+  return AdapterHandlerLibrary::new_entry(
+    fingerprint,
     ShouldNotCallThisStub(),
     ShouldNotCallThisStub(),
     ShouldNotCallThisStub());
--- a/hotspot/src/os/windows/vm/os_windows.cpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/os/windows/vm/os_windows.cpp	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 1997-2009 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 1997-2010 Sun Microsystems, Inc.  All Rights Reserved.
  * 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,6 +142,9 @@
 }
 
 #ifndef _WIN64
+// previous UnhandledExceptionFilter, if there is one
+static LPTOP_LEVEL_EXCEPTION_FILTER prev_uef_handler = NULL;
+
 LONG WINAPI Handle_FLT_Exception(struct _EXCEPTION_POINTERS* exceptionInfo);
 #endif
 void os::init_system_properties_values() {
@@ -260,7 +263,8 @@
   }
 
 #ifndef _WIN64
-  SetUnhandledExceptionFilter(Handle_FLT_Exception);
+  // set our UnhandledExceptionFilter and save any previous one
+  prev_uef_handler = SetUnhandledExceptionFilter(Handle_FLT_Exception);
 #endif
 
   // Done
@@ -1969,7 +1973,7 @@
 #ifndef  _WIN64
 //-----------------------------------------------------------------------------
 LONG WINAPI Handle_FLT_Exception(struct _EXCEPTION_POINTERS* exceptionInfo) {
-  // handle exception caused by native mothod modifying control word
+  // handle exception caused by native method modifying control word
   PCONTEXT ctx = exceptionInfo->ContextRecord;
   DWORD exception_code = exceptionInfo->ExceptionRecord->ExceptionCode;
 
@@ -1990,6 +1994,13 @@
         return EXCEPTION_CONTINUE_EXECUTION;
       }
   }
+
+  if (prev_uef_handler != NULL) {
+    // We didn't handle this exception so pass it to the previous
+    // UnhandledExceptionFilter.
+    return (prev_uef_handler)(exceptionInfo);
+  }
+
   return EXCEPTION_CONTINUE_SEARCH;
 }
 #else //_WIN64
--- a/hotspot/src/share/vm/adlc/output_c.cpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/adlc/output_c.cpp	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 1998-2009 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 1998-2010 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -1496,7 +1496,7 @@
   unsigned      i;
 
   // Generate Expand function header
-  fprintf(fp,"MachNode *%sNode::Expand(State *state, Node_List &proj_list) {\n", node->_ident);
+  fprintf(fp,"MachNode *%sNode::Expand(State *state, Node_List &proj_list, Node* mem) {\n", node->_ident);
   fprintf(fp,"Compile* C = Compile::current();\n");
   // Generate expand code
   if( node->expands() ) {
@@ -1546,15 +1546,16 @@
     // Build a mapping from operand index to input edges
     fprintf(fp,"  unsigned idx0 = oper_input_base();\n");
 
-    // The order in which inputs are added to a node is very
+    // The order in which the memory input is added to a node is very
     // strange.  Store nodes get a memory input before Expand is
-    // called and all other nodes get it afterwards so
-    // oper_input_base is wrong during expansion.  This code adjusts
-    // is so that expansion will work correctly.
-    bool missing_memory_edge = node->_matrule->needs_ideal_memory_edge(_globalNames) &&
-                               node->is_ideal_store() == Form::none;
-    if (missing_memory_edge) {
-      fprintf(fp,"  idx0--; // Adjust base because memory edge hasn't been inserted yet\n");
+    // called and other nodes get it afterwards or before depending on
+    // match order so oper_input_base is wrong during expansion.  This
+    // code adjusts it so that expansion will work correctly.
+    int has_memory_edge = node->_matrule->needs_ideal_memory_edge(_globalNames);
+    if (has_memory_edge) {
+      fprintf(fp,"  if (mem == (Node*)1) {\n");
+      fprintf(fp,"    idx0--; // Adjust base because memory edge hasn't been inserted yet\n");
+      fprintf(fp,"  }\n");
     }
 
     for( i = 0; i < node->num_opnds(); i++ ) {
@@ -1611,9 +1612,11 @@
         int node_mem_op = node->memory_operand(_globalNames);
         assert( node_mem_op != InstructForm::NO_MEMORY_OPERAND,
                 "expand rule member needs memory but top-level inst doesn't have any" );
-        if (!missing_memory_edge) {
+        if (has_memory_edge) {
           // Copy memory edge
-          fprintf(fp,"  n%d->add_req(_in[1]);\t// Add memory edge\n", cnt);
+          fprintf(fp,"  if (mem != (Node*)1) {\n");
+          fprintf(fp,"    n%d->add_req(_in[1]);\t// Add memory edge\n", cnt);
+          fprintf(fp,"  }\n");
         }
       }
 
@@ -1689,7 +1692,7 @@
       } // done iterating over a new instruction's operands
 
       // Invoke Expand() for the newly created instruction.
-      fprintf(fp,"  result = n%d->Expand( state, proj_list );\n", cnt);
+      fprintf(fp,"  result = n%d->Expand( state, proj_list, mem );\n", cnt);
       assert( !new_inst->expands(), "Do not have complete support for recursive expansion");
     } // done iterating over new instructions
     fprintf(fp,"\n");
--- a/hotspot/src/share/vm/adlc/output_h.cpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/adlc/output_h.cpp	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 1998-2009 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 1998-2010 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -1754,7 +1754,7 @@
         instr->has_temps() ||
         instr->_matrule != NULL &&
         instr->num_opnds() != instr->num_unique_opnds() ) {
-      fprintf(fp,"  virtual MachNode      *Expand(State *state, Node_List &proj_list);\n");
+      fprintf(fp,"  virtual MachNode      *Expand(State *state, Node_List &proj_list, Node* mem);\n");
     }
 
     if (instr->is_pinned(_globalNames)) {
--- a/hotspot/src/share/vm/asm/codeBuffer.hpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/asm/codeBuffer.hpp	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 1997-2008 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 1997-2010 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -39,6 +39,7 @@
                  Dtrace_trap = OSR_Entry,  // dtrace probes can never have an OSR entry so reuse it
                  Exceptions,     // Offset where exception handler lives
                  Deopt,          // Offset where deopt handler lives
+                 DeoptMH,        // Offset where MethodHandle deopt handler lives
                  max_Entries };
 
   // special value to note codeBlobs where profile (forte) stack walking is
@@ -51,12 +52,13 @@
 
 public:
   CodeOffsets() {
-    _values[Entry] = 0;
+    _values[Entry         ] = 0;
     _values[Verified_Entry] = 0;
     _values[Frame_Complete] = frame_never_safe;
-    _values[OSR_Entry] = 0;
-    _values[Exceptions] = -1;
-    _values[Deopt] = -1;
+    _values[OSR_Entry     ] = 0;
+    _values[Exceptions    ] = -1;
+    _values[Deopt         ] = -1;
+    _values[DeoptMH       ] = -1;
   }
 
   int value(Entries e) { return _values[e]; }
--- a/hotspot/src/share/vm/c1/c1_Compilation.cpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/c1/c1_Compilation.cpp	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 1999-2009 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 1999-2010 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -205,6 +205,8 @@
 void Compilation::emit_code_epilog(LIR_Assembler* assembler) {
   CHECK_BAILOUT();
 
+  CodeOffsets* code_offsets = assembler->offsets();
+
   // generate code or slow cases
   assembler->emit_slow_case_stubs();
   CHECK_BAILOUT();
@@ -213,10 +215,18 @@
   assembler->emit_exception_entries(exception_info_list());
   CHECK_BAILOUT();
 
-  // generate code for exception handler
-  assembler->emit_exception_handler();
+  // Generate code for exception handler.
+  code_offsets->set_value(CodeOffsets::Exceptions, assembler->emit_exception_handler());
   CHECK_BAILOUT();
-  assembler->emit_deopt_handler();
+
+  // Generate code for deopt handler.
+  code_offsets->set_value(CodeOffsets::Deopt, assembler->emit_deopt_handler());
+  CHECK_BAILOUT();
+
+  // Generate code for MethodHandle deopt handler.  We can use the
+  // same code as for the normal deopt handler, we just need a
+  // different entry point address.
+  code_offsets->set_value(CodeOffsets::DeoptMH, assembler->emit_deopt_handler());
   CHECK_BAILOUT();
 
   // done
--- a/hotspot/src/share/vm/c1/c1_LIRAssembler.hpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/c1/c1_LIRAssembler.hpp	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2008 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 2000-2010 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -133,9 +133,9 @@
   void add_call_info_here(CodeEmitInfo* info)                              { add_call_info(code_offset(), info); }
 
   // code patterns
-  void emit_exception_handler();
+  int  emit_exception_handler();
   void emit_exception_entries(ExceptionInfoList* info_list);
-  void emit_deopt_handler();
+  int  emit_deopt_handler();
 
   void emit_code(BlockList* hir);
   void emit_block(BlockBegin* block);
--- a/hotspot/src/share/vm/c1/c1_LIRGenerator.cpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/c1/c1_LIRGenerator.cpp	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 2005-2009 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 2005-2010 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -1765,7 +1765,7 @@
     __ null_check(exception_opr, new CodeEmitInfo(info, true));
   }
 
-  if (compilation()->env()->jvmti_can_post_exceptions() &&
+  if (compilation()->env()->jvmti_can_post_on_exceptions() &&
       !block()->is_set(BlockBegin::default_exception_handler_flag)) {
     // we need to go through the exception lookup path to get JVMTI
     // notification done
--- a/hotspot/src/share/vm/c1/c1_Runtime1.cpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/c1/c1_Runtime1.cpp	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 1999-2009 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 1999-2010 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -110,8 +110,8 @@
     RegisterMap reg_map(thread, false);
     frame runtime_frame = thread->last_frame();
     frame caller_frame = runtime_frame.sender(&reg_map);
-    VM_DeoptimizeFrame deopt(thread, caller_frame.id());
-    VMThread::execute(&deopt);
+    // bypass VM_DeoptimizeFrame and deoptimize the frame directly
+    Deoptimization::deoptimize_frame(thread, caller_frame.id());
     assert(caller_is_deopted(), "Must be deoptimized");
   }
 }
@@ -354,7 +354,7 @@
 
 
 JRT_ENTRY(void, Runtime1::post_jvmti_exception_throw(JavaThread* thread))
-  if (JvmtiExport::can_post_exceptions()) {
+  if (JvmtiExport::can_post_on_exceptions()) {
     vframeStream vfst(thread, true);
     address bcp = vfst.method()->bcp_from(vfst.bci());
     JvmtiExport::post_exception_throw(thread, vfst.method(), bcp, thread->exception_oop());
@@ -437,7 +437,7 @@
   bool guard_pages_enabled = thread->stack_yellow_zone_enabled();
   if (!guard_pages_enabled) guard_pages_enabled = thread->reguard_stack();
 
-  if (JvmtiExport::can_post_exceptions()) {
+  if (JvmtiExport::can_post_on_exceptions()) {
     // To ensure correct notification of exception catches and throws
     // we have to deoptimize here.  If we attempted to notify the
     // catches and throws during this exception lookup it's possible
--- a/hotspot/src/share/vm/ci/ciEnv.cpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/ci/ciEnv.cpp	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 1999-2009 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 1999-2010 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -178,7 +178,7 @@
   _jvmti_can_hotswap_or_post_breakpoint = JvmtiExport::can_hotswap_or_post_breakpoint();
   _jvmti_can_examine_or_deopt_anywhere  = JvmtiExport::can_examine_or_deopt_anywhere();
   _jvmti_can_access_local_variables     = JvmtiExport::can_access_local_variables();
-  _jvmti_can_post_exceptions            = JvmtiExport::can_post_exceptions();
+  _jvmti_can_post_on_exceptions         = JvmtiExport::can_post_on_exceptions();
 }
 
 // ------------------------------------------------------------------
@@ -891,8 +891,8 @@
            JvmtiExport::can_examine_or_deopt_anywhere()) ||
           (!jvmti_can_access_local_variables() &&
            JvmtiExport::can_access_local_variables()) ||
-          (!jvmti_can_post_exceptions() &&
-           JvmtiExport::can_post_exceptions()) )) {
+          (!jvmti_can_post_on_exceptions() &&
+           JvmtiExport::can_post_on_exceptions()) )) {
       record_failure("Jvmti state change invalidated dependencies");
     }
 
@@ -962,18 +962,10 @@
     if (nm == NULL) {
       // The CodeCache is full.  Print out warning and disable compilation.
       record_failure("code cache is full");
-      UseInterpreter = true;
-      if (UseCompiler || AlwaysCompileLoopMethods ) {
-#ifndef PRODUCT
-        warning("CodeCache is full. Compiler has been disabled");
-        if (CompileTheWorld || ExitOnFullCodeCache) {
-          before_exit(JavaThread::current());
-          exit_globals(); // will delete tty
-          vm_direct_exit(CompileTheWorld ? 0 : 1);
-        }
-#endif
-        UseCompiler               = false;
-        AlwaysCompileLoopMethods  = false;
+      {
+        MutexUnlocker ml(Compile_lock);
+        MutexUnlocker locker(MethodCompileQueue_lock);
+        CompileBroker::handle_full_code_cache();
       }
     } else {
       NOT_PRODUCT(nm->set_has_debug_info(has_debug_info); )
--- a/hotspot/src/share/vm/ci/ciEnv.hpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/ci/ciEnv.hpp	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 1999-2009 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 1999-2010 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -57,7 +57,7 @@
   bool  _jvmti_can_hotswap_or_post_breakpoint;
   bool  _jvmti_can_examine_or_deopt_anywhere;
   bool  _jvmti_can_access_local_variables;
-  bool  _jvmti_can_post_exceptions;
+  bool  _jvmti_can_post_on_exceptions;
 
   // Cache DTrace flags
   bool  _dtrace_extended_probes;
@@ -259,7 +259,7 @@
   bool  jvmti_can_hotswap_or_post_breakpoint() const { return _jvmti_can_hotswap_or_post_breakpoint; }
   bool  jvmti_can_examine_or_deopt_anywhere()  const { return _jvmti_can_examine_or_deopt_anywhere; }
   bool  jvmti_can_access_local_variables()     const { return _jvmti_can_access_local_variables; }
-  bool  jvmti_can_post_exceptions()            const { return _jvmti_can_post_exceptions; }
+  bool  jvmti_can_post_on_exceptions()         const { return _jvmti_can_post_on_exceptions; }
 
   // Cache DTrace flags
   void  cache_dtrace_flags();
--- a/hotspot/src/share/vm/ci/ciMethod.cpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/ci/ciMethod.cpp	Fri Feb 19 15:13:37 2010 -0800
@@ -436,15 +436,20 @@
           // we will set result._method also.
         }
         // Determine call site's morphism.
-        // The call site count could be == (receivers_count_total + 1)
-        // not only in the case of a polymorphic call but also in the case
-        // when a method data snapshot is taken after the site count was updated
-        // but before receivers counters were updated.
-        if (morphism == result._limit) {
-           // There were no array klasses and morphism <= MorphismLimit.
-           if (morphism <  ciCallProfile::MorphismLimit ||
-               morphism == ciCallProfile::MorphismLimit &&
-               (receivers_count_total+1) >= count) {
+        // The call site count is 0 with known morphism (onlt 1 or 2 receivers)
+        // or < 0 in the case of a type check failured for checkcast, aastore, instanceof.
+        // The call site count is > 0 in the case of a polymorphic virtual call.
+        if (morphism > 0 && morphism == result._limit) {
+           // The morphism <= MorphismLimit.
+           if ((morphism <  ciCallProfile::MorphismLimit) ||
+               (morphism == ciCallProfile::MorphismLimit && count == 0)) {
+#ifdef ASSERT
+             if (count > 0) {
+               tty->print_cr("bci: %d", bci);
+               this->print_codes();
+               assert(false, "this call site should not be polymorphic");
+             }
+#endif
              result._morphism = morphism;
            }
         }
@@ -452,10 +457,8 @@
         // zero or less, presume that this is a typecheck profile and
         // do nothing.  Otherwise, increase count to be the sum of all
         // receiver's counts.
-        if (count > 0) {
-          if (count < receivers_count_total) {
-            count = receivers_count_total;
-          }
+        if (count >= 0) {
+          count += receivers_count_total;
         }
       }
       result._count = count;
--- a/hotspot/src/share/vm/classfile/classLoader.cpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/classfile/classLoader.cpp	Fri Feb 19 15:13:37 2010 -0800
@@ -1249,6 +1249,7 @@
 }
 
 int ClassLoader::_compile_the_world_counter = 0;
+static int _codecache_sweep_counter = 0;
 
 void ClassLoader::compile_the_world_in(char* name, Handle loader, TRAPS) {
   int len = (int)strlen(name);
@@ -1293,6 +1294,13 @@
           for (int n = 0; n < k->methods()->length(); n++) {
             methodHandle m (THREAD, methodOop(k->methods()->obj_at(n)));
             if (CompilationPolicy::canBeCompiled(m)) {
+
+              if (++_codecache_sweep_counter == CompileTheWorldSafepointInterval) {
+                // Give sweeper a chance to keep up with CTW
+                VM_ForceSafepoint op;
+                VMThread::execute(&op);
+                _codecache_sweep_counter = 0;
+              }
               // Force compilation
               CompileBroker::compile_method(m, InvocationEntryBci,
                                             methodHandle(), 0, "CTW", THREAD);
--- a/hotspot/src/share/vm/code/codeCache.cpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/code/codeCache.cpp	Fri Feb 19 15:13:37 2010 -0800
@@ -96,6 +96,7 @@
 int CodeCache::_number_of_nmethods_with_dependencies = 0;
 bool CodeCache::_needs_cache_clean = false;
 nmethod* CodeCache::_scavenge_root_nmethods = NULL;
+nmethod* CodeCache::_saved_nmethods = NULL;
 
 
 CodeBlob* CodeCache::first() {
@@ -395,6 +396,85 @@
 }
 #endif //PRODUCT
 
+
+nmethod* CodeCache::find_and_remove_saved_code(methodOop m) {
+  MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
+  nmethod* saved = _saved_nmethods;
+  nmethod* prev = NULL;
+  while (saved != NULL) {
+    if (saved->is_in_use() && saved->method() == m) {
+      if (prev != NULL) {
+        prev->set_saved_nmethod_link(saved->saved_nmethod_link());
+      } else {
+        _saved_nmethods = saved->saved_nmethod_link();
+      }
+      assert(saved->is_speculatively_disconnected(), "shouldn't call for other nmethods");
+      saved->set_speculatively_disconnected(false);
+      saved->set_saved_nmethod_link(NULL);
+      if (PrintMethodFlushing) {
+        saved->print_on(tty, " ### nmethod is reconnected");
+      }
+      if (LogCompilation && (xtty != NULL)) {
+        ttyLocker ttyl;
+        xtty->begin_elem("nmethod_reconnected compile_id='%3d'", saved->compile_id());
+        xtty->method(methodOop(m));
+        xtty->stamp();
+        xtty->end_elem();
+      }
+      return saved;
+    }
+    prev = saved;
+    saved = saved->saved_nmethod_link();
+  }
+  return NULL;
+}
+
+void CodeCache::remove_saved_code(nmethod* nm) {
+  MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
+  assert(nm->is_speculatively_disconnected(), "shouldn't call for other nmethods");
+  nmethod* saved = _saved_nmethods;
+  nmethod* prev = NULL;
+  while (saved != NULL) {
+    if (saved == nm) {
+      if (prev != NULL) {
+        prev->set_saved_nmethod_link(saved->saved_nmethod_link());
+      } else {
+        _saved_nmethods = saved->saved_nmethod_link();
+      }
+      if (LogCompilation && (xtty != NULL)) {
+        ttyLocker ttyl;
+        xtty->begin_elem("nmethod_removed compile_id='%3d'", nm->compile_id());
+        xtty->stamp();
+        xtty->end_elem();
+      }
+      return;
+    }
+    prev = saved;
+    saved = saved->saved_nmethod_link();
+  }
+  ShouldNotReachHere();
+}
+
+void CodeCache::speculatively_disconnect(nmethod* nm) {
+  assert_locked_or_safepoint(CodeCache_lock);
+  assert(nm->is_in_use() && !nm->is_speculatively_disconnected(), "should only disconnect live nmethods");
+  nm->set_saved_nmethod_link(_saved_nmethods);
+  _saved_nmethods = nm;
+  if (PrintMethodFlushing) {
+    nm->print_on(tty, " ### nmethod is speculatively disconnected");
+  }
+  if (LogCompilation && (xtty != NULL)) {
+    ttyLocker ttyl;
+    xtty->begin_elem("nmethod_disconnected compile_id='%3d'", nm->compile_id());
+    xtty->method(methodOop(nm->method()));
+    xtty->stamp();
+    xtty->end_elem();
+  }
+  nm->method()->clear_code();
+  nm->set_speculatively_disconnected(true);
+}
+
+
 void CodeCache::gc_prologue() {
   assert(!nmethod::oops_do_marking_is_active(), "oops_do_marking_epilogue must be called");
 }
--- a/hotspot/src/share/vm/code/codeCache.hpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/code/codeCache.hpp	Fri Feb 19 15:13:37 2010 -0800
@@ -46,6 +46,7 @@
   static int _number_of_nmethods_with_dependencies;
   static bool _needs_cache_clean;
   static nmethod* _scavenge_root_nmethods;  // linked via nm->scavenge_root_link()
+  static nmethod* _saved_nmethods;          // linked via nm->saved_nmethod_look()
 
   static void verify_if_often() PRODUCT_RETURN;
 
@@ -141,11 +142,16 @@
   static size_t  capacity()                      { return _heap->capacity(); }
   static size_t  max_capacity()                  { return _heap->max_capacity(); }
   static size_t  unallocated_capacity()          { return _heap->unallocated_capacity(); }
+  static bool    needs_flushing()                { return unallocated_capacity() < CodeCacheFlushingMinimumFreeSpace; }
 
   static bool needs_cache_clean()                { return _needs_cache_clean; }
   static void set_needs_cache_clean(bool v)      { _needs_cache_clean = v;    }
   static void clear_inline_caches();             // clear all inline caches
 
+  static nmethod* find_and_remove_saved_code(methodOop m);
+  static void remove_saved_code(nmethod* nm);
+  static void speculatively_disconnect(nmethod* nm);
+
   // Deoptimization
   static int  mark_for_deoptimization(DepChange& changes);
 #ifdef HOTSWAP
--- a/hotspot/src/share/vm/code/dependencies.cpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/code/dependencies.cpp	Fri Feb 19 15:13:37 2010 -0800
@@ -843,13 +843,15 @@
     if (occasional_print || final_stats) {
       // Every now and then dump a little info about dependency searching.
       if (xtty != NULL) {
-        xtty->elem("deps_find_witness calls='%d' steps='%d' recursions='%d' singles='%d'",
+       ttyLocker ttyl;
+       xtty->elem("deps_find_witness calls='%d' steps='%d' recursions='%d' singles='%d'",
                    deps_find_witness_calls,
                    deps_find_witness_steps,
                    deps_find_witness_recursions,
                    deps_find_witness_singles);
       }
       if (final_stats || (TraceDependencies && WizardMode)) {
+        ttyLocker ttyl;
         tty->print_cr("Dependency check (find_witness) "
                       "calls=%d, steps=%d (avg=%.1f), recursions=%d, singles=%d",
                       deps_find_witness_calls,
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/src/share/vm/code/jvmticmlr.h	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,115 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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.  Sun designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/*
+ * This header file defines the data structures sent by the VM
+ * through the JVMTI CompiledMethodLoad callback function via the
+ * "void * compile_info" parameter. The memory pointed to by the
+ * compile_info parameter may not be referenced after returning from
+ * the CompiledMethodLoad callback. These are VM implementation
+ * specific data structures that may evolve in future releases. A
+ * JVMTI agent should interpret a non-NULL compile_info as a pointer
+ * to a region of memory containing a list of records. In a typical
+ * usage scenario, a JVMTI agent would cast each record to a
+ * jvmtiCompiledMethodLoadRecordHeader, a struct that represents
+ * arbitrary information. This struct contains a kind field to indicate
+ * the kind of information being passed, and a pointer to the next
+ * record. If the kind field indicates inlining information, then the
+ * agent would cast the record to a jvmtiCompiledMethodLoadInlineRecord.
+ * This record contains an array of PCStackInfo structs, which indicate
+ * for every pc address what are the methods on the invocation stack.
+ * The "methods" and "bcis" fields in each PCStackInfo struct specify a
+ * 1-1 mapping between these inlined methods and their bytecode indices.
+ * This can be used to derive the proper source lines of the inlined
+ * methods.
+ */
+
+#ifndef _JVMTI_CMLR_H_
+#define _JVMTI_CMLR_H_
+
+enum {
+    JVMTI_CMLR_MAJOR_VERSION_1 = 0x00000001,
+    JVMTI_CMLR_MINOR_VERSION_0 = 0x00000000,
+
+    JVMTI_CMLR_MAJOR_VERSION   = 0x00000001,
+    JVMTI_CMLR_MINOR_VERSION   = 0x00000000
+
+    /*
+     * This comment is for the "JDK import from HotSpot" sanity check:
+     * version: 1.0.0
+     */
+};
+
+typedef enum {
+    JVMTI_CMLR_DUMMY       = 1,
+    JVMTI_CMLR_INLINE_INFO = 2
+} jvmtiCMLRKind;
+
+/*
+ * Record that represents arbitrary information passed through JVMTI
+ * CompiledMethodLoadEvent void pointer.
+ */
+typedef struct _jvmtiCompiledMethodLoadRecordHeader {
+  jvmtiCMLRKind kind;     /* id for the kind of info passed in the record */
+  jint majorinfoversion;  /* major and minor info version values. Init'ed */
+  jint minorinfoversion;  /* to current version value in jvmtiExport.cpp. */
+
+  struct _jvmtiCompiledMethodLoadRecordHeader* next;
+} jvmtiCompiledMethodLoadRecordHeader;
+
+/*
+ * Record that gives information about the methods on the compile-time
+ * stack at a specific pc address of a compiled method. Each element in
+ * the methods array maps to same element in the bcis array.
+ */
+typedef struct _PCStackInfo {
+  void* pc;             /* the pc address for this compiled method */
+  jint numstackframes;  /* number of methods on the stack */
+  jmethodID* methods;   /* array of numstackframes method ids */
+  jint* bcis;           /* array of numstackframes bytecode indices */
+} PCStackInfo;
+
+/*
+ * Record that contains inlining information for each pc address of
+ * an nmethod.
+ */
+typedef struct _jvmtiCompiledMethodLoadInlineRecord {
+  jvmtiCompiledMethodLoadRecordHeader header;  /* common header for casting */
+  jint numpcs;          /* number of pc descriptors in this nmethod */
+  PCStackInfo* pcinfo;  /* array of numpcs pc descriptors */
+} jvmtiCompiledMethodLoadInlineRecord;
+
+/*
+ * Dummy record used to test that we can pass records with different
+ * information through the void pointer provided that they can be cast
+ * to a jvmtiCompiledMethodLoadRecordHeader.
+ */
+
+typedef struct _jvmtiCompiledMethodLoadDummyRecord {
+  jvmtiCompiledMethodLoadRecordHeader header;  /* common header for casting */
+  char message[50];
+} jvmtiCompiledMethodLoadDummyRecord;
+
+#endif
--- a/hotspot/src/share/vm/code/nmethod.cpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/code/nmethod.cpp	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 1997-2009 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 1997-2010 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -587,11 +587,13 @@
     _osr_link                = NULL;
     _scavenge_root_link      = NULL;
     _scavenge_root_state     = 0;
+    _saved_nmethod_link      = NULL;
     _compiler                = NULL;
     // We have no exception handler or deopt handler make the
     // values something that will never match a pc like the nmethod vtable entry
     _exception_offset        = 0;
     _deoptimize_offset       = 0;
+    _deoptimize_mh_offset    = 0;
     _orig_pc_offset          = 0;
 #ifdef HAVE_DTRACE_H
     _trap_offset             = 0;
@@ -682,6 +684,7 @@
     // values something that will never match a pc like the nmethod vtable entry
     _exception_offset        = 0;
     _deoptimize_offset       = 0;
+    _deoptimize_mh_offset    = 0;
     _trap_offset             = offsets->value(CodeOffsets::Dtrace_trap);
     _orig_pc_offset          = 0;
     _stub_offset             = data_offset();
@@ -794,6 +797,7 @@
     // Exception handler and deopt handler are in the stub section
     _exception_offset        = _stub_offset + offsets->value(CodeOffsets::Exceptions);
     _deoptimize_offset       = _stub_offset + offsets->value(CodeOffsets::Deopt);
+    _deoptimize_mh_offset    = _stub_offset + offsets->value(CodeOffsets::DeoptMH);
     _consts_offset           = instructions_offset() + code_buffer->total_offset_of(code_buffer->consts()->start());
     _scopes_data_offset      = data_offset();
     _scopes_pcs_offset       = _scopes_data_offset   + round_to(debug_info->data_size         (), oopSize);
@@ -1033,7 +1037,7 @@
         if( cb != NULL && cb->is_nmethod() ) {
           nmethod* nm = (nmethod*)cb;
           // Clean inline caches pointing to both zombie and not_entrant methods
-          if (!nm->is_in_use()) ic->set_to_clean();
+          if (!nm->is_in_use() || (nm->method()->code() != nm)) ic->set_to_clean();
         }
         break;
       }
@@ -1043,7 +1047,7 @@
         if( cb != NULL && cb->is_nmethod() ) {
           nmethod* nm = (nmethod*)cb;
           // Clean inline caches pointing to both zombie and not_entrant methods
-          if (!nm->is_in_use()) csc->set_to_clean();
+          if (!nm->is_in_use() || (nm->method()->code() != nm)) csc->set_to_clean();
         }
         break;
       }
@@ -1113,7 +1117,6 @@
     if (_method->code() == this) {
       _method->clear_code(); // Break a cycle
     }
-    inc_decompile_count();     // Last chance to make a mark on the MDO
     _method = NULL;            // Clear the method of this dead nmethod
   }
   // Make the class unloaded - i.e., change state and notify sweeper
@@ -1173,15 +1176,17 @@
 bool nmethod::make_not_entrant_or_zombie(unsigned int state) {
   assert(state == zombie || state == not_entrant, "must be zombie or not_entrant");
 
-  // If the method is already zombie there is nothing to do
-  if (is_zombie()) {
-    return false;
-  }
+  bool was_alive = false;
 
   // Make sure the nmethod is not flushed in case of a safepoint in code below.
   nmethodLocker nml(this);
 
   {
+    // If the method is already zombie there is nothing to do
+    if (is_zombie()) {
+      return false;
+    }
+
     // invalidate osr nmethod before acquiring the patching lock since
     // they both acquire leaf locks and we don't want a deadlock.
     // This logic is equivalent to the logic below for patching the
@@ -1219,6 +1224,8 @@
       assert(state == not_entrant, "other cases may need to be handled differently");
     }
 
+    was_alive = is_in_use(); // Read state under lock
+
     // Change state
     flags.state = state;
 
@@ -1245,8 +1252,11 @@
     mark_as_seen_on_stack();
   }
 
-  // It's a true state change, so mark the method as decompiled.
-  inc_decompile_count();
+  if (was_alive) {
+    // It's a true state change, so mark the method as decompiled.
+    // Do it only for transition from alive.
+    inc_decompile_count();
+  }
 
   // zombie only - if a JVMTI agent has enabled the CompiledMethodUnload event
   // and it hasn't already been reported for this nmethod then report it now.
@@ -1312,7 +1322,8 @@
   // completely deallocate this method
   EventMark m("flushing nmethod " INTPTR_FORMAT " %s", this, "");
   if (PrintMethodFlushing) {
-    tty->print_cr("*flushing nmethod " INTPTR_FORMAT ". Live blobs: %d", this, CodeCache::nof_blobs());
+    tty->print_cr("*flushing nmethod %3d/" INTPTR_FORMAT ". Live blobs:" UINT32_FORMAT "/Free CodeCache:" SIZE_FORMAT "Kb",
+        _compile_id, this, CodeCache::nof_blobs(), CodeCache::unallocated_capacity()/1024);
   }
 
   // We need to deallocate any ExceptionCache data.
@@ -1330,6 +1341,10 @@
     CodeCache::drop_scavenge_root_nmethod(this);
   }
 
+  if (is_speculatively_disconnected()) {
+    CodeCache::remove_saved_code(this);
+  }
+
   ((CodeBlob*)(this))->flush();
 
   CodeCache::free(this);
@@ -2031,9 +2046,21 @@
   guarantee(nm->_lock_count >= 0, "unmatched nmethod lock/unlock");
 }
 
-bool nmethod::is_deopt_pc(address pc) {
-  bool ret =  pc == deopt_handler_begin();
-  return ret;
+
+// -----------------------------------------------------------------------------
+// nmethod::get_deopt_original_pc
+//
+// Return the original PC for the given PC if:
+// (a) the given PC belongs to a nmethod and
+// (b) it is a deopt PC
+address nmethod::get_deopt_original_pc(const frame* fr) {
+  if (fr->cb() == NULL)  return NULL;
+
+  nmethod* nm = fr->cb()->as_nmethod_or_null();
+  if (nm != NULL && nm->is_deopt_pc(fr->pc()))
+    return nm->get_original_pc(fr);
+
+  return NULL;
 }
 
 
@@ -2404,6 +2431,8 @@
   if (block_begin == verified_entry_point())    stream->print_cr("[Verified Entry Point]");
   if (block_begin == exception_begin())         stream->print_cr("[Exception Handler]");
   if (block_begin == stub_begin())              stream->print_cr("[Stub Code]");
+  if (block_begin == deopt_handler_begin())     stream->print_cr("[Deopt Handler Code]");
+  if (block_begin == deopt_mh_handler_begin())  stream->print_cr("[Deopt MH Handler Code]");
   if (block_begin == consts_begin())            stream->print_cr("[Constants]");
   if (block_begin == entry_point()) {
     methodHandle m = method();
--- a/hotspot/src/share/vm/code/nmethod.hpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/code/nmethod.hpp	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 1997-2009 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 1997-2010 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -95,6 +95,8 @@
   unsigned int has_unsafe_access:1;          // May fault due to unsafe access.
   unsigned int has_method_handle_invokes:1;  // Has this method MethodHandle invokes?
 
+  unsigned int speculatively_disconnected:1; // Marked for potential unload
+
   void clear();
 };
 
@@ -137,6 +139,7 @@
   // To support simple linked-list chaining of nmethods:
   nmethod*  _osr_link;         // from instanceKlass::osr_nmethods_head
   nmethod*  _scavenge_root_link; // from CodeCache::scavenge_root_nmethods
+  nmethod*  _saved_nmethod_link; // from CodeCache::speculatively_disconnect
 
   static nmethod* volatile _oops_do_mark_nmethods;
   nmethod*        volatile _oops_do_mark_link;
@@ -145,8 +148,12 @@
 
   // Offsets for different nmethod parts
   int _exception_offset;
-  // All deoptee's will resume execution at this location described by this offset
+  // All deoptee's will resume execution at this location described by
+  // this offset.
   int _deoptimize_offset;
+  // All deoptee's at a MethodHandle call site will resume execution
+  // at this location described by this offset.
+  int _deoptimize_mh_offset;
 #ifdef HAVE_DTRACE_H
   int _trap_offset;
 #endif // def HAVE_DTRACE_H
@@ -329,24 +336,25 @@
   bool is_compiled_by_c2() const;
 
   // boundaries for different parts
-  address code_begin         () const             { return _entry_point; }
-  address code_end           () const             { return           header_begin() + _stub_offset          ; }
-  address exception_begin    () const             { return           header_begin() + _exception_offset     ; }
-  address deopt_handler_begin() const             { return           header_begin() + _deoptimize_offset    ; }
-  address stub_begin         () const             { return           header_begin() + _stub_offset          ; }
-  address stub_end           () const             { return           header_begin() + _consts_offset        ; }
-  address consts_begin       () const             { return           header_begin() + _consts_offset        ; }
-  address consts_end         () const             { return           header_begin() + _scopes_data_offset   ; }
-  address scopes_data_begin  () const             { return           header_begin() + _scopes_data_offset   ; }
-  address scopes_data_end    () const             { return           header_begin() + _scopes_pcs_offset    ; }
-  PcDesc* scopes_pcs_begin   () const             { return (PcDesc*)(header_begin() + _scopes_pcs_offset   ); }
-  PcDesc* scopes_pcs_end     () const             { return (PcDesc*)(header_begin() + _dependencies_offset); }
-  address dependencies_begin () const             { return           header_begin() + _dependencies_offset ; }
-  address dependencies_end   () const             { return           header_begin() + _handler_table_offset ; }
-  address handler_table_begin() const             { return           header_begin() + _handler_table_offset ; }
-  address handler_table_end  () const             { return           header_begin() + _nul_chk_table_offset   ; }
-  address nul_chk_table_begin() const             { return           header_begin() + _nul_chk_table_offset ; }
-  address nul_chk_table_end  () const             { return           header_begin() + _nmethod_end_offset   ; }
+  address code_begin            () const          { return _entry_point; }
+  address code_end              () const          { return           header_begin() + _stub_offset          ; }
+  address exception_begin       () const          { return           header_begin() + _exception_offset     ; }
+  address deopt_handler_begin   () const          { return           header_begin() + _deoptimize_offset    ; }
+  address deopt_mh_handler_begin() const          { return           header_begin() + _deoptimize_mh_offset ; }
+  address stub_begin            () const          { return           header_begin() + _stub_offset          ; }
+  address stub_end              () const          { return           header_begin() + _consts_offset        ; }
+  address consts_begin          () const          { return           header_begin() + _consts_offset        ; }
+  address consts_end            () const          { return           header_begin() + _scopes_data_offset   ; }
+  address scopes_data_begin     () const          { return           header_begin() + _scopes_data_offset   ; }
+  address scopes_data_end       () const          { return           header_begin() + _scopes_pcs_offset    ; }
+  PcDesc* scopes_pcs_begin      () const          { return (PcDesc*)(header_begin() + _scopes_pcs_offset   ); }
+  PcDesc* scopes_pcs_end        () const          { return (PcDesc*)(header_begin() + _dependencies_offset) ; }
+  address dependencies_begin    () const          { return           header_begin() + _dependencies_offset  ; }
+  address dependencies_end      () const          { return           header_begin() + _handler_table_offset ; }
+  address handler_table_begin   () const          { return           header_begin() + _handler_table_offset ; }
+  address handler_table_end     () const          { return           header_begin() + _nul_chk_table_offset ; }
+  address nul_chk_table_begin   () const          { return           header_begin() + _nul_chk_table_offset ; }
+  address nul_chk_table_end     () const          { return           header_begin() + _nmethod_end_offset   ; }
 
   int code_size         () const                  { return      code_end         () -      code_begin         (); }
   int stub_size         () const                  { return      stub_end         () -      stub_begin         (); }
@@ -413,6 +421,9 @@
   bool  has_method_handle_invokes() const         { return flags.has_method_handle_invokes; }
   void  set_has_method_handle_invokes(bool z)     { flags.has_method_handle_invokes = z; }
 
+  bool  is_speculatively_disconnected() const     { return flags.speculatively_disconnected; }
+  void  set_speculatively_disconnected(bool z)     { flags.speculatively_disconnected = z; }
+
   int   level() const                             { return flags.level; }
   void  set_level(int newLevel)                   { check_safepoint(); flags.level = newLevel; }
 
@@ -437,6 +448,9 @@
   nmethod* scavenge_root_link() const                  { return _scavenge_root_link; }
   void     set_scavenge_root_link(nmethod *n)          { _scavenge_root_link = n; }
 
+  nmethod* saved_nmethod_link() const                  { return _saved_nmethod_link; }
+  void     set_saved_nmethod_link(nmethod *n)          { _saved_nmethod_link = n; }
+
  public:
 
   // Sweeper support
@@ -515,7 +529,7 @@
  private:
   ScopeDesc* scope_desc_in(address begin, address end);
 
-  address* orig_pc_addr(const frame* fr ) { return (address*) ((address)fr->unextended_sp() + _orig_pc_offset); }
+  address* orig_pc_addr(const frame* fr) { return (address*) ((address)fr->unextended_sp() + _orig_pc_offset); }
 
   PcDesc* find_pc_desc_internal(address pc, bool approximate);
 
@@ -538,13 +552,17 @@
   void copy_scopes_pcs(PcDesc* pcs, int count);
   void copy_scopes_data(address buffer, int size);
 
-  // deopt
-  // return true is the pc is one would expect if the frame is being deopted.
-  bool is_deopt_pc(address pc);
+  // Deopt
+  // Return true is the PC is one would expect if the frame is being deopted.
+  bool is_deopt_pc      (address pc) { return is_deopt_entry(pc) || is_deopt_mh_entry(pc); }
+  bool is_deopt_entry   (address pc) { return pc == deopt_handler_begin(); }
+  bool is_deopt_mh_entry(address pc) { return pc == deopt_mh_handler_begin(); }
   // Accessor/mutator for the original pc of a frame before a frame was deopted.
   address get_original_pc(const frame* fr) { return *orig_pc_addr(fr); }
   void    set_original_pc(const frame* fr, address pc) { *orig_pc_addr(fr) = pc; }
 
+  static address get_deopt_original_pc(const frame* fr);
+
   // MethodHandle
   bool is_method_handle_return(address return_pc);
 
--- a/hotspot/src/share/vm/compiler/compileBroker.cpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/compiler/compileBroker.cpp	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 1999-2009 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 1999-2010 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -69,6 +69,7 @@
 
 bool CompileBroker::_initialized = false;
 volatile bool CompileBroker::_should_block = false;
+volatile jint CompileBroker::_should_compile_new_jobs = run_compilation;
 
 // The installed compiler(s)
 AbstractCompiler* CompileBroker::_compilers[2];
@@ -986,6 +987,13 @@
       return method_code;
     }
     if (method->is_not_compilable(comp_level)) return NULL;
+
+    nmethod* saved = CodeCache::find_and_remove_saved_code(method());
+    if (saved != NULL) {
+      method->set_code(method, saved);
+      return saved;
+    }
+
   } else {
     // osr compilation
 #ifndef TIERED
@@ -1037,6 +1045,14 @@
     method->jmethod_id();
   }
 
+  // If the compiler is shut off due to code cache flushing or otherwise,
+  // fail out now so blocking compiles dont hang the java thread
+  if (!should_compile_new_jobs() || (UseCodeCacheFlushing && CodeCache::needs_flushing())) {
+    method->invocation_counter()->decay();
+    method->backedge_counter()->decay();
+    return NULL;
+  }
+
   // do the compilation
   if (method->is_native()) {
     if (!PreferInterpreterNativeStubs) {
@@ -1116,7 +1132,7 @@
   // the specified level
   if (is_native &&
       (!CICompileNatives || !compiler(comp_level)->supports_native())) {
-    method->set_not_compilable();
+    method->set_not_compilable_quietly();
     return true;
   }
 
@@ -1140,7 +1156,7 @@
       method->print_short_name(tty);
       tty->cr();
     }
-    method->set_not_compilable();
+    method->set_not_compilable_quietly();
   }
 
   return false;
@@ -1173,7 +1189,7 @@
   }
 
   // Method was not in the appropriate compilation range.
-  method->set_not_compilable();
+  method->set_not_compilable_quietly();
   return 0;
 }
 
@@ -1325,26 +1341,13 @@
     {
       // We need this HandleMark to avoid leaking VM handles.
       HandleMark hm(thread);
+
       if (CodeCache::unallocated_capacity() < CodeCacheMinimumFreeSpace) {
-        // The CodeCache is full.  Print out warning and disable compilation.
-        UseInterpreter = true;
-        if (UseCompiler || AlwaysCompileLoopMethods ) {
-          if (log != NULL) {
-            log->begin_elem("code_cache_full");
-            log->stamp();
-            log->end_elem();
-          }
-#ifndef PRODUCT
-          warning("CodeCache is full. Compiler has been disabled");
-          if (CompileTheWorld || ExitOnFullCodeCache) {
-            before_exit(thread);
-            exit_globals(); // will delete tty
-            vm_direct_exit(CompileTheWorld ? 0 : 1);
-          }
-#endif
-          UseCompiler               = false;
-          AlwaysCompileLoopMethods  = false;
-        }
+        // the code cache is really full
+        handle_full_code_cache();
+      } else if (UseCodeCacheFlushing && CodeCache::needs_flushing()) {
+        // Attempt to start cleaning the code cache while there is still a little headroom
+        NMethodSweeper::handle_full_code_cache(false);
       }
 
       CompileTask* task = queue->get();
@@ -1369,7 +1372,7 @@
       // Never compile a method if breakpoints are present in it
       if (method()->number_of_breakpoints() == 0) {
         // Compile the method.
-        if (UseCompiler || AlwaysCompileLoopMethods) {
+        if ((UseCompiler || AlwaysCompileLoopMethods) && CompileBroker::should_compile_new_jobs()) {
 #ifdef COMPILER1
           // Allow repeating compilations for the purpose of benchmarking
           // compile speed. This is not useful for customers.
@@ -1587,10 +1590,10 @@
     if (is_osr) {
       method->set_not_osr_compilable();
     } else {
-      method->set_not_compilable();
+      method->set_not_compilable_quietly();
     }
   } else if (compilable == ciEnv::MethodCompilable_not_at_tier) {
-    method->set_not_compilable(task->comp_level());
+    method->set_not_compilable_quietly(task->comp_level());
   }
 
   // Note that the queued_for_compilation bits are cleared without
@@ -1614,6 +1617,38 @@
 
 
 // ------------------------------------------------------------------
+// CompileBroker::handle_full_code_cache
+//
+// The CodeCache is full.  Print out warning and disable compilation or
+// try code cache cleaning so compilation can continue later.
+void CompileBroker::handle_full_code_cache() {
+  UseInterpreter = true;
+  if (UseCompiler || AlwaysCompileLoopMethods ) {
+    CompilerThread* thread = CompilerThread::current();
+    CompileLog* log = thread->log();
+    if (log != NULL) {
+      log->begin_elem("code_cache_full");
+      log->stamp();
+      log->end_elem();
+    }
+  #ifndef PRODUCT
+    warning("CodeCache is full. Compiler has been disabled");
+    if (CompileTheWorld || ExitOnFullCodeCache) {
+      before_exit(JavaThread::current());
+      exit_globals(); // will delete tty
+      vm_direct_exit(CompileTheWorld ? 0 : 1);
+    }
+  #endif
+    if (UseCodeCacheFlushing) {
+      NMethodSweeper::handle_full_code_cache(true);
+    } else {
+      UseCompiler               = false;
+      AlwaysCompileLoopMethods  = false;
+    }
+  }
+}
+
+// ------------------------------------------------------------------
 // CompileBroker::set_last_compile
 //
 // Record this compilation for debugging purposes.
--- a/hotspot/src/share/vm/compiler/compileBroker.hpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/compiler/compileBroker.hpp	Fri Feb 19 15:13:37 2010 -0800
@@ -193,6 +193,9 @@
   static bool _initialized;
   static volatile bool _should_block;
 
+  // This flag can be used to stop compilation or turn it back on
+  static volatile jint _should_compile_new_jobs;
+
   // The installed compiler(s)
   static AbstractCompiler* _compilers[2];
 
@@ -319,6 +322,7 @@
 
   static void compiler_thread_loop();
 
+  static uint get_compilation_id() { return _compilation_id; }
   static bool is_idle();
 
   // Set _should_block.
@@ -328,6 +332,20 @@
   // Call this from the compiler at convenient points, to poll for _should_block.
   static void maybe_block();
 
+  enum {
+    // Flags for toggling compiler activity
+    stop_compilation = 0,
+    run_compilation  = 1
+  };
+
+  static bool should_compile_new_jobs() { return UseCompiler && (_should_compile_new_jobs == run_compilation); }
+  static bool set_should_compile_new_jobs(jint new_state) {
+    // Return success if the current caller set it
+    jint old = Atomic::cmpxchg(new_state, &_should_compile_new_jobs, 1-new_state);
+    return (old == (1-new_state));
+  }
+  static void handle_full_code_cache();
+
   // Return total compilation ticks
   static jlong total_compilation_ticks() {
     return _perf_total_compilation != NULL ? _perf_total_compilation->get_value() : 0;
--- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp	Fri Feb 19 15:13:37 2010 -0800
@@ -3655,9 +3655,7 @@
   verify_work_stacks_empty();
   verify_overflow_empty();
   assert(_revisitStack.isEmpty(), "tabula rasa");
-
-  DEBUG_ONLY(RememberKlassesChecker cmx(CMSClassUnloadingEnabled);)
-
+  DEBUG_ONLY(RememberKlassesChecker cmx(should_unload_classes());)
   bool result = false;
   if (CMSConcurrentMTEnabled && ParallelCMSThreads > 0) {
     result = do_marking_mt(asynch);
@@ -4124,7 +4122,6 @@
 void CMSConcMarkingTask::coordinator_yield() {
   assert(ConcurrentMarkSweepThread::cms_thread_has_cms_token(),
          "CMS thread should hold CMS token");
-
   DEBUG_ONLY(RememberKlassesChecker mux(false);)
   // First give up the locks, then yield, then re-lock
   // We should probably use a constructor/destructor idiom to
@@ -4201,9 +4198,7 @@
   // Mutate the Refs discovery so it is MT during the
   // multi-threaded marking phase.
   ReferenceProcessorMTMutator mt(ref_processor(), num_workers > 1);
-
-  DEBUG_ONLY(RememberKlassesChecker cmx(CMSClassUnloadingEnabled);)
-
+  DEBUG_ONLY(RememberKlassesChecker cmx(should_unload_classes());)
   conc_workers()->start_task(&tsk);
   while (tsk.yielded()) {
     tsk.coordinator_yield();
@@ -4472,7 +4467,7 @@
     // for cleaner interfaces.
     rp->preclean_discovered_references(
           rp->is_alive_non_header(), &keep_alive, &complete_trace,
-          &yield_cl);
+          &yield_cl, should_unload_classes());
   }
 
   if (clean_survivor) {  // preclean the active survivor space(s)
@@ -4494,7 +4489,7 @@
     SurvivorSpacePrecleanClosure
       sss_cl(this, _span, &_markBitMap, &_markStack,
              &pam_cl, before_count, CMSYield);
-    DEBUG_ONLY(RememberKlassesChecker mx(CMSClassUnloadingEnabled);)
+    DEBUG_ONLY(RememberKlassesChecker mx(should_unload_classes());)
     dng->from()->object_iterate_careful(&sss_cl);
     dng->to()->object_iterate_careful(&sss_cl);
   }
@@ -4665,7 +4660,7 @@
         verify_work_stacks_empty();
         verify_overflow_empty();
         sample_eden();
-        DEBUG_ONLY(RememberKlassesChecker mx(CMSClassUnloadingEnabled);)
+        DEBUG_ONLY(RememberKlassesChecker mx(should_unload_classes());)
         stop_point =
           gen->cmsSpace()->object_iterate_careful_m(dirtyRegion, cl);
       }
@@ -4753,7 +4748,7 @@
       sample_eden();
       verify_work_stacks_empty();
       verify_overflow_empty();
-      DEBUG_ONLY(RememberKlassesChecker mx(CMSClassUnloadingEnabled);)
+      DEBUG_ONLY(RememberKlassesChecker mx(should_unload_classes());)
       HeapWord* stop_point =
         gen->cmsSpace()->object_iterate_careful_m(dirtyRegion, cl);
       if (stop_point != NULL) {
@@ -4853,7 +4848,7 @@
   assert(haveFreelistLocks(), "must have free list locks");
   assert_lock_strong(bitMapLock());
 
-  DEBUG_ONLY(RememberKlassesChecker fmx(CMSClassUnloadingEnabled);)
+  DEBUG_ONLY(RememberKlassesChecker fmx(should_unload_classes());)
   if (!init_mark_was_synchronous) {
     // We might assume that we need not fill TLAB's when
     // CMSScavengeBeforeRemark is set, because we may have just done
--- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp	Fri Feb 19 15:13:37 2010 -0800
@@ -1004,7 +1004,12 @@
   // storage in the heap comes from a young region or not.
   // See ReduceInitialCardMarks.
   virtual bool can_elide_tlab_store_barriers() const {
-    return true;
+    // 6920090: Temporarily disabled, because of lingering
+    // instabilities related to RICM with G1. In the
+    // interim, the option ReduceInitialCardMarksForG1
+    // below is left solely as a debugging device at least
+    // until 6920109 fixes the instabilities.
+    return ReduceInitialCardMarksForG1;
   }
 
   virtual bool card_mark_must_follow_store() const {
@@ -1026,6 +1031,8 @@
   // However, non-generational G1 (-XX:-G1Gen) appears to have
   // bit-rotted so was not tested below.
   virtual bool can_elide_initializing_store_barrier(oop new_obj) {
+    // Re 6920090, 6920109 above.
+    assert(ReduceInitialCardMarksForG1, "Else cannot be here");
     assert(G1Gen || !is_in_young(new_obj),
            "Non-generational G1 should never return true below");
     return is_in_young(new_obj);
--- a/hotspot/src/share/vm/gc_implementation/g1/g1_globals.hpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1_globals.hpp	Fri Feb 19 15:13:37 2010 -0800
@@ -291,6 +291,10 @@
           "a particular entry exceeds this value.")                         \
                                                                             \
   develop(bool, G1VerifyCTCleanup, false,                                   \
-          "Verify card table cleanup.")
+          "Verify card table cleanup.")                                     \
+                                                                            \
+  develop(bool, ReduceInitialCardMarksForG1, false,                         \
+          "When ReduceInitialCardMarks is true, this flag setting "         \
+          " controls whether G1 allows the RICM optimization")
 
 G1_FLAGS(DECLARE_DEVELOPER_FLAG, DECLARE_PD_DEVELOPER_FLAG, DECLARE_PRODUCT_FLAG, DECLARE_PD_PRODUCT_FLAG, DECLARE_DIAGNOSTIC_FLAG, DECLARE_EXPERIMENTAL_FLAG, DECLARE_NOTPRODUCT_FLAG, DECLARE_MANAGEABLE_FLAG, DECLARE_PRODUCT_RW_FLAG)
--- a/hotspot/src/share/vm/gc_interface/collectedHeap.cpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/gc_interface/collectedHeap.cpp	Fri Feb 19 15:13:37 2010 -0800
@@ -66,7 +66,8 @@
   // Used for ReduceInitialCardMarks (when COMPILER2 is used);
   // otherwise remains unused.
 #ifdef COMPLER2
-  _defer_initial_card_mark = ReduceInitialCardMarks && (DeferInitialCardMark || card_mark_must_follow_store());
+  _defer_initial_card_mark =    ReduceInitialCardMarks && can_elide_tlab_store_barriers()
+                             && (DeferInitialCardMark || card_mark_must_follow_store());
 #else
   assert(_defer_initial_card_mark == false, "Who would set it?");
 #endif
--- a/hotspot/src/share/vm/includeDB_compiler2	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/includeDB_compiler2	Fri Feb 19 15:13:37 2010 -0800
@@ -775,6 +775,7 @@
 output.cpp                              assembler.inline.hpp
 output.cpp                              callnode.hpp
 output.cpp                              cfgnode.hpp
+output.cpp                              compileBroker.hpp
 output.cpp                              debugInfo.hpp
 output.cpp                              debugInfoRec.hpp
 output.cpp                              handles.inline.hpp
--- a/hotspot/src/share/vm/includeDB_core	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/includeDB_core	Fri Feb 19 15:13:37 2010 -0800
@@ -921,6 +921,7 @@
 
 classLoader.cpp                         allocation.inline.hpp
 classLoader.cpp                         arguments.hpp
+classLoader.cpp                         bytecodeStream.hpp
 classLoader.cpp                         classFileParser.hpp
 classLoader.cpp                         classFileStream.hpp
 classLoader.cpp                         classLoader.hpp
@@ -948,6 +949,7 @@
 classLoader.cpp                         management.hpp
 classLoader.cpp                         oop.inline.hpp
 classLoader.cpp                         oopFactory.hpp
+classLoader.cpp                         oopMapCache.hpp
 classLoader.cpp                         os_<os_family>.inline.hpp
 classLoader.cpp                         symbolOop.hpp
 classLoader.cpp                         systemDictionary.hpp
@@ -1030,6 +1032,7 @@
 codeCache.cpp                           oop.inline.hpp
 codeCache.cpp                           pcDesc.hpp
 codeCache.cpp                           resourceArea.hpp
+codeCache.cpp                           xmlstream.hpp
 
 codeCache.hpp                           allocation.hpp
 codeCache.hpp                           codeBlob.hpp
@@ -1118,6 +1121,7 @@
 compileBroker.cpp                       oop.inline.hpp
 compileBroker.cpp                       os.hpp
 compileBroker.cpp                       sharedRuntime.hpp
+compileBroker.cpp                       sweeper.hpp
 compileBroker.cpp                       systemDictionary.hpp
 compileBroker.cpp                       vmSymbols.hpp
 
@@ -2530,6 +2534,7 @@
 jvmtiExport.hpp                         handles.hpp
 jvmtiExport.hpp                         iterator.hpp
 jvmtiExport.hpp                         jvmti.h
+jvmtiExport.hpp                         jvmticmlr.h
 jvmtiExport.hpp                         oop.hpp
 jvmtiExport.hpp                         oopsHierarchy.hpp
 
@@ -3716,6 +3721,7 @@
 sharedRuntime.cpp                       abstractCompiler.hpp
 sharedRuntime.cpp                       arguments.hpp
 sharedRuntime.cpp                       biasedLocking.hpp
+sharedRuntime.cpp                       compileBroker.hpp
 sharedRuntime.cpp                       compiledIC.hpp
 sharedRuntime.cpp                       compilerOracle.hpp
 sharedRuntime.cpp                       copy.hpp
@@ -3724,6 +3730,7 @@
 sharedRuntime.cpp                       forte.hpp
 sharedRuntime.cpp                       gcLocker.inline.hpp
 sharedRuntime.cpp                       handles.inline.hpp
+sharedRuntime.cpp                       hashtable.inline.hpp
 sharedRuntime.cpp                       init.hpp
 sharedRuntime.cpp                       interfaceSupport.hpp
 sharedRuntime.cpp                       interpreterRuntime.hpp
@@ -3751,6 +3758,7 @@
 sharedRuntime.hpp                       allocation.hpp
 sharedRuntime.hpp                       bytecodeHistogram.hpp
 sharedRuntime.hpp                       bytecodeTracer.hpp
+sharedRuntime.hpp                       hashtable.hpp
 sharedRuntime.hpp                       linkResolver.hpp
 sharedRuntime.hpp                       resourceArea.hpp
 sharedRuntime.hpp                       threadLocalStorage.hpp
@@ -3968,6 +3976,7 @@
 
 sweeper.cpp                             atomic.hpp
 sweeper.cpp                             codeCache.hpp
+sweeper.cpp                             compileBroker.hpp
 sweeper.cpp                             events.hpp
 sweeper.cpp                             methodOop.hpp
 sweeper.cpp                             mutexLocker.hpp
@@ -3975,6 +3984,8 @@
 sweeper.cpp                             os.hpp
 sweeper.cpp                             resourceArea.hpp
 sweeper.cpp                             sweeper.hpp
+sweeper.cpp                             vm_operations.hpp
+sweeper.cpp                             xmlstream.hpp
 
 symbolKlass.cpp                         gcLocker.hpp
 symbolKlass.cpp                         handles.inline.hpp
@@ -4628,6 +4639,7 @@
 vm_operations.cpp                       interfaceSupport.hpp
 vm_operations.cpp                       isGCActiveMark.hpp
 vm_operations.cpp                       resourceArea.hpp
+vm_operations.cpp                       sweeper.hpp
 vm_operations.cpp                       threadService.hpp
 vm_operations.cpp                       thread_<os_family>.inline.hpp
 vm_operations.cpp                       vmSymbols.hpp
--- a/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 1997-2009 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 1997-2010 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -397,7 +397,7 @@
 
   // notify JVMTI of an exception throw; JVMTI will detect if this is a first
   // time throw or a stack unwinding throw and accordingly notify the debugger
-  if (JvmtiExport::can_post_exceptions()) {
+  if (JvmtiExport::can_post_on_exceptions()) {
     JvmtiExport::post_exception_throw(thread, h_method(), bcp(thread), h_exception());
   }
 
@@ -426,7 +426,7 @@
   }
   // notify debugger of an exception catch
   // (this is good for exceptions caught in native methods as well)
-  if (JvmtiExport::can_post_exceptions()) {
+  if (JvmtiExport::can_post_on_exceptions()) {
     JvmtiExport::notice_unwind_due_to_exception(thread, h_method(), handler_pc, h_exception(), (handler_pc != NULL));
   }
 
--- a/hotspot/src/share/vm/memory/iterator.hpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/memory/iterator.hpp	Fri Feb 19 15:13:37 2010 -0800
@@ -296,23 +296,32 @@
 // RememberKlassesChecker can be passed "false" to turn off checking.
 // It is used by CMS when CMS yields to a different collector.
 class RememberKlassesChecker: StackObj {
- bool _state;
- bool _skip;
+ bool _saved_state;
+ bool _do_check;
  public:
-  RememberKlassesChecker(bool checking_on) : _state(false), _skip(false) {
-    _skip = !(ClassUnloading && !UseConcMarkSweepGC ||
-              CMSClassUnloadingEnabled && UseConcMarkSweepGC);
-    if (_skip) {
-      return;
+  RememberKlassesChecker(bool checking_on) : _saved_state(false),
+    _do_check(true) {
+    // The ClassUnloading unloading flag affects the collectors except
+    // for CMS.
+    // CMS unloads classes if CMSClassUnloadingEnabled is true or
+    // if ExplicitGCInvokesConcurrentAndUnloadsClasses is true and
+    // the current collection is an explicit collection.  Turning
+    // on the checking in general for
+    // ExplicitGCInvokesConcurrentAndUnloadsClasses and
+    // UseConcMarkSweepGC should not lead to false positives.
+    _do_check =
+      ClassUnloading && !UseConcMarkSweepGC ||
+      CMSClassUnloadingEnabled && UseConcMarkSweepGC ||
+      ExplicitGCInvokesConcurrentAndUnloadsClasses && UseConcMarkSweepGC;
+    if (_do_check) {
+      _saved_state = OopClosure::must_remember_klasses();
+      OopClosure::set_must_remember_klasses(checking_on);
     }
-    _state = OopClosure::must_remember_klasses();
-    OopClosure::set_must_remember_klasses(checking_on);
   }
   ~RememberKlassesChecker() {
-    if (_skip) {
-      return;
+    if (_do_check) {
+      OopClosure::set_must_remember_klasses(_saved_state);
     }
-    OopClosure::set_must_remember_klasses(_state);
   }
 };
 #endif  // ASSERT
--- a/hotspot/src/share/vm/memory/referenceProcessor.cpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/memory/referenceProcessor.cpp	Fri Feb 19 15:13:37 2010 -0800
@@ -1227,13 +1227,16 @@
   BoolObjectClosure* is_alive,
   OopClosure* keep_alive,
   VoidClosure* complete_gc,
-  YieldClosure* yield) {
+  YieldClosure* yield,
+  bool should_unload_classes) {
 
   NOT_PRODUCT(verify_ok_to_handle_reflists());
 
 #ifdef ASSERT
   bool must_remember_klasses = ClassUnloading && !UseConcMarkSweepGC ||
-                               CMSClassUnloadingEnabled && UseConcMarkSweepGC;
+                               CMSClassUnloadingEnabled && UseConcMarkSweepGC ||
+                               ExplicitGCInvokesConcurrentAndUnloadsClasses &&
+                                 UseConcMarkSweepGC && should_unload_classes;
   RememberKlassesChecker mx(must_remember_klasses);
 #endif
   // Soft references
--- a/hotspot/src/share/vm/memory/referenceProcessor.hpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/memory/referenceProcessor.hpp	Fri Feb 19 15:13:37 2010 -0800
@@ -170,11 +170,13 @@
   // The caller is responsible for taking care of potential
   // interference with concurrent operations on these lists
   // (or predicates involved) by other threads. Currently
-  // only used by the CMS collector.
+  // only used by the CMS collector.  should_unload_classes is
+  // used to aid assertion checking when classes are collected.
   void preclean_discovered_references(BoolObjectClosure* is_alive,
                                       OopClosure*        keep_alive,
                                       VoidClosure*       complete_gc,
-                                      YieldClosure*      yield);
+                                      YieldClosure*      yield,
+                                      bool               should_unload_classes);
 
   // Delete entries in the discovered lists that have
   // either a null referent or are not active. Such
--- a/hotspot/src/share/vm/oops/methodDataOop.hpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/oops/methodDataOop.hpp	Fri Feb 19 15:13:37 2010 -0800
@@ -1391,6 +1391,9 @@
   }
   void inc_decompile_count() {
     _nof_decompiles += 1;
+    if (decompile_count() > (uint)PerMethodRecompilationCutoff) {
+      method()->set_not_compilable();
+    }
   }
 
   // Support for code generation
--- a/hotspot/src/share/vm/oops/methodOop.cpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/oops/methodOop.cpp	Fri Feb 19 15:13:37 2010 -0800
@@ -575,12 +575,6 @@
     return true;
   }
 
-  methodDataOop mdo = method_data();
-  if (mdo != NULL
-      && (uint)mdo->decompile_count() > (uint)PerMethodRecompilationCutoff) {
-    // Since (uint)-1 is large, -1 really means 'no cutoff'.
-    return true;
-  }
 #ifdef COMPILER2
   if (is_tier1_compile(comp_level)) {
     if (is_not_tier1_compilable()) {
@@ -593,7 +587,16 @@
 }
 
 // call this when compiler finds that this method is not compilable
-void methodOopDesc::set_not_compilable(int comp_level) {
+void methodOopDesc::set_not_compilable(int comp_level, bool report) {
+  if (PrintCompilation && report) {
+    ttyLocker ttyl;
+    tty->print("made not compilable ");
+    this->print_short_name(tty);
+    int size = this->code_size();
+    if (size > 0)
+      tty->print(" (%d bytes)", size);
+    tty->cr();
+  }
   if ((TraceDeoptimization || LogCompilation) && (xtty != NULL)) {
     ttyLocker ttyl;
     xtty->begin_elem("make_not_compilable thread='%d'", (int) os::current_thread_id());
@@ -688,7 +691,7 @@
   // so making them eagerly shouldn't be too expensive.
   AdapterHandlerEntry* adapter = AdapterHandlerLibrary::get_adapter(mh);
   if (adapter == NULL ) {
-    THROW_0(vmSymbols::java_lang_OutOfMemoryError());
+    THROW_MSG_NULL(vmSymbols::java_lang_VirtualMachineError(), "out of space in CodeCache for adapters");
   }
 
   mh->set_adapter_entry(adapter);
@@ -705,6 +708,16 @@
 // This function must not hit a safepoint!
 address methodOopDesc::verified_code_entry() {
   debug_only(No_Safepoint_Verifier nsv;)
+  nmethod *code = (nmethod *)OrderAccess::load_ptr_acquire(&_code);
+  if (code == NULL && UseCodeCacheFlushing) {
+    nmethod *saved_code = CodeCache::find_and_remove_saved_code(this);
+    if (saved_code != NULL) {
+      methodHandle method(this);
+      assert( ! saved_code->is_osr_method(), "should not get here for osr" );
+      set_code( method, saved_code );
+    }
+  }
+
   assert(_from_compiled_entry != NULL, "must be set");
   return _from_compiled_entry;
 }
@@ -733,8 +746,8 @@
   int comp_level = code->comp_level();
   // In theory there could be a race here. In practice it is unlikely
   // and not worth worrying about.
-  if (comp_level > highest_tier_compile()) {
-    set_highest_tier_compile(comp_level);
+  if (comp_level > mh->highest_tier_compile()) {
+    mh->set_highest_tier_compile(comp_level);
   }
 
   OrderAccess::storestore();
--- a/hotspot/src/share/vm/oops/methodOop.hpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/oops/methodOop.hpp	Fri Feb 19 15:13:37 2010 -0800
@@ -303,7 +303,7 @@
   bool check_code() const;      // Not inline to avoid circular ref
   nmethod* volatile code() const                 { assert( check_code(), "" ); return (nmethod *)OrderAccess::load_ptr_acquire(&_code); }
   void clear_code();            // Clear out any compiled code
-  void set_code(methodHandle mh, nmethod* code);
+  static void set_code(methodHandle mh, nmethod* code);
   void set_adapter_entry(AdapterHandlerEntry* adapter) {  _adapter = adapter; }
   address get_i2c_entry();
   address get_c2i_entry();
@@ -596,7 +596,10 @@
   // whether it is not compilable for another reason like having a
   // breakpoint set in it.
   bool is_not_compilable(int comp_level = CompLevel_highest_tier) const;
-  void set_not_compilable(int comp_level = CompLevel_highest_tier);
+  void set_not_compilable(int comp_level = CompLevel_highest_tier, bool report = true);
+  void set_not_compilable_quietly(int comp_level = CompLevel_highest_tier) {
+    set_not_compilable(comp_level, false);
+  }
 
   bool is_not_osr_compilable() const             { return is_not_compilable() || access_flags().is_not_osr_compilable(); }
   void set_not_osr_compilable()                  { _access_flags.set_not_osr_compilable(); }
--- a/hotspot/src/share/vm/opto/doCall.cpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/opto/doCall.cpp	Fri Feb 19 15:13:37 2010 -0800
@@ -182,26 +182,16 @@
             }
           }
           CallGenerator* miss_cg;
+          Deoptimization::DeoptReason reason = (profile.morphism() == 2) ?
+                                    Deoptimization::Reason_bimorphic :
+                                    Deoptimization::Reason_class_check;
           if (( profile.morphism() == 1 ||
                (profile.morphism() == 2 && next_hit_cg != NULL) ) &&
-
-              !too_many_traps(Deoptimization::Reason_class_check)
-
-              // Check only total number of traps per method to allow
-              // the transition from monomorphic to bimorphic case between
-              // compilations without falling into virtual call.
-              // A monomorphic case may have the class_check trap flag is set
-              // due to the time gap between the uncommon trap processing
-              // when flags are set in MDO and the call site bytecode execution
-              // in Interpreter when MDO counters are updated.
-              // There was also class_check trap in monomorphic case due to
-              // the bug 6225440.
-
+              !too_many_traps(jvms->method(), jvms->bci(), reason)
              ) {
             // Generate uncommon trap for class check failure path
             // in case of monomorphic or bimorphic virtual call site.
-            miss_cg = CallGenerator::for_uncommon_trap(call_method,
-                        Deoptimization::Reason_class_check,
+            miss_cg = CallGenerator::for_uncommon_trap(call_method, reason,
                         Deoptimization::Action_maybe_recompile);
           } else {
             // Generate virtual call for class check failure path
--- a/hotspot/src/share/vm/opto/graphKit.cpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/opto/graphKit.cpp	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 2001-2009 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 2001-2010 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -455,16 +455,44 @@
     return Bytecodes::_illegal;
 }
 
+void GraphKit::uncommon_trap_if_should_post_on_exceptions(Deoptimization::DeoptReason reason,
+                                                          bool must_throw) {
+    // if the exception capability is set, then we will generate code
+    // to check the JavaThread.should_post_on_exceptions flag to see
+    // if we actually need to report exception events (for this
+    // thread).  If we don't need to report exception events, we will
+    // take the normal fast path provided by add_exception_events.  If
+    // exception event reporting is enabled for this thread, we will
+    // take the uncommon_trap in the BuildCutout below.
+
+    // first must access the should_post_on_exceptions_flag in this thread's JavaThread
+    Node* jthread = _gvn.transform(new (C, 1) ThreadLocalNode());
+    Node* adr = basic_plus_adr(top(), jthread, in_bytes(JavaThread::should_post_on_exceptions_flag_offset()));
+    Node* should_post_flag = make_load(control(), adr, TypeInt::INT, T_INT, Compile::AliasIdxRaw, false);
+
+    // Test the should_post_on_exceptions_flag vs. 0
+    Node* chk = _gvn.transform( new (C, 3) CmpINode(should_post_flag, intcon(0)) );
+    Node* tst = _gvn.transform( new (C, 2) BoolNode(chk, BoolTest::eq) );
+
+    // Branch to slow_path if should_post_on_exceptions_flag was true
+    { BuildCutout unless(this, tst, PROB_MAX);
+      // Do not try anything fancy if we're notifying the VM on every throw.
+      // Cf. case Bytecodes::_athrow in parse2.cpp.
+      uncommon_trap(reason, Deoptimization::Action_none,
+                    (ciKlass*)NULL, (char*)NULL, must_throw);
+    }
+
+}
+
 //------------------------------builtin_throw----------------------------------
 void GraphKit::builtin_throw(Deoptimization::DeoptReason reason, Node* arg) {
   bool must_throw = true;
 
-  if (env()->jvmti_can_post_exceptions()) {
-    // Do not try anything fancy if we're notifying the VM on every throw.
-    // Cf. case Bytecodes::_athrow in parse2.cpp.
-    uncommon_trap(reason, Deoptimization::Action_none,
-                  (ciKlass*)NULL, (char*)NULL, must_throw);
-    return;
+  if (env()->jvmti_can_post_on_exceptions()) {
+    // check if we must post exception events, take uncommon trap if so
+    uncommon_trap_if_should_post_on_exceptions(reason, must_throw);
+    // here if should_post_on_exceptions is false
+    // continue on with the normal codegen
   }
 
   // If this particular condition has not yet happened at this
--- a/hotspot/src/share/vm/opto/graphKit.hpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/opto/graphKit.hpp	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 2001-2009 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 2001-2010 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -251,6 +251,11 @@
   // via an uncommon trap.
   void builtin_throw(Deoptimization::DeoptReason reason, Node* arg = NULL);
 
+  // Helper to check the JavaThread::_should_post_on_exceptions flag
+  // and branch to an uncommon_trap if it is true (with the specified reason and must_throw)
+  void uncommon_trap_if_should_post_on_exceptions(Deoptimization::DeoptReason reason,
+                                                  bool must_throw) ;
+
   // Helper Functions for adding debug information
   void kill_dead_locals();
 #ifdef ASSERT
--- a/hotspot/src/share/vm/opto/ifg.cpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/opto/ifg.cpp	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 1998-2009 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 1998-2010 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
--- a/hotspot/src/share/vm/opto/machnode.hpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/opto/machnode.hpp	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 1997-2007 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 1997-2010 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -232,7 +232,7 @@
   // Expand method for MachNode, replaces nodes representing pseudo
   // instructions with a set of nodes which represent real machine
   // instructions and compute the same value.
-  virtual MachNode *Expand( State *, Node_List &proj_list ) { return this; }
+  virtual MachNode *Expand( State *, Node_List &proj_list, Node* mem ) { return this; }
 
   // Bottom_type call; value comes from operand0
   virtual const class Type *bottom_type() const { return _opnds[0]->type(); }
--- a/hotspot/src/share/vm/opto/matcher.cpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/opto/matcher.cpp	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 1997-2009 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 1997-2010 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -1580,7 +1580,7 @@
   uint num_proj = _proj_list.size();
 
   // Perform any 1-to-many expansions required
-  MachNode *ex = mach->Expand(s,_proj_list);
+  MachNode *ex = mach->Expand(s,_proj_list, mem);
   if( ex != mach ) {
     assert(ex->ideal_reg() == mach->ideal_reg(), "ideal types should match");
     if( ex->in(1)->is_Con() )
--- a/hotspot/src/share/vm/opto/memnode.hpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/opto/memnode.hpp	Fri Feb 19 15:13:37 2010 -0800
@@ -583,9 +583,22 @@
 // Preceeding equivalent StoreCMs may be eliminated.
 class StoreCMNode : public StoreNode {
  private:
+  virtual uint hash() const { return StoreNode::hash() + _oop_alias_idx; }
+  virtual uint cmp( const Node &n ) const {
+    return _oop_alias_idx == ((StoreCMNode&)n)._oop_alias_idx
+      && StoreNode::cmp(n);
+  }
+  virtual uint size_of() const { return sizeof(*this); }
   int _oop_alias_idx;   // The alias_idx of OopStore
+
 public:
-  StoreCMNode( Node *c, Node *mem, Node *adr, const TypePtr* at, Node *val, Node *oop_store, int oop_alias_idx ) : StoreNode(c,mem,adr,at,val,oop_store), _oop_alias_idx(oop_alias_idx) {}
+  StoreCMNode( Node *c, Node *mem, Node *adr, const TypePtr* at, Node *val, Node *oop_store, int oop_alias_idx ) :
+    StoreNode(c,mem,adr,at,val,oop_store),
+    _oop_alias_idx(oop_alias_idx) {
+    assert(_oop_alias_idx >= Compile::AliasIdxRaw ||
+           _oop_alias_idx == Compile::AliasIdxBot && Compile::current()->AliasLevel() == 0,
+           "bad oop alias idx");
+  }
   virtual int Opcode() const;
   virtual Node *Identity( PhaseTransform *phase );
   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
--- a/hotspot/src/share/vm/opto/output.cpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/opto/output.cpp	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 1998-2009 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 1998-2010 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -1093,7 +1093,7 @@
   cb->initialize(total_req, locs_req);
 
   // Have we run out of code space?
-  if (cb->blob() == NULL) {
+  if ((cb->blob() == NULL) || (!CompileBroker::should_compile_new_jobs())) {
     turn_off_compiler(this);
     return;
   }
@@ -1314,7 +1314,7 @@
 
       // Verify that there is sufficient space remaining
       cb->insts()->maybe_expand_to_ensure_remaining(MAX_inst_size);
-      if (cb->blob() == NULL) {
+      if ((cb->blob() == NULL) || (!CompileBroker::should_compile_new_jobs())) {
         turn_off_compiler(this);
         return;
       }
@@ -1430,10 +1430,14 @@
     _code_offsets.set_value(CodeOffsets::Exceptions, emit_exception_handler(*cb));
     // Emit the deopt handler code.
     _code_offsets.set_value(CodeOffsets::Deopt, emit_deopt_handler(*cb));
+    // Emit the MethodHandle deopt handler code.  We can use the same
+    // code as for the normal deopt handler, we just need a different
+    // entry point address.
+    _code_offsets.set_value(CodeOffsets::DeoptMH, emit_deopt_handler(*cb));
   }
 
   // One last check for failed CodeBuffer::expand:
-  if (cb->blob() == NULL) {
+  if ((cb->blob() == NULL) || (!CompileBroker::should_compile_new_jobs())) {
     turn_off_compiler(this);
     return;
   }
--- a/hotspot/src/share/vm/opto/parse2.cpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/opto/parse2.cpp	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 1998-2009 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 1998-2010 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -2079,13 +2079,6 @@
     // null exception oop throws NULL pointer exception
     do_null_check(peek(), T_OBJECT);
     if (stopped())  return;
-    if (env()->jvmti_can_post_exceptions()) {
-      // "Full-speed throwing" is not necessary here,
-      // since we're notifying the VM on every throw.
-      uncommon_trap(Deoptimization::Reason_unhandled,
-                    Deoptimization::Action_none);
-      return;
-    }
     // Hook the thrown exception directly to subsequent handlers.
     if (BailoutToInterpreterForThrows) {
       // Keep method interpreted from now on.
@@ -2093,6 +2086,11 @@
                     Deoptimization::Action_make_not_compilable);
       return;
     }
+    if (env()->jvmti_can_post_on_exceptions()) {
+      // check if we must post exception events, take uncommon trap if so (with must_throw = false)
+      uncommon_trap_if_should_post_on_exceptions(Deoptimization::Reason_unhandled, false);
+    }
+    // Here if either can_post_on_exceptions or should_post_on_exceptions is false
     add_exception_state(make_exception_state(peek()));
     break;
 
--- a/hotspot/src/share/vm/opto/parseHelper.cpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/opto/parseHelper.cpp	Fri Feb 19 15:13:37 2010 -0800
@@ -414,8 +414,6 @@
 void Parse::profile_call(Node* receiver) {
   if (!method_data_update()) return;
 
-  profile_generic_call();
-
   switch (bc()) {
   case Bytecodes::_invokevirtual:
   case Bytecodes::_invokeinterface:
@@ -424,6 +422,7 @@
   case Bytecodes::_invokestatic:
   case Bytecodes::_invokedynamic:
   case Bytecodes::_invokespecial:
+    profile_generic_call();
     break;
   default: fatal("unexpected call bytecode");
   }
@@ -444,13 +443,16 @@
 void Parse::profile_receiver_type(Node* receiver) {
   assert(method_data_update(), "must be generating profile code");
 
-  // Skip if we aren't tracking receivers
-  if (TypeProfileWidth < 1) return;
-
   ciMethodData* md = method()->method_data();
   assert(md != NULL, "expected valid ciMethodData");
   ciProfileData* data = md->bci_to_data(bci());
   assert(data->is_ReceiverTypeData(), "need ReceiverTypeData here");
+
+  // Skip if we aren't tracking receivers
+  if (TypeProfileWidth < 1) {
+    increment_md_counter_at(md, data, CounterData::count_offset());
+    return;
+  }
   ciReceiverTypeData* rdata = (ciReceiverTypeData*)data->as_ReceiverTypeData();
 
   Node* method_data = method_data_addressing(md, rdata, in_ByteSize(0));
--- a/hotspot/src/share/vm/opto/runtime.cpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/opto/runtime.cpp	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 1998-2009 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 1998-2010 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -706,6 +706,11 @@
     // vc->set_receiver_count(empty_row, DataLayout::counter_increment);
     int count_off = ReceiverTypeData::receiver_count_cell_index(empty_row);
     *(mdp + count_off) = DataLayout::counter_increment;
+  } else {
+    // Receiver did not match any saved receiver and there is no empty row for it.
+    // Increment total counter to indicate polimorphic case.
+    intptr_t* count_p = (intptr_t*)(((byte*)(data)) + in_bytes(CounterData::count_offset()));
+    *count_p += DataLayout::counter_increment;
   }
 JRT_END
 
@@ -810,7 +815,7 @@
     // we are switching to old paradigm: search for exception handler in caller_frame
     // instead in exception handler of caller_frame.sender()
 
-    if (JvmtiExport::can_post_exceptions()) {
+    if (JvmtiExport::can_post_on_exceptions()) {
       // "Full-speed catching" is not necessary here,
       // since we're notifying the VM on every catch.
       // Force deoptimization and the rest of the lookup
@@ -975,8 +980,8 @@
     assert(stub_frame.is_runtime_frame() || exception_blob()->contains(stub_frame.pc()), "sanity check");
     frame caller_frame = stub_frame.sender(&reg_map);
 
-    VM_DeoptimizeFrame deopt(thread, caller_frame.id());
-    VMThread::execute(&deopt);
+    // bypass VM_DeoptimizeFrame and deoptimize the frame directly
+    Deoptimization::deoptimize_frame(thread, caller_frame.id());
   }
 }
 
--- a/hotspot/src/share/vm/prims/jvmtiEventController.cpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/prims/jvmtiEventController.cpp	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 2003-2007 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 2003-2010 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -82,7 +82,7 @@
                                THREAD_START_BIT | THREAD_END_BIT |
                                DYNAMIC_CODE_GENERATED_BIT;
 static const jlong  GLOBAL_EVENT_BITS = ~THREAD_FILTERED_EVENT_BITS;
-
+static const jlong  SHOULD_POST_ON_EXCEPTIONS_BITS = EXCEPTION_BITS | METHOD_EXIT_BIT | FRAME_POP_BIT;
 
 ///////////////////////////////////////////////////////////////
 //
@@ -511,7 +511,12 @@
         leave_interp_only_mode(state);
       }
     }
+
+    // update the JavaThread cached value for thread-specific should_post_on_exceptions value
+    bool should_post_on_exceptions = (any_env_enabled & SHOULD_POST_ON_EXCEPTIONS_BITS) != 0;
+    state->set_should_post_on_exceptions(should_post_on_exceptions);
   }
+
   return any_env_enabled;
 }
 
@@ -615,6 +620,10 @@
 
     // set global truly enabled, that is, any thread in any environment
     JvmtiEventController::_universal_global_event_enabled.set_bits(any_env_thread_enabled);
+
+    // set global should_post_on_exceptions
+    JvmtiExport::set_should_post_on_exceptions((any_env_thread_enabled & SHOULD_POST_ON_EXCEPTIONS_BITS) != 0);
+
   }
 
   EC_TRACE(("JVMTI [-] # recompute enabled - after %llx", any_env_thread_enabled));
--- a/hotspot/src/share/vm/prims/jvmtiExport.cpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/prims/jvmtiExport.cpp	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 2003-2009 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 2003-2010 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -686,11 +686,11 @@
   jvmtiAddrLocationMap *_map;
   const void *_compile_info;
  public:
-  JvmtiCompiledMethodLoadEventMark(JavaThread *thread, nmethod *nm)
+  JvmtiCompiledMethodLoadEventMark(JavaThread *thread, nmethod *nm, void* compile_info_ptr = NULL)
           : JvmtiMethodEventMark(thread,methodHandle(thread, nm->method())) {
     _code_data = nm->code_begin();
     _code_size = nm->code_size();
-    _compile_info = NULL; /* no info for our VM. */
+    _compile_info = compile_info_ptr; // Set void pointer of compiledMethodLoad Event. Default value is NULL.
     JvmtiCodeBlobEvents::build_jvmti_addr_location_map(nm, &_map, &_map_length);
   }
   ~JvmtiCompiledMethodLoadEventMark() {
@@ -877,7 +877,7 @@
 bool              JvmtiExport::_can_get_source_debug_extension            = false;
 bool              JvmtiExport::_can_maintain_original_method_order        = false;
 bool              JvmtiExport::_can_post_interpreter_events               = false;
-bool              JvmtiExport::_can_post_exceptions                       = false;
+bool              JvmtiExport::_can_post_on_exceptions                    = false;
 bool              JvmtiExport::_can_post_breakpoint                       = false;
 bool              JvmtiExport::_can_post_field_access                     = false;
 bool              JvmtiExport::_can_post_field_modification               = false;
@@ -908,6 +908,7 @@
 bool              JvmtiExport::_should_post_object_free                   = false;
 bool              JvmtiExport::_should_post_resource_exhausted            = false;
 bool              JvmtiExport::_should_post_vm_object_alloc               = false;
+bool              JvmtiExport::_should_post_on_exceptions                 = false;
 
 ////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -1752,6 +1753,46 @@
   }
 }
 
+// Returns a record containing inlining information for the given nmethod
+jvmtiCompiledMethodLoadInlineRecord* create_inline_record(nmethod* nm) {
+  jint numstackframes = 0;
+  jvmtiCompiledMethodLoadInlineRecord* record = (jvmtiCompiledMethodLoadInlineRecord*)NEW_RESOURCE_OBJ(jvmtiCompiledMethodLoadInlineRecord);
+  record->header.kind = JVMTI_CMLR_INLINE_INFO;
+  record->header.next = NULL;
+  record->header.majorinfoversion = JVMTI_CMLR_MAJOR_VERSION_1;
+  record->header.minorinfoversion = JVMTI_CMLR_MINOR_VERSION_0;
+  record->numpcs = 0;
+  for(PcDesc* p = nm->scopes_pcs_begin(); p < nm->scopes_pcs_end(); p++) {
+   if(p->scope_decode_offset() == DebugInformationRecorder::serialized_null) continue;
+   record->numpcs++;
+  }
+  record->pcinfo = (PCStackInfo*)(NEW_RESOURCE_ARRAY(PCStackInfo, record->numpcs));
+  int scope = 0;
+  for(PcDesc* p = nm->scopes_pcs_begin(); p < nm->scopes_pcs_end(); p++) {
+    if(p->scope_decode_offset() == DebugInformationRecorder::serialized_null) continue;
+    void* pc_address = (void*)p->real_pc(nm);
+    assert(pc_address != NULL, "pc_address must be non-null");
+    record->pcinfo[scope].pc = pc_address;
+    numstackframes=0;
+    for(ScopeDesc* sd = nm->scope_desc_at(p->real_pc(nm));sd != NULL;sd = sd->sender()) {
+      numstackframes++;
+    }
+    assert(numstackframes != 0, "numstackframes must be nonzero.");
+    record->pcinfo[scope].methods = (jmethodID *)NEW_RESOURCE_ARRAY(jmethodID, numstackframes);
+    record->pcinfo[scope].bcis = (jint *)NEW_RESOURCE_ARRAY(jint, numstackframes);
+    record->pcinfo[scope].numstackframes = numstackframes;
+    int stackframe = 0;
+    for(ScopeDesc* sd = nm->scope_desc_at(p->real_pc(nm));sd != NULL;sd = sd->sender()) {
+      // sd->method() can be NULL for stubs but not for nmethods. To be completely robust, include an assert that we should never see a null sd->method()
+      assert(!sd->method().is_null(), "sd->method() cannot be null.");
+      record->pcinfo[scope].methods[stackframe] = sd->method()->jmethod_id();
+      record->pcinfo[scope].bcis[stackframe] = sd->bci();
+      stackframe++;
+    }
+    scope++;
+  }
+  return record;
+}
 
 void JvmtiExport::post_compiled_method_load(nmethod *nm) {
   // If there are pending CompiledMethodUnload events then these are
@@ -1780,7 +1821,11 @@
                 (nm->method() == NULL) ? "NULL" : nm->method()->name()->as_C_string()));
 
       ResourceMark rm(thread);
-      JvmtiCompiledMethodLoadEventMark jem(thread, nm);
+
+      // Add inlining information
+      jvmtiCompiledMethodLoadInlineRecord* inlinerecord = create_inline_record(nm);
+      // Pass inlining information through the void pointer
+      JvmtiCompiledMethodLoadEventMark jem(thread, nm, inlinerecord);
       JvmtiJavaThreadEventTransition jet(thread);
       jvmtiEventCompiledMethodLoad callback = env->callbacks()->CompiledMethodLoad;
       if (callback != NULL) {
--- a/hotspot/src/share/vm/prims/jvmtiExport.hpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/prims/jvmtiExport.hpp	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 1998-2009 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 1998-2010 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -66,7 +66,7 @@
   JVMTI_SUPPORT_FLAG(can_get_source_debug_extension)
   JVMTI_SUPPORT_FLAG(can_maintain_original_method_order)
   JVMTI_SUPPORT_FLAG(can_post_interpreter_events)
-  JVMTI_SUPPORT_FLAG(can_post_exceptions)
+  JVMTI_SUPPORT_FLAG(can_post_on_exceptions)
   JVMTI_SUPPORT_FLAG(can_post_breakpoint)
   JVMTI_SUPPORT_FLAG(can_post_field_access)
   JVMTI_SUPPORT_FLAG(can_post_field_modification)
@@ -93,6 +93,7 @@
   JVMTI_SUPPORT_FLAG(should_post_data_dump)
   JVMTI_SUPPORT_FLAG(should_post_garbage_collection_start)
   JVMTI_SUPPORT_FLAG(should_post_garbage_collection_finish)
+  JVMTI_SUPPORT_FLAG(should_post_on_exceptions)
 
   // ------ the below maybe don't have to be (but are for now)
   // fixed conditions here ------------
--- a/hotspot/src/share/vm/prims/jvmtiManageCapabilities.cpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/prims/jvmtiManageCapabilities.cpp	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 2003-2006 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 2003-2010 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -357,7 +357,7 @@
     avail.can_access_local_variables  ||
     avail.can_redefine_classes ||
     avail.can_retransform_classes);
-  JvmtiExport::set_can_post_exceptions(
+  JvmtiExport::set_can_post_on_exceptions(
     avail.can_generate_exception_events ||
     avail.can_generate_frame_pop_events ||
     avail.can_generate_method_exit_events);
--- a/hotspot/src/share/vm/prims/jvmtiThreadState.hpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/prims/jvmtiThreadState.hpp	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 2003-2006 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 2003-2010 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -381,6 +381,9 @@
   static ByteSize earlyret_value_offset() { return byte_offset_of(JvmtiThreadState, _earlyret_value); }
 
   void oops_do(OopClosure* f); // GC support
+
+public:
+  void set_should_post_on_exceptions(bool val) { _thread->set_should_post_on_exceptions_flag(val ? JNI_TRUE : JNI_FALSE); }
 };
 
 class RedefineVerifyMark : public StackObj {
--- a/hotspot/src/share/vm/runtime/arguments.cpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/runtime/arguments.cpp	Fri Feb 19 15:13:37 2010 -0800
@@ -2815,6 +2815,15 @@
     DebugNonSafepoints = true;
   }
 
+#ifndef PRODUCT
+  if (CompileTheWorld) {
+    // Force NmethodSweeper to sweep whole CodeCache each time.
+    if (FLAG_IS_DEFAULT(NmethodSweepFraction)) {
+      NmethodSweepFraction = 1;
+    }
+  }
+#endif
+
   if (PrintCommandLineFlags) {
     CommandLineFlags::printSetFlags();
   }
--- a/hotspot/src/share/vm/runtime/compilationPolicy.cpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/runtime/compilationPolicy.cpp	Fri Feb 19 15:13:37 2010 -0800
@@ -66,7 +66,7 @@
   if (!canBeCompiled(m))      return false;
 
   return !UseInterpreter ||                                              // must compile all methods
-         (UseCompiler && AlwaysCompileLoopMethods && m->has_loops()); // eagerly compile loop methods
+         (UseCompiler && AlwaysCompileLoopMethods && m->has_loops() && CompileBroker::should_compile_new_jobs()); // eagerly compile loop methods
 }
 
 // Returns true if m is allowed to be compiled
@@ -137,7 +137,7 @@
   reset_counter_for_invocation_event(m);
   const char* comment = "count";
 
-  if (!delayCompilationDuringStartup() && canBeCompiled(m) && UseCompiler) {
+  if (!delayCompilationDuringStartup() && canBeCompiled(m) && UseCompiler && CompileBroker::should_compile_new_jobs()) {
     nmethod* nm = m->code();
     if (nm == NULL ) {
       const char* comment = "count";
@@ -162,7 +162,7 @@
   int hot_count = m->backedge_count();
   const char* comment = "backedge_count";
 
-  if (!m->is_not_osr_compilable() && !delayCompilationDuringStartup() && canBeCompiled(m)) {
+  if (!m->is_not_osr_compilable() && !delayCompilationDuringStartup() && canBeCompiled(m) && CompileBroker::should_compile_new_jobs()) {
     CompileBroker::compile_method(m, loop_top_bci, m, hot_count, comment, CHECK);
 
     NOT_PRODUCT(trace_osr_completion(m->lookup_osr_nmethod_for(loop_top_bci));)
@@ -204,7 +204,7 @@
   reset_counter_for_invocation_event(m);
   const char* comment = "count";
 
-  if (m->code() == NULL && !delayCompilationDuringStartup() && canBeCompiled(m) && UseCompiler) {
+  if (m->code() == NULL && !delayCompilationDuringStartup() && canBeCompiled(m) && UseCompiler && CompileBroker::should_compile_new_jobs()) {
     ResourceMark rm(THREAD);
     JavaThread *thread = (JavaThread*)THREAD;
     frame       fr     = thread->last_frame();
@@ -248,7 +248,7 @@
   int hot_count = m->backedge_count();
   const char* comment = "backedge_count";
 
-  if (!m->is_not_osr_compilable() && !delayCompilationDuringStartup() && canBeCompiled(m)) {
+  if (!m->is_not_osr_compilable() && !delayCompilationDuringStartup() && canBeCompiled(m) && CompileBroker::should_compile_new_jobs()) {
     CompileBroker::compile_method(m, loop_top_bci, m, hot_count, comment, CHECK);
 
     NOT_PRODUCT(trace_osr_completion(m->lookup_osr_nmethod_for(loop_top_bci));)
--- a/hotspot/src/share/vm/runtime/deoptimization.cpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/runtime/deoptimization.cpp	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 1997-2009 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 1997-2010 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -235,6 +235,12 @@
   assert(cb->frame_size() >= 0, "Unexpected frame size");
   intptr_t* unpack_sp = stub_frame.sp() + cb->frame_size();
 
+  // If the deopt call site is a MethodHandle invoke call site we have
+  // to adjust the unpack_sp.
+  nmethod* deoptee_nm = deoptee.cb()->as_nmethod_or_null();
+  if (deoptee_nm != NULL && deoptee_nm->is_method_handle_return(deoptee.pc()))
+    unpack_sp = deoptee.unextended_sp();
+
 #ifdef ASSERT
   assert(cb->is_deoptimization_stub() || cb->is_uncommon_trap_stub(), "just checking");
   Events::log("fetch unroll sp " INTPTR_FORMAT, unpack_sp);
@@ -1332,13 +1338,14 @@
     // Whether the interpreter is producing MDO data or not, we also need
     // to use the MDO to detect hot deoptimization points and control
     // aggressive optimization.
+    bool inc_recompile_count = false;
+    ProfileData* pdata = NULL;
     if (ProfileTraps && update_trap_state && trap_mdo.not_null()) {
       assert(trap_mdo() == get_method_data(thread, trap_method, false), "sanity");
       uint this_trap_count = 0;
       bool maybe_prior_trap = false;
       bool maybe_prior_recompile = false;
-      ProfileData* pdata
-        = query_update_method_data(trap_mdo, trap_bci, reason,
+      pdata = query_update_method_data(trap_mdo, trap_bci, reason,
                                    //outputs:
                                    this_trap_count,
                                    maybe_prior_trap,
@@ -1374,18 +1381,7 @@
         // Detect repeated recompilation at the same BCI, and enforce a limit.
         if (make_not_entrant && maybe_prior_recompile) {
           // More than one recompile at this point.
-          trap_mdo->inc_overflow_recompile_count();
-          if (maybe_prior_trap
-              && ((uint)trap_mdo->overflow_recompile_count()
-                  > (uint)PerBytecodeRecompilationCutoff)) {
-            // Give up on the method containing the bad BCI.
-            if (trap_method() == nm->method()) {
-              make_not_compilable = true;
-            } else {
-              trap_method->set_not_compilable();
-              // But give grace to the enclosing nm->method().
-            }
-          }
+          inc_recompile_count = maybe_prior_trap;
         }
       } else {
         // For reasons which are not recorded per-bytecode, we simply
@@ -1412,7 +1408,17 @@
         reset_counters = true;
       }
 
-      if (make_not_entrant && pdata != NULL) {
+    }
+
+    // Take requested actions on the method:
+
+    // Recompile
+    if (make_not_entrant) {
+      if (!nm->make_not_entrant()) {
+        return; // the call did not change nmethod's state
+      }
+
+      if (pdata != NULL) {
         // Record the recompilation event, if any.
         int tstate0 = pdata->trap_state();
         int tstate1 = trap_state_set_recompiled(tstate0, true);
@@ -1421,7 +1427,19 @@
       }
     }
 
-    // Take requested actions on the method:
+    if (inc_recompile_count) {
+      trap_mdo->inc_overflow_recompile_count();
+      if ((uint)trap_mdo->overflow_recompile_count() >
+          (uint)PerBytecodeRecompilationCutoff) {
+        // Give up on the method containing the bad BCI.
+        if (trap_method() == nm->method()) {
+          make_not_compilable = true;
+        } else {
+          trap_method->set_not_compilable();
+          // But give grace to the enclosing nm->method().
+        }
+      }
+    }
 
     // Reset invocation counters
     if (reset_counters) {
@@ -1431,13 +1449,8 @@
         reset_invocation_counter(trap_scope);
     }
 
-    // Recompile
-    if (make_not_entrant) {
-      nm->make_not_entrant();
-    }
-
     // Give up compiling
-    if (make_not_compilable) {
+    if (make_not_compilable && !nm->method()->is_not_compilable()) {
       assert(make_not_entrant, "consistent");
       nm->method()->set_not_compilable();
     }
@@ -1510,9 +1523,11 @@
       if (tstate1 != tstate0)
         pdata->set_trap_state(tstate1);
     } else {
-      if (LogCompilation && xtty != NULL)
+      if (LogCompilation && xtty != NULL) {
+        ttyLocker ttyl;
         // Missing MDP?  Leave a small complaint in the log.
         xtty->elem("missing_mdp bci='%d'", trap_bci);
+      }
     }
   }
 
@@ -1666,6 +1681,7 @@
   "class_check",
   "array_check",
   "intrinsic",
+  "bimorphic",
   "unloaded",
   "uninitialized",
   "unreached",
--- a/hotspot/src/share/vm/runtime/deoptimization.hpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/runtime/deoptimization.hpp	Fri Feb 19 15:13:37 2010 -0800
@@ -33,12 +33,15 @@
   enum DeoptReason {
     Reason_many = -1,             // indicates presence of several reasons
     Reason_none = 0,              // indicates absence of a relevant deopt.
+    // Next 7 reasons are recorded per bytecode in DataLayout::trap_bits
     Reason_null_check,            // saw unexpected null or zero divisor (@bci)
     Reason_null_assert,           // saw unexpected non-null or non-zero (@bci)
     Reason_range_check,           // saw unexpected array index (@bci)
     Reason_class_check,           // saw unexpected object class (@bci)
     Reason_array_check,           // saw unexpected array class (aastore @bci)
     Reason_intrinsic,             // saw unexpected operand to intrinsic (@bci)
+    Reason_bimorphic,             // saw unexpected object class in bimorphic inlining (@bci)
+
     Reason_unloaded,              // unloaded class or constant pool entry
     Reason_uninitialized,         // bad class state (uninitialized)
     Reason_unreached,             // code is not reached, compiler
@@ -49,7 +52,7 @@
     Reason_predicate,             // compiler generated predicate failed
     Reason_LIMIT,
     // Note:  Keep this enum in sync. with _trap_reason_name.
-    Reason_RECORDED_LIMIT = Reason_unloaded   // some are not recorded per bc
+    Reason_RECORDED_LIMIT = Reason_bimorphic  // some are not recorded per bc
     // Note:  Reason_RECORDED_LIMIT should be < 8 to fit into 3 bits of
     // DataLayout::trap_bits.  This dependency is enforced indirectly
     // via asserts, to avoid excessive direct header-to-header dependencies.
@@ -279,7 +282,7 @@
                                        int trap_state);
 
   static bool reason_is_recorded_per_bytecode(DeoptReason reason) {
-    return reason > Reason_none && reason < Reason_RECORDED_LIMIT;
+    return reason > Reason_none && reason <= Reason_RECORDED_LIMIT;
   }
 
   static DeoptReason reason_recorded_per_bytecode_if_any(DeoptReason reason) {
--- a/hotspot/src/share/vm/runtime/frame.cpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/runtime/frame.cpp	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 1997-2009 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 1997-2010 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -107,7 +107,11 @@
 
 address frame::raw_pc() const {
   if (is_deoptimized_frame()) {
-    return ((nmethod*) cb())->deopt_handler_begin() - pc_return_offset;
+    nmethod* nm = cb()->as_nmethod_or_null();
+    if (nm->is_method_handle_return(pc()))
+      return nm->deopt_mh_handler_begin() - pc_return_offset;
+    else
+      return nm->deopt_handler_begin() - pc_return_offset;
   } else {
     return (pc() - pc_return_offset);
   }
@@ -269,10 +273,16 @@
   } // NeedsDeoptSuspend
 
 
-  address deopt = nm->deopt_handler_begin();
+  // If the call site is a MethodHandle call site use the MH deopt
+  // handler.
+  address deopt = nm->is_method_handle_return(pc()) ?
+    nm->deopt_mh_handler_begin() :
+    nm->deopt_handler_begin();
+
   // Save the original pc before we patch in the new one
   nm->set_original_pc(this, pc());
   patch_pc(thread, deopt);
+
 #ifdef ASSERT
   {
     RegisterMap map(thread, false);
--- a/hotspot/src/share/vm/runtime/globals.hpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/runtime/globals.hpp	Fri Feb 19 15:13:37 2010 -0800
@@ -742,6 +742,9 @@
   diagnostic(bool, PrintAdapterHandlers, false,                             \
           "Print code generated for i2c/c2i adapters")                      \
                                                                             \
+  develop(bool, VerifyAdapterSharing, false,                                \
+          "Verify that the code for shared adapters is the equivalent")     \
+                                                                            \
   diagnostic(bool, PrintAssembly, false,                                    \
           "Print assembly code (using external disassembler.so)")           \
                                                                             \
@@ -1201,7 +1204,7 @@
   product(bool, UseSerialGC, false,                                         \
           "Use the serial garbage collector")                               \
                                                                             \
-  experimental(bool, UseG1GC, false,                                        \
+  product(bool, UseG1GC, false,                                             \
           "Use the Garbage-First garbage collector")                        \
                                                                             \
   product(bool, UseParallelGC, false,                                       \
@@ -2447,6 +2450,9 @@
   notproduct(bool, CompileTheWorldIgnoreInitErrors, false,                  \
           "Compile all methods although class initializer failed")          \
                                                                             \
+  notproduct(intx, CompileTheWorldSafepointInterval, 100,                   \
+          "Force a safepoint every n compiles so sweeper can keep up")      \
+                                                                            \
   develop(bool, TraceIterativeGVN, false,                                   \
           "Print progress during Iterative Global Value Numbering")         \
                                                                             \
@@ -2861,7 +2867,7 @@
   product(intx, PerMethodRecompilationCutoff, 400,                          \
           "After recompiling N times, stay in the interpreter (-1=>'Inf')") \
                                                                             \
-  product(intx, PerBytecodeRecompilationCutoff, 100,                        \
+  product(intx, PerBytecodeRecompilationCutoff, 200,                        \
           "Per-BCI limit on repeated recompilation (-1=>'Inf')")            \
                                                                             \
   product(intx, PerMethodTrapLimit,  100,                                   \
@@ -3114,6 +3120,15 @@
   notproduct(bool, ExitOnFullCodeCache, false,                              \
           "Exit the VM if we fill the code cache.")                         \
                                                                             \
+  product(bool, UseCodeCacheFlushing, false,                                \
+          "Attempt to clean the code cache before shutting off compiler")   \
+                                                                            \
+  product(intx,  MinCodeCacheFlushingInterval, 30,                          \
+          "Min number of seconds between code cache cleaning sessions")     \
+                                                                            \
+  product(uintx,  CodeCacheFlushingMinimumFreeSpace, 1500*K,                \
+          "When less than X space left, start code cache cleaning")         \
+                                                                            \
   /* interpreter debugging */                                               \
   develop(intx, BinarySwitchThreshold, 5,                                   \
           "Minimal number of lookupswitch entries for rewriting to binary " \
--- a/hotspot/src/share/vm/runtime/sharedRuntime.cpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/runtime/sharedRuntime.cpp	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 1997-2009 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 1997-2010 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -364,7 +364,7 @@
 
 
 void SharedRuntime::throw_and_post_jvmti_exception(JavaThread *thread, Handle h_exception) {
-  if (JvmtiExport::can_post_exceptions()) {
+  if (JvmtiExport::can_post_on_exceptions()) {
     vframeStream vfst(thread, true);
     methodHandle method = methodHandle(thread, vfst.method());
     address bcp = method()->bcp_from(vfst.bci());
@@ -1033,10 +1033,20 @@
   address   sender_pc = caller_frame.pc();
   CodeBlob* sender_cb = caller_frame.cb();
   nmethod*  sender_nm = sender_cb->as_nmethod_or_null();
+  bool is_mh_invoke_via_adapter = false;  // Direct c2c call or via adapter?
+  if (sender_nm != NULL && sender_nm->is_method_handle_return(sender_pc)) {
+    // If the callee_target is set, then we have come here via an i2c
+    // adapter.
+    methodOop callee = thread->callee_target();
+    if (callee != NULL) {
+      assert(callee->is_method(), "sanity");
+      is_mh_invoke_via_adapter = true;
+    }
+  }
 
   if (caller_frame.is_interpreted_frame() ||
-      caller_frame.is_entry_frame() ||
-      (sender_nm != NULL && sender_nm->is_method_handle_return(sender_pc))) {
+      caller_frame.is_entry_frame()       ||
+      is_mh_invoke_via_adapter) {
     methodOop callee = thread->callee_target();
     guarantee(callee != NULL && callee->is_method(), "bad handshake");
     thread->set_vm_result(callee);
@@ -1351,7 +1361,7 @@
 // We are calling the interpreter via a c2i. Normally this would mean that
 // we were called by a compiled method. However we could have lost a race
 // where we went int -> i2c -> c2i and so the caller could in fact be
-// interpreted. If the caller is compiled we attampt to patch the caller
+// interpreted. If the caller is compiled we attempt to patch the caller
 // so he no longer calls into the interpreter.
 IRT_LEAF(void, SharedRuntime::fixup_callers_callsite(methodOopDesc* method, address caller_pc))
   methodOop moop(method);
@@ -1367,10 +1377,19 @@
   // we did we'd leap into space because the callsite needs to use
   // "to interpreter" stub in order to load up the methodOop. Don't
   // ask me how I know this...
-  //
 
   CodeBlob* cb = CodeCache::find_blob(caller_pc);
-  if ( !cb->is_nmethod() || entry_point == moop->get_c2i_entry()) {
+  if (!cb->is_nmethod() || entry_point == moop->get_c2i_entry()) {
+    return;
+  }
+
+  // The check above makes sure this is a nmethod.
+  nmethod* nm = cb->as_nmethod_or_null();
+  assert(nm, "must be");
+
+  // Don't fixup MethodHandle call sites as c2i/i2c adapters are used
+  // to implement MethodHandle actions.
+  if (nm->is_method_handle_return(caller_pc)) {
     return;
   }
 
@@ -1385,7 +1404,7 @@
 
   if (moop->code() == NULL) return;
 
-  if (((nmethod*)cb)->is_in_use()) {
+  if (nm->is_in_use()) {
 
     // Expect to find a native call there (unless it was no-inline cache vtable dispatch)
     MutexLockerEx ml_patch(Patching_lock, Mutex::_no_safepoint_check_flag);
@@ -1417,7 +1436,7 @@
         if (callee == cb || callee->is_adapter_blob()) {
           // static call or optimized virtual
           if (TraceCallFixup) {
-            tty->print("fixup callsite at " INTPTR_FORMAT " to compiled code for", caller_pc);
+            tty->print("fixup callsite           at " INTPTR_FORMAT " to compiled code for", caller_pc);
             moop->print_short_name(tty);
             tty->print_cr(" to " INTPTR_FORMAT, entry_point);
           }
@@ -1433,7 +1452,7 @@
         }
       } else {
           if (TraceCallFixup) {
-            tty->print("already patched  callsite at " INTPTR_FORMAT " to compiled code for", caller_pc);
+            tty->print("already patched callsite at " INTPTR_FORMAT " to compiled code for", caller_pc);
             moop->print_short_name(tty);
             tty->print_cr(" to " INTPTR_FORMAT, entry_point);
           }
@@ -1680,6 +1699,8 @@
   if( _find_handler_ctr ) tty->print_cr("%5d find exception handler", _find_handler_ctr );
   if( _rethrow_ctr ) tty->print_cr("%5d rethrow handler", _rethrow_ctr );
 
+  AdapterHandlerLibrary::print_statistics();
+
   if (xtty != NULL)  xtty->tail("statistics");
 }
 
@@ -1780,11 +1801,282 @@
 #endif
 
 
+// A simple wrapper class around the calling convention information
+// that allows sharing of adapters for the same calling convention.
+class AdapterFingerPrint : public CHeapObj {
+ private:
+  union {
+    int  _compact[3];
+    int* _fingerprint;
+  } _value;
+  int _length; // A negative length indicates the fingerprint is in the compact form,
+               // Otherwise _value._fingerprint is the array.
+
+  // Remap BasicTypes that are handled equivalently by the adapters.
+  // These are correct for the current system but someday it might be
+  // necessary to make this mapping platform dependent.
+  static BasicType adapter_encoding(BasicType in) {
+    assert((~0xf & in) == 0, "must fit in 4 bits");
+    switch(in) {
+      case T_BOOLEAN:
+      case T_BYTE:
+      case T_SHORT:
+      case T_CHAR:
+        // There are all promoted to T_INT in the calling convention
+        return T_INT;
+
+      case T_OBJECT:
+      case T_ARRAY:
+        if (!TaggedStackInterpreter) {
+#ifdef _LP64
+          return T_LONG;
+#else
+          return T_INT;
+#endif
+        }
+        return T_OBJECT;
+
+      case T_INT:
+      case T_LONG:
+      case T_FLOAT:
+      case T_DOUBLE:
+      case T_VOID:
+        return in;
+
+      default:
+        ShouldNotReachHere();
+        return T_CONFLICT;
+    }
+  }
+
+ public:
+  AdapterFingerPrint(int total_args_passed, BasicType* sig_bt) {
+    // The fingerprint is based on the BasicType signature encoded
+    // into an array of ints with four entries per int.
+    int* ptr;
+    int len = (total_args_passed + 3) >> 2;
+    if (len <= (int)(sizeof(_value._compact) / sizeof(int))) {
+      _value._compact[0] = _value._compact[1] = _value._compact[2] = 0;
+      // Storing the signature encoded as signed chars hits about 98%
+      // of the time.
+      _length = -len;
+      ptr = _value._compact;
+    } else {
+      _length = len;
+      _value._fingerprint = NEW_C_HEAP_ARRAY(int, _length);
+      ptr = _value._fingerprint;
+    }
+
+    // Now pack the BasicTypes with 4 per int
+    int sig_index = 0;
+    for (int index = 0; index < len; index++) {
+      int value = 0;
+      for (int byte = 0; byte < 4; byte++) {
+        if (sig_index < total_args_passed) {
+          value = (value << 4) | adapter_encoding(sig_bt[sig_index++]);
+        }
+      }
+      ptr[index] = value;
+    }
+  }
+
+  ~AdapterFingerPrint() {
+    if (_length > 0) {
+      FREE_C_HEAP_ARRAY(int, _value._fingerprint);
+    }
+  }
+
+  int value(int index) {
+    if (_length < 0) {
+      return _value._compact[index];
+    }
+    return _value._fingerprint[index];
+  }
+  int length() {
+    if (_length < 0) return -_length;
+    return _length;
+  }
+
+  bool is_compact() {
+    return _length <= 0;
+  }
+
+  unsigned int compute_hash() {
+    int hash = 0;
+    for (int i = 0; i < length(); i++) {
+      int v = value(i);
+      hash = (hash << 8) ^ v ^ (hash >> 5);
+    }
+    return (unsigned int)hash;
+  }
+
+  const char* as_string() {
+    stringStream st;
+    for (int i = 0; i < length(); i++) {
+      st.print(PTR_FORMAT, value(i));
+    }
+    return st.as_string();
+  }
+
+  bool equals(AdapterFingerPrint* other) {
+    if (other->_length != _length) {
+      return false;
+    }
+    if (_length < 0) {
+      return _value._compact[0] == other->_value._compact[0] &&
+             _value._compact[1] == other->_value._compact[1] &&
+             _value._compact[2] == other->_value._compact[2];
+    } else {
+      for (int i = 0; i < _length; i++) {
+        if (_value._fingerprint[i] != other->_value._fingerprint[i]) {
+          return false;
+        }
+      }
+    }
+    return true;
+  }
+};
+
+
+// A hashtable mapping from AdapterFingerPrints to AdapterHandlerEntries
+class AdapterHandlerTable : public BasicHashtable {
+  friend class AdapterHandlerTableIterator;
+
+ private:
+
+#ifdef ASSERT
+  static int _lookups; // number of calls to lookup
+  static int _buckets; // number of buckets checked
+  static int _equals;  // number of buckets checked with matching hash
+  static int _hits;    // number of successful lookups
+  static int _compact; // number of equals calls with compact signature
+#endif
+
+  AdapterHandlerEntry* bucket(int i) {
+    return (AdapterHandlerEntry*)BasicHashtable::bucket(i);
+  }
+
+ public:
+  AdapterHandlerTable()
+    : BasicHashtable(293, sizeof(AdapterHandlerEntry)) { }
+
+  // Create a new entry suitable for insertion in the table
+  AdapterHandlerEntry* new_entry(AdapterFingerPrint* fingerprint, address i2c_entry, address c2i_entry, address c2i_unverified_entry) {
+    AdapterHandlerEntry* entry = (AdapterHandlerEntry*)BasicHashtable::new_entry(fingerprint->compute_hash());
+    entry->init(fingerprint, i2c_entry, c2i_entry, c2i_unverified_entry);
+    return entry;
+  }
+
+  // Insert an entry into the table
+  void add(AdapterHandlerEntry* entry) {
+    int index = hash_to_index(entry->hash());
+    add_entry(index, entry);
+  }
+
+  void free_entry(AdapterHandlerEntry* entry) {
+    entry->deallocate();
+    BasicHashtable::free_entry(entry);
+  }
+
+  // Find a entry with the same fingerprint if it exists
+  AdapterHandlerEntry* lookup(int total_args_passed, BasicType* sig_bt) {
+    debug_only(_lookups++);
+    AdapterFingerPrint fp(total_args_passed, sig_bt);
+    unsigned int hash = fp.compute_hash();
+    int index = hash_to_index(hash);
+    for (AdapterHandlerEntry* e = bucket(index); e != NULL; e = e->next()) {
+      debug_only(_buckets++);
+      if (e->hash() == hash) {
+        debug_only(_equals++);
+        if (fp.equals(e->fingerprint())) {
+#ifdef ASSERT
+          if (fp.is_compact()) _compact++;
+          _hits++;
+#endif
+          return e;
+        }
+      }
+    }
+    return NULL;
+  }
+
+  void print_statistics() {
+    ResourceMark rm;
+    int longest = 0;
+    int empty = 0;
+    int total = 0;
+    int nonempty = 0;
+    for (int index = 0; index < table_size(); index++) {
+      int count = 0;
+      for (AdapterHandlerEntry* e = bucket(index); e != NULL; e = e->next()) {
+        count++;
+      }
+      if (count != 0) nonempty++;
+      if (count == 0) empty++;
+      if (count > longest) longest = count;
+      total += count;
+    }
+    tty->print_cr("AdapterHandlerTable: empty %d longest %d total %d average %f",
+                  empty, longest, total, total / (double)nonempty);
+#ifdef ASSERT
+    tty->print_cr("AdapterHandlerTable: lookups %d buckets %d equals %d hits %d compact %d",
+                  _lookups, _buckets, _equals, _hits, _compact);
+#endif
+  }
+};
+
+
+#ifdef ASSERT
+
+int AdapterHandlerTable::_lookups;
+int AdapterHandlerTable::_buckets;
+int AdapterHandlerTable::_equals;
+int AdapterHandlerTable::_hits;
+int AdapterHandlerTable::_compact;
+
+class AdapterHandlerTableIterator : public StackObj {
+ private:
+  AdapterHandlerTable* _table;
+  int _index;
+  AdapterHandlerEntry* _current;
+
+  void scan() {
+    while (_index < _table->table_size()) {
+      AdapterHandlerEntry* a = _table->bucket(_index);
+      if (a != NULL) {
+        _current = a;
+        return;
+      }
+      _index++;
+    }
+  }
+
+ public:
+  AdapterHandlerTableIterator(AdapterHandlerTable* table): _table(table), _index(0), _current(NULL) {
+    scan();
+  }
+  bool has_next() {
+    return _current != NULL;
+  }
+  AdapterHandlerEntry* next() {
+    if (_current != NULL) {
+      AdapterHandlerEntry* result = _current;
+      _current = _current->next();
+      if (_current == NULL) scan();
+      return result;
+    } else {
+      return NULL;
+    }
+  }
+};
+#endif
+
+
 // ---------------------------------------------------------------------------
 // Implementation of AdapterHandlerLibrary
 const char* AdapterHandlerEntry::name = "I2C/C2I adapters";
-GrowableArray<uint64_t>* AdapterHandlerLibrary::_fingerprints = NULL;
-GrowableArray<AdapterHandlerEntry* >* AdapterHandlerLibrary::_handlers = NULL;
+AdapterHandlerTable* AdapterHandlerLibrary::_adapters = NULL;
+AdapterHandlerEntry* AdapterHandlerLibrary::_abstract_method_handler = NULL;
 const int AdapterHandlerLibrary_size = 16*K;
 BufferBlob* AdapterHandlerLibrary::_buffer = NULL;
 
@@ -1796,28 +2088,31 @@
 }
 
 void AdapterHandlerLibrary::initialize() {
-  if (_fingerprints != NULL) return;
-  _fingerprints = new(ResourceObj::C_HEAP)GrowableArray<uint64_t>(32, true);
-  _handlers = new(ResourceObj::C_HEAP)GrowableArray<AdapterHandlerEntry*>(32, true);
-  // Index 0 reserved for the slow path handler
-  _fingerprints->append(0/*the never-allowed 0 fingerprint*/);
-  _handlers->append(NULL);
+  if (_adapters != NULL) return;
+  _adapters = new AdapterHandlerTable();
 
   // Create a special handler for abstract methods.  Abstract methods
   // are never compiled so an i2c entry is somewhat meaningless, but
   // fill it in with something appropriate just in case.  Pass handle
   // wrong method for the c2i transitions.
   address wrong_method = SharedRuntime::get_handle_wrong_method_stub();
-  _fingerprints->append(0/*the never-allowed 0 fingerprint*/);
-  assert(_handlers->length() == AbstractMethodHandler, "in wrong slot");
-  _handlers->append(new AdapterHandlerEntry(StubRoutines::throw_AbstractMethodError_entry(),
-                                            wrong_method, wrong_method));
+  _abstract_method_handler = AdapterHandlerLibrary::new_entry(new AdapterFingerPrint(0, NULL),
+                                                              StubRoutines::throw_AbstractMethodError_entry(),
+                                                              wrong_method, wrong_method);
 }
 
-int AdapterHandlerLibrary::get_create_adapter_index(methodHandle method) {
-  // Use customized signature handler.  Need to lock around updates to the
-  // _fingerprints array (it is not safe for concurrent readers and a single
-  // writer: this can be fixed if it becomes a problem).
+AdapterHandlerEntry* AdapterHandlerLibrary::new_entry(AdapterFingerPrint* fingerprint,
+                                                      address i2c_entry,
+                                                      address c2i_entry,
+                                                      address c2i_unverified_entry) {
+  return _adapters->new_entry(fingerprint, i2c_entry, c2i_entry, c2i_unverified_entry);
+}
+
+AdapterHandlerEntry* AdapterHandlerLibrary::get_adapter(methodHandle method) {
+  // Use customized signature handler.  Need to lock around updates to
+  // the AdapterHandlerTable (it is not safe for concurrent readers
+  // and a single writer: this could be fixed if it becomes a
+  // problem).
 
   // Get the address of the ic_miss handlers before we grab the
   // AdapterHandlerLibrary_lock. This fixes bug 6236259 which
@@ -1828,47 +2123,58 @@
   address ic_miss = SharedRuntime::get_ic_miss_stub();
   assert(ic_miss != NULL, "must have handler");
 
-  int result;
+  ResourceMark rm;
+
   NOT_PRODUCT(int code_size);
   BufferBlob *B = NULL;
   AdapterHandlerEntry* entry = NULL;
-  uint64_t fingerprint;
+  AdapterFingerPrint* fingerprint = NULL;
   {
     MutexLocker mu(AdapterHandlerLibrary_lock);
     // make sure data structure is initialized
     initialize();
 
     if (method->is_abstract()) {
-      return AbstractMethodHandler;
+      return _abstract_method_handler;
     }
 
+    // Fill in the signature array, for the calling-convention call.
+    int total_args_passed = method->size_of_parameters(); // All args on stack
+
+    BasicType* sig_bt = NEW_RESOURCE_ARRAY(BasicType, total_args_passed);
+    VMRegPair* regs   = NEW_RESOURCE_ARRAY(VMRegPair, total_args_passed);
+    int i = 0;
+    if (!method->is_static())  // Pass in receiver first
+      sig_bt[i++] = T_OBJECT;
+    for (SignatureStream ss(method->signature()); !ss.at_return_type(); ss.next()) {
+      sig_bt[i++] = ss.type();  // Collect remaining bits of signature
+      if (ss.type() == T_LONG || ss.type() == T_DOUBLE)
+        sig_bt[i++] = T_VOID;   // Longs & doubles take 2 Java slots
+    }
+    assert(i == total_args_passed, "");
+
     // Lookup method signature's fingerprint
-    fingerprint = Fingerprinter(method).fingerprint();
-    assert( fingerprint != CONST64( 0), "no zero fingerprints allowed" );
-    // Fingerprints are small fixed-size condensed representations of
-    // signatures.  If the signature is too large, it won't fit in a
-    // fingerprint.  Signatures which cannot support a fingerprint get a new i2c
-    // adapter gen'd each time, instead of searching the cache for one.  This -1
-    // game can be avoided if I compared signatures instead of using
-    // fingerprints.  However, -1 fingerprints are very rare.
-    if( fingerprint != UCONST64(-1) ) { // If this is a cache-able fingerprint
-      // Turns out i2c adapters do not care what the return value is.  Mask it
-      // out so signatures that only differ in return type will share the same
-      // adapter.
-      fingerprint &= ~(SignatureIterator::result_feature_mask << SignatureIterator::static_feature_size);
-      // Search for a prior existing i2c/c2i adapter
-      int index = _fingerprints->find(fingerprint);
-      if( index >= 0 ) return index; // Found existing handlers?
-    } else {
-      // Annoyingly, I end up adding -1 fingerprints to the array of handlers,
-      // because I need a unique handler index.  It cannot be scanned for
-      // because all -1's look alike.  Instead, the matching index is passed out
-      // and immediately used to collect the 2 return values (the c2i and i2c
-      // adapters).
+    entry = _adapters->lookup(total_args_passed, sig_bt);
+
+#ifdef ASSERT
+    AdapterHandlerEntry* shared_entry = NULL;
+    if (VerifyAdapterSharing && entry != NULL) {
+      shared_entry = entry;
+      entry = NULL;
+    }
+#endif
+
+    if (entry != NULL) {
+      return entry;
     }
 
+    // Get a description of the compiled java calling convention and the largest used (VMReg) stack slot usage
+    int comp_args_on_stack = SharedRuntime::java_calling_convention(sig_bt, regs, total_args_passed, false);
+
+    // Make a C heap allocated version of the fingerprint to store in the adapter
+    fingerprint = new AdapterFingerPrint(total_args_passed, sig_bt);
+
     // Create I2C & C2I handlers
-    ResourceMark rm;
 
     BufferBlob*  buf = buffer_blob(); // the temporary code buffer in CodeCache
     if (buf != NULL) {
@@ -1878,32 +2184,26 @@
                                              sizeof(buffer_locs)/sizeof(relocInfo));
       MacroAssembler _masm(&buffer);
 
-      // Fill in the signature array, for the calling-convention call.
-      int total_args_passed = method->size_of_parameters(); // All args on stack
-
-      BasicType* sig_bt = NEW_RESOURCE_ARRAY(BasicType,total_args_passed);
-      VMRegPair  * regs   = NEW_RESOURCE_ARRAY(VMRegPair  ,total_args_passed);
-      int i=0;
-      if( !method->is_static() )  // Pass in receiver first
-        sig_bt[i++] = T_OBJECT;
-      for( SignatureStream ss(method->signature()); !ss.at_return_type(); ss.next()) {
-        sig_bt[i++] = ss.type();  // Collect remaining bits of signature
-        if( ss.type() == T_LONG || ss.type() == T_DOUBLE )
-          sig_bt[i++] = T_VOID;   // Longs & doubles take 2 Java slots
-      }
-      assert( i==total_args_passed, "" );
-
-      // Now get the re-packed compiled-Java layout.
-      int comp_args_on_stack;
-
-      // Get a description of the compiled java calling convention and the largest used (VMReg) stack slot usage
-      comp_args_on_stack = SharedRuntime::java_calling_convention(sig_bt, regs, total_args_passed, false);
-
       entry = SharedRuntime::generate_i2c2i_adapters(&_masm,
                                                      total_args_passed,
                                                      comp_args_on_stack,
                                                      sig_bt,
-                                                     regs);
+                                                     regs,
+                                                     fingerprint);
+
+#ifdef ASSERT
+      if (VerifyAdapterSharing) {
+        if (shared_entry != NULL) {
+          assert(shared_entry->compare_code(buf->instructions_begin(), buffer.code_size(), total_args_passed, sig_bt),
+                 "code must match");
+          // Release the one just created and return the original
+          _adapters->free_entry(entry);
+          return shared_entry;
+        } else  {
+          entry->save_code(buf->instructions_begin(), buffer.code_size(), total_args_passed, sig_bt);
+        }
+      }
+#endif
 
       B = BufferBlob::create(AdapterHandlerEntry::name, &buffer);
       NOT_PRODUCT(code_size = buffer.code_size());
@@ -1912,49 +2212,33 @@
       // CodeCache is full, disable compilation
       // Ought to log this but compile log is only per compile thread
       // and we're some non descript Java thread.
-      UseInterpreter = true;
-      if (UseCompiler || AlwaysCompileLoopMethods ) {
-#ifndef PRODUCT
-        warning("CodeCache is full. Compiler has been disabled");
-        if (CompileTheWorld || ExitOnFullCodeCache) {
-          before_exit(JavaThread::current());
-          exit_globals(); // will delete tty
-          vm_direct_exit(CompileTheWorld ? 0 : 1);
-        }
-#endif
-        UseCompiler               = false;
-        AlwaysCompileLoopMethods  = false;
-      }
-      return 0; // Out of CodeCache space (_handlers[0] == NULL)
+      MutexUnlocker mu(AdapterHandlerLibrary_lock);
+      CompileBroker::handle_full_code_cache();
+      return NULL; // Out of CodeCache space
     }
     entry->relocate(B->instructions_begin());
 #ifndef PRODUCT
     // debugging suppport
     if (PrintAdapterHandlers) {
       tty->cr();
-      tty->print_cr("i2c argument handler #%d for: %s %s (fingerprint = 0x%llx, %d bytes generated)",
-                    _handlers->length(), (method->is_static() ? "static" : "receiver"),
-                    method->signature()->as_C_string(), fingerprint, code_size );
+      tty->print_cr("i2c argument handler #%d for: %s %s (fingerprint = %s, %d bytes generated)",
+                    _adapters->number_of_entries(), (method->is_static() ? "static" : "receiver"),
+                    method->signature()->as_C_string(), fingerprint->as_string(), code_size );
       tty->print_cr("c2i argument handler starts at %p",entry->get_c2i_entry());
       Disassembler::decode(entry->get_i2c_entry(), entry->get_i2c_entry() + code_size);
     }
 #endif
 
-    // add handlers to library
-    _fingerprints->append(fingerprint);
-    _handlers->append(entry);
-    // set handler index
-    assert(_fingerprints->length() == _handlers->length(), "sanity check");
-    result = _fingerprints->length() - 1;
+    _adapters->add(entry);
   }
   // Outside of the lock
   if (B != NULL) {
     char blob_id[256];
     jio_snprintf(blob_id,
                  sizeof(blob_id),
-                 "%s(" PTR64_FORMAT ")@" PTR_FORMAT,
+                 "%s(%s)@" PTR_FORMAT,
                  AdapterHandlerEntry::name,
-                 fingerprint,
+                 fingerprint->as_string(),
                  B->instructions_begin());
     VTune::register_stub(blob_id, B->instructions_begin(), B->instructions_end());
     Forte::register_stub(blob_id, B->instructions_begin(), B->instructions_end());
@@ -1965,7 +2249,7 @@
                                                B->instructions_end());
     }
   }
-  return result;
+  return entry;
 }
 
 void AdapterHandlerEntry::relocate(address new_base) {
@@ -1975,6 +2259,44 @@
     _c2i_unverified_entry += delta;
 }
 
+
+void AdapterHandlerEntry::deallocate() {
+  delete _fingerprint;
+#ifdef ASSERT
+  if (_saved_code) FREE_C_HEAP_ARRAY(unsigned char, _saved_code);
+  if (_saved_sig)  FREE_C_HEAP_ARRAY(Basictype, _saved_sig);
+#endif
+}
+
+
+#ifdef ASSERT
+// Capture the code before relocation so that it can be compared
+// against other versions.  If the code is captured after relocation
+// then relative instructions won't be equivalent.
+void AdapterHandlerEntry::save_code(unsigned char* buffer, int length, int total_args_passed, BasicType* sig_bt) {
+  _saved_code = NEW_C_HEAP_ARRAY(unsigned char, length);
+  _code_length = length;
+  memcpy(_saved_code, buffer, length);
+  _total_args_passed = total_args_passed;
+  _saved_sig = NEW_C_HEAP_ARRAY(BasicType, _total_args_passed);
+  memcpy(_saved_sig, sig_bt, _total_args_passed * sizeof(BasicType));
+}
+
+
+bool AdapterHandlerEntry::compare_code(unsigned char* buffer, int length, int total_args_passed, BasicType* sig_bt) {
+  if (length != _code_length) {
+    return false;
+  }
+  for (int i = 0; i < length; i++) {
+    if (buffer[i] != _saved_code[i]) {
+      return false;
+    }
+  }
+  return true;
+}
+#endif
+
+
 // Create a native wrapper for this native method.  The wrapper converts the
 // java compiled calling convention to the native convention, handlizes
 // arguments, and transitions to native.  On return from the native we transition
@@ -2053,19 +2375,8 @@
     // CodeCache is full, disable compilation
     // Ought to log this but compile log is only per compile thread
     // and we're some non descript Java thread.
-    UseInterpreter = true;
-    if (UseCompiler || AlwaysCompileLoopMethods ) {
-#ifndef PRODUCT
-      warning("CodeCache is full. Compiler has been disabled");
-      if (CompileTheWorld || ExitOnFullCodeCache) {
-        before_exit(JavaThread::current());
-        exit_globals(); // will delete tty
-        vm_direct_exit(CompileTheWorld ? 0 : 1);
-      }
-#endif
-      UseCompiler               = false;
-      AlwaysCompileLoopMethods  = false;
-    }
+    MutexUnlocker mu(AdapterHandlerLibrary_lock);
+    CompileBroker::handle_full_code_cache();
   }
   return nm;
 }
@@ -2308,30 +2619,31 @@
 
 #ifndef PRODUCT
 bool AdapterHandlerLibrary::contains(CodeBlob* b) {
-
-  if (_handlers == NULL) return false;
-
-  for (int i = 0 ; i < _handlers->length() ; i++) {
-    AdapterHandlerEntry* a = get_entry(i);
-    if ( a != NULL && b == CodeCache::find_blob(a->get_i2c_entry()) ) return true;
+  AdapterHandlerTableIterator iter(_adapters);
+  while (iter.has_next()) {
+    AdapterHandlerEntry* a = iter.next();
+    if ( b == CodeCache::find_blob(a->get_i2c_entry()) ) return true;
   }
   return false;
 }
 
 void AdapterHandlerLibrary::print_handler(CodeBlob* b) {
-
-  for (int i = 0 ; i < _handlers->length() ; i++) {
-    AdapterHandlerEntry* a = get_entry(i);
-    if ( a != NULL && b == CodeCache::find_blob(a->get_i2c_entry()) ) {
+  AdapterHandlerTableIterator iter(_adapters);
+  while (iter.has_next()) {
+    AdapterHandlerEntry* a = iter.next();
+    if ( b == CodeCache::find_blob(a->get_i2c_entry()) ) {
       tty->print("Adapter for signature: ");
-      // Fingerprinter::print(_fingerprints->at(i));
-      tty->print("0x%" FORMAT64_MODIFIER "x", _fingerprints->at(i));
-      tty->print_cr(" i2c: " INTPTR_FORMAT " c2i: " INTPTR_FORMAT " c2iUV: " INTPTR_FORMAT,
+      tty->print_cr("%s i2c: " INTPTR_FORMAT " c2i: " INTPTR_FORMAT " c2iUV: " INTPTR_FORMAT,
+                    a->fingerprint()->as_string(),
                     a->get_i2c_entry(), a->get_c2i_entry(), a->get_c2i_unverified_entry());
-
       return;
     }
   }
   assert(false, "Should have found handler");
 }
+
+void AdapterHandlerLibrary::print_statistics() {
+  _adapters->print_statistics();
+}
+
 #endif /* PRODUCT */
--- a/hotspot/src/share/vm/runtime/sharedRuntime.hpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/runtime/sharedRuntime.hpp	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 1997-2009 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 1997-2010 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,6 +23,8 @@
  */
 
 class AdapterHandlerEntry;
+class AdapterHandlerTable;
+class AdapterFingerPrint;
 class vframeStream;
 
 // Runtime is the base class for various runtime interfaces
@@ -337,7 +339,8 @@
                                                       int total_args_passed,
                                                       int max_arg,
                                                       const BasicType *sig_bt,
-                                                      const VMRegPair *regs);
+                                                      const VMRegPair *regs,
+                                                      AdapterFingerPrint* fingerprint);
 
   // OSR support
 
@@ -528,28 +531,64 @@
 // used by the adapters.  The code generation happens here because it's very
 // similar to what the adapters have to do.
 
-class AdapterHandlerEntry : public CHeapObj {
+class AdapterHandlerEntry : public BasicHashtableEntry {
+  friend class AdapterHandlerTable;
+
  private:
+  AdapterFingerPrint* _fingerprint;
   address _i2c_entry;
   address _c2i_entry;
   address _c2i_unverified_entry;
 
+#ifdef ASSERT
+  // Captures code and signature used to generate this adapter when
+  // verifing adapter equivalence.
+  unsigned char* _saved_code;
+  int            _code_length;
+  BasicType*     _saved_sig;
+  int            _total_args_passed;
+#endif
+
+  void init(AdapterFingerPrint* fingerprint, address i2c_entry, address c2i_entry, address c2i_unverified_entry) {
+    _fingerprint = fingerprint;
+    _i2c_entry = i2c_entry;
+    _c2i_entry = c2i_entry;
+    _c2i_unverified_entry = c2i_unverified_entry;
+#ifdef ASSERT
+    _saved_code = NULL;
+    _code_length = 0;
+    _saved_sig = NULL;
+    _total_args_passed = 0;
+#endif
+  }
+
+  void deallocate();
+
+  // should never be used
+  AdapterHandlerEntry();
+
  public:
-
   // The name we give all buffer blobs
   static const char* name;
 
-  AdapterHandlerEntry(address i2c_entry, address c2i_entry, address c2i_unverified_entry):
-    _i2c_entry(i2c_entry),
-    _c2i_entry(c2i_entry),
-    _c2i_unverified_entry(c2i_unverified_entry) {
-  }
-
   address get_i2c_entry()            { return _i2c_entry; }
   address get_c2i_entry()            { return _c2i_entry; }
   address get_c2i_unverified_entry() { return _c2i_unverified_entry; }
 
   void relocate(address new_base);
+
+  AdapterFingerPrint* fingerprint()  { return _fingerprint; }
+
+  AdapterHandlerEntry* next() {
+    return (AdapterHandlerEntry*)BasicHashtableEntry::next();
+  }
+
+#ifdef ASSERT
+  // Used to verify that code generated for shared adapters is equivalent
+  void save_code(unsigned char* code, int length, int total_args_passed, BasicType* sig_bt);
+  bool compare_code(unsigned char* code, int length, int total_args_passed, BasicType* sig_bt);
+#endif
+
 #ifndef PRODUCT
   void print();
 #endif /* PRODUCT */
@@ -558,30 +597,18 @@
 class AdapterHandlerLibrary: public AllStatic {
  private:
   static BufferBlob* _buffer; // the temporary code buffer in CodeCache
-  static GrowableArray<uint64_t>* _fingerprints; // the fingerprint collection
-  static GrowableArray<AdapterHandlerEntry*> * _handlers; // the corresponding handlers
-  enum {
-    AbstractMethodHandler = 1 // special handler for abstract methods
-  };
+  static AdapterHandlerTable* _adapters;
+  static AdapterHandlerEntry* _abstract_method_handler;
   static BufferBlob* buffer_blob();
   static void initialize();
-  static int get_create_adapter_index(methodHandle method);
-  static address get_i2c_entry( int index ) {
-    return get_entry(index)->get_i2c_entry();
-  }
-  static address get_c2i_entry( int index ) {
-    return get_entry(index)->get_c2i_entry();
-  }
-  static address get_c2i_unverified_entry( int index ) {
-    return get_entry(index)->get_c2i_unverified_entry();
-  }
 
  public:
-  static AdapterHandlerEntry* get_entry( int index ) { return _handlers->at(index); }
+
+  static AdapterHandlerEntry* new_entry(AdapterFingerPrint* fingerprint,
+                                        address i2c_entry, address c2i_entry, address c2i_unverified_entry);
   static nmethod* create_native_wrapper(methodHandle method);
-  static AdapterHandlerEntry* get_adapter(methodHandle method)  {
-    return get_entry(get_create_adapter_index(method));
-  }
+  static AdapterHandlerEntry* get_adapter(methodHandle method);
+
 #ifdef HAVE_DTRACE_H
   static nmethod* create_dtrace_nmethod (methodHandle method);
 #endif // HAVE_DTRACE_H
@@ -589,6 +616,7 @@
 #ifndef PRODUCT
   static void print_handler(CodeBlob* b);
   static bool contains(CodeBlob* b);
+  static void print_statistics();
 #endif /* PRODUCT */
 
 };
--- a/hotspot/src/share/vm/runtime/sweeper.cpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/runtime/sweeper.cpp	Fri Feb 19 15:13:37 2010 -0800
@@ -33,6 +33,11 @@
 jint      NMethodSweeper::_locked_seen = 0;
 jint      NMethodSweeper::_not_entrant_seen_on_stack = 0;
 bool      NMethodSweeper::_rescan = false;
+bool      NMethodSweeper::_was_full = false;
+jint      NMethodSweeper::_advise_to_sweep = 0;
+jlong     NMethodSweeper::_last_was_full = 0;
+uint      NMethodSweeper::_highest_marked = 0;
+long      NMethodSweeper::_was_full_traversal = 0;
 
 class MarkActivationClosure: public CodeBlobClosure {
 public:
@@ -114,6 +119,40 @@
       tty->print_cr("### Couldn't make progress on some nmethods so stopping sweep");
     }
   }
+
+  if (UseCodeCacheFlushing) {
+    if (!CodeCache::needs_flushing()) {
+      // In a safepoint, no race with setters
+      _advise_to_sweep = 0;
+    }
+
+    if (was_full()) {
+      // There was some progress so attempt to restart the compiler
+      jlong now           = os::javaTimeMillis();
+      jlong max_interval  = (jlong)MinCodeCacheFlushingInterval * (jlong)1000;
+      jlong curr_interval = now - _last_was_full;
+      if ((!CodeCache::needs_flushing()) && (curr_interval > max_interval)) {
+        CompileBroker::set_should_compile_new_jobs(CompileBroker::run_compilation);
+        set_was_full(false);
+
+        // Update the _last_was_full time so we can tell how fast the
+        // code cache is filling up
+        _last_was_full = os::javaTimeMillis();
+
+        if (PrintMethodFlushing) {
+          tty->print_cr("### sweeper: Live blobs:" UINT32_FORMAT "/Free code cache:" SIZE_FORMAT " bytes, restarting compiler",
+            CodeCache::nof_blobs(), CodeCache::unallocated_capacity());
+        }
+        if (LogCompilation && (xtty != NULL)) {
+          ttyLocker ttyl;
+          xtty->begin_elem("restart_compiler live_blobs='" UINT32_FORMAT "' free_code_cache='" SIZE_FORMAT "'",
+                           CodeCache::nof_blobs(), CodeCache::unallocated_capacity());
+          xtty->stamp();
+          xtty->end_elem();
+        }
+      }
+    }
+  }
 }
 
 
@@ -137,12 +176,12 @@
     if (nm->is_marked_for_reclamation()) {
       assert(!nm->is_locked_by_vm(), "must not flush locked nmethods");
       if (PrintMethodFlushing && Verbose) {
-        tty->print_cr("### Nmethod 0x%x (marked for reclamation) being flushed", nm);
+        tty->print_cr("### Nmethod %3d/" PTR_FORMAT " (marked for reclamation) being flushed", nm->compile_id(), nm);
       }
       nm->flush();
     } else {
       if (PrintMethodFlushing && Verbose) {
-        tty->print_cr("### Nmethod 0x%x (zombie) being marked for reclamation", nm);
+        tty->print_cr("### Nmethod %3d/" PTR_FORMAT " (zombie) being marked for reclamation", nm->compile_id(), nm);
       }
       nm->mark_for_reclamation();
       _rescan = true;
@@ -152,7 +191,7 @@
     // stack we can safely convert it to a zombie method
     if (nm->can_not_entrant_be_converted()) {
       if (PrintMethodFlushing && Verbose) {
-        tty->print_cr("### Nmethod 0x%x (not entrant) being made zombie", nm);
+        tty->print_cr("### Nmethod %3d/" PTR_FORMAT " (not entrant) being made zombie", nm->compile_id(), nm);
       }
       nm->make_zombie();
       _rescan = true;
@@ -167,7 +206,7 @@
   } else if (nm->is_unloaded()) {
     // Unloaded code, just make it a zombie
     if (PrintMethodFlushing && Verbose)
-      tty->print_cr("### Nmethod 0x%x (unloaded) being made zombie", nm);
+      tty->print_cr("### Nmethod %3d/" PTR_FORMAT " (unloaded) being made zombie", nm->compile_id(), nm);
     if (nm->is_osr_method()) {
       // No inline caches will ever point to osr methods, so we can just remove it
       nm->flush();
@@ -177,7 +216,167 @@
     }
   } else {
     assert(nm->is_alive(), "should be alive");
+
+    if (UseCodeCacheFlushing) {
+      if ((nm->method()->code() != nm) && !(nm->is_locked_by_vm()) && !(nm->is_osr_method()) &&
+          (_traversals > _was_full_traversal+2) && (((uint)nm->compile_id()) < _highest_marked) &&
+          CodeCache::needs_flushing()) {
+        // This method has not been called since the forced cleanup happened
+        nm->make_not_entrant();
+      }
+    }
+
     // Clean-up all inline caches that points to zombie/non-reentrant methods
     nm->cleanup_inline_caches();
   }
 }
+
+// Code cache unloading: when compilers notice the code cache is getting full,
+// they will call a vm op that comes here. This code attempts to speculatively
+// unload the oldest half of the nmethods (based on the compile job id) by
+// saving the old code in a list in the CodeCache. Then
+// execution resumes. If a method so marked is not called by the second
+// safepoint from the current one, the nmethod will be marked non-entrant and
+// got rid of by normal sweeping. If the method is called, the methodOop's
+// _code field is restored and the methodOop/nmethod
+// go back to their normal state.
+void NMethodSweeper::handle_full_code_cache(bool is_full) {
+  // Only the first one to notice can advise us to start early cleaning
+  if (!is_full){
+    jint old = Atomic::cmpxchg( 1, &_advise_to_sweep, 0 );
+    if (old != 0) {
+      return;
+    }
+  }
+
+  if (is_full) {
+    // Since code cache is full, immediately stop new compiles
+    bool did_set = CompileBroker::set_should_compile_new_jobs(CompileBroker::stop_compilation);
+    if (!did_set) {
+      // only the first to notice can start the cleaning,
+      // others will go back and block
+      return;
+    }
+    set_was_full(true);
+
+    // If we run out within MinCodeCacheFlushingInterval of the last unload time, give up
+    jlong now = os::javaTimeMillis();
+    jlong max_interval = (jlong)MinCodeCacheFlushingInterval * (jlong)1000;
+    jlong curr_interval = now - _last_was_full;
+    if (curr_interval < max_interval) {
+      _rescan = true;
+      if (PrintMethodFlushing) {
+        tty->print_cr("### handle full too often, turning off compiler");
+      }
+      if (LogCompilation && (xtty != NULL)) {
+        ttyLocker ttyl;
+        xtty->begin_elem("disable_compiler flushing_interval='" UINT64_FORMAT "' live_blobs='" UINT32_FORMAT "' free_code_cache='" SIZE_FORMAT "'",
+                         curr_interval/1000, CodeCache::nof_blobs(), CodeCache::unallocated_capacity());
+        xtty->stamp();
+        xtty->end_elem();
+      }
+      return;
+    }
+  }
+
+  VM_HandleFullCodeCache op(is_full);
+  VMThread::execute(&op);
+
+  // rescan again as soon as possible
+  _rescan = true;
+}
+
+void NMethodSweeper::speculative_disconnect_nmethods(bool is_full) {
+  // If there was a race in detecting full code cache, only run
+  // one vm op for it or keep the compiler shut off
+
+  debug_only(jlong start = os::javaTimeMillis();)
+
+  if ((!was_full()) && (is_full)) {
+    if (!CodeCache::needs_flushing()) {
+      if (PrintMethodFlushing) {
+        tty->print_cr("### sweeper: Live blobs:" UINT32_FORMAT "/Free code cache:" SIZE_FORMAT " bytes, restarting compiler",
+          CodeCache::nof_blobs(), CodeCache::unallocated_capacity());
+      }
+      if (LogCompilation && (xtty != NULL)) {
+        ttyLocker ttyl;
+        xtty->begin_elem("restart_compiler live_blobs='" UINT32_FORMAT "' free_code_cache='" SIZE_FORMAT "'",
+                         CodeCache::nof_blobs(), CodeCache::unallocated_capacity());
+        xtty->stamp();
+        xtty->end_elem();
+      }
+      CompileBroker::set_should_compile_new_jobs(CompileBroker::run_compilation);
+      return;
+    }
+  }
+
+  // Traverse the code cache trying to dump the oldest nmethods
+  uint curr_max_comp_id = CompileBroker::get_compilation_id();
+  uint flush_target = ((curr_max_comp_id - _highest_marked) >> 1) + _highest_marked;
+  if (PrintMethodFlushing && Verbose) {
+    tty->print_cr("### Cleaning code cache: Live blobs:" UINT32_FORMAT "/Free code cache:" SIZE_FORMAT " bytes",
+        CodeCache::nof_blobs(), CodeCache::unallocated_capacity());
+  }
+  if (LogCompilation && (xtty != NULL)) {
+    ttyLocker ttyl;
+    xtty->begin_elem("start_cleaning_code_cache live_blobs='" UINT32_FORMAT "' free_code_cache='" SIZE_FORMAT "'",
+                      CodeCache::nof_blobs(), CodeCache::unallocated_capacity());
+    xtty->stamp();
+    xtty->end_elem();
+  }
+
+  nmethod* nm = CodeCache::alive_nmethod(CodeCache::first());
+  jint disconnected = 0;
+  jint made_not_entrant  = 0;
+  while ((nm != NULL)){
+    uint curr_comp_id = nm->compile_id();
+
+    // OSR methods cannot be flushed like this. Also, don't flush native methods
+    // since they are part of the JDK in most cases
+    if (nm->is_in_use() && (!nm->is_osr_method()) && (!nm->is_locked_by_vm()) &&
+        (!nm->is_native_method()) && ((curr_comp_id < flush_target))) {
+
+      if ((nm->method()->code() == nm)) {
+        // This method has not been previously considered for
+        // unloading or it was restored already
+        CodeCache::speculatively_disconnect(nm);
+        disconnected++;
+      } else if (nm->is_speculatively_disconnected()) {
+        // This method was previously considered for preemptive unloading and was not called since then
+        nm->method()->invocation_counter()->decay();
+        nm->method()->backedge_counter()->decay();
+        nm->make_not_entrant();
+        made_not_entrant++;
+      }
+
+      if (curr_comp_id > _highest_marked) {
+        _highest_marked = curr_comp_id;
+      }
+    }
+    nm = CodeCache::alive_nmethod(CodeCache::next(nm));
+  }
+
+  if (LogCompilation && (xtty != NULL)) {
+    ttyLocker ttyl;
+    xtty->begin_elem("stop_cleaning_code_cache disconnected='" UINT32_FORMAT "' made_not_entrant='" UINT32_FORMAT "' live_blobs='" UINT32_FORMAT "' free_code_cache='" SIZE_FORMAT "'",
+                      disconnected, made_not_entrant, CodeCache::nof_blobs(), CodeCache::unallocated_capacity());
+    xtty->stamp();
+    xtty->end_elem();
+  }
+
+  // Shut off compiler. Sweeper will run exiting from this safepoint
+  // and turn it back on if it clears enough space
+  if (was_full()) {
+    _last_was_full = os::javaTimeMillis();
+    CompileBroker::set_should_compile_new_jobs(CompileBroker::stop_compilation);
+  }
+
+  // After two more traversals the sweeper will get rid of unrestored nmethods
+  _was_full_traversal = _traversals;
+#ifdef ASSERT
+  jlong end = os::javaTimeMillis();
+  if(PrintMethodFlushing && Verbose) {
+    tty->print_cr("### sweeper: unload time: " INT64_FORMAT, end-start);
+  }
+#endif
+}
--- a/hotspot/src/share/vm/runtime/sweeper.hpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/runtime/sweeper.hpp	Fri Feb 19 15:13:37 2010 -0800
@@ -38,6 +38,11 @@
   static int       _locked_seen;     // Number of locked nmethods encountered during the scan
   static int       _not_entrant_seen_on_stack; // Number of not entrant nmethod were are still on stack
 
+  static bool      _was_full;        // remember if we did emergency unloading
+  static jint      _advise_to_sweep; // flag to indicate code cache getting full
+  static jlong     _last_was_full;   // timestamp of last emergency unloading
+  static uint      _highest_marked;   // highest compile id dumped at last emergency unloading
+  static long      _was_full_traversal;   // trav number at last emergency unloading
 
   static void process_nmethod(nmethod *nm);
  public:
@@ -51,4 +56,10 @@
     // changes to false at safepoint so we can never overwrite it with false.
      _rescan = true;
   }
+
+  static void handle_full_code_cache(bool is_full); // Called by compilers who fail to allocate
+  static void speculative_disconnect_nmethods(bool was_full);   // Called by vm op to deal with alloc failure
+
+  static void set_was_full(bool state) { _was_full = state; }
+  static bool was_full() { return _was_full; }
 };
--- a/hotspot/src/share/vm/runtime/thread.cpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/runtime/thread.cpp	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 1997-2009 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 1997-2010 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -1173,6 +1173,7 @@
   _exception_handler_pc = 0;
   _exception_stack_size = 0;
   _jvmti_thread_state= NULL;
+  _should_post_on_exceptions_flag = JNI_FALSE;
   _jvmti_get_loaded_classes_closure = NULL;
   _interp_only_mode    = 0;
   _special_runtime_exit_condition = _no_async_condition;
--- a/hotspot/src/share/vm/runtime/thread.hpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/runtime/thread.hpp	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 1997-2009 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 1997-2010 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -1193,6 +1193,9 @@
   static ByteSize suspend_flags_offset()         { return byte_offset_of(JavaThread, _suspend_flags       ); }
 
   static ByteSize do_not_unlock_if_synchronized_offset() { return byte_offset_of(JavaThread, _do_not_unlock_if_synchronized); }
+  static ByteSize should_post_on_exceptions_flag_offset() {
+    return byte_offset_of(JavaThread, _should_post_on_exceptions_flag);
+  }
 
 #ifndef SERIALGC
   static ByteSize satb_mark_queue_offset()       { return byte_offset_of(JavaThread, _satb_mark_queue); }
@@ -1432,6 +1435,16 @@
   void increment_interp_only_mode()         { ++_interp_only_mode; }
   void decrement_interp_only_mode()         { --_interp_only_mode; }
 
+  // support for cached flag that indicates whether exceptions need to be posted for this thread
+  // if this is false, we can avoid deoptimizing when events are thrown
+  // this gets set to reflect whether jvmtiExport::post_exception_throw would actually do anything
+ private:
+  int    _should_post_on_exceptions_flag;
+
+ public:
+  int   should_post_on_exceptions_flag()  { return _should_post_on_exceptions_flag; }
+  void  set_should_post_on_exceptions_flag(int val)  { _should_post_on_exceptions_flag = val; }
+
  private:
   ThreadStatistics *_thread_stat;
 
--- a/hotspot/src/share/vm/runtime/vm_operations.cpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/runtime/vm_operations.cpp	Fri Feb 19 15:13:37 2010 -0800
@@ -151,6 +151,10 @@
 
 #endif // !PRODUCT
 
+void VM_HandleFullCodeCache::doit() {
+  NMethodSweeper::speculative_disconnect_nmethods(_is_full);
+}
+
 void VM_Verify::doit() {
   Universe::verify();
 }
--- a/hotspot/src/share/vm/runtime/vm_operations.hpp	Fri Feb 12 19:58:10 2010 +0300
+++ b/hotspot/src/share/vm/runtime/vm_operations.hpp	Fri Feb 19 15:13:37 2010 -0800
@@ -41,6 +41,7 @@
   template(DeoptimizeFrame)                       \
   template(DeoptimizeAll)                         \
   template(ZombieAll)                             \
+  template(HandleFullCodeCache)                   \
   template(Verify)                                \
   template(PrintJNI)                              \
   template(HeapDumper)                            \
@@ -241,6 +242,16 @@
   bool allow_nested_vm_operations() const        { return true;  }
 };
 
+class VM_HandleFullCodeCache: public VM_Operation {
+ private:
+  bool  _is_full;
+ public:
+  VM_HandleFullCodeCache(bool is_full)           { _is_full = is_full; }
+  VMOp_Type type() const                         { return VMOp_HandleFullCodeCache; }
+  void doit();
+  bool allow_nested_vm_operations() const        { return true; }
+};
+
 #ifndef PRODUCT
 class VM_DeoptimizeAll: public VM_Operation {
  private:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/compiler/6792161/Test6792161.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ *
+ */
+
+/**
+ * @test
+ * @bug 6792161
+ * @summary assert("No dead instructions after post-alloc")
+ *
+ * @run main/othervm -Xcomp -XX:MaxInlineSize=120 Test6792161
+ */
+
+import java.lang.reflect.Constructor;
+public class Test6792161 {
+    static Constructor test(Class cls) throws Exception {
+        Class[] args= { String.class };
+        try {
+            return cls.getConstructor(args);
+        } catch (NoSuchMethodException e) {}
+        return cls.getConstructor(new Class[0]);
+    }
+    public static void main(final String[] args) throws Exception {
+        try {
+            for (int i = 0; i < 100000; i++) {
+                Constructor ctor = test(Class.forName("Test6792161"));
+            }
+        } catch (NoSuchMethodException e) {}
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/compiler/6916644/Test6916644.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ *
+ */
+
+/**
+ * @test
+ * @bug 6916644
+ * @summary C2 compiler crash on x86
+ *
+ * @run main/othervm -Xcomp -XX:CompileOnly=Test6916644.test Test6916644
+ */
+
+public class Test6916644 {
+    static int result;
+    static int i1;
+    static int i2;
+
+    static public void test(double d) {
+        result = (d <= 0.0D) ? i1 : i2;
+    }
+
+    public static void main(String[] args) {
+        for (int i = 0; i < 100000; i++) {
+            // use an alternating value so the test doesn't always go
+            // the same direction.  Otherwise we won't transform it
+            // into a cmove.
+            test(i & 1);
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/compiler/6921969/TestMultiplyLongHiZero.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,138 @@
+/*
+ * Copyright 2010 Google, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ *
+ */
+
+/*
+ * @test
+ * @bug 6921969
+ * @summary Tests shorter long multiply sequences when the high 32 bits of long operands are known to be zero on x86_32
+ * @run main/othervm -Xbatch -XX:-Inline -XX:CompileOnly=.testNormal,.testLeftOptimized,.testRightOptimized,.testOptimized,.testLeftOptimized_LoadUI2L,.testRightOptimized_LoadUI2L,.testOptimized_LoadUI2L TestMultiplyLongHiZero
+ */
+
+// This test must run without any command line arguments.
+
+public class TestMultiplyLongHiZero {
+
+  private static void check(long leftFactor, long rightFactor, long optimizedProduct, long constantProduct) {
+    long normalProduct = leftFactor * rightFactor; // unaffected by the new optimization
+    if (optimizedProduct != constantProduct || normalProduct != constantProduct) {
+      throw new RuntimeException("Not all three products are equal: " +
+                                 Long.toHexString(normalProduct) + ", " +
+                                 Long.toHexString(optimizedProduct) + ", " +
+                                 Long.toHexString(constantProduct));
+    }
+  }
+
+  private static int initInt(String[] args, int v) {
+    if (args.length > 0) {
+      try {
+        return Integer.valueOf(args[0]);
+      } catch (NumberFormatException e) { }
+    }
+    return v;
+  }
+
+  private static final long mask32 = 0x00000000FFFFFFFFL;
+
+  private static void testNormal(int leftFactor, int rightFactor, long constantProduct) {
+    check((long) leftFactor,
+          (long) rightFactor,
+          (long) leftFactor * (long) rightFactor, // unaffected by the new optimization
+          constantProduct);
+  }
+
+  private static void testLeftOptimized(int leftFactor, int rightFactor, long constantProduct) {
+    check((leftFactor & mask32),
+          (long) rightFactor,
+          (leftFactor & mask32) * (long) rightFactor, // left factor optimized
+          constantProduct);
+  }
+
+  private static void testRightOptimized(int leftFactor, int rightFactor, long constantProduct) {
+    check((long) leftFactor,
+          (rightFactor & mask32),
+          (long) leftFactor * (rightFactor & mask32), // right factor optimized
+          constantProduct);
+  }
+
+  private static void testOptimized(int leftFactor, int rightFactor, long constantProduct) {
+    check((leftFactor & mask32),
+          (rightFactor & mask32),
+          (leftFactor & mask32) * (rightFactor & mask32), // both factors optimized
+          constantProduct);
+  }
+
+  private static void testLeftOptimized_LoadUI2L(int leftFactor, int rightFactor, long constantProduct, int[] factors) {
+    check((leftFactor & mask32),
+          (long) rightFactor,
+          (factors[0] & mask32) * (long) rightFactor, // left factor optimized
+          constantProduct);
+  }
+
+  private static void testRightOptimized_LoadUI2L(int leftFactor, int rightFactor, long constantProduct, int[] factors) {
+    check((long) leftFactor,
+          (rightFactor & mask32),
+          (long) leftFactor * (factors[1] & mask32), // right factor optimized
+          constantProduct);
+  }
+
+  private static void testOptimized_LoadUI2L(int leftFactor, int rightFactor, long constantProduct, int[] factors) {
+    check((leftFactor & mask32),
+          (rightFactor & mask32),
+          (factors[0] & mask32) * (factors[1] & mask32), // both factors optimized
+          constantProduct);
+  }
+
+  private static void test(int leftFactor, int rightFactor,
+                           long normalConstantProduct,
+                           long leftOptimizedConstantProduct,
+                           long rightOptimizedConstantProduct,
+                           long optimizedConstantProduct) {
+    int[] factors = new int[2];
+    factors[0] = leftFactor;
+    factors[1] = rightFactor;
+    testNormal(leftFactor, rightFactor, normalConstantProduct);
+    testLeftOptimized(leftFactor, rightFactor, leftOptimizedConstantProduct);
+    testRightOptimized(leftFactor, rightFactor, rightOptimizedConstantProduct);
+    testOptimized(leftFactor, rightFactor, optimizedConstantProduct);
+    testLeftOptimized_LoadUI2L(leftFactor, rightFactor, leftOptimizedConstantProduct, factors);
+    testRightOptimized_LoadUI2L(leftFactor, rightFactor, rightOptimizedConstantProduct, factors);
+    testOptimized_LoadUI2L(leftFactor, rightFactor, optimizedConstantProduct, factors);
+  }
+
+  public static void main(String[] args) {
+    for (int i = 0; i < 100000; ++i) { // Trigger compilation
+      int i0 = initInt(args, 1);
+      int i1 = initInt(args, 3);
+      int i2 = initInt(args, -1);
+      int i3 = initInt(args, 0x7FFFFFFF);
+      test(i0, i1, 3L, 3L, 3L, 3L);
+      test(i0, i2, -1L, -1L, 0xFFFFFFFFL, 0xFFFFFFFFL);
+      test(i0, i3, 0x7FFFFFFFL, 0x7FFFFFFFL, 0x7FFFFFFFL, 0x7FFFFFFFL);
+      test(i1, i2, -3L, -3L, 0x2FFFFFFFDL, 0x2FFFFFFFDL);
+      test(i1, i3, 0x17FFFFFFDL, 0x17FFFFFFDL, 0x17FFFFFFDL, 0x17FFFFFFDL);
+      test(i2, i3, 0xFFFFFFFF80000001L, 0x7FFFFFFE80000001L,
+           0xFFFFFFFF80000001L, 0x7FFFFFFE80000001L);
+    }
+  }
+}
--- a/jaxp/.hgtags	Fri Feb 12 19:58:10 2010 +0300
+++ b/jaxp/.hgtags	Fri Feb 19 15:13:37 2010 -0800
@@ -55,3 +55,6 @@
 7a12d3789e1b07a560fc79568b991818d617ede2 jdk7-b78
 b1005c504358c18694c84e95fec16b28cdce7ae1 jdk7-b79
 9219574db5936367114b0f31469837f27d5a375a jdk7-b80
+204e59d488cdaa9eafa8cb7164ea955b5a9d4a51 jdk7-b81
+c876ad22e4bf9d3c6460080db7ace478e29a3ff9 jdk7-b82
+309a0a7fc6ceb1c9fc3a85b3608e97ef8f7b0dfd jdk7-b83
--- a/jaxp/jaxp.properties	Fri Feb 12 19:58:10 2010 +0300
+++ b/jaxp/jaxp.properties	Fri Feb 19 15:13:37 2010 -0800
@@ -24,10 +24,10 @@
 #
 
 drops.master.copy.base=${drops.dir}
-drops.master.url.base=https://jaxp.dev.java.net/files/documents/913/144160
+drops.master.url.base=https://jaxp.dev.java.net/files/documents/913/147490
 
-jaxp_src.bundle.name=jdk7-jaxp-m5.zip
-jaxp_src.bundle.md5.checksum=8b58ce7919cda8e32a9afc5cb4b58bb1
+jaxp_src.bundle.name=jdk7-jaxp-m6.zip
+jaxp_src.bundle.md5.checksum=080827d779c114365f8504bd79b34604
 jaxp_src.master.bundle.dir=${drops.master.copy.base}
 jaxp_src.master.bundle.url.base=${drops.master.url.base}
 
--- a/jaxws/.hgtags	Fri Feb 12 19:58:10 2010 +0300
+++ b/jaxws/.hgtags	Fri Feb 19 15:13:37 2010 -0800
@@ -55,3 +55,6 @@
 fc1c72d1dfbb17db7d46bba8db9afc39cbbb9299 jdk7-b78
 c08894f5b6e594b9b12993e256b96c1b38099632 jdk7-b79
 447767dee56a0f8cb89acc8bf7be5f9be7d84e8b jdk7-b80
+f051045fe94a48fae1097f90cbd9227e6aae6b7e jdk7-b81
+31573ae8eed15a6c170f3f0d1abd0b9109c0e086 jdk7-b82
+371e3ded591d09112a9f231e37cb072781c486ac jdk7-b83
--- a/jdk/.hgtags	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/.hgtags	Fri Feb 19 15:13:37 2010 -0800
@@ -55,3 +55,7 @@
 1143e498f813b8223b5e3a696d79da7ff7c25354 jdk7-b78
 918920710d65432a2d54fdf407c1524a5571c4ad jdk7-b79
 049cfaaa9a7374e3768a79969a799e8b59ad52fa jdk7-b80
+10b993d417fcdb40480dad7032ac241f4b87f1af jdk7-b81
+69ef657320ad5c35cfa12e4d8322d877e778f8b3 jdk7-b82
+9027c6b9d7e2c9ca04a1add691b5b50d0f22b1aa jdk7-b83
+7cb9388bb1a16365fa5118c5efa38b1cd58be40d jdk7-b84
--- a/jdk/make/common/shared/Defs-java.gmk	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/make/common/shared/Defs-java.gmk	Fri Feb 19 15:13:37 2010 -0800
@@ -138,6 +138,10 @@
 # Needed for javah
 JAVAHFLAGS += -bootclasspath $(CLASSBINDIR)
 
+# Needed for javadoc to ensure it builds documentation
+# against the newly built classes
+JAVADOCFLAGS += -bootclasspath $(CLASSBINDIR)
+
 # Needed for JAVADOC and BOOT_JAVACFLAGS
 NO_PROPRIETARY_API_WARNINGS = -XDignore.symbol.file=true
 
@@ -155,14 +159,15 @@
 		-jar $(JAVAH_JAR) $(JAVAHFLAGS)
   JAVADOC_CMD = $(BOOT_JAVA_CMD) \
 		"-Xbootclasspath/p:$(JAVADOC_JAR)$(CLASSPATH_SEPARATOR)$(JAVAC_JAR)$(CLASSPATH_SEPARATOR)$(DOCLETS_JAR)" \
-		-jar $(JAVADOC_JAR)
+		-jar $(JAVADOC_JAR) $(JAVADOCFLAGS)
 else
   # If no explicit tools, use boot tools (add VM flags in this case)
   JAVAC_CMD     = $(JAVA_TOOLS_DIR)/javac $(JAVAC_JVM_FLAGS) \
 		  $(JAVACFLAGS)
   JAVAH_CMD     = $(JAVA_TOOLS_DIR)/javah \
 		  $(JAVAHFLAGS)
-  JAVADOC_CMD   = $(JAVA_TOOLS_DIR)/javadoc $(JAVA_TOOLS_FLAGS:%=-J%)
+  JAVADOC_CMD   = $(JAVA_TOOLS_DIR)/javadoc $(JAVA_TOOLS_FLAGS:%=-J%) \
+  		  $(JAVADOCFLAGS)
 endif
 
 # Override of what javac to use (see deploy workspace)
--- a/jdk/make/common/shared/Sanity.gmk	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/make/common/shared/Sanity.gmk	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 #
-# Copyright 2005-2009 Sun Microsystems, Inc.  All Rights Reserved.
+# Copyright 2005-2010 Sun Microsystems, Inc.  All Rights Reserved.
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 #
 # This code is free software; you can redistribute it and/or modify it
@@ -1093,6 +1093,7 @@
 # Check for existence of misc Hotspot imported files
 ######################################################
 HOTSPOT_INCLUDE_FILE_LIST  = jvmti.h
+HOTSPOT_INCLUDE_FILE_LIST  += jvmticmlr.h
 #HOTSPOT_INCLUDE_FILE_LIST += jni.h jni_md.h
 #HOTSPOT_INCLUDE_FILE_LIST += jvm.h jvm_md.h
 #HOTSPOT_INCLUDE_FILE_LIST += jmm.h
--- a/jdk/make/docs/Makefile	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/make/docs/Makefile	Fri Feb 19 15:13:37 2010 -0800
@@ -69,7 +69,7 @@
 THIS_YEAR := $(shell $(DATE) | $(SED) -e 's/  / /g' | $(CUT) -d' ' -f6)
 TRADEMARK = &\#x2122;
 
-IGNORED_TAGS =	beaninfo revised since.unbundled spec Note ToDo
+IGNORED_TAGS =	beaninfo revised since.unbundled spec specdefault Note ToDo
 
 JLS3_URL = http://java.sun.com/docs/books/jls/
 JLS3_CITE = <a href="$(JLS3_URL)"> \
--- a/jdk/make/java/jvm/Makefile	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/make/java/jvm/Makefile	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 #
-# Copyright 1995-2005 Sun Microsystems, Inc.  All Rights Reserved.
+# Copyright 1995-2010 Sun Microsystems, Inc.  All Rights Reserved.
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 #
 # This code is free software; you can redistribute it and/or modify it
@@ -34,7 +34,8 @@
 
 FILES_h = $(INCLUDEDIR)/jni.h 			\
 	  $(PLATFORM_INCLUDE)/jni_md.h		\
-          $(INCLUDEDIR)/jvmti.h			\
+	  $(INCLUDEDIR)/jvmti.h			\
+	  $(INCLUDEDIR)/jvmticmlr.h		\
 	  $(INCLUDEDIR)/classfile_constants.h
 
 $(INCLUDEDIR)/%.h: $(SHARE_SRC)/javavm/export/%.h
--- a/jdk/make/java/sun_nio/Makefile	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/make/java/sun_nio/Makefile	Fri Feb 19 15:13:37 2010 -0800
@@ -31,7 +31,7 @@
 PACKAGE = sun.nio
 PRODUCT = sun
 
-OTHER_JAVACFLAGS += -Xlint:serial -Werror
+OTHER_JAVACFLAGS += -Xlint:serial,-deprecation -Werror
 include $(BUILDDIR)/common/Defs.gmk
 
 #
--- a/jdk/make/javax/swing/beaninfo/SwingBeans.gmk	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/make/javax/swing/beaninfo/SwingBeans.gmk	Fri Feb 19 15:13:37 2010 -0800
@@ -25,7 +25,7 @@
 
 #
 # Makefile to build the BeanInfo generation tool (ie, a doclet), and
-# then the beaninfo itself.  Swing versions prior to 1.2 is no longer
+# then the beaninfo itself.  Swing versions prior to 1.2 are no longer
 # built.
 #
 # This makefile could be a lot simpler if we made it more regular.
@@ -44,13 +44,12 @@
 	$(MAKE) DEBUG_FLAG=true make-swing-beans
 
 
-LOCAL_JAVADOC   = $(JAVADOC_CMD) $(JAVADOCFLAGS)
 # get the absolute path to the jar command.
 PREFIX          = 1.2
-JAVADOCFLAGS    = $(NO_PROPRIETARY_API_WARNINGS) $(LANGUAGE_VERSION)
+JAVADOCFLAGS    += $(NO_PROPRIETARY_API_WARNINGS) $(LANGUAGE_VERSION)
 SWINGPKG        = javax/swing
 LOCAL_JAVAC_FLAGS = $(OTHER_JAVACFLAGS)
-# since LOCAL_JAVADOC runs on ALT_BOOTDIR, the doclet and all its classes must be compiled to match
+# since JAVADOC_CMD runs on ALT_BOOTDIR, the doclet and all its classes must be compiled to match
 DOCLET_JAVAC_FLAGS = -source 6 -target 6
 
 include FILES.gmk
@@ -114,7 +113,7 @@
 
 .javadoc.beanlist:
 	if [ -s $(TEMPDIR)/.beans.list ]; \
-	then $(LOCAL_JAVADOC) $(DOCLETFLAGS) -x $(DEBUG_FLAG) -d $(BEANSRCDIR) -t $(DOCLETSRC)/SwingBeanInfo.template -docletpath $(DOCLETDST) \
+	then $(JAVADOC_CMD) $(DOCLETFLAGS) -x $(DEBUG_FLAG) -d $(BEANSRCDIR) -t $(DOCLETSRC)/SwingBeanInfo.template -docletpath $(DOCLETDST) \
 	    $(shell if [ -s $(TEMPDIR)/.beans.list ]; then $(CAT) $(TEMPDIR)/.beans.list; fi); \
 	fi
 	@$(java-vm-cleanup)
--- a/jdk/make/mkdemo/jvmti/Makefile	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/make/mkdemo/jvmti/Makefile	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 #
-# Copyright 2004-2006 Sun Microsystems, Inc.  All Rights Reserved.
+# Copyright 2004-2010 Sun Microsystems, Inc.  All Rights Reserved.
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 #
 # This code is free software; you can redistribute it and/or modify it
@@ -34,12 +34,13 @@
 
 # Can be built in any order, the JRE version of hprof and java_crw_demo are
 #   really built in make/java.
-#   The hprof target here just deliveres the sources and README files.
+#   The hprof target here just delivers the sources and README files.
 #   The java_crw_demo and agent_util files are copied into each demo that
 #   uses them.
 SUBDIRS = \
 	  versionCheck \
-          gctest \
+	  compiledMethodLoad \
+	  gctest \
 	  heapViewer \
 	  heapTracker \
 	  minst \
--- a/jdk/make/mkdemo/jvmti/README.txt	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/make/mkdemo/jvmti/README.txt	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 #
-# Copyright 2004 Sun Microsystems, Inc.  All Rights Reserved.
+# Copyright 2004-2010 Sun Microsystems, Inc.  All Rights Reserved.
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 #
 # This code is free software; you can redistribute it and/or modify it
@@ -27,8 +27,8 @@
 
 Basically you want to mimic the jvmti demo agent "mtrace".
 
-* Create and populate a source directory at src/demo/jvmti
-  (Try and re-use code in agent_util area like src/demo/jvmti/mtrace)
+* Create and populate a source directory at src/share/demo/jvmti
+  (Try and re-use code in agent_util area like src/share/demo/jvmti/mtrace)
   (This should include a small README.txt document on what this demo is)
 
 * Make sure the appropriate "demo" copyright notice is added to all the
@@ -44,7 +44,7 @@
 * Create test directory at test/demo/jvmti, create at least one test
   (Use test/demo/jvmti/mtrace as a template)
 
-* Don't forget to SCCS in all the new files
+* Don't forget to check in all the new files
 
 * Build and create images (cd make && gnumake && gnumake images)
   (Do this on Solaris, Linux, and at least one Windows platform)
@@ -54,5 +54,5 @@
 * Run the tests: cd test/demo/jvmti && runregress .
   (Do this on Solaris, Linux, and at least one Windows platform)
 
-Contact: jk-svc-group@sun.com for more information or help.
+Contact: serviceability-dev@openjdk.java.net for more information or help.
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/make/mkdemo/jvmti/compiledMethodLoad/Makefile	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,41 @@
+#
+# Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+# 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.  Sun designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+# CA 95054 USA or visit www.sun.com if you need additional information or
+# have any questions.
+#
+
+BUILDDIR = ../../..
+PRODUCT = demo/jvmti
+DEMONAME = compiledMethodLoad
+include $(BUILDDIR)/common/Defs.gmk
+
+DEMO_ROOT       = $(SHARE_SRC)/demo/jvmti/$(DEMONAME)
+DEMO_TOPFILES   = ./README.txt
+DEMO_DESTDIR    = $(DEMODIR)/jvmti/$(DEMONAME)
+
+DEMO_OBJECTS = agent_util.$(OBJECT_SUFFIX)
+
+#
+# Demo jar building rules.
+#
+include $(BUILDDIR)/common/Demo.gmk
+
--- a/jdk/src/share/classes/java/awt/GraphicsEnvironment.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/java/awt/GraphicsEnvironment.java	Fri Feb 19 15:13:37 2010 -0800
@@ -110,7 +110,7 @@
 //          long t1 = System.currentTimeMillis();
 //          System.out.println("GE creation took " + (t1-t0)+ "ms.");
             if (isHeadless()) {
-                localEnv = new HeadlessGraphicsEnvironment(localEnv);
+                ge = new HeadlessGraphicsEnvironment(ge);
             }
         } catch (ClassNotFoundException e) {
             throw new Error("Could not find class: "+nm);
--- a/jdk/src/share/classes/java/beans/DefaultPersistenceDelegate.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/java/beans/DefaultPersistenceDelegate.java	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2008 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 2000-2010 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -146,6 +146,8 @@
      * @param  out The code output stream.
      * @return An expression whose value is <code>oldInstance</code>.
      *
+     * @throws NullPointerException if {@code out} is {@code null}
+     *
      * @see #DefaultPersistenceDelegate(String[])
      */
     protected Expression instantiate(Object oldInstance, Encoder out) {
@@ -367,6 +369,8 @@
      * @param newInstance The instance that is to be modified.
      * @param out The stream to which any initialization statements should be written.
      *
+     * @throws NullPointerException if {@code out} is {@code null}
+     *
      * @see java.beans.Introspector#getBeanInfo
      * @see java.beans.PropertyDescriptor
      */
--- a/jdk/src/share/classes/java/beans/Encoder.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/java/beans/Encoder.java	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2009 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 2000-2010 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -112,54 +112,82 @@
 
     /**
      * Returns the persistence delegate for the given type.
-     * The persistence delegate is calculated
-     * by applying the following of rules in order:
-     * <ul>
+     * The persistence delegate is calculated by applying
+     * the following rules in order:
+     * <ol>
+     * <li>
+     * If a persistence delegate is associated with the given type
+     * by using the {@link #setPersistenceDelegate} method
+     * it is returned.
      * <li>
-     * If the type is an array, an internal persistence
-     * delegate is returned which will instantiate an
-     * array of the appropriate type and length, initializing
-     * each of its elements as if they are properties.
+     * A persistence delegate is then looked up by the name
+     * composed of the the fully qualified name of the given type
+     * and the "PersistenceDelegate" postfix.
+     * For example, a persistence delegate for the {@code Bean} class
+     * should be named {@code BeanPersistenceDelegate}
+     * and located in the same package.
+     * <pre>
+     * public class Bean { ... }
+     * public class BeanPersistenceDelegate { ... }</pre>
+     * The instance of the {@code BeanPersistenceDelegate} class
+     * is returned for the {@code Bean} class.
+     * <li>
+     * If the type is {@code null},
+     * a shared internal persistence delegate is returned
+     * that encodes {@code null} value.
      * <li>
-     * If the type is a proxy, an internal persistence
-     * delegate is returned which will instantiate a
-     * new proxy instance using the static
-     * "newProxyInstance" method defined in the
-     * Proxy class.
+     * If the type is a {@code enum} declaration,
+     * a shared internal persistence delegate is returned
+     * that encodes constants of this enumeration
+     * by their names.
+     * <li>
+     * If the type is a primitive type or the corresponding wrapper,
+     * a shared internal persistence delegate is returned
+     * that encodes values of the given type.
+     * <li>
+     * If the type is an array,
+     * a shared internal persistence delegate is returned
+     * that encodes an array of the appropriate type and length,
+     * and each of its elements as if they are properties.
      * <li>
-     * If the BeanInfo for this type has a <code>BeanDescriptor</code>
-     * which defined a "persistenceDelegate" property, this
-     * value is returned.
+     * If the type is a proxy,
+     * a shared internal persistence delegate is returned
+     * that encodes a proxy instance by using
+     * the {@link java.lang.reflect.Proxy#newProxyInstance} method.
      * <li>
-     * In all other cases the default persistence delegate
-     * is returned. The default persistence delegate assumes
-     * the type is a <em>JavaBean</em>, implying that it has a default constructor
-     * and that its state may be characterized by the matching pairs
-     * of "setter" and "getter" methods returned by the Introspector.
+     * If the {@link BeanInfo} for this type has a {@link BeanDescriptor}
+     * which defined a "persistenceDelegate" attribute,
+     * the value of this named attribute is returned.
+     * <li>
+     * In all other cases the default persistence delegate is returned.
+     * The default persistence delegate assumes the type is a <em>JavaBean</em>,
+     * implying that it has a default constructor and that its state
+     * may be characterized by the matching pairs of "setter" and "getter"
+     * methods returned by the {@link Introspector} class.
      * The default constructor is the constructor with the greatest number
      * of parameters that has the {@link ConstructorProperties} annotation.
-     * If none of the constructors have the {@code ConstructorProperties} annotation,
+     * If none of the constructors has the {@code ConstructorProperties} annotation,
      * then the nullary constructor (constructor with no parameters) will be used.
-     * For example, in the following the nullary constructor
-     * for {@code Foo} will be used, while the two parameter constructor
-     * for {@code Bar} will be used.
-     * <code>
-     *   public class Foo {
+     * For example, in the following code fragment, the nullary constructor
+     * for the {@code Foo} class will be used,
+     * while the two-parameter constructor
+     * for the {@code Bar} class will be used.
+     * <pre>
+     * public class Foo {
      *     public Foo() { ... }
      *     public Foo(int x) { ... }
-     *   }
-     *   public class Bar {
+     * }
+     * public class Bar {
      *     public Bar() { ... }
      *     &#64;ConstructorProperties({"x"})
      *     public Bar(int x) { ... }
      *     &#64;ConstructorProperties({"x", "y"})
      *     public Bar(int x, int y) { ... }
-     *   }
-     * </code>
-     * </ul>
+     * }</pre>
+     * </ol>
      *
-     * @param  type The type of the object.
-     * @return The persistence delegate for this type of object.
+     * @param type  the class of the objects
+     * @return the persistence delegate for the given type
      *
      * @see #setPersistenceDelegate
      * @see java.beans.Introspector#getBeanInfo
@@ -176,21 +204,18 @@
     }
 
     /**
-     * Sets the persistence delegate associated with this <code>type</code> to
-     * <code>persistenceDelegate</code>.
+     * Associates the specified persistence delegate with the given type.
      *
-     * @param  type The class of objects that <code>persistenceDelegate</code> applies to.
-     * @param  persistenceDelegate The persistence delegate for instances of <code>type</code>.
+     * @param type  the class of objects that the specified persistence delegate applies to
+     * @param delegate  the persistence delegate for instances of the given type
      *
      * @see #getPersistenceDelegate
      * @see java.beans.Introspector#getBeanInfo
      * @see java.beans.BeanInfo#getBeanDescriptor
      */
-    public void setPersistenceDelegate(Class<?> type,
-                                       PersistenceDelegate persistenceDelegate)
-    {
+    public void setPersistenceDelegate(Class<?> type, PersistenceDelegate delegate) {
         synchronized (this.finder) {
-            this.finder.register(type, persistenceDelegate);
+            this.finder.register(type, delegate);
         }
     }
 
--- a/jdk/src/share/classes/java/beans/Expression.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/java/beans/Expression.java	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2007 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 2000-2010 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -51,12 +51,19 @@
     private Object value = unbound;
 
     /**
-     * Creates a new <code>Statement</code> object with a <code>target</code>,
-     * <code>methodName</code> and <code>arguments</code> as per the parameters.
+     * Creates a new {@link Expression} object
+     * for the specified target object to invoke the method
+     * specified by the name and by the array of arguments.
+     * <p>
+     * The {@code target} and the {@code methodName} values should not be {@code null}.
+     * Otherwise an attempt to execute this {@code Expression}
+     * will result in a {@code NullPointerException}.
+     * If the {@code arguments} value is {@code null},
+     * an empty array is used as the value of the {@code arguments} property.
      *
-     * @param target The target of this expression.
-     * @param methodName The methodName of this expression.
-     * @param arguments The arguments of this expression. If <code>null</code> then an empty array will be used.
+     * @param target  the target object of this expression
+     * @param methodName  the name of the method to invoke on the specified target
+     * @param arguments  the array of arguments to invoke the specified method
      *
      * @see #getValue
      */
@@ -66,16 +73,23 @@
     }
 
     /**
-     * Creates a new <code>Expression</code> object for a method
-     * that returns a result. The result will never be calculated
-     * however, since this constructor uses the <code>value</code>
-     * parameter to set the value property by calling the
-     * <code>setValue</code> method.
+     * Creates a new {@link Expression} object with the specified value
+     * for the specified target object to invoke the  method
+     * specified by the name and by the array of arguments.
+     * The {@code value} value is used as the value of the {@code value} property,
+     * so the {@link #getValue} method will return it
+     * without executing this {@code Expression}.
+     * <p>
+     * The {@code target} and the {@code methodName} values should not be {@code null}.
+     * Otherwise an attempt to execute this {@code Expression}
+     * will result in a {@code NullPointerException}.
+     * If the {@code arguments} value is {@code null},
+     * an empty array is used as the value of the {@code arguments} property.
      *
-     * @param value The value of this expression.
-     * @param target The target of this expression.
-     * @param methodName The methodName of this expression.
-     * @param arguments The arguments of this expression. If <code>null</code> then an empty array will be used.
+     * @param value  the value of this expression
+     * @param target  the target object of this expression
+     * @param methodName  the name of the method to invoke on the specified target
+     * @param arguments  the array of arguments to invoke the specified method
      *
      * @see #setValue
      */
--- a/jdk/src/share/classes/java/beans/Introspector.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/java/beans/Introspector.java	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 1996-2009 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 1996-2010 Sun Microsystems, Inc.  All Rights Reserved.
  * 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,8 @@
 import com.sun.beans.finder.BeanInfoFinder;
 import com.sun.beans.finder.ClassFinder;
 
+import java.lang.ref.Reference;
+import java.lang.ref.SoftReference;
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
 
@@ -39,6 +41,7 @@
 import java.util.EventListener;
 import java.util.List;
 import java.util.TreeMap;
+import java.util.WeakHashMap;
 
 import sun.awt.AppContext;
 import sun.reflect.misc.ReflectUtil;
@@ -155,11 +158,11 @@
             return (new Introspector(beanClass, null, USE_ALL_BEANINFO)).getBeanInfo();
         }
         synchronized (BEANINFO_CACHE) {
-            WeakCache<Class<?>, BeanInfo> beanInfoCache =
-                    (WeakCache<Class<?>, BeanInfo>) AppContext.getAppContext().get(BEANINFO_CACHE);
+            Map<Class<?>, BeanInfo> beanInfoCache =
+                    (Map<Class<?>, BeanInfo>) AppContext.getAppContext().get(BEANINFO_CACHE);
 
             if (beanInfoCache == null) {
-                beanInfoCache = new WeakCache<Class<?>, BeanInfo>();
+                beanInfoCache = new WeakHashMap<Class<?>, BeanInfo>();
                 AppContext.getAppContext().put(BEANINFO_CACHE, beanInfoCache);
             }
             BeanInfo beanInfo = beanInfoCache.get(beanClass);
@@ -341,7 +344,7 @@
 
     public static void flushCaches() {
         synchronized (BEANINFO_CACHE) {
-            WeakCache beanInfoCache = (WeakCache) AppContext.getAppContext().get(BEANINFO_CACHE);
+            Map beanInfoCache = (Map) AppContext.getAppContext().get(BEANINFO_CACHE);
             if (beanInfoCache != null) {
                 beanInfoCache.clear();
             }
@@ -369,7 +372,7 @@
             throw new NullPointerException();
         }
         synchronized (BEANINFO_CACHE) {
-            WeakCache beanInfoCache = (WeakCache) AppContext.getAppContext().get(BEANINFO_CACHE);
+            Map beanInfoCache = (Map) AppContext.getAppContext().get(BEANINFO_CACHE);
             if (beanInfoCache != null) {
                 beanInfoCache.put(clz, null);
             }
@@ -1458,7 +1461,7 @@
     private PropertyDescriptor[] properties;
     private int defaultProperty;
     private MethodDescriptor[] methods;
-    private BeanInfo targetBeanInfo;
+    private final Reference<BeanInfo> targetBeanInfoRef;
 
     public GenericBeanInfo(BeanDescriptor beanDescriptor,
                 EventSetDescriptor[] events, int defaultEvent,
@@ -1470,7 +1473,7 @@
         this.properties = properties;
         this.defaultProperty = defaultProperty;
         this.methods = methods;
-        this.targetBeanInfo = targetBeanInfo;
+        this.targetBeanInfoRef = new SoftReference<BeanInfo>(targetBeanInfo);
     }
 
     /**
@@ -1509,7 +1512,7 @@
                 methods[i] = new MethodDescriptor(old.methods[i]);
             }
         }
-        targetBeanInfo = old.targetBeanInfo;
+        this.targetBeanInfoRef = old.targetBeanInfoRef;
     }
 
     public PropertyDescriptor[] getPropertyDescriptors() {
@@ -1537,6 +1540,7 @@
     }
 
     public java.awt.Image getIcon(int iconKind) {
+        BeanInfo targetBeanInfo = this.targetBeanInfoRef.get();
         if (targetBeanInfo != null) {
             return targetBeanInfo.getIcon(iconKind);
         }
--- a/jdk/src/share/classes/java/beans/PersistenceDelegate.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/java/beans/PersistenceDelegate.java	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2006 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 2000-2010 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -105,6 +105,8 @@
      *
      * @param oldInstance The instance that will be created by this expression.
      * @param out The stream to which this expression will be written.
+     *
+     * @throws NullPointerException if {@code out} is {@code null}
      */
     public void writeObject(Object oldInstance, Encoder out) {
         Object newInstance = out.get(oldInstance);
@@ -158,6 +160,8 @@
      * @param oldInstance The instance that will be created by this expression.
      * @param out The stream to which this expression will be written.
      * @return An expression whose value is <code>oldInstance</code>.
+     *
+     * @throws NullPointerException if {@code out} is {@code null}
      */
     protected abstract Expression instantiate(Object oldInstance, Encoder out);
 
@@ -196,6 +200,8 @@
      * @param oldInstance The instance to be copied.
      * @param newInstance The instance that is to be modified.
      * @param out The stream to which any initialization statements should be written.
+     *
+     * @throws NullPointerException if {@code out} is {@code null}
      */
     protected void initialize(Class<?> type,
                               Object oldInstance, Object newInstance,
--- a/jdk/src/share/classes/java/beans/Statement.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/java/beans/Statement.java	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2009 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 2000-2010 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -69,13 +69,19 @@
     ClassLoader loader;
 
     /**
-     * Creates a new <code>Statement</code> object with a <code>target</code>,
-     * <code>methodName</code> and <code>arguments</code> as per the parameters.
+     * Creates a new {@link Statement} object
+     * for the specified target object to invoke the method
+     * specified by the name and by the array of arguments.
+     * <p>
+     * The {@code target} and the {@code methodName} values should not be {@code null}.
+     * Otherwise an attempt to execute this {@code Expression}
+     * will result in a {@code NullPointerException}.
+     * If the {@code arguments} value is {@code null},
+     * an empty array is used as the value of the {@code arguments} property.
      *
-     * @param target The target of this statement.
-     * @param methodName The methodName of this statement.
-     * @param arguments The arguments of this statement. If <code>null</code> then an empty array will be used.
-     *
+     * @param target  the target object of this statement
+     * @param methodName  the name of the method to invoke on the specified target
+     * @param arguments  the array of arguments to invoke the specified method
      */
     @ConstructorProperties({"target", "methodName", "arguments"})
     public Statement(Object target, String methodName, Object[] arguments) {
@@ -85,27 +91,36 @@
     }
 
     /**
-     * Returns the target of this statement.
+     * Returns the target object of this statement.
+     * If this method returns {@code null},
+     * the {@link #execute} method
+     * throws a {@code NullPointerException}.
      *
-     * @return The target of this statement.
+     * @return the target object of this statement
      */
     public Object getTarget() {
         return target;
     }
 
     /**
-     * Returns the name of the method.
+     * Returns the name of the method to invoke.
+     * If this method returns {@code null},
+     * the {@link #execute} method
+     * throws a {@code NullPointerException}.
      *
-     * @return The name of the method.
+     * @return the name of the method
      */
     public String getMethodName() {
         return methodName;
     }
 
     /**
-     * Returns the arguments of this statement.
+     * Returns the arguments for the method to invoke.
+     * The number of arguments and their types
+     * must match the method being  called.
+     * {@code null} can be used as a synonym of an empty array.
      *
-     * @return the arguments of this statement.
+     * @return the array of arguments
      */
     public Object[] getArguments() {
         return arguments;
@@ -154,6 +169,9 @@
         }
 
         Object[] arguments = getArguments();
+        if (arguments == null) {
+            arguments = emptyArray;
+        }
         // Class.forName() won't load classes outside
         // of core from a class inside core. Special
         // case this method.
@@ -285,7 +303,9 @@
         Object target = getTarget();
         String methodName = getMethodName();
         Object[] arguments = getArguments();
-
+        if (arguments == null) {
+            arguments = emptyArray;
+        }
         StringBuffer result = new StringBuffer(instanceName(target) + "." + methodName + "(");
         int n = arguments.length;
         for(int i = 0; i < n; i++) {
--- a/jdk/src/share/classes/java/security/cert/PKIXParameters.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/java/security/cert/PKIXParameters.java	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2006 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 2000-2009 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -663,15 +663,23 @@
      */
     public Object clone() {
         try {
-            Object copy = super.clone();
-            // Must clone these because addCertStore, et al. modify them
+            PKIXParameters copy = (PKIXParameters)super.clone();
+
+            // must clone these because addCertStore, et al. modify them
             if (certStores != null) {
-                certStores = new ArrayList<CertStore>(certStores);
+                copy.certStores = new ArrayList<CertStore>(certStores);
             }
             if (certPathCheckers != null) {
-                certPathCheckers =
-                        new ArrayList<PKIXCertPathChecker>(certPathCheckers);
+                copy.certPathCheckers =
+                    new ArrayList<PKIXCertPathChecker>(certPathCheckers.size());
+                for (PKIXCertPathChecker checker : certPathCheckers) {
+                    copy.certPathCheckers.add(
+                                    (PKIXCertPathChecker)checker.clone());
+                }
             }
+
+            // other class fields are immutable to public, don't bother
+            // to clone the read-only fields.
             return copy;
         } catch (CloneNotSupportedException e) {
             /* Cannot happen */
--- a/jdk/src/share/classes/java/text/CollationElementIterator.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/java/text/CollationElementIterator.java	Fri Feb 19 15:13:37 2010 -0800
@@ -232,7 +232,7 @@
                     buffer = makeReorderedBuffer(consonant, value, buffer, true);
                     value = buffer[0];
                     expIndex = 1;
-                } else {
+                } else if (consonant != NormalizerBase.DONE) {
                     text.previous();
                 }
             }
@@ -242,7 +242,7 @@
                     buffer = makeReorderedBuffer(consonant, value, buffer, true);
                     value = buffer[0];
                     expIndex = 1;
-                } else {
+                } else if (consonant != NormalizerBase.DONE) {
                     text.previous();
                 }
             }
--- a/jdk/src/share/classes/java/text/RuleBasedBreakIterator.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/java/text/RuleBasedBreakIterator.java	Fri Feb 19 15:13:37 2010 -0800
@@ -621,6 +621,8 @@
         return handleNext();
     }
 
+    private int cachedLastKnownBreak = BreakIterator.DONE;
+
     /**
      * Advances the iterator backwards, to the last boundary preceding this one.
      * @return The position of the last boundary position preceding this one.
@@ -638,8 +640,16 @@
         // the current position), but not necessarily the last one before
         // where we started
         int start = current();
-        getPrevious();
-        int lastResult = handlePrevious();
+        int lastResult = cachedLastKnownBreak;
+        if (lastResult >= start || lastResult <= BreakIterator.DONE) {
+            getPrevious();
+            lastResult = handlePrevious();
+        } else {
+            //it might be better to check if handlePrevious() give us closer
+            //safe value but handlePrevious() is slow too
+            //So, this has to be done carefully
+            text.setIndex(lastResult);
+        }
         int result = lastResult;
 
         // iterate forward from the known break position until we pass our
@@ -653,6 +663,7 @@
         // set the current iteration position to be the last break position
         // before where we started, and then return that value
         text.setIndex(lastResult);
+        cachedLastKnownBreak = lastResult;
         return lastResult;
     }
 
@@ -757,7 +768,8 @@
         // then we can just use next() to get our return value
         text.setIndex(offset);
         if (offset == text.getBeginIndex()) {
-            return handleNext();
+            cachedLastKnownBreak = handleNext();
+            return cachedLastKnownBreak;
         }
 
         // otherwise, we have to sync up first.  Use handlePrevious() to back
@@ -767,10 +779,19 @@
         // position at or before our starting position.  Advance forward
         // from here until we've passed the starting position.  The position
         // we stop on will be the first break position after the specified one.
-        int result = handlePrevious();
+        int result = cachedLastKnownBreak;
+        if (result >= offset || result <= BreakIterator.DONE) {
+            result = handlePrevious();
+        } else {
+            //it might be better to check if handlePrevious() give us closer
+            //safe value but handlePrevious() is slow too
+            //So, this has to be done carefully
+            text.setIndex(result);
+        }
         while (result != BreakIterator.DONE && result <= offset) {
             result = handleNext();
         }
+        cachedLastKnownBreak = result;
         return result;
     }
 
@@ -865,6 +886,8 @@
             text = new SafeCharIterator(newText);
         }
         text.first();
+
+        cachedLastKnownBreak = BreakIterator.DONE;
     }
 
 
--- a/jdk/src/share/classes/java/util/Date.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/java/util/Date.java	Fri Feb 19 15:13:37 2010 -0800
@@ -953,7 +953,7 @@
      * without affecting its internal state.
      */
     static final long getMillisOf(Date date) {
-        if (date.cdate == null) {
+        if (date.cdate == null || date.cdate.isNormalized()) {
             return date.fastTime;
         }
         BaseCalendar.Date d = (BaseCalendar.Date) date.cdate.clone();
--- a/jdk/src/share/classes/java/util/regex/Pattern.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/java/util/regex/Pattern.java	Fri Feb 19 15:13:37 2010 -0800
@@ -861,6 +861,14 @@
     private transient int patternLength;
 
     /**
+     * If the Start node might possibly match supplementary characters.
+     * It is set to true during compiling if
+     * (1) There is supplementary char in pattern, or
+     * (2) There is complement node of Category or Block
+     */
+    private transient boolean hasSupplementary;
+
+    /**
      * Compiles the given regular expression into a pattern.  </p>
      *
      * @param  regex
@@ -1481,7 +1489,7 @@
         // Use double zero to terminate pattern
         temp = new int[patternLength + 2];
 
-        boolean hasSupplementary = false;
+        hasSupplementary = false;
         int c, count = 0;
         // Convert all chars into code points
         for (int x = 0; x < patternLength; x += Character.charCount(c)) {
@@ -1787,7 +1795,8 @@
      * character or unpaired surrogate.
      */
     private static final boolean isSupplementary(int ch) {
-        return ch >= Character.MIN_SUPPLEMENTARY_CODE_POINT || isSurrogate(ch);
+        return ch >= Character.MIN_SUPPLEMENTARY_CODE_POINT ||
+               Character.isSurrogate((char)ch);
     }
 
     /**
@@ -1885,7 +1894,7 @@
                     } else {
                         oneLetter = false;
                     }
-                    node = family(oneLetter).maybeComplement(comp);
+                    node = family(oneLetter, comp);
                 } else {
                     unread();
                     node = atom();
@@ -2001,7 +2010,7 @@
                             unread();
                         else
                             oneLetter = false;
-                        return family(oneLetter).maybeComplement(comp);
+                        return family(oneLetter, comp);
                     }
                 }
                 unread();
@@ -2404,7 +2413,7 @@
                     unread();
                 else
                     oneLetter = false;
-                return family(oneLetter).maybeComplement(comp);
+                return family(oneLetter, comp);
             } else { // ordinary escape
                 unread();
                 ch = escape(true, true);
@@ -2450,9 +2459,12 @@
     /**
      * Parses a Unicode character family and returns its representative node.
      */
-    private CharProperty family(boolean singleLetter) {
+    private CharProperty family(boolean singleLetter,
+                                boolean maybeComplement)
+    {
         next();
         String name;
+        CharProperty node;
 
         if (singleLetter) {
             int c = temp[cursor];
@@ -2477,12 +2489,18 @@
         }
 
         if (name.startsWith("In")) {
-            return unicodeBlockPropertyFor(name.substring(2));
+            node = unicodeBlockPropertyFor(name.substring(2));
         } else {
             if (name.startsWith("Is"))
                 name = name.substring(2);
-            return charPropertyNodeFor(name);
-        }
+            node = charPropertyNodeFor(name);
+        }
+        if (maybeComplement) {
+            if (node instanceof Category || node instanceof Block)
+                hasSupplementary = true;
+            node = node.complement();
+        }
+        return node;
     }
 
     /**
@@ -2495,9 +2513,7 @@
         } catch (IllegalArgumentException iae) {
             throw error("Unknown character block name {" + name + "}");
         }
-        return new CharProperty() {
-                boolean isSatisfiedBy(int ch) {
-                    return block == Character.UnicodeBlock.of(ch);}};
+        return new Block(block);
     }
 
     /**
@@ -2968,13 +2984,6 @@
     // Utility methods for code point support
     //
 
-    /**
-     * Tests a surrogate value.
-     */
-    private static final boolean isSurrogate(int c) {
-        return c >= Character.MIN_HIGH_SURROGATE && c <= Character.MAX_LOW_SURROGATE;
-    }
-
     private static final int countChars(CharSequence seq, int index,
                                         int lengthInCodePoints) {
         // optimization
@@ -3174,20 +3183,17 @@
                 matcher.hitEnd = true;
                 return false;
             }
-            boolean ret = false;
             int guard = matcher.to - minLength;
             for (; i <= guard; i++) {
-                if (ret = next.match(matcher, i, seq))
-                    break;
-                if (i == guard)
-                    matcher.hitEnd = true;
+                if (next.match(matcher, i, seq)) {
+                    matcher.first = i;
+                    matcher.groups[0] = matcher.first;
+                    matcher.groups[1] = matcher.last;
+                    return true;
+                }
             }
-            if (ret) {
-                matcher.first = i;
-                matcher.groups[0] = matcher.first;
-                matcher.groups[1] = matcher.last;
-            }
-            return ret;
+            matcher.hitEnd = true;
+            return false;
         }
         boolean study(TreeInfo info) {
             next.study(info);
@@ -3209,27 +3215,28 @@
                 matcher.hitEnd = true;
                 return false;
             }
-            boolean ret = false;
             int guard = matcher.to - minLength;
             while (i <= guard) {
-                if ((ret = next.match(matcher, i, seq)) || i == guard)
+                //if ((ret = next.match(matcher, i, seq)) || i == guard)
+                if (next.match(matcher, i, seq)) {
+                    matcher.first = i;
+                    matcher.groups[0] = matcher.first;
+                    matcher.groups[1] = matcher.last;
+                    return true;
+                }
+                if (i == guard)
                     break;
                 // Optimization to move to the next character. This is
                 // faster than countChars(seq, i, 1).
                 if (Character.isHighSurrogate(seq.charAt(i++))) {
-                    if (i < seq.length() && Character.isLowSurrogate(seq.charAt(i))) {
+                    if (i < seq.length() &&
+                        Character.isLowSurrogate(seq.charAt(i))) {
                         i++;
                     }
                 }
-                if (i == guard)
-                    matcher.hitEnd = true;
             }
-            if (ret) {
-                matcher.first = i;
-                matcher.groups[0] = matcher.first;
-                matcher.groups[1] = matcher.last;
-            }
-            return ret;
+            matcher.hitEnd = true;
+            return false;
         }
     }
 
@@ -3461,9 +3468,6 @@
                     boolean isSatisfiedBy(int ch) {
                         return ! CharProperty.this.isSatisfiedBy(ch);}};
         }
-        CharProperty maybeComplement(boolean complement) {
-            return complement ? complement() : this;
-        }
         boolean match(Matcher matcher, int i, CharSequence seq) {
             if (i < matcher.to) {
                 int ch = Character.codePointAt(seq, i);
@@ -3548,6 +3552,20 @@
         }
     }
 
+
+    /**
+     * Node class that matches a Unicode block.
+     */
+    static final class Block extends CharProperty {
+        final Character.UnicodeBlock block;
+        Block(Character.UnicodeBlock block) {
+            this.block = block;
+        }
+        boolean isSatisfiedBy(int ch) {
+            return block == Character.UnicodeBlock.of(ch);
+        }
+    }
+
     /**
      * Node class that matches a Unicode category.
      */
--- a/jdk/src/share/classes/javax/swing/MultiUIDefaults.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/javax/swing/MultiUIDefaults.java	Fri Feb 19 15:13:37 2010 -0800
@@ -27,6 +27,7 @@
 
 import java.util.Enumeration;
 import java.util.HashSet;
+import java.util.Iterator;
 import java.util.Locale;
 import java.util.Map.Entry;
 import java.util.Set;
@@ -89,11 +90,7 @@
 
     @Override
     public int size() {
-        int n = super.size();
-        for (UIDefaults table : tables) {
-            n += (table != null) ? table.size() : 0;
-        }
-        return n;
+        return entrySet().size();
     }
 
     @Override
@@ -104,40 +101,26 @@
     @Override
     public Enumeration<Object> keys()
     {
-        Enumeration[] enums = new Enumeration[1 + tables.length];
-        enums[0] = super.keys();
-        for(int i = 0; i < tables.length; i++) {
-            UIDefaults table = tables[i];
-            if (table != null) {
-                enums[i + 1] = table.keys();
-            }
-        }
-        return new MultiUIDefaultsEnumerator(enums);
+        return new MultiUIDefaultsEnumerator(
+                MultiUIDefaultsEnumerator.Type.KEYS, entrySet());
     }
 
     @Override
     public Enumeration<Object> elements()
     {
-        Enumeration[] enums = new Enumeration[1 + tables.length];
-        enums[0] = super.elements();
-        for(int i = 0; i < tables.length; i++) {
-            UIDefaults table = tables[i];
-            if (table != null) {
-                enums[i + 1] = table.elements();
-            }
-        }
-        return new MultiUIDefaultsEnumerator(enums);
+        return new MultiUIDefaultsEnumerator(
+                MultiUIDefaultsEnumerator.Type.ELEMENTS, entrySet());
     }
 
     @Override
     public Set<Entry<Object, Object>> entrySet() {
         Set<Entry<Object, Object>> set = new HashSet<Entry<Object, Object>>();
-        if (tables == null) return set;
-        for (UIDefaults table : tables) {
-            if (table != null) {
-                set.addAll(table.entrySet());
+        for (int i = tables.length - 1; i >= 0; i--) {
+            if (tables[i] != null) {
+                set.addAll(tables[i].entrySet());
             }
         }
+        set.addAll(super.entrySet());
         return set;
     }
 
@@ -152,50 +135,46 @@
 
     private static class MultiUIDefaultsEnumerator implements Enumeration<Object>
     {
-        Enumeration[] enums;
-        int n = 0;
+        public static enum Type { KEYS, ELEMENTS };
+        private Iterator<Entry<Object, Object>> iterator;
+        private Type type;
 
-        MultiUIDefaultsEnumerator(Enumeration[] enums) {
-            this.enums = enums;
+        MultiUIDefaultsEnumerator(Type type, Set<Entry<Object, Object>> entries) {
+            this.type = type;
+            this.iterator = entries.iterator();
         }
 
         public boolean hasMoreElements() {
-            for(int i = n; i < enums.length; i++) {
-                Enumeration e = enums[i];
-                if ((e != null) && (e.hasMoreElements())) {
-                    return true;
-                }
-            }
-            return false;
+            return iterator.hasNext();
         }
 
         public Object nextElement() {
-            for(; n < enums.length; n++) {
-                Enumeration e = enums[n];
-                if ((e != null) && (e.hasMoreElements())) {
-                    return e.nextElement();
-                }
+            switch (type) {
+                case KEYS: return iterator.next().getKey();
+                case ELEMENTS: return iterator.next().getValue();
+                default: return null;
             }
-            return null;
         }
     }
 
     @Override
     public Object remove(Object key)
     {
-        Object value = super.remove(key);
-        if (value != null) {
-            return value;
+        Object value = null;
+        for (int i = tables.length - 1; i >= 0; i--) {
+            if (tables[i] != null) {
+                Object v = tables[i].remove(key);
+                if (v != null) {
+                    value = v;
+                }
+            }
+        }
+        Object v = super.remove(key);
+        if (v != null) {
+            value = v;
         }
 
-        for (UIDefaults table : tables) {
-            value = (table != null) ? table.remove(key) : null;
-            if (value != null) {
-                return value;
-            }
-        }
-
-        return null;
+        return value;
     }
 
     @Override
--- a/jdk/src/share/classes/javax/swing/plaf/nimbus/Defaults.template	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/javax/swing/plaf/nimbus/Defaults.template	Fri Feb 19 15:13:37 2010 -0800
@@ -90,6 +90,10 @@
      */
     private Map<String, Region> registeredRegions =
             new HashMap<String, Region>();
+
+    private Map<JComponent, Map<Region, SynthStyle>> overridesCache =
+            new WeakHashMap<JComponent, Map<Region, SynthStyle>>();
+    
     /**
      * Our fallback style to avoid NPEs if the proper style cannot be found in
      * this class. Not sure if relying on DefaultSynthStyle is the best choice.
@@ -251,7 +255,11 @@
         }
 
         //return the style, if found, or the default style if not found
-        return foundStyle == null ? defaultStyle : foundStyle.getStyle(comp);
+        return foundStyle == null ? defaultStyle : foundStyle.getStyle(comp, r);
+    }
+
+    public void clearOverridesCache(JComponent c) {
+        overridesCache.remove(c);
     }
 
     /*
@@ -457,15 +465,6 @@
          * Cached shared style.
          */
         private NimbusStyle style;
-        /**
-         * A weakly referenced hash map such that if the reference JComponent
-         * key is garbage collected then the entry is removed from the map.
-         * This cache exists so that when a JComponent has nimbus overrides
-         * in its client map, a unique style will be created and returned
-         * for that JComponent instance, always. In such a situation each
-         * JComponent instance must have its own instance of NimbusStyle.
-         */
-        private WeakHashMap<JComponent, WeakReference<NimbusStyle>> overridesCache;
 
         /**
          * Create a new LazyStyle.
@@ -513,17 +512,21 @@
          * Gets the style. Creates it if necessary.
          * @return the style
          */
-        SynthStyle getStyle(JComponent c) {
+        SynthStyle getStyle(JComponent c, Region r) {
             // if the component has overrides, it gets its own unique style
             // instead of the shared style.
             if (c.getClientProperty("Nimbus.Overrides") != null) {
-                if (overridesCache == null)
-                    overridesCache = new WeakHashMap<JComponent, WeakReference<NimbusStyle>>();
-                WeakReference<NimbusStyle> ref = overridesCache.get(c);
-                NimbusStyle s = ref == null ? null : ref.get();
+                Map<Region, SynthStyle> map = overridesCache.get(c);
+                SynthStyle s = null;
+                if (map == null) {
+                    map = new HashMap<Region, SynthStyle>();
+                    overridesCache.put(c, map);
+                } else {
+                    s = map.get(r);
+                }
                 if (s == null) {
                     s = new NimbusStyle(prefix, c);
-                    overridesCache.put(c, new WeakReference<NimbusStyle>(s));
+                    map.put(r, s);
                 }
                 return s;
             }
--- a/jdk/src/share/classes/javax/swing/plaf/nimbus/NimbusLookAndFeel.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/javax/swing/plaf/nimbus/NimbusLookAndFeel.java	Fri Feb 19 15:13:37 2010 -0800
@@ -280,11 +280,15 @@
     protected boolean shouldUpdateStyleOnEvent(PropertyChangeEvent ev) {
         String eName = ev.getPropertyName();
 
-        // Always update when overrides or size variant change
-        if ("Nimbus.Overrides" == eName ||
+        // These properties affect style cached inside NimbusDefaults (6860433)
+        if ("name" == eName ||
+            "ancestor" == eName ||
+            "Nimbus.Overrides" == eName ||
             "Nimbus.Overrides.InheritDefaults" == eName ||
             "JComponent.sizeVariant" == eName) {
 
+            JComponent c = (JComponent) ev.getSource();
+            defaults.clearOverridesCache(c);
             return true;
         }
 
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthButtonUI.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthButtonUI.java	Fri Feb 19 15:13:37 2010 -0800
@@ -237,7 +237,16 @@
     // ********************************
 
     /**
-     * @inheritDoc
+     * Notifies this UI delegate to repaint the specified component.
+     * This method paints the component background, then calls
+     * the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * <p>In general, this method does not need to be overridden by subclasses.
+     * All Look and Feel rendering code should reside in the {@code paint} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void update(Graphics g, JComponent c) {
@@ -250,7 +259,13 @@
     }
 
     /**
-     * @inheritDoc
+     * Paints the specified component according to the Look and Feel.
+     * <p>This method is not used by Synth Look and Feel.
+     * Painting is handled by the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void paint(Graphics g, JComponent c) {
@@ -264,7 +279,8 @@
      * Paints the specified component.
      *
      * @param context context for the component being painted
-     * @param g {@code Graphics} object used for painting
+     * @param g the {@code Graphics} object used for painting
+     * @see #update(Graphics,JComponent)
      */
     protected void paint(SynthContext context, Graphics g) {
         AbstractButton b = (AbstractButton)context.getComponent();
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthColorChooserUI.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthColorChooserUI.java	Fri Feb 19 15:13:37 2010 -0800
@@ -137,7 +137,16 @@
     }
 
     /**
-     * @inheritDoc
+     * Notifies this UI delegate to repaint the specified component.
+     * This method paints the component background, then calls
+     * the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * <p>In general, this method does not need to be overridden by subclasses.
+     * All Look and Feel rendering code should reside in the {@code paint} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void update(Graphics g, JComponent c) {
@@ -151,7 +160,13 @@
     }
 
     /**
-     * @inheritDoc
+     * Paints the specified component according to the Look and Feel.
+     * <p>This method is not used by Synth Look and Feel.
+     * Painting is handled by the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void paint(Graphics g, JComponent c) {
@@ -166,7 +181,8 @@
      * This implementation does not perform any actions.
      *
      * @param context context for the component being painted
-     * @param g {@code Graphics} object used for painting
+     * @param g the {@code Graphics} object used for painting
+     * @see #update(Graphics,JComponent)
      */
     protected void paint(SynthContext context, Graphics g) {
     }
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthComboBoxUI.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthComboBoxUI.java	Fri Feb 19 15:13:37 2010 -0800
@@ -305,7 +305,16 @@
     // begin ComponentUI Implementation
 
     /**
-     * @inheritDoc
+     * Notifies this UI delegate to repaint the specified component.
+     * This method paints the component background, then calls
+     * the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * <p>In general, this method does not need to be overridden by subclasses.
+     * All Look and Feel rendering code should reside in the {@code paint} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void update(Graphics g, JComponent c) {
@@ -319,7 +328,13 @@
     }
 
     /**
-     * @inheritDoc
+     * Paints the specified component according to the Look and Feel.
+     * <p>This method is not used by Synth Look and Feel.
+     * Painting is handled by the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void paint(Graphics g, JComponent c) {
@@ -333,7 +348,8 @@
      * Paints the specified component.
      *
      * @param context context for the component being painted
-     * @param g {@code Graphics} object used for painting
+     * @param g the {@code Graphics} object used for painting
+     * @see #update(Graphics,JComponent)
      */
     protected void paint(SynthContext context, Graphics g) {
         hasFocus = comboBox.hasFocus();
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthDesktopIconUI.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthDesktopIconUI.java	Fri Feb 19 15:13:37 2010 -0800
@@ -152,7 +152,16 @@
     }
 
     /**
-     * @inheritDoc
+     * Notifies this UI delegate to repaint the specified component.
+     * This method paints the component background, then calls
+     * the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * <p>In general, this method does not need to be overridden by subclasses.
+     * All Look and Feel rendering code should reside in the {@code paint} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void update(Graphics g, JComponent c) {
@@ -166,7 +175,13 @@
     }
 
     /**
-     * @inheritDoc
+     * Paints the specified component according to the Look and Feel.
+     * <p>This method is not used by Synth Look and Feel.
+     * Painting is handled by the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void paint(Graphics g, JComponent c) {
@@ -180,7 +195,8 @@
      * Paints the specified component. This implementation does nothing.
      *
      * @param context context for the component being painted
-     * @param g {@code Graphics} object used for painting
+     * @param g the {@code Graphics} object used for painting
+     * @see #update(Graphics,JComponent)
      */
     protected void paint(SynthContext context, Graphics g) {
     }
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthDesktopPaneUI.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthDesktopPaneUI.java	Fri Feb 19 15:13:37 2010 -0800
@@ -439,7 +439,16 @@
     }
 
     /**
-     * @inheritDoc
+     * Notifies this UI delegate to repaint the specified component.
+     * This method paints the component background, then calls
+     * the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * <p>In general, this method does not need to be overridden by subclasses.
+     * All Look and Feel rendering code should reside in the {@code paint} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void update(Graphics g, JComponent c) {
@@ -453,7 +462,13 @@
     }
 
     /**
-     * @inheritDoc
+     * Paints the specified component according to the Look and Feel.
+     * <p>This method is not used by Synth Look and Feel.
+     * Painting is handled by the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void paint(Graphics g, JComponent c) {
@@ -467,7 +482,8 @@
      * Paints the specified component. This implementation does nothing.
      *
      * @param context context for the component being painted
-     * @param g {@code Graphics} object used for painting
+     * @param g the {@code Graphics} object used for painting
+     * @see #update(Graphics,JComponent)
      */
     protected void paint(SynthContext context, Graphics g) {
     }
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthEditorPaneUI.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthEditorPaneUI.java	Fri Feb 19 15:13:37 2010 -0800
@@ -148,7 +148,16 @@
     }
 
     /**
-     * @inheritDoc
+     * Notifies this UI delegate to repaint the specified component.
+     * This method paints the component background, then calls
+     * the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * <p>In general, this method does not need to be overridden by subclasses.
+     * All Look and Feel rendering code should reside in the {@code paint} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void update(Graphics g, JComponent c) {
@@ -164,7 +173,8 @@
      * Paints the specified component.
      *
      * @param context context for the component being painted
-     * @param g {@code Graphics} object used for painting
+     * @param g the {@code Graphics} object used for painting
+     * @see #update(Graphics,JComponent)
      */
     protected void paint(SynthContext context, Graphics g) {
         super.paint(g, getComponent());
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthInternalFrameUI.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthInternalFrameUI.java	Fri Feb 19 15:13:37 2010 -0800
@@ -194,7 +194,16 @@
     }
 
     /**
-     * @inheritDoc
+     * Notifies this UI delegate to repaint the specified component.
+     * This method paints the component background, then calls
+     * the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * <p>In general, this method does not need to be overridden by subclasses.
+     * All Look and Feel rendering code should reside in the {@code paint} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void update(Graphics g, JComponent c) {
@@ -208,7 +217,13 @@
     }
 
     /**
-     * @inheritDoc
+     * Paints the specified component according to the Look and Feel.
+     * <p>This method is not used by Synth Look and Feel.
+     * Painting is handled by the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void paint(Graphics g, JComponent c) {
@@ -222,7 +237,8 @@
      * Paints the specified component. This implementation does nothing.
      *
      * @param context context for the component being painted
-     * @param g {@code Graphics} object used for painting
+     * @param g the {@code Graphics} object used for painting
+     * @see #update(Graphics,JComponent)
      */
     protected void paint(SynthContext context, Graphics g) {
     }
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthLabelUI.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthLabelUI.java	Fri Feb 19 15:13:37 2010 -0800
@@ -156,12 +156,16 @@
     }
 
     /**
-     * Notifies this UI delegate that it's time to paint the specified
-     * component.  This method is invoked by <code>JComponent</code>
-     * when the specified component is being painted.
-     */
-    /**
-     * @inheritDoc
+     * Notifies this UI delegate to repaint the specified component.
+     * This method paints the component background, then calls
+     * the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * <p>In general, this method does not need to be overridden by subclasses.
+     * All Look and Feel rendering code should reside in the {@code paint} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void update(Graphics g, JComponent c) {
@@ -175,7 +179,13 @@
     }
 
     /**
-     * @inheritDoc
+     * Paints the specified component according to the Look and Feel.
+     * <p>This method is not used by Synth Look and Feel.
+     * Painting is handled by the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void paint(Graphics g, JComponent c) {
@@ -189,7 +199,8 @@
      * Paints the specified component.
      *
      * @param context context for the component being painted
-     * @param g {@code Graphics} object used for painting
+     * @param g the {@code Graphics} object used for painting
+     * @see #update(Graphics,JComponent)
      */
     protected void paint(SynthContext context, Graphics g) {
         JLabel label = (JLabel)context.getComponent();
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthListUI.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthListUI.java	Fri Feb 19 15:13:37 2010 -0800
@@ -57,7 +57,16 @@
     }
 
     /**
-     * @inheritDoc
+     * Notifies this UI delegate to repaint the specified component.
+     * This method paints the component background, then calls
+     * the {@link #paint} method.
+     *
+     * <p>In general, this method does not need to be overridden by subclasses.
+     * All Look and Feel rendering code should reside in the {@code paint} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint
      */
     @Override
     public void update(Graphics g, JComponent c) {
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthMenuBarUI.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthMenuBarUI.java	Fri Feb 19 15:13:37 2010 -0800
@@ -125,7 +125,16 @@
     }
 
     /**
-     * @inheritDoc
+     * Notifies this UI delegate to repaint the specified component.
+     * This method paints the component background, then calls
+     * the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * <p>In general, this method does not need to be overridden by subclasses.
+     * All Look and Feel rendering code should reside in the {@code paint} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void update(Graphics g, JComponent c) {
@@ -139,7 +148,13 @@
     }
 
     /**
-     * @inheritDoc
+     * Paints the specified component according to the Look and Feel.
+     * <p>This method is not used by Synth Look and Feel.
+     * Painting is handled by the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void paint(Graphics g, JComponent c) {
@@ -153,7 +168,8 @@
      * Paints the specified component. This implementation does nothing.
      *
      * @param context context for the component being painted
-     * @param g {@code Graphics} object used for painting
+     * @param g the {@code Graphics} object used for painting
+     * @see #update(Graphics,JComponent)
      */
     protected void paint(SynthContext context, Graphics g) {
     }
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthMenuItemUI.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthMenuItemUI.java	Fri Feb 19 15:13:37 2010 -0800
@@ -227,7 +227,16 @@
 
 
     /**
-     * @inheritDoc
+     * Notifies this UI delegate to repaint the specified component.
+     * This method paints the component background, then calls
+     * the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * <p>In general, this method does not need to be overridden by subclasses.
+     * All Look and Feel rendering code should reside in the {@code paint} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void update(Graphics g, JComponent c) {
@@ -240,7 +249,13 @@
     }
 
     /**
-     * @inheritDoc
+     * Paints the specified component according to the Look and Feel.
+     * <p>This method is not used by Synth Look and Feel.
+     * Painting is handled by the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void paint(Graphics g, JComponent c) {
@@ -254,7 +269,8 @@
      * Paints the specified component.
      *
      * @param context context for the component being painted
-     * @param g {@code Graphics} object used for painting
+     * @param g the {@code Graphics} object used for painting
+     * @see #update(Graphics,JComponent)
      */
     protected void paint(SynthContext context, Graphics g) {
         SynthContext accContext = getContext(menuItem,
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthMenuUI.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthMenuUI.java	Fri Feb 19 15:13:37 2010 -0800
@@ -227,7 +227,16 @@
     }
 
     /**
-     * @inheritDoc
+     * Notifies this UI delegate to repaint the specified component.
+     * This method paints the component background, then calls
+     * the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * <p>In general, this method does not need to be overridden by subclasses.
+     * All Look and Feel rendering code should reside in the {@code paint} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void update(Graphics g, JComponent c) {
@@ -241,7 +250,13 @@
     }
 
     /**
-     * @inheritDoc
+     * Paints the specified component according to the Look and Feel.
+     * <p>This method is not used by Synth Look and Feel.
+     * Painting is handled by the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void paint(Graphics g, JComponent c) {
@@ -255,7 +270,8 @@
      * Paints the specified component. This implementation does nothing.
      *
      * @param context context for the component being painted
-     * @param g {@code Graphics} object used for painting
+     * @param g the {@code Graphics} object used for painting
+     * @see #update(Graphics,JComponent)
      */
     protected void paint(SynthContext context, Graphics g) {
         SynthContext accContext = getContext(menuItem,
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthOptionPaneUI.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthOptionPaneUI.java	Fri Feb 19 15:13:37 2010 -0800
@@ -149,7 +149,16 @@
     }
 
     /**
-     * @inheritDoc
+     * Notifies this UI delegate to repaint the specified component.
+     * This method paints the component background, then calls
+     * the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * <p>In general, this method does not need to be overridden by subclasses.
+     * All Look and Feel rendering code should reside in the {@code paint} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void update(Graphics g, JComponent c) {
@@ -163,7 +172,13 @@
     }
 
     /**
-     * @inheritDoc
+     * Paints the specified component according to the Look and Feel.
+     * <p>This method is not used by Synth Look and Feel.
+     * Painting is handled by the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void paint(Graphics g, JComponent c) {
@@ -177,7 +192,8 @@
      * Paints the specified component. This implementation does nothing.
      *
      * @param context context for the component being painted
-     * @param g {@code Graphics} object used for painting
+     * @param g the {@code Graphics} object used for painting
+     * @see #update(Graphics,JComponent)
      */
     protected void paint(SynthContext context, Graphics g) {
     }
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthPanelUI.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthPanelUI.java	Fri Feb 19 15:13:37 2010 -0800
@@ -136,7 +136,16 @@
     }
 
     /**
-     * @inheritDoc
+     * Notifies this UI delegate to repaint the specified component.
+     * This method paints the component background, then calls
+     * the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * <p>In general, this method does not need to be overridden by subclasses.
+     * All Look and Feel rendering code should reside in the {@code paint} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void update(Graphics g, JComponent c) {
@@ -150,7 +159,13 @@
     }
 
     /**
-     * @inheritDoc
+     * Paints the specified component according to the Look and Feel.
+     * <p>This method is not used by Synth Look and Feel.
+     * Painting is handled by the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void paint(Graphics g, JComponent c) {
@@ -164,7 +179,8 @@
      * Paints the specified component. This implementation does nothing.
      *
      * @param context context for the component being painted
-     * @param g {@code Graphics} object used for painting
+     * @param g the {@code Graphics} object used for painting
+     * @see #update(Graphics,JComponent)
      */
     protected void paint(SynthContext context, Graphics g) {
         // do actual painting
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthPopupMenuUI.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthPopupMenuUI.java	Fri Feb 19 15:13:37 2010 -0800
@@ -132,7 +132,16 @@
     }
 
     /**
-     * @inheritDoc
+     * Notifies this UI delegate to repaint the specified component.
+     * This method paints the component background, then calls
+     * the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * <p>In general, this method does not need to be overridden by subclasses.
+     * All Look and Feel rendering code should reside in the {@code paint} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void update(Graphics g, JComponent c) {
@@ -146,7 +155,13 @@
     }
 
     /**
-     * @inheritDoc
+     * Paints the specified component according to the Look and Feel.
+     * <p>This method is not used by Synth Look and Feel.
+     * Painting is handled by the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void paint(Graphics g, JComponent c) {
@@ -160,7 +175,8 @@
      * Paints the specified component. This implementation does nothing.
      *
      * @param context context for the component being painted
-     * @param g {@code Graphics} object used for painting
+     * @param g the {@code Graphics} object used for painting
+     * @see #update(Graphics,JComponent)
      */
     protected void paint(SynthContext context, Graphics g) {
     }
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthProgressBarUI.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthProgressBarUI.java	Fri Feb 19 15:13:37 2010 -0800
@@ -193,7 +193,16 @@
     }
 
     /**
-     * @inheritDoc
+     * Notifies this UI delegate to repaint the specified component.
+     * This method paints the component background, then calls
+     * the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * <p>In general, this method does not need to be overridden by subclasses.
+     * All Look and Feel rendering code should reside in the {@code paint} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void update(Graphics g, JComponent c) {
@@ -208,7 +217,13 @@
     }
 
     /**
-     * @inheritDoc
+     * Paints the specified component according to the Look and Feel.
+     * <p>This method is not used by Synth Look and Feel.
+     * Painting is handled by the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void paint(Graphics g, JComponent c) {
@@ -222,7 +237,8 @@
      * Paints the specified component.
      *
      * @param context context for the component being painted
-     * @param g {@code Graphics} object used for painting
+     * @param g the {@code Graphics} object used for painting
+     * @see #update(Graphics,JComponent)
      */
     protected void paint(SynthContext context, Graphics g) {
         JProgressBar pBar = (JProgressBar)context.getComponent();
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthRootPaneUI.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthRootPaneUI.java	Fri Feb 19 15:13:37 2010 -0800
@@ -102,7 +102,16 @@
     }
 
     /**
-     * @inheritDoc
+     * Notifies this UI delegate to repaint the specified component.
+     * This method paints the component background, then calls
+     * the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * <p>In general, this method does not need to be overridden by subclasses.
+     * All Look and Feel rendering code should reside in the {@code paint} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void update(Graphics g, JComponent c) {
@@ -116,7 +125,13 @@
     }
 
     /**
-     * @inheritDoc
+     * Paints the specified component according to the Look and Feel.
+     * <p>This method is not used by Synth Look and Feel.
+     * Painting is handled by the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void paint(Graphics g, JComponent c) {
@@ -130,7 +145,8 @@
      * Paints the specified component. This implementation does nothing.
      *
      * @param context context for the component being painted
-     * @param g {@code Graphics} object used for painting
+     * @param g the {@code Graphics} object used for painting
+     * @see #update(Graphics,JComponent)
      */
     protected void paint(SynthContext context, Graphics g) {
     }
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthScrollBarUI.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthScrollBarUI.java	Fri Feb 19 15:13:37 2010 -0800
@@ -222,7 +222,16 @@
     }
 
     /**
-     * @inheritDoc
+     * Notifies this UI delegate to repaint the specified component.
+     * This method paints the component background, then calls
+     * the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * <p>In general, this method does not need to be overridden by subclasses.
+     * All Look and Feel rendering code should reside in the {@code paint} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void update(Graphics g, JComponent c) {
@@ -237,7 +246,13 @@
     }
 
     /**
-     * @inheritDoc
+     * Paints the specified component according to the Look and Feel.
+     * <p>This method is not used by Synth Look and Feel.
+     * Painting is handled by the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void paint(Graphics g, JComponent c) {
@@ -251,7 +266,8 @@
      * Paints the specified component.
      *
      * @param context context for the component being painted
-     * @param g {@code Graphics} object used for painting
+     * @param g the {@code Graphics} object used for painting
+     * @see #update(Graphics,JComponent)
      */
     protected void paint(SynthContext context, Graphics g) {
         SynthContext subcontext = getContext(scrollbar,
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthScrollPaneUI.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthScrollPaneUI.java	Fri Feb 19 15:13:37 2010 -0800
@@ -64,7 +64,16 @@
     }
 
     /**
-     * @inheritDoc
+     * Notifies this UI delegate to repaint the specified component.
+     * This method paints the component background, then calls
+     * the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * <p>In general, this method does not need to be overridden by subclasses.
+     * All Look and Feel rendering code should reside in the {@code paint} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void update(Graphics g, JComponent c) {
@@ -78,7 +87,13 @@
     }
 
     /**
-     * @inheritDoc
+     * Paints the specified component according to the Look and Feel.
+     * <p>This method is not used by Synth Look and Feel.
+     * Painting is handled by the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void paint(Graphics g, JComponent c) {
@@ -92,7 +107,8 @@
      * Paints the specified component.
      *
      * @param context context for the component being painted
-     * @param g {@code Graphics} object used for painting
+     * @param g the {@code Graphics} object used for painting
+     * @see #update(Graphics,JComponent)
      */
     protected void paint(SynthContext context, Graphics g) {
         Border vpBorder = scrollpane.getViewportBorder();
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthSeparatorUI.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthSeparatorUI.java	Fri Feb 19 15:13:37 2010 -0800
@@ -135,7 +135,16 @@
     }
 
     /**
-     * @inheritDoc
+     * Notifies this UI delegate to repaint the specified component.
+     * This method paints the component background, then calls
+     * the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * <p>In general, this method does not need to be overridden by subclasses.
+     * All Look and Feel rendering code should reside in the {@code paint} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void update(Graphics g, JComponent c) {
@@ -151,7 +160,13 @@
     }
 
     /**
-     * @inheritDoc
+     * Paints the specified component according to the Look and Feel.
+     * <p>This method is not used by Synth Look and Feel.
+     * Painting is handled by the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void paint(Graphics g, JComponent c) {
@@ -165,7 +180,8 @@
      * Paints the specified component.
      *
      * @param context context for the component being painted
-     * @param g {@code Graphics} object used for painting
+     * @param g the {@code Graphics} object used for painting
+     * @see #update(Graphics,JComponent)
      */
     protected void paint(SynthContext context, Graphics g) {
         JSeparator separator = (JSeparator)context.getComponent();
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthSliderUI.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthSliderUI.java	Fri Feb 19 15:13:37 2010 -0800
@@ -788,7 +788,16 @@
     }
 
     /**
-     * @inheritDoc
+     * Notifies this UI delegate to repaint the specified component.
+     * This method paints the component background, then calls
+     * the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * <p>In general, this method does not need to be overridden by subclasses.
+     * All Look and Feel rendering code should reside in the {@code paint} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void update(Graphics g, JComponent c) {
@@ -802,7 +811,13 @@
     }
 
     /**
-     * @inheritDoc
+     * Paints the specified component according to the Look and Feel.
+     * <p>This method is not used by Synth Look and Feel.
+     * Painting is handled by the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void paint(Graphics g, JComponent c) {
@@ -815,7 +830,8 @@
      * Paints the specified component.
      *
      * @param context context for the component being painted
-     * @param g {@code Graphics} object used for painting
+     * @param g the {@code Graphics} object used for painting
+     * @see #update(Graphics,JComponent)
      */
     protected void paint(SynthContext context, Graphics g) {
         recalculateIfInsetsChanged();
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthSpinnerUI.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthSpinnerUI.java	Fri Feb 19 15:13:37 2010 -0800
@@ -283,7 +283,16 @@
     }
 
     /**
-     * @inheritDoc
+     * Notifies this UI delegate to repaint the specified component.
+     * This method paints the component background, then calls
+     * the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * <p>In general, this method does not need to be overridden by subclasses.
+     * All Look and Feel rendering code should reside in the {@code paint} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void update(Graphics g, JComponent c) {
@@ -298,7 +307,13 @@
 
 
     /**
-     * @inheritDoc
+     * Paints the specified component according to the Look and Feel.
+     * <p>This method is not used by Synth Look and Feel.
+     * Painting is handled by the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void paint(Graphics g, JComponent c) {
@@ -312,7 +327,8 @@
      * Paints the specified component. This implementation does nothing.
      *
      * @param context context for the component being painted
-     * @param g {@code Graphics} object used for painting
+     * @param g the {@code Graphics} object used for painting
+     * @see #update(Graphics,JComponent)
      */
     protected void paint(SynthContext context, Graphics g) {
     }
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthSplitPaneUI.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthSplitPaneUI.java	Fri Feb 19 15:13:37 2010 -0800
@@ -269,7 +269,16 @@
     }
 
     /**
-     * @inheritDoc
+     * Notifies this UI delegate to repaint the specified component.
+     * This method paints the component background, then calls
+     * the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * <p>In general, this method does not need to be overridden by subclasses.
+     * All Look and Feel rendering code should reside in the {@code paint} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void update(Graphics g, JComponent c) {
@@ -283,7 +292,13 @@
     }
 
     /**
-     * @inheritDoc
+     * Paints the specified component according to the Look and Feel.
+     * <p>This method is not used by Synth Look and Feel.
+     * Painting is handled by the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void paint(Graphics g, JComponent c) {
@@ -297,7 +312,8 @@
      * Paints the specified component. This implementation does nothing.
      *
      * @param context context for the component being painted
-     * @param g {@code Graphics} object used for painting
+     * @param g the {@code Graphics} object used for painting
+     * @see #update(Graphics,JComponent)
      */
     protected void paint(SynthContext context, Graphics g) {
         // This is done to update package private variables in
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthTabbedPaneUI.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthTabbedPaneUI.java	Fri Feb 19 15:13:37 2010 -0800
@@ -92,8 +92,8 @@
     private SynthStyle tabAreaStyle;
     private SynthStyle tabContentStyle;
 
-    private Rectangle textRect;
-    private Rectangle iconRect;
+    private Rectangle textRect = new Rectangle();
+    private Rectangle iconRect = new Rectangle();
 
     private Rectangle tabAreaBounds = new Rectangle();
 
@@ -115,11 +115,6 @@
         return new SynthTabbedPaneUI();
     }
 
-    private SynthTabbedPaneUI() {
-        textRect = new Rectangle();
-        iconRect = new Rectangle();
-    }
-
     private boolean scrollableTabLayoutEnabled() {
         return (tabPane.getTabLayoutPolicy() == JTabbedPane.SCROLL_TAB_LAYOUT);
     }
@@ -362,7 +357,16 @@
     }
 
     /**
-     * @inheritDoc
+     * Notifies this UI delegate to repaint the specified component.
+     * This method paints the component background, then calls
+     * the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * <p>In general, this method does not need to be overridden by subclasses.
+     * All Look and Feel rendering code should reside in the {@code paint} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void update(Graphics g, JComponent c) {
@@ -409,7 +413,13 @@
     }
 
     /**
-     * @inheritDoc
+     * Paints the specified component according to the Look and Feel.
+     * <p>This method is not used by Synth Look and Feel.
+     * Painting is handled by the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void paint(Graphics g, JComponent c) {
@@ -423,7 +433,8 @@
      * Paints the specified component.
      *
      * @param context context for the component being painted
-     * @param g {@code Graphics} object used for painting
+     * @param g the {@code Graphics} object used for painting
+     * @see #update(Graphics,JComponent)
      */
     protected void paint(SynthContext context, Graphics g) {
         int selectedIndex = tabPane.getSelectedIndex();
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthTableHeaderUI.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthTableHeaderUI.java	Fri Feb 19 15:13:37 2010 -0800
@@ -123,7 +123,16 @@
     }
 
     /**
-     * @inheritDoc
+     * Notifies this UI delegate to repaint the specified component.
+     * This method paints the component background, then calls
+     * the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * <p>In general, this method does not need to be overridden by subclasses.
+     * All Look and Feel rendering code should reside in the {@code paint} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void update(Graphics g, JComponent c) {
@@ -137,7 +146,13 @@
     }
 
     /**
-     * @inheritDoc
+     * Paints the specified component according to the Look and Feel.
+     * <p>This method is not used by Synth Look and Feel.
+     * Painting is handled by the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void paint(Graphics g, JComponent c) {
@@ -151,7 +166,8 @@
      * Paints the specified component.
      *
      * @param context context for the component being painted
-     * @param g {@code Graphics} object used for painting
+     * @param g the {@code Graphics} object used for painting
+     * @see #update(Graphics,JComponent)
      */
     protected void paint(SynthContext context, Graphics g) {
         super.paint(g, context.getComponent());
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthTableUI.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthTableUI.java	Fri Feb 19 15:13:37 2010 -0800
@@ -256,7 +256,16 @@
 //
 
     /**
-     * @inheritDoc
+     * Notifies this UI delegate to repaint the specified component.
+     * This method paints the component background, then calls
+     * the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * <p>In general, this method does not need to be overridden by subclasses.
+     * All Look and Feel rendering code should reside in the {@code paint} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void update(Graphics g, JComponent c) {
@@ -279,7 +288,13 @@
     }
 
     /**
-     * @inheritDoc
+     * Paints the specified component according to the Look and Feel.
+     * <p>This method is not used by Synth Look and Feel.
+     * Painting is handled by the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void paint(Graphics g, JComponent c) {
@@ -293,7 +308,8 @@
      * Paints the specified component.
      *
      * @param context context for the component being painted
-     * @param g {@code Graphics} object used for painting
+     * @param g the {@code Graphics} object used for painting
+     * @see #update(Graphics,JComponent)
      */
     protected void paint(SynthContext context, Graphics g) {
         Rectangle clip = g.getClipBounds();
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthTextAreaUI.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthTextAreaUI.java	Fri Feb 19 15:13:37 2010 -0800
@@ -123,7 +123,16 @@
     }
 
     /**
-     * @inheritDoc
+     * Notifies this UI delegate to repaint the specified component.
+     * This method paints the component background, then calls
+     * the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * <p>In general, this method does not need to be overridden by subclasses.
+     * All Look and Feel rendering code should reside in the {@code paint} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void update(Graphics g, JComponent c) {
@@ -140,7 +149,8 @@
      * Paints the specified component.
      *
      * @param context context for the component being painted
-     * @param g {@code Graphics} object used for painting
+     * @param g the {@code Graphics} object used for painting
+     * @see #update(Graphics,JComponent)
      */
     protected void paint(SynthContext context, Graphics g) {
         super.paint(g, getComponent());
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthTextFieldUI.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthTextFieldUI.java	Fri Feb 19 15:13:37 2010 -0800
@@ -161,7 +161,16 @@
     }
 
     /**
-     * @inheritDoc
+     * Notifies this UI delegate to repaint the specified component.
+     * This method paints the component background, then calls
+     * the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * <p>In general, this method does not need to be overridden by subclasses.
+     * All Look and Feel rendering code should reside in the {@code paint} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void update(Graphics g, JComponent c) {
@@ -182,7 +191,8 @@
      * model to potentially be updated asynchronously.
      *
      * @param context context for the component being painted
-     * @param g {@code Graphics} object used for painting
+     * @param g the {@code Graphics} object used for painting
+     * @see #update(Graphics,JComponent)
      */
     protected void paint(SynthContext context, Graphics g) {
         super.paint(g, getComponent());
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthToolBarUI.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthToolBarUI.java	Fri Feb 19 15:13:37 2010 -0800
@@ -198,7 +198,16 @@
     }
 
     /**
-     * @inheritDoc
+     * Notifies this UI delegate to repaint the specified component.
+     * This method paints the component background, then calls
+     * the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * <p>In general, this method does not need to be overridden by subclasses.
+     * All Look and Feel rendering code should reside in the {@code paint} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void update(Graphics g, JComponent c) {
@@ -213,7 +222,13 @@
     }
 
     /**
-     * @inheritDoc
+     * Paints the specified component according to the Look and Feel.
+     * <p>This method is not used by Synth Look and Feel.
+     * Painting is handled by the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void paint(Graphics g, JComponent c) {
@@ -258,7 +273,8 @@
      * Paints the toolbar.
      *
      * @param context context for the component being painted
-     * @param g {@code Graphics} object used for painting
+     * @param g the {@code Graphics} object used for painting
+     * @see #update(Graphics,JComponent)
      */
     protected void paint(SynthContext context, Graphics g) {
         if (handleIcon != null && toolBar.isFloatable()) {
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthToolTipUI.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthToolTipUI.java	Fri Feb 19 15:13:37 2010 -0800
@@ -121,7 +121,16 @@
     }
 
     /**
-     * @inheritDoc
+     * Notifies this UI delegate to repaint the specified component.
+     * This method paints the component background, then calls
+     * the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * <p>In general, this method does not need to be overridden by subclasses.
+     * All Look and Feel rendering code should reside in the {@code paint} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void update(Graphics g, JComponent c) {
@@ -144,7 +153,13 @@
     }
 
     /**
-     * @inheritDoc
+     * Paints the specified component according to the Look and Feel.
+     * <p>This method is not used by Synth Look and Feel.
+     * Painting is handled by the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void paint(Graphics g, JComponent c) {
@@ -158,7 +173,8 @@
      * Paints the specified component.
      *
      * @param context context for the component being painted
-     * @param g {@code Graphics} object used for painting
+     * @param g the {@code Graphics} object used for painting
+     * @see #update(Graphics,JComponent)
      */
     protected void paint(SynthContext context, Graphics g) {
         JToolTip tip = (JToolTip)context.getComponent();
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthTreeUI.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthTreeUI.java	Fri Feb 19 15:13:37 2010 -0800
@@ -250,7 +250,16 @@
     }
 
     /**
-     * @inheritDoc
+     * Notifies this UI delegate to repaint the specified component.
+     * This method paints the component background, then calls
+     * the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * <p>In general, this method does not need to be overridden by subclasses.
+     * All Look and Feel rendering code should reside in the {@code paint} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void update(Graphics g, JComponent c) {
@@ -273,7 +282,13 @@
     }
 
     /**
-     * @inheritDoc
+     * Paints the specified component according to the Look and Feel.
+     * <p>This method is not used by Synth Look and Feel.
+     * Painting is handled by the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void paint(Graphics g, JComponent c) {
@@ -287,7 +302,8 @@
      * Paints the specified component.
      *
      * @param context context for the component being painted
-     * @param g {@code Graphics} object used for painting
+     * @param g the {@code Graphics} object used for painting
+     * @see #update(Graphics,JComponent)
      */
     protected void paint(SynthContext context, Graphics g) {
         paintContext = context;
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthViewportUI.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthViewportUI.java	Fri Feb 19 15:13:37 2010 -0800
@@ -150,7 +150,16 @@
     }
 
     /**
-     * @inheritDoc
+     * Notifies this UI delegate to repaint the specified component.
+     * This method paints the component background, then calls
+     * the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * <p>In general, this method does not need to be overridden by subclasses.
+     * All Look and Feel rendering code should reside in the {@code paint} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void update(Graphics g, JComponent c) {
@@ -174,7 +183,13 @@
     }
 
     /**
-     * @inheritDoc
+     * Paints the specified component according to the Look and Feel.
+     * <p>This method is not used by Synth Look and Feel.
+     * Painting is handled by the {@link #paint(SynthContext,Graphics)} method.
+     *
+     * @param g the {@code Graphics} object used for painting
+     * @param c the component being painted
+     * @see #paint(SynthContext,Graphics)
      */
     @Override
     public void paint(Graphics g, JComponent c) {
@@ -188,7 +203,8 @@
      * Paints the specified component. This implementation does nothing.
      *
      * @param context context for the component being painted
-     * @param g {@code Graphics} object used for painting
+     * @param g the {@code Graphics} object used for painting
+     * @see #update(Graphics,JComponent)
      */
     protected void paint(SynthContext context, Graphics g) {
     }
--- a/jdk/src/share/classes/sun/font/FontManagerFactory.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/sun/font/FontManagerFactory.java	Fri Feb 19 15:13:37 2010 -0800
@@ -68,38 +68,34 @@
             return instance;
         }
 
-        String fmClassName = AccessController.doPrivileged(
-                new GetPropertyAction("sun.font.fontmanager",
-                                      DEFAULT_CLASS));
-
-        try {
-            @SuppressWarnings("unchecked")
-            ClassLoader cl = (ClassLoader)
-                AccessController.doPrivileged(new PrivilegedAction() {
-                    public Object run() {
-                        return ClassLoader.getSystemClassLoader();
-                    }
-                });
+        AccessController.doPrivileged(new PrivilegedAction() {
 
-            @SuppressWarnings("unchecked")
-            Class fmClass = Class.forName(fmClassName, true, cl);
-            instance = (FontManager) fmClass.newInstance();
-
-        } catch (ClassNotFoundException ex) {
-            InternalError err = new InternalError();
-            err.initCause(ex);
-            throw err;
+            public Object run() {
+                try {
+                    String fmClassName =
+                            System.getProperty("sun.font.fontmanager",
+                                               DEFAULT_CLASS);
+                    ClassLoader cl = ClassLoader.getSystemClassLoader();
+                    Class fmClass = Class.forName(fmClassName, true, cl);
+                    instance = (FontManager) fmClass.newInstance();
+                } catch (ClassNotFoundException ex) {
+                    InternalError err = new InternalError();
+                    err.initCause(ex);
+                    throw err;
 
-        } catch (InstantiationException ex) {
-            InternalError err = new InternalError();
-            err.initCause(ex);
-            throw err;
+                } catch (InstantiationException ex) {
+                    InternalError err = new InternalError();
+                    err.initCause(ex);
+                    throw err;
 
-        } catch (IllegalAccessException ex) {
-            InternalError err = new InternalError();
-            err.initCause(ex);
-            throw err;
-        }
+                } catch (IllegalAccessException ex) {
+                    InternalError err = new InternalError();
+                    err.initCause(ex);
+                    throw err;
+                }
+                return null;
+            }
+        });
 
         return instance;
     }
--- a/jdk/src/share/classes/sun/font/FontUtilities.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/sun/font/FontUtilities.java	Fri Feb 19 15:13:37 2010 -0800
@@ -32,9 +32,9 @@
 import java.io.InputStreamReader;
 import java.security.AccessController;
 
+import java.security.PrivilegedAction;
 import javax.swing.plaf.FontUIResource;
 
-import sun.security.action.GetPropertyAction;
 import sun.util.logging.PlatformLogger;
 
 /**
@@ -42,79 +42,82 @@
  */
 public final class FontUtilities {
 
-    public static final boolean isSolaris;
+    public static boolean isSolaris;
 
-    public static final boolean isLinux;
+    public static boolean isLinux;
 
-    public static final boolean isSolaris8;
+    public static boolean isSolaris8;
 
-    public static final boolean isSolaris9;
+    public static boolean isSolaris9;
 
-    public static final boolean isOpenSolaris;
+    public static boolean isOpenSolaris;
 
-    public static final boolean useT2K;
+    public static boolean useT2K;
 
-    public static final boolean isWindows;
+    public static boolean isWindows;
 
-    public static final boolean isOpenJDK;
+    public static boolean isOpenJDK;
 
     static final String LUCIDA_FILE_NAME = "LucidaSansRegular.ttf";
 
     // This static initializer block figures out the OS constants.
     static {
 
-        String osName = AccessController.doPrivileged(
-                                new GetPropertyAction("os.name", "unknownOS"));
-        isSolaris = osName.startsWith("SunOS");
+        AccessController.doPrivileged(new PrivilegedAction () {
+            public Object run() {
+                String osName = System.getProperty("os.name", "unknownOS");
+                isSolaris = osName.startsWith("SunOS");
 
-        isLinux = osName.startsWith("Linux");
+                isLinux = osName.startsWith("Linux");
 
-        String t2kStr = AccessController.doPrivileged(
-                              new GetPropertyAction("sun.java2d.font.scaler"));
-        if (t2kStr != null) {
-            useT2K = "t2k".equals(t2kStr);
-        } else {
-            useT2K = false;
-        }
-        if (isSolaris) {
-            String version = AccessController.doPrivileged(
-                                   new GetPropertyAction("os.version", "0.0"));
-            isSolaris8 = version.startsWith("5.8");
-            isSolaris9 = version.startsWith("5.9");
-            float ver = Float.parseFloat(version);
-            if (ver > 5.10f) {
-                File f = new File("/etc/release");
-                String line = null;
-                try {
-                    FileInputStream fis = new FileInputStream(f);
-                    InputStreamReader isr = new InputStreamReader(
+                String t2kStr = System.getProperty("sun.java2d.font.scaler");
+                if (t2kStr != null) {
+                    useT2K = "t2k".equals(t2kStr);
+                } else {
+                    useT2K = false;
+                }
+                if (isSolaris) {
+                    String version = System.getProperty("os.version", "0.0");
+                    isSolaris8 = version.startsWith("5.8");
+                    isSolaris9 = version.startsWith("5.9");
+                    float ver = Float.parseFloat(version);
+                    if (ver > 5.10f) {
+                        File f = new File("/etc/release");
+                        String line = null;
+                        try {
+                            FileInputStream fis = new FileInputStream(f);
+                            InputStreamReader isr = new InputStreamReader(
                                                             fis, "ISO-8859-1");
-                    BufferedReader br = new BufferedReader(isr);
-                    line = br.readLine();
-                    fis.close();
-                } catch (Exception ex) {
-                    // Nothing to do here.
-                }
-                if (line != null && line.indexOf("OpenSolaris") >= 0) {
-                    isOpenSolaris = true;
+                            BufferedReader br = new BufferedReader(isr);
+                            line = br.readLine();
+                            fis.close();
+                        } catch (Exception ex) {
+                            // Nothing to do here.
+                        }
+                        if (line != null && line.indexOf("OpenSolaris") >= 0) {
+                            isOpenSolaris = true;
+                        } else {
+                            isOpenSolaris = false;
+                        }
+                    } else {
+                        isOpenSolaris = false;
+                    }
                 } else {
+                    isSolaris8 = false;
+                    isSolaris9 = false;
                     isOpenSolaris = false;
                 }
-            } else {
-                isOpenSolaris= false;
+                isWindows = osName.startsWith("Windows");
+                String jreLibDirName = System.getProperty("java.home", "")
+                                                      + File.separator + "lib";
+                String jreFontDirName =
+                        jreLibDirName + File.separator + "fonts";
+                File lucidaFile = new File(jreFontDirName + File.separator
+                                           + LUCIDA_FILE_NAME);
+                isOpenJDK = !lucidaFile.exists();
+                return null;
             }
-        } else {
-            isSolaris8 = false;
-            isSolaris9 = false;
-            isOpenSolaris = false;
-        }
-        isWindows = osName.startsWith("Windows");
-        String jreLibDirName = AccessController.doPrivileged(
-               new GetPropertyAction("java.home","")) + File.separator + "lib";
-        String jreFontDirName = jreLibDirName + File.separator + "fonts";
-        File lucidaFile =
-                new File(jreFontDirName + File.separator + LUCIDA_FILE_NAME);
-        isOpenJDK = !lucidaFile.exists();
+        });
     }
 
     /**
--- a/jdk/src/share/classes/sun/io/ByteToCharUTF8.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/sun/io/ByteToCharUTF8.java	Fri Feb 19 15:13:37 2010 -0800
@@ -113,7 +113,7 @@
                         savedSize = 1;
                     } else {
                         savedSize = 2;
-                        savedBytes[1] = (byte)input[byteOff++];
+                        savedBytes[1] = input[byteOff++];
                     }
                     break;
                 }
@@ -135,11 +135,11 @@
                         savedSize = 1;
                     } else if (byteOff + 1 >= inEnd) {
                         savedSize = 2;
-                        savedBytes[1] = (byte)input[byteOff++];
+                        savedBytes[1] = input[byteOff++];
                     } else {
                         savedSize = 3;
-                        savedBytes[1] = (byte)input[byteOff++];
-                        savedBytes[2] = (byte)input[byteOff++];
+                        savedBytes[1] = input[byteOff++];
+                        savedBytes[2] = input[byteOff++];
                     }
                     break;
                 }
@@ -154,10 +154,10 @@
                     throw new MalformedInputException();
                 }
                 // this byte sequence is UTF16 character
-                int ucs4 = (int)(0x07 & byte1) << 18 |
-                           (int)(0x3f & byte2) << 12 |
-                           (int)(0x3f & byte3) <<  6 |
-                           (int)(0x3f & byte4);
+                int ucs4 = (0x07 & byte1) << 18 |
+                           (0x3f & byte2) << 12 |
+                           (0x3f & byte3) <<  6 |
+                           (0x3f & byte4);
                 outputChar[0] = (char)((ucs4 - 0x10000) / 0x400 + 0xd800);
                 outputChar[1] = (char)((ucs4 - 0x10000) % 0x400 + 0xdc00);
                 outputSize = 2;
--- a/jdk/src/share/classes/sun/io/CharToByteUnicode.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/sun/io/CharToByteUnicode.java	Fri Feb 19 15:13:37 2010 -0800
@@ -46,7 +46,7 @@
     protected int byteOrder = UNKNOWN;
 
     public CharToByteUnicode() {
-        String enc = (String) java.security.AccessController.doPrivileged(
+        String enc = java.security.AccessController.doPrivileged(
            new sun.security.action.GetPropertyAction("sun.io.unicode.encoding",
                                                           "UnicodeBig"));
         if (enc.equals("UnicodeBig"))
--- a/jdk/src/share/classes/sun/io/CharacterEncoding.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/sun/io/CharacterEncoding.java	Fri Feb 19 15:13:37 2010 -0800
@@ -50,11 +50,11 @@
 
     private static boolean sjisIsMS932;
 
-    private static Map aliasTable;
+    private static Map<String,String> aliasTable;
     private static volatile boolean installedAll;
 
     static {
-        aliasTable = new HashMap(460, 1.0f);                    /* MDA */
+        aliasTable = new HashMap<>(460, 1.0f);                    /* MDA */
 
         aliasTable.put("us-ascii",              "ASCII");
         aliasTable.put("ascii",                 "ASCII");
@@ -119,11 +119,11 @@
         }
         // need to use Locale.US so we can load ISO converters in tr_TR locale
         String lower = name.toLowerCase(Locale.US);
-        String val = (String) aliasTable.get(lower);
+        String val = aliasTable.get(lower);
 
         if (val == null && !installedAll) {
             installAll();
-            val = (String) aliasTable.get(lower);
+            val = aliasTable.get(lower);
         }
         return val;
     }
@@ -131,7 +131,7 @@
     private static synchronized void installAll() {
         if (!installedAll) {
             GetPropertyAction a = new GetPropertyAction("sun.nio.cs.map");
-            String map = ((String)AccessController.doPrivileged(a));
+            String map = AccessController.doPrivileged(a);
             if (map != null) {
                 sjisIsMS932 = map.equalsIgnoreCase("Windows-31J/Shift_JIS");
             } else {
@@ -857,9 +857,9 @@
      * Auto Detect converter.
      */
     static String getSJISName() {
-        String encodeName = (String) AccessController.doPrivileged(
-                                                new PrivilegedAction() {
-            public Object run() {
+        String encodeName = AccessController.doPrivileged(
+                                               new PrivilegedAction<String>() {
+            public String run() {
                 String osName = System.getProperty("os.name");
                 if (osName.equals("Solaris") || osName.equals("SunOS")){
                     return "PCK";
@@ -880,9 +880,9 @@
 
 
     static String getEUCJPName() {
-      String encodeName = (String) AccessController.doPrivileged(
-                                              new PrivilegedAction() {
-          public Object run() {
+      String encodeName = AccessController.doPrivileged(
+                                              new PrivilegedAction<String>() {
+          public String run() {
               String osName = System.getProperty("os.name");
               if (osName.equals("Solaris") || osName.equals("SunOS"))
                   return "eucJP-open";
--- a/jdk/src/share/classes/sun/io/Converters.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/sun/io/Converters.java	Fri Feb 19 15:13:37 2010 -0800
@@ -85,10 +85,11 @@
      * this code can be involved in the startup sequence it's important to keep
      * the footprint down.
      */
-    private static SoftReference[][] classCache
-        = new SoftReference[][] {
-            new SoftReference[CACHE_SIZE],
-            new SoftReference[CACHE_SIZE]
+    @SuppressWarnings("unchecked")
+    private static SoftReference<Object[]>[][] classCache
+        = (SoftReference<Object[]>[][]) new SoftReference<?>[][] {
+            new SoftReference<?>[CACHE_SIZE],
+            new SoftReference<?>[CACHE_SIZE]
         };
 
     private static void moveToFront(Object[] oa, int i) {
@@ -98,28 +99,28 @@
         oa[0] = ob;
     }
 
-    private static Class cache(int type, Object encoding) {
-        SoftReference[] srs = classCache[type];
+    private static Class<?> cache(int type, Object encoding) {
+        SoftReference<Object[]>[] srs = classCache[type];
         for (int i = 0; i < CACHE_SIZE; i++) {
-            SoftReference sr = srs[i];
+            SoftReference<Object[]> sr = srs[i];
             if (sr == null)
                 continue;
-            Object[] oa = (Object[])sr.get();
+            Object[] oa = sr.get();
             if (oa == null) {
                 srs[i] = null;
                 continue;
             }
             if (oa[1].equals(encoding)) {
                 moveToFront(srs, i);
-                return (Class)oa[0];
+                return (Class<?>)oa[0];
             }
         }
         return null;
     }
 
-    private static Class cache(int type, Object encoding, Class c) {
-        SoftReference[] srs = classCache[type];
-        srs[CACHE_SIZE - 1] = new SoftReference(new Object[] { c, encoding });
+    private static Class<?> cache(int type, Object encoding, Class<?> c) {
+        SoftReference<Object[]>[] srs = classCache[type];
+        srs[CACHE_SIZE - 1] = new SoftReference<Object[]>(new Object[] { c, encoding });
         moveToFront(srs, CACHE_SIZE - 1);
         return c;
     }
@@ -129,12 +130,12 @@
      */
     public static boolean isCached(int type, String encoding) {
         synchronized (lock) {
-            SoftReference[] srs = classCache[type];
+            SoftReference<Object[]>[] srs = classCache[type];
             for (int i = 0; i < CACHE_SIZE; i++) {
-                SoftReference sr = srs[i];
+                SoftReference<Object[]> sr = srs[i];
                 if (sr == null)
                     continue;
-                Object[] oa = (Object[])sr.get();
+                Object[] oa = sr.get();
                 if (oa == null) {
                     srs[i] = null;
                     continue;
@@ -152,9 +153,9 @@
     private static String getConverterPackageName() {
         String cp = converterPackageName;
         if (cp != null) return cp;
-        java.security.PrivilegedAction pa =
+        java.security.PrivilegedAction<String> pa =
             new sun.security.action.GetPropertyAction("file.encoding.pkg");
-        cp = (String)java.security.AccessController.doPrivileged(pa);
+        cp = java.security.AccessController.doPrivileged(pa);
         if (cp != null) {
             /* Property is set, so take it as the true converter package */
             converterPackageName = cp;
@@ -168,9 +169,9 @@
     public static String getDefaultEncodingName() {
         synchronized (lock) {
             if (defaultEncoding == null) {
-                java.security.PrivilegedAction pa =
+                java.security.PrivilegedAction<String> pa =
                     new sun.security.action.GetPropertyAction("file.encoding");
-                defaultEncoding = (String)java.security.AccessController.doPrivileged(pa);
+                defaultEncoding = java.security.AccessController.doPrivileged(pa);
             }
         }
         return defaultEncoding;
@@ -194,7 +195,7 @@
      * encoding, or throw an UnsupportedEncodingException if no such class can
      * be found
      */
-    private static Class getConverterClass(int type, String encoding)
+    private static Class<?> getConverterClass(int type, String encoding)
         throws UnsupportedEncodingException
     {
         String enc = null;
@@ -241,7 +242,7 @@
      * Instantiate the given converter class, or throw an
      * UnsupportedEncodingException if it cannot be instantiated
      */
-    private static Object newConverter(String enc, Class c)
+    private static Object newConverter(String enc, Class<?> c)
         throws UnsupportedEncodingException
     {
         try {
@@ -261,7 +262,7 @@
     static Object newConverter(int type, String enc)
         throws UnsupportedEncodingException
     {
-        Class c;
+        Class<?> c;
         synchronized (lock) {
             c = cache(type, enc);
             if (c == null) {
@@ -279,9 +280,9 @@
      * not yet defined, return a class that implements the fallback default
      * encoding, which is just ISO 8859-1.
      */
-    private static Class getDefaultConverterClass(int type) {
+    private static Class<?> getDefaultConverterClass(int type) {
         boolean fillCache = false;
-        Class c;
+        Class<?> c;
 
         /* First check the class cache */
         c = cache(type, DEFAULT_NAME);
@@ -325,7 +326,7 @@
      * encoding cannot be determined.
      */
     static Object newDefaultConverter(int type) {
-        Class c;
+        Class<?> c;
         synchronized (lock) {
             c = getDefaultConverterClass(type);
         }
--- a/jdk/src/share/classes/sun/net/ftp/impl/FtpClient.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/sun/net/ftp/impl/FtpClient.java	Fri Feb 19 15:13:37 2010 -0800
@@ -671,6 +671,10 @@
         }
         if (!issueCommand(cmd)) {
             s.close();
+            if (getLastReplyCode() == FtpReplyCode.FILE_UNAVAILABLE) {
+                // Ensure backward compatibility
+                throw new FileNotFoundException(cmd);
+            }
             throw new sun.net.ftp.FtpProtocolException(cmd + ":" + getResponseString(), getLastReplyCode());
         }
         return s;
@@ -688,7 +692,16 @@
         Socket clientSocket;
 
         if (passiveMode) {
-            return openPassiveDataConnection(cmd);
+            try {
+                return openPassiveDataConnection(cmd);
+            } catch (sun.net.ftp.FtpProtocolException e) {
+                // If Passive mode failed, fall back on PORT
+                // Otherwise throw exception
+                String errmsg = e.getMessage();
+                if (!errmsg.startsWith("PASV") && !errmsg.startsWith("EPSV")) {
+                    throw e;
+                }
+            }
         }
         ServerSocket portSocket;
         InetAddress myAddress;
--- a/jdk/src/share/classes/sun/nio/cs/AbstractCharsetProvider.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/sun/nio/cs/AbstractCharsetProvider.java	Fri Feb 19 15:13:37 2010 -0800
@@ -48,23 +48,23 @@
 
     /* Maps canonical names to class names
      */
-    private Map classMap
-        = new TreeMap(ASCIICaseInsensitiveComparator.CASE_INSENSITIVE_ORDER);
+    private Map<String,String> classMap
+        = new TreeMap<>(ASCIICaseInsensitiveComparator.CASE_INSENSITIVE_ORDER);
 
     /* Maps alias names to canonical names
      */
-    private Map aliasMap
-        = new TreeMap(ASCIICaseInsensitiveComparator.CASE_INSENSITIVE_ORDER);
+    private Map<String,String> aliasMap
+        = new TreeMap<>(ASCIICaseInsensitiveComparator.CASE_INSENSITIVE_ORDER);
 
     /* Maps canonical names to alias-name arrays
      */
-    private Map aliasNameMap
-        = new TreeMap(ASCIICaseInsensitiveComparator.CASE_INSENSITIVE_ORDER);
+    private Map<String,String[]> aliasNameMap
+        = new TreeMap<>(ASCIICaseInsensitiveComparator.CASE_INSENSITIVE_ORDER);
 
     /* Maps canonical names to soft references that hold cached instances
      */
-    private Map cache
-        = new TreeMap(ASCIICaseInsensitiveComparator.CASE_INSENSITIVE_ORDER);
+    private Map<String,SoftReference<Charset>> cache
+        = new TreeMap<>(ASCIICaseInsensitiveComparator.CASE_INSENSITIVE_ORDER);
 
     private String packagePrefix;
 
@@ -79,13 +79,13 @@
     /* Add an entry to the given map, but only if no mapping yet exists
      * for the given name.
      */
-    private static void put(Map m, String name, Object value) {
+    private static <K,V> void put(Map<K,V> m, K name, V value) {
         if (!m.containsKey(name))
             m.put(name, value);
     }
 
-    private static void remove(Map m, String name) {
-        Object x  = m.remove(name);
+    private static <K,V> void remove(Map<K,V> m, K name) {
+        V x  = m.remove(name);
         assert (x != null);
     }
 
@@ -116,22 +116,22 @@
     protected void init() { }
 
     private String canonicalize(String charsetName) {
-        String acn = (String)aliasMap.get(charsetName);
+        String acn = aliasMap.get(charsetName);
         return (acn != null) ? acn : charsetName;
     }
 
     private Charset lookup(String csn) {
 
         // Check cache first
-        SoftReference sr = (SoftReference)cache.get(csn);
+        SoftReference<Charset> sr = cache.get(csn);
         if (sr != null) {
-            Charset cs = (Charset)sr.get();
+            Charset cs = sr.get();
             if (cs != null)
                 return cs;
         }
 
         // Do we even support this charset?
-        String cln = (String)classMap.get(csn);
+        String cln = classMap.get(csn);
 
         if (cln == null)
             return null;
@@ -139,12 +139,12 @@
         // Instantiate the charset and cache it
         try {
 
-            Class c = Class.forName(packagePrefix + "." + cln,
-                                    true,
-                                    this.getClass().getClassLoader());
+            Class<?> c = Class.forName(packagePrefix + "." + cln,
+                                       true,
+                                       this.getClass().getClassLoader());
 
             Charset cs = (Charset)c.newInstance();
-            cache.put(csn, new SoftReference(cs));
+            cache.put(csn, new SoftReference<Charset>(cs));
             return cs;
         } catch (ClassNotFoundException x) {
             return null;
@@ -164,21 +164,21 @@
 
     public final Iterator<Charset> charsets() {
 
-        final ArrayList ks;
+        final ArrayList<String> ks;
         synchronized (this) {
             init();
-            ks = new ArrayList(classMap.keySet());
+            ks = new ArrayList<>(classMap.keySet());
         }
 
         return new Iterator<Charset>() {
-                Iterator i = ks.iterator();
+                Iterator<String> i = ks.iterator();
 
                 public boolean hasNext() {
                     return i.hasNext();
                 }
 
                 public Charset next() {
-                    String csn = (String)i.next();
+                    String csn = i.next();
                     return lookup(csn);
                 }
 
@@ -191,7 +191,7 @@
     public final String[] aliases(String charsetName) {
         synchronized (this) {
             init();
-            return (String[])aliasNameMap.get(charsetName);
+            return aliasNameMap.get(charsetName);
         }
     }
 
--- a/jdk/src/share/classes/sun/security/krb5/internal/ktab/KeyTabInputStream.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/sun/security/krb5/internal/ktab/KeyTabInputStream.java	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /*
- * Portions Copyright 2000-2005 Sun Microsystems, Inc.  All Rights Reserved.
+ * Portions Copyright 2000-2010 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -49,7 +49,7 @@
 public class KeyTabInputStream extends KrbDataInputStream implements KeyTabConstants {
 
     boolean DEBUG = Krb5.DEBUG;
-    static int index;
+    int index;
 
     public KeyTabInputStream(InputStream is) {
         super(is);
--- a/jdk/src/share/classes/sun/security/pkcs11/P11ECKeyFactory.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/sun/security/pkcs11/P11ECKeyFactory.java	Fri Feb 19 15:13:37 2010 -0800
@@ -40,6 +40,8 @@
 import sun.security.pkcs11.wrapper.*;
 import static sun.security.pkcs11.wrapper.PKCS11Constants.*;
 
+import sun.security.util.DerValue;
+
 /**
  * EC KeyFactory implemenation.
  *
@@ -201,7 +203,16 @@
 
     private PublicKey generatePublic(ECPoint point, ECParameterSpec params) throws PKCS11Exception {
         byte[] encodedParams = ECParameters.encodeParameters(params);
-        byte[] encodedPoint = ECParameters.encodePoint(point, params.getCurve());
+        byte[] encodedPoint = null;
+        DerValue pkECPoint = new DerValue(DerValue.tag_OctetString,
+            ECParameters.encodePoint(point, params.getCurve()));
+
+        try {
+            encodedPoint = pkECPoint.toByteArray();
+        } catch (IOException e) {
+            throw new IllegalArgumentException("Could not DER encode point", e);
+        }
+
         CK_ATTRIBUTE[] attributes = new CK_ATTRIBUTE[] {
             new CK_ATTRIBUTE(CKA_CLASS, CKO_PUBLIC_KEY),
             new CK_ATTRIBUTE(CKA_KEY_TYPE, CKK_EC),
--- a/jdk/src/share/classes/sun/security/pkcs11/P11Key.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/sun/security/pkcs11/P11Key.java	Fri Feb 19 15:13:37 2010 -0800
@@ -45,6 +45,8 @@
 import sun.security.pkcs11.wrapper.*;
 import static sun.security.pkcs11.wrapper.PKCS11Constants.*;
 
+import sun.security.util.DerValue;
+
 /**
  * Key implementation classes.
  *
@@ -1000,8 +1002,16 @@
             try {
                 params = P11ECKeyFactory.decodeParameters
                             (attributes[1].getByteArray());
+                DerValue wECPoint = new DerValue(attributes[0].getByteArray());
+                if (wECPoint.getTag() != DerValue.tag_OctetString)
+                    throw new IOException("Unexpected tag: " +
+                        wECPoint.getTag());
+                params = P11ECKeyFactory.decodeParameters
+                            (attributes[1].getByteArray());
                 w = P11ECKeyFactory.decodePoint
-                            (attributes[0].getByteArray(), params.getCurve());
+                    (wECPoint.getDataBytes(), params.getCurve());
+
+
             } catch (Exception e) {
                 throw new RuntimeException("Could not parse key values", e);
             }
--- a/jdk/src/share/classes/sun/security/tools/KeyTool.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/classes/sun/security/tools/KeyTool.java	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 1997-2009 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 1997-2010 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -77,6 +77,7 @@
 
 import static java.security.KeyStore.*;
 import static sun.security.tools.KeyTool.Command.*;
+import static sun.security.tools.KeyTool.Option.*;
 
 /**
  * This tool manages keystores.
@@ -150,77 +151,77 @@
 
     enum Command {
         CERTREQ("Generates a certificate request",
-            "-alias", "-sigalg", "-file", "-keypass", "-keystore",
-            "-storepass", "-storetype", "-providername", "-providerclass",
-            "-providerarg", "-providerpath", "-v", "-protected"),
+            ALIAS, SIGALG, FILEOUT, KEYPASS, KEYSTORE,
+            STOREPASS, STORETYPE, PROVIDERNAME, PROVIDERCLASS,
+            PROVIDERARG, PROVIDERPATH, V, PROTECTED),
         CHANGEALIAS("Changes an entry's alias",
-            "-alias", "-destalias", "-keypass", "-keystore", "-storepass",
-            "-storetype", "-providername", "-providerclass", "-providerarg",
-            "-providerpath", "-v", "-protected"),
+            ALIAS, DESTALIAS, KEYPASS, KEYSTORE, STOREPASS,
+            STORETYPE, PROVIDERNAME, PROVIDERCLASS, PROVIDERARG,
+            PROVIDERPATH, V, PROTECTED),
         DELETE("Deletes an entry",
-            "-alias", "-keystore", "-storepass", "-storetype",
-            "-providername", "-providerclass", "-providerarg",
-            "-providerpath", "-v", "-protected"),
+            ALIAS, KEYSTORE, STOREPASS, STORETYPE,
+            PROVIDERNAME, PROVIDERCLASS, PROVIDERARG,
+            PROVIDERPATH, V, PROTECTED),
         EXPORTCERT("Exports certificate",
-            "-rfc", "-alias", "-file", "-keystore", "-storepass",
-            "-storetype", "-providername", "-providerclass", "-providerarg",
-            "-providerpath", "-v", "-protected"),
+            RFC, ALIAS, FILEOUT, KEYSTORE, STOREPASS,
+            STORETYPE, PROVIDERNAME, PROVIDERCLASS, PROVIDERARG,
+            PROVIDERPATH, V, PROTECTED),
         GENKEYPAIR("Generates a key pair",
-            "-alias", "-keyalg", "-keysize", "-sigalg", "-destalias",
-            "-startdate", "-ext", "-validity", "-keypass", "-keystore",
-            "-storepass", "-storetype", "-providername", "-providerclass",
-            "-providerarg", "-providerpath", "-v", "-protected"),
+            ALIAS, KEYALG, KEYSIZE, SIGALG, DESTALIAS,
+            STARTDATE, EXT, VALIDITY, KEYPASS, KEYSTORE,
+            STOREPASS, STORETYPE, PROVIDERNAME, PROVIDERCLASS,
+            PROVIDERARG, PROVIDERPATH, V, PROTECTED),
         GENSECKEY("Generates a secret key",
-            "-alias", "-keypass", "-keyalg", "-keysize", "-keystore",
-            "-storepass", "-storetype", "-providername", "-providerclass",
-            "-providerarg", "-providerpath", "-v", "-protected"),
+            ALIAS, KEYPASS, KEYALG, KEYSIZE, KEYSTORE,
+            STOREPASS, STORETYPE, PROVIDERNAME, PROVIDERCLASS,
+            PROVIDERARG, PROVIDERPATH, V, PROTECTED),
         GENCERT("Generates certificate from a certificate request",
-            "-rfc", "-infile", "-outfile", "-alias", "-sigalg",
-            "-startdate", "-ext", "-validity", "-keypass", "-keystore",
-            "-storepass", "-storetype", "-providername", "-providerclass",
-            "-providerarg", "-providerpath", "-v", "-protected"),
+            RFC, INFILE, OUTFILE, ALIAS, SIGALG,
+            STARTDATE, EXT, VALIDITY, KEYPASS, KEYSTORE,
+            STOREPASS, STORETYPE, PROVIDERNAME, PROVIDERCLASS,
+            PROVIDERARG, PROVIDERPATH, V, PROTECTED),
         IDENTITYDB("Imports entries from a JDK 1.1.x-style identity database",
-            "-file", "-storetype", "-keystore", "-storepass", "-providername",
-            "-providerclass", "-providerarg", "-providerpath", "-v"),
+            FILEIN, STORETYPE, KEYSTORE, STOREPASS, PROVIDERNAME,
+            PROVIDERCLASS, PROVIDERARG, PROVIDERPATH, V),
         IMPORTCERT("Imports a certificate or a certificate chain",
-            "-noprompt", "-trustcacerts", "-protected", "-alias", "-file",
-            "-keypass", "-keystore", "-storepass", "-storetype",
-            "-providername", "-providerclass", "-providerarg",
-            "-providerpath", "-v"),
+            NOPROMPT, TRUSTCACERTS, PROTECTED, ALIAS, FILEIN,
+            KEYPASS, KEYSTORE, STOREPASS, STORETYPE,
+            PROVIDERNAME, PROVIDERCLASS, PROVIDERARG,
+            PROVIDERPATH, V),
         IMPORTKEYSTORE("Imports one or all entries from another keystore",
-            "-srckeystore", "-destkeystore", "-srcstoretype",
-            "-deststoretype", "-srcstorepass", "-deststorepass",
-            "-srcprotected", "-srcprovidername", "-destprovidername",
-            "-srcalias", "-destalias", "-srckeypass", "-destkeypass",
-            "-noprompt", "-providerclass", "-providerarg", "-providerpath",
-            "-v"),
+            SRCKEYSTORE, DESTKEYSTORE, SRCSTORETYPE,
+            DESTSTORETYPE, SRCSTOREPASS, DESTSTOREPASS,
+            SRCPROTECTED, SRCPROVIDERNAME, DESTPROVIDERNAME,
+            SRCALIAS, DESTALIAS, SRCKEYPASS, DESTKEYPASS,
+            NOPROMPT, PROVIDERCLASS, PROVIDERARG, PROVIDERPATH,
+            V),
         KEYCLONE("Clones a key entry",
-            "-alias", "-destalias", "-keypass", "-new", "-storetype",
-            "-keystore", "-storepass", "-providername", "-providerclass",
-            "-providerarg", "-providerpath", "-v"),
+            ALIAS, DESTALIAS, KEYPASS, NEW, STORETYPE,
+            KEYSTORE, STOREPASS, PROVIDERNAME, PROVIDERCLASS,
+            PROVIDERARG, PROVIDERPATH, V),
         KEYPASSWD("Changes the key password of an entry",
-            "-alias", "-keypass", "-new", "-keystore", "-storepass",
-            "-storetype", "-providername", "-providerclass", "-providerarg",
-            "-providerpath", "-v"),
+            ALIAS, KEYPASS, NEW, KEYSTORE, STOREPASS,
+            STORETYPE, PROVIDERNAME, PROVIDERCLASS, PROVIDERARG,
+            PROVIDERPATH, V),
         LIST("Lists entries in a keystore",
-            "-rfc", "-alias", "-keystore", "-storepass", "-storetype",
-            "-providername", "-providerclass", "-providerarg",
-            "-providerpath", "-v", "-protected"),
+            RFC, ALIAS, KEYSTORE, STOREPASS, STORETYPE,
+            PROVIDERNAME, PROVIDERCLASS, PROVIDERARG,
+            PROVIDERPATH, V, PROTECTED),
         PRINTCERT("Prints the content of a certificate",
-            "-rfc", "-file", "-sslserver", "-jarfile", "-v"),
+            RFC, FILEIN, SSLSERVER, JARFILE, V),
         PRINTCERTREQ("Prints the content of a certificate request",
-            "-file", "-v"),
+            FILEIN, V),
         SELFCERT("Generates a self-signed certificate",
-            "-alias", "-sigalg", "-dname", "-startdate", "-validity", "-keypass",
-            "-storetype", "-keystore", "-storepass", "-providername",
-            "-providerclass", "-providerarg", "-providerpath", "-v"),
+            ALIAS, SIGALG, DNAME, STARTDATE, VALIDITY, KEYPASS,
+            STORETYPE, KEYSTORE, STOREPASS, PROVIDERNAME,
+            PROVIDERCLASS, PROVIDERARG, PROVIDERPATH, V),
         STOREPASSWD("Changes the store password of a keystore",
-            "-new", "-keystore", "-storepass", "-storetype", "-providername",
-            "-providerclass", "-providerarg", "-providerpath", "-v");
+            NEW, KEYSTORE, STOREPASS, STORETYPE, PROVIDERNAME,
+            PROVIDERCLASS, PROVIDERARG, PROVIDERPATH, V);
 
         final String description;
-        final String[] options;
-        Command(String d, String... o) {
+        final Option[] options;
+        Command(String d, Option... o) {
             description = d;
             options = o;
         }
@@ -230,50 +231,60 @@
         }
     };
 
-    private static String[][] options = {
-        // name, arg, description
-        {"-alias", "<alias>", "alias name of the entry to process"},
-        {"-destalias", "<destalias>", "destination alias"},
-        {"-destkeypass", "<arg>", "destination key password"},
-        {"-destkeystore", "<destkeystore>", "destination keystore name"},
-        {"-destprotected", null, "destination keystore password protected"},
-        {"-destprovidername", "<destprovidername>", "destination keystore provider name"},
-        {"-deststorepass", "<arg>", "destination keystore password"},
-        {"-deststoretype", "<deststoretype>", "destination keystore type"},
-        {"-dname", "<dname>", "distinguished name"},
-        {"-ext", "<value>", "X.509 extension"},
-        {"-file", "<filename>", "output file name"},
-        {"-file", "<filename>", "input file name"},
-        {"-infile", "<filename>", "input file name"},
-        {"-keyalg", "<keyalg>", "key algorithm name"},
-        {"-keypass", "<arg>", "key password"},
-        {"-keysize", "<keysize>", "key bit size"},
-        {"-keystore", "<keystore>", "keystore name"},
-        {"-new", "<arg>", "new password"},
-        {"-noprompt", null, "do not prompt"},
-        {"-outfile", "<filename>", "output file name"},
-        {"-protected", null, "password through protected mechanism"},
-        {"-providerarg", "<arg>", "provider argument"},
-        {"-providerclass", "<providerclass>", "provider class name"},
-        {"-providername", "<providername>", "provider name"},
-        {"-providerpath", "<pathlist>", "provider classpath"},
-        {"-rfc", null, "output in RFC style"},
-        {"-sigalg", "<sigalg>", "signature algorithm name"},
-        {"-srcalias", "<srcalias>", "source alias"},
-        {"-srckeypass", "<arg>", "source keystore password"},
-        {"-srckeystore", "<srckeystore>", "source keystore name"},
-        {"-srcprotected", null, "source keystore password protected"},
-        {"-srcprovidername", "<srcprovidername>", "source keystore provider name"},
-        {"-srcstorepass", "<arg>", "source keystore password"},
-        {"-srcstoretype", "<srcstoretype>", "source keystore type"},
-        {"-sslserver", "<server[:port]>", "SSL server host and port"},
-        {"-jarfile", "<filename>", "signed jar file"},
-        {"-startdate", "<startdate>", "certificate validity start date/time"},
-        {"-storepass", "<arg>", "keystore password"},
-        {"-storetype", "<storetype>", "keystore type"},
-        {"-trustcacerts", null, "trust certificates from cacerts"},
-        {"-v", null, "verbose output"},
-        {"-validity", "<valDays>", "validity number of days"},
+    enum Option {
+        ALIAS("alias", "<alias>", "alias name of the entry to process"),
+        DESTALIAS("destalias", "<destalias>", "destination alias"),
+        DESTKEYPASS("destkeypass", "<arg>", "destination key password"),
+        DESTKEYSTORE("destkeystore", "<destkeystore>", "destination keystore name"),
+        DESTPROTECTED("destprotected", null, "destination keystore password protected"),
+        DESTPROVIDERNAME("destprovidername", "<destprovidername>", "destination keystore provider name"),
+        DESTSTOREPASS("deststorepass", "<arg>", "destination keystore password"),
+        DESTSTORETYPE("deststoretype", "<deststoretype>", "destination keystore type"),
+        DNAME("dname", "<dname>", "distinguished name"),
+        EXT("ext", "<value>", "X.509 extension"),
+        FILEOUT("file", "<filename>", "output file name"),
+        FILEIN("file", "<filename>", "input file name"),
+        INFILE("infile", "<filename>", "input file name"),
+        KEYALG("keyalg", "<keyalg>", "key algorithm name"),
+        KEYPASS("keypass", "<arg>", "key password"),
+        KEYSIZE("keysize", "<keysize>", "key bit size"),
+        KEYSTORE("keystore", "<keystore>", "keystore name"),
+        NEW("new", "<arg>", "new password"),
+        NOPROMPT("noprompt", null, "do not prompt"),
+        OUTFILE("outfile", "<filename>", "output file name"),
+        PROTECTED("protected", null, "password through protected mechanism"),
+        PROVIDERARG("providerarg", "<arg>", "provider argument"),
+        PROVIDERCLASS("providerclass", "<providerclass>", "provider class name"),
+        PROVIDERNAME("providername", "<providername>", "provider name"),
+        PROVIDERPATH("providerpath", "<pathlist>", "provider classpath"),
+        RFC("rfc", null, "output in RFC style"),
+        SIGALG("sigalg", "<sigalg>", "signature algorithm name"),
+        SRCALIAS("srcalias", "<srcalias>", "source alias"),
+        SRCKEYPASS("srckeypass", "<arg>", "source keystore password"),
+        SRCKEYSTORE("srckeystore", "<srckeystore>", "source keystore name"),
+        SRCPROTECTED("srcprotected", null, "source keystore password protected"),
+        SRCPROVIDERNAME("srcprovidername", "<srcprovidername>", "source keystore provider name"),
+        SRCSTOREPASS("srcstorepass", "<arg>", "source keystore password"),
+        SRCSTORETYPE("srcstoretype", "<srcstoretype>", "source keystore type"),
+        SSLSERVER("sslserver", "<server[:port]>", "SSL server host and port"),
+        JARFILE("jarfile", "<filename>", "signed jar file"),
+        STARTDATE("startdate", "<startdate>", "certificate validity start date/time"),
+        STOREPASS("storepass", "<arg>", "keystore password"),
+        STORETYPE("storetype", "<storetype>", "keystore type"),
+        TRUSTCACERTS("trustcacerts", null, "trust certificates from cacerts"),
+        V("v", null, "verbose output"),
+        VALIDITY("validity", "<valDays>", "validity number of days");
+
+        final String name, arg, description;
+        Option(String name, String arg, String description) {
+            this.name = name;
+            this.arg = arg;
+            this.description = description;
+        }
+        @Override
+        public String toString() {
+            return "-" + name;
+        }
     };
 
     private static final Class[] PARAM_STRING = { String.class };
@@ -344,10 +355,10 @@
 
             // Check if the last option needs an arg
             if (i == args.length - 1) {
-                for (String[] option: options) {
+                for (Option option: Option.values()) {
                     // Only options with an arg need to be checked
-                    if (collator.compare(flags, option[0]) == 0) {
-                        if (option[1] != null) errorNeedArgument(flags);
+                    if (collator.compare(flags, option.toString()) == 0) {
+                        if (option.arg != null) errorNeedArgument(flags);
                         break;
                     }
                 }
@@ -3792,21 +3803,13 @@
             // Length of left side of options list
             int lenLeft = 0;
             for (int j=0; j<left.length; j++) {
-                for (String[] opt: options) {
-                    if (collator.compare(opt[0], command.options[j]) == 0) {
-                        left[j] = opt[0];
-                        if (opt[1] != null) left[j] += " " + opt[1];
-                        if (left[j].length() > lenLeft) {
-                            lenLeft = left[j].length();
-                        }
-                        right[j] = rb.getString(opt[2]);
-                        found = true;
-                        break;
-                    }
+                Option opt = command.options[j];
+                left[j] = opt.toString();
+                if (opt.arg != null) left[j] += " " + opt.arg;
+                if (left[j].length() > lenLeft) {
+                    lenLeft = left[j].length();
                 }
-                if (!found) {
-                    throw new RuntimeException("ERROR: CANNOT FIND " + command.options[j]);
-                }
+                right[j] = rb.getString(opt.description);
             }
             for (int j=0; j<left.length; j++) {
                 System.err.printf(" %-" + lenLeft + "s  %s\n",
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/share/demo/jvmti/compiledMethodLoad/README.txt	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,42 @@
+#
+# Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#   - Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+#
+#   - Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+#   - Neither the name of Sun Microsystems nor the names of its
+#     contributors may be used to endorse or promote products derived
+#     from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+compiledMethodLoad
+
+This agent library traces CompiledMethodLoad events along
+with the HotSpot specific compile_info parameter.
+
+You can use this agent library as follows:
+
+    java -agentlib:compiledMethodLoad ...
+
+See ${JAVA_HOME}/demo/jvmti/index.html for help running and building agents.
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/share/demo/jvmti/compiledMethodLoad/compiledMethodLoad.c	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,268 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   - Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   - Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *
+ *   - Neither the name of Sun Microsystems nor the names of its
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "jni.h"
+#include "jvmti.h"
+#include "jvmticmlr.h"
+
+#include "agent_util.h"
+
+/* Global static data */
+static char          OUTPUT_FILE[] = "compiledMethodLoad.txt";
+static FILE         *fp;
+static jvmtiEnv     *jvmti;
+static jrawMonitorID lock;
+
+/* print a jvmtiCompiledMethodLoadDummyRecord */
+void
+print_dummy_record(jvmtiCompiledMethodLoadDummyRecord* record,
+    jvmtiEnv* jvmti, FILE* fp) {
+
+    if (record != NULL) {
+        fprintf(fp, "Dummy record detected containing message: %s\n",
+            (char *)record->message);
+    }
+}
+
+/* print the specified stack frames */
+void
+print_stack_frames(PCStackInfo* record, jvmtiEnv *jvmti, FILE* fp) {
+    if (record != NULL && record->methods != NULL) {
+        int i;
+
+        for (i = 0; i < record->numstackframes; i++) {
+            jvmtiError err;
+            char* method_name = NULL;
+            char* class_name = NULL;
+            char* method_signature = NULL;
+            char* class_signature = NULL;
+            char* generic_ptr_method = NULL;
+            char* generic_ptr_class = NULL;
+            jmethodID id;
+            jclass declaringclassptr;
+            id = record->methods[i];
+
+            err = (*jvmti)->GetMethodDeclaringClass(jvmti, id,
+                      &declaringclassptr);
+            check_jvmti_error(jvmti, err, "get method declaring class");
+
+            err = (*jvmti)->GetClassSignature(jvmti, declaringclassptr,
+                      &class_signature, &generic_ptr_class);
+            check_jvmti_error(jvmti, err, "get class signature");
+
+            err = (*jvmti)->GetMethodName(jvmti, id, &method_name,
+                      &method_signature, &generic_ptr_method);
+            check_jvmti_error(jvmti, err, "get method name");
+
+            fprintf(fp, "%s::%s %s %s @%d\n", class_signature, method_name,
+                method_signature,
+                generic_ptr_method == NULL ? "" : generic_ptr_method,
+                record->bcis[i]);
+
+            if (method_name != NULL) {
+                err = (*jvmti)->Deallocate(jvmti, (unsigned char*)method_name);
+                check_jvmti_error(jvmti, err, "deallocate method_name");
+            }
+            if (method_signature != NULL) {
+                err = (*jvmti)->Deallocate(jvmti,
+                          (unsigned char*)method_signature);
+                check_jvmti_error(jvmti, err, "deallocate method_signature");
+            }
+            if (generic_ptr_method != NULL) {
+                err = (*jvmti)->Deallocate(jvmti,
+                          (unsigned char*)generic_ptr_method);
+                check_jvmti_error(jvmti, err, "deallocate generic_ptr_method");
+            }
+            if (class_name != NULL) {
+                err = (*jvmti)->Deallocate(jvmti, (unsigned char*)class_name);
+                check_jvmti_error(jvmti, err, "deallocate class_name");
+            }
+            if (class_signature != NULL) {
+                err = (*jvmti)->Deallocate(jvmti,
+                          (unsigned char*)class_signature);
+                check_jvmti_error(jvmti, err, "deallocate class_signature");
+            }
+            if (generic_ptr_class != NULL) {
+                err = (*jvmti)->Deallocate(jvmti,
+                          (unsigned char*)generic_ptr_class);
+                check_jvmti_error(jvmti, err, "deallocate generic_ptr_class");
+            }
+        }
+    }
+}
+
+/* print a jvmtiCompiledMethodLoadInlineRecord */
+void
+print_inline_info_record(jvmtiCompiledMethodLoadInlineRecord* record,
+    jvmtiEnv *jvmti, FILE* fp) {
+
+    if (record != NULL && record->pcinfo != NULL) {
+        int numpcs = record->numpcs;
+        int i;
+
+        for (i = 0; i < numpcs; i++) {
+            PCStackInfo pcrecord = (record->pcinfo[i]);
+            fprintf(fp, "PcDescriptor(pc=0x%lx):\n", (jint)(pcrecord.pc));
+            print_stack_frames(&pcrecord, jvmti, fp);
+        }
+    }
+}
+
+/* decode kind of CompiledMethodLoadRecord and print */
+void
+print_records(jvmtiCompiledMethodLoadRecordHeader* list, jvmtiEnv *jvmti,
+    FILE* fp)
+{
+    jvmtiCompiledMethodLoadRecordHeader* curr = list;
+    fprintf(fp, "\nPrinting PC Descriptors\n\n");
+    while (curr != NULL) {
+        switch (curr->kind) {
+        case JVMTI_CMLR_DUMMY:
+            print_dummy_record((jvmtiCompiledMethodLoadDummyRecord *)curr,
+                jvmti, fp);
+            break;
+
+        case JVMTI_CMLR_INLINE_INFO:
+            print_inline_info_record(
+                (jvmtiCompiledMethodLoadInlineRecord *)curr, jvmti, fp);
+            break;
+
+        default:
+            fprintf(fp, "Warning: unrecognized record: kind=%d\n", curr->kind);
+            break;
+        }
+
+        curr = (jvmtiCompiledMethodLoadRecordHeader *)curr->next;
+    }
+}
+
+/* Callback for JVMTI_EVENT_COMPILED_METHOD_LOAD */
+void JNICALL
+compiled_method_load(jvmtiEnv *jvmti, jmethodID method, jint code_size,
+    const void* code_addr, jint map_length, const jvmtiAddrLocationMap* map,
+    const void* compile_info)
+{
+    jvmtiError err;
+    char* name = NULL;
+    char* signature = NULL;
+    char* generic_ptr = NULL;
+    jvmtiCompiledMethodLoadRecordHeader* pcs;
+
+    err = (*jvmti)->RawMonitorEnter(jvmti, lock);
+    check_jvmti_error(jvmti, err, "raw monitor enter");
+
+    err = (*jvmti)->GetMethodName(jvmti, method, &name, &signature,
+              &generic_ptr);
+    check_jvmti_error(jvmti, err, "get method name");
+
+    fprintf(fp, "\nCompiled method load event\n");
+    fprintf(fp, "Method name %s %s %s\n\n", name, signature,
+        generic_ptr == NULL ? "" : generic_ptr);
+    pcs = (jvmtiCompiledMethodLoadRecordHeader *)compile_info;
+    if (pcs != NULL) {
+        print_records(pcs, jvmti, fp);
+    }
+
+    if (name != NULL) {
+        err = (*jvmti)->Deallocate(jvmti, (unsigned char*)name);
+        check_jvmti_error(jvmti, err, "deallocate name");
+    }
+    if (signature != NULL) {
+        err = (*jvmti)->Deallocate(jvmti, (unsigned char*)signature);
+        check_jvmti_error(jvmti, err, "deallocate signature");
+    }
+    if (generic_ptr != NULL) {
+        err = (*jvmti)->Deallocate(jvmti, (unsigned char*)generic_ptr);
+        check_jvmti_error(jvmti, err, "deallocate generic_ptr");
+    }
+
+    err = (*jvmti)->RawMonitorExit(jvmti, lock);
+    check_jvmti_error(jvmti, err, "raw monitor exit");
+}
+
+/* Agent_OnLoad() is called first, we prepare for a COMPILED_METHOD_LOAD
+ * event here.
+ */
+JNIEXPORT jint JNICALL
+Agent_OnLoad(JavaVM *vm, char *options, void *reserved)
+{
+    jint                rc;
+    jvmtiError          err;
+    jvmtiCapabilities   capabilities;
+    jvmtiEventCallbacks callbacks;
+
+    fp = fopen(OUTPUT_FILE, "w");
+    if (fp == NULL) {
+        fatal_error("ERROR: %s: Unable to create output file\n", OUTPUT_FILE);
+        return -1;
+    }
+
+    /* Get JVMTI environment */
+    rc = (*vm)->GetEnv(vm, (void **)&jvmti, JVMTI_VERSION);
+    if (rc != JNI_OK) {
+        fatal_error(
+            "ERROR: Unable to create jvmtiEnv, GetEnv failed, error=%d\n", rc);
+        return -1;
+    }
+
+    /* add JVMTI capabilities */
+    memset(&capabilities,0, sizeof(capabilities));
+    capabilities.can_generate_compiled_method_load_events = 1;
+    err = (*jvmti)->AddCapabilities(jvmti, &capabilities);
+    check_jvmti_error(jvmti, err, "add capabilities");
+
+    /* set JVMTI callbacks for events */
+    memset(&callbacks, 0, sizeof(callbacks));
+    callbacks.CompiledMethodLoad = &compiled_method_load;
+    err = (*jvmti)->SetEventCallbacks(jvmti, &callbacks, sizeof(callbacks));
+    check_jvmti_error(jvmti, err, "set event callbacks");
+
+    /* enable JVMTI events */
+    err = (*jvmti)->SetEventNotificationMode(jvmti, JVMTI_ENABLE,
+                        JVMTI_EVENT_COMPILED_METHOD_LOAD, NULL);
+    check_jvmti_error(jvmti, err, "set event notify");
+
+    /* create coordination monitor */
+    err = (*jvmti)->CreateRawMonitor(jvmti, "agent lock", &lock);
+    check_jvmti_error(jvmti, err, "create raw monitor");
+
+    return 0;
+}
+
+/* Agent_OnUnload() is called last */
+JNIEXPORT void JNICALL
+Agent_OnUnload(JavaVM *vm)
+{
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/share/demo/jvmti/compiledMethodLoad/sample.makefile.txt	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,148 @@
+#
+# Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#   - Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+#
+#   - Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+#   - Neither the name of Sun Microsystems nor the names of its
+#     contributors may be used to endorse or promote products derived
+#     from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+########################################################################
+#
+# Sample GNU Makefile for building JVMTI Demo compiledMethodLoad
+#
+#  Example uses:    
+#       gnumake JDK=<java_home> OSNAME=solaris [OPT=true] [LIBARCH=sparc]
+#       gnumake JDK=<java_home> OSNAME=solaris [OPT=true] [LIBARCH=sparcv9]
+#       gnumake JDK=<java_home> OSNAME=linux   [OPT=true]
+#       gnumake JDK=<java_home> OSNAME=win32   [OPT=true]
+#
+########################################################################
+
+# Source lists
+LIBNAME=compiledMethodLoad
+SOURCES=compiledMethodLoad.c ../agent_util/agent_util.c
+
+# Solaris Sun C Compiler Version 5.5
+ifeq ($(OSNAME), solaris)
+    # Sun Solaris Compiler options needed
+    COMMON_FLAGS=-mt -KPIC
+    # Options that help find errors
+    COMMON_FLAGS+= -Xa -v -xstrconst -xc99=%none
+    # Check LIBARCH for any special compiler options
+    LIBARCH=$(shell uname -p)
+    ifeq ($(LIBARCH), sparc)
+        COMMON_FLAGS+=-xarch=v8 -xregs=no%appl
+    endif
+    ifeq ($(LIBARCH), sparcv9)
+        COMMON_FLAGS+=-xarch=v9 -xregs=no%appl
+    endif
+    ifeq ($(OPT), true)
+        CFLAGS=-xO2 $(COMMON_FLAGS) 
+    else
+        CFLAGS=-g $(COMMON_FLAGS)
+    endif
+    # Object files needed to create library
+    OBJECTS=$(SOURCES:%.c=%.o)
+    # Library name and options needed to build it
+    LIBRARY=lib$(LIBNAME).so
+    LDFLAGS=-z defs -ztext
+    # Libraries we are dependent on
+    LIBRARIES= -lc
+    # Building a shared library
+    LINK_SHARED=$(LINK.c) -G -o $@
+endif
+
+# Linux GNU C Compiler
+ifeq ($(OSNAME), linux)
+    # GNU Compiler options needed to build it
+    COMMON_FLAGS=-fno-strict-aliasing -fPIC -fno-omit-frame-pointer
+    # Options that help find errors
+    COMMON_FLAGS+= -W -Wall  -Wno-unused -Wno-parentheses
+    ifeq ($(OPT), true)
+        CFLAGS=-O2 $(COMMON_FLAGS) 
+    else
+        CFLAGS=-g $(COMMON_FLAGS) 
+    endif
+    # Object files needed to create library
+    OBJECTS=$(SOURCES:%.c=%.o)
+    # Library name and options needed to build it
+    LIBRARY=lib$(LIBNAME).so
+    LDFLAGS=-Wl,-soname=$(LIBRARY) -static-libgcc -mimpure-text
+    # Libraries we are dependent on
+    LIBRARIES=-lc
+    # Building a shared library
+    LINK_SHARED=$(LINK.c) -shared -o $@
+endif
+
+# Windows Microsoft C/C++ Optimizing Compiler Version 12
+ifeq ($(OSNAME), win32)
+    CC=cl
+    # Compiler options needed to build it
+    COMMON_FLAGS=-Gy -DWIN32
+    # Options that help find errors
+    COMMON_FLAGS+=-W0 -WX
+    ifeq ($(OPT), true)
+        CFLAGS= -Ox -Op -Zi $(COMMON_FLAGS) 
+    else
+        CFLAGS= -Od -Zi $(COMMON_FLAGS) 
+    endif
+    # Object files needed to create library
+    OBJECTS=$(SOURCES:%.c=%.obj)
+    # Library name and options needed to build it
+    LIBRARY=$(LIBNAME).dll
+    LDFLAGS=
+    # Libraries we are dependent on
+    LIBRARIES=
+    # Building a shared library
+    LINK_SHARED=link -dll -out:$@
+endif
+
+# Common -I options
+CFLAGS += -I.
+CFLAGS += -I../agent_util
+CFLAGS += -I$(JDK)/include -I$(JDK)/include/$(OSNAME)
+
+# Default rule
+all: $(LIBRARY)
+
+# Build native library
+$(LIBRARY): $(OBJECTS)
+	$(LINK_SHARED) $(OBJECTS) $(LIBRARIES)
+
+# Cleanup the built bits
+clean:
+	rm -f $(LIBRARY) $(OBJECTS)
+
+# Simple tester
+test: all
+	LD_LIBRARY_PATH=`pwd` $(JDK)/bin/java -agentlib:$(LIBNAME) -version
+
+# Compilation rule only needed on Windows
+ifeq ($(OSNAME), win32)
+%.obj: %.c
+	$(COMPILE.c) $<
+endif
+
--- a/jdk/src/share/demo/jvmti/index.html	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/demo/jvmti/index.html	Fri Feb 19 15:13:37 2010 -0800
@@ -100,6 +100,13 @@
 </li>
 
 <li>
+<A HREF="compiledMethodLoad">compiledMethodLoad</A>
+<br>
+This is a small agent that traces CompiledMethodLoad events along
+with the HotSpot specific compile_info parameter.
+</li>
+
+<li>
 <A HREF="mtrace">mtrace</A>
 <br>
 This is a small agent that does method tracing.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/share/javavm/export/jvmticmlr.h	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,115 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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.  Sun designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/*
+ * This header file defines the data structures sent by the VM
+ * through the JVMTI CompiledMethodLoad callback function via the
+ * "void * compile_info" parameter. The memory pointed to by the
+ * compile_info parameter may not be referenced after returning from
+ * the CompiledMethodLoad callback. These are VM implementation
+ * specific data structures that may evolve in future releases. A
+ * JVMTI agent should interpret a non-NULL compile_info as a pointer
+ * to a region of memory containing a list of records. In a typical
+ * usage scenario, a JVMTI agent would cast each record to a
+ * jvmtiCompiledMethodLoadRecordHeader, a struct that represents
+ * arbitrary information. This struct contains a kind field to indicate
+ * the kind of information being passed, and a pointer to the next
+ * record. If the kind field indicates inlining information, then the
+ * agent would cast the record to a jvmtiCompiledMethodLoadInlineRecord.
+ * This record contains an array of PCStackInfo structs, which indicate
+ * for every pc address what are the methods on the invocation stack.
+ * The "methods" and "bcis" fields in each PCStackInfo struct specify a
+ * 1-1 mapping between these inlined methods and their bytecode indices.
+ * This can be used to derive the proper source lines of the inlined
+ * methods.
+ */
+
+#ifndef _JVMTI_CMLR_H_
+#define _JVMTI_CMLR_H_
+
+enum {
+    JVMTI_CMLR_MAJOR_VERSION_1 = 0x00000001,
+    JVMTI_CMLR_MINOR_VERSION_0 = 0x00000000,
+
+    JVMTI_CMLR_MAJOR_VERSION   = 0x00000001,
+    JVMTI_CMLR_MINOR_VERSION   = 0x00000000
+
+    /*
+     * This comment is for the "JDK import from HotSpot" sanity check:
+     * version: 1.0.0
+     */
+};
+
+typedef enum {
+    JVMTI_CMLR_DUMMY       = 1,
+    JVMTI_CMLR_INLINE_INFO = 2
+} jvmtiCMLRKind;
+
+/*
+ * Record that represents arbitrary information passed through JVMTI
+ * CompiledMethodLoadEvent void pointer.
+ */
+typedef struct _jvmtiCompiledMethodLoadRecordHeader {
+  jvmtiCMLRKind kind;     /* id for the kind of info passed in the record */
+  jint majorinfoversion;  /* major and minor info version values. Init'ed */
+  jint minorinfoversion;  /* to current version value in jvmtiExport.cpp. */
+
+  struct _jvmtiCompiledMethodLoadRecordHeader* next;
+} jvmtiCompiledMethodLoadRecordHeader;
+
+/*
+ * Record that gives information about the methods on the compile-time
+ * stack at a specific pc address of a compiled method. Each element in
+ * the methods array maps to same element in the bcis array.
+ */
+typedef struct _PCStackInfo {
+  void* pc;             /* the pc address for this compiled method */
+  jint numstackframes;  /* number of methods on the stack */
+  jmethodID* methods;   /* array of numstackframes method ids */
+  jint* bcis;           /* array of numstackframes bytecode indices */
+} PCStackInfo;
+
+/*
+ * Record that contains inlining information for each pc address of
+ * an nmethod.
+ */
+typedef struct _jvmtiCompiledMethodLoadInlineRecord {
+  jvmtiCompiledMethodLoadRecordHeader header;  /* common header for casting */
+  jint numpcs;          /* number of pc descriptors in this nmethod */
+  PCStackInfo* pcinfo;  /* array of numpcs pc descriptors */
+} jvmtiCompiledMethodLoadInlineRecord;
+
+/*
+ * Dummy record used to test that we can pass records with different
+ * information through the void pointer provided that they can be cast
+ * to a jvmtiCompiledMethodLoadRecordHeader.
+ */
+
+typedef struct _jvmtiCompiledMethodLoadDummyRecord {
+  jvmtiCompiledMethodLoadRecordHeader header;  /* common header for casting */
+  char message[50];
+} jvmtiCompiledMethodLoadDummyRecord;
+
+#endif
--- a/jdk/src/share/native/java/net/net_util.c	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/share/native/java/net/net_util.c	Fri Feb 19 15:13:37 2010 -0800
@@ -162,10 +162,11 @@
 JNIEXPORT jint JNICALL
 NET_SockaddrEqualsInetAddress(JNIEnv *env, struct sockaddr *him, jobject iaObj)
 {
-    jint family = (*env)->GetIntField(env, iaObj, ia_familyID) == IPv4?
-        AF_INET : AF_INET6;
+    jint family = AF_INET;
 
 #ifdef AF_INET6
+    family = (*env)->GetIntField(env, iaObj, ia_familyID) == IPv4?
+        AF_INET : AF_INET6;
     if (him->sa_family == AF_INET6) {
 #ifdef WIN32
         struct SOCKADDR_IN6 *him6 = (struct SOCKADDR_IN6 *)him;
--- a/jdk/src/solaris/native/java/net/Inet4AddressImpl.c	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/solaris/native/java/net/Inet4AddressImpl.c	Fri Feb 19 15:13:37 2010 -0800
@@ -46,11 +46,6 @@
 #define HENT_BUF_SIZE 1024
 #define BIG_HENT_BUF_SIZE 10240  /* a jumbo-sized one */
 
-#ifndef __GLIBC__
-/* gethostname() is in libc.so but I can't find a header file for it */
-extern int gethostname(char *buf, int buf_len);
-#endif
-
 /************************************************************************
  * Inet4AddressImpl
  */
--- a/jdk/src/solaris/native/java/net/Inet6AddressImpl.c	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/solaris/native/java/net/Inet6AddressImpl.c	Fri Feb 19 15:13:37 2010 -0800
@@ -49,10 +49,6 @@
 #define NI_MAXHOST 1025
 #endif
 
-#ifndef __GLIBC__
-/* gethostname() is in libc.so but I can't find a header file for it */
-extern int gethostname(char *buf, int buf_len);
-#endif
 
 /************************************************************************
  * Inet6AddressImpl
@@ -360,8 +356,6 @@
         }
     }
 
-#endif /* AF_INET6 */
-
 cleanupAndReturn:
     {
         struct addrinfo *iterator, *tmp;
@@ -374,7 +368,6 @@
         JNU_ReleaseStringPlatformChars(env, host, hostname);
     }
 
-#ifdef AF_INET6
     if (NET_addrtransAvailable())
         (*freeaddrinfo_ptr)(res);
 #endif /* AF_INET6 */
--- a/jdk/src/solaris/native/java/net/NetworkInterface.c	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/solaris/native/java/net/NetworkInterface.c	Fri Feb 19 15:13:37 2010 -0800
@@ -253,8 +253,12 @@
     (JNIEnv *env, jclass cls, jobject iaObj) {
 
     netif *ifs, *curr;
+#ifdef AF_INET6
     int family = (*env)->GetIntField(env, iaObj, ni_iafamilyID) == IPv4?
         AF_INET : AF_INET6;
+#else
+    int family = AF_INET;
+#endif
     jobject obj = NULL;
     jboolean match = JNI_FALSE;
 
@@ -1528,6 +1532,7 @@
     strcpy((caddr_t)&(lifr.lifr_name), name_utf);
     if (ioctl(sock, SIOCGLIFMTU, (caddr_t)&lifr) >= 0) {
       ret = lifr.lifr_mtu;
+#ifdef AF_INET6
     } else {
       /* Try wIth an IPv6 socket in case the interface has only IPv6 addresses assigned to it */
       close(sock);
@@ -1547,6 +1552,12 @@
                                      "IOCTL failed");
       }
     }
+#else
+    } else {
+        NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
+                                     "IOCTL failed");
+    }
+#endif
 #endif
     close(sock);
   }
--- a/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c	Fri Feb 19 15:13:37 2010 -0800
@@ -605,8 +605,12 @@
     }
 
     iaObj = NET_SockaddrToInetAddress(env, (struct sockaddr *)&remote_addr, &port);
+#ifdef AF_INET6
     family = (*env)->GetIntField(env, iaObj, ia_familyID) == IPv4?
         AF_INET : AF_INET6;
+#else
+    family = AF_INET;
+#endif
     if (family == AF_INET) { /* this api can't handle IPV6 addresses */
         int address = (*env)->GetIntField(env, iaObj, ia_addressID);
         (*env)->SetIntField(env, addressObj, ia_addressID, address);
@@ -812,9 +816,9 @@
     jboolean retry;
 #ifdef __linux__
     jboolean connected = JNI_FALSE;
-    jobject connectedAddress;
-    jint connectedPort;
-    jlong prevTime;
+    jobject connectedAddress = NULL;
+    jint connectedPort = 0;
+    jlong prevTime = 0;
 #endif
 
     if (IS_NULL(fdObj)) {
@@ -1186,6 +1190,7 @@
  * Set outgoing multicast interface designated by a NetworkInterface.
  * Throw exception if failed.
  */
+#ifdef AF_INET6
 static void mcast_set_if_by_if_v6(JNIEnv *env, jobject this, int fd, jobject value) {
     static jfieldID ni_indexID;
     int index;
@@ -1222,6 +1227,7 @@
     }
 #endif
 }
+#endif /* AF_INET6 */
 
 /*
  * Set outgoing multicast interface designated by an InetAddress.
@@ -1251,6 +1257,7 @@
  * Set outgoing multicast interface designated by an InetAddress.
  * Throw exception if failed.
  */
+#ifdef AF_INET6
 static void mcast_set_if_by_addr_v6(JNIEnv *env, jobject this, int fd, jobject value) {
     static jclass ni_class;
     if (ni_class == NULL) {
@@ -1272,6 +1279,7 @@
 
     mcast_set_if_by_if_v6(env, this, fd, value);
 }
+#endif
 
 /*
  * Sets the multicast interface.
@@ -1307,6 +1315,7 @@
         /*
          * value is an InetAddress.
          */
+#ifdef AF_INET6
 #ifdef __solaris__
         if (ipv6_available()) {
             mcast_set_if_by_addr_v6(env, this, fd, value);
@@ -1320,12 +1329,16 @@
             mcast_set_if_by_addr_v6(env, this, fd, value);
         }
 #endif
+#else
+        mcast_set_if_by_addr_v4(env, this, fd, value);
+#endif  /* AF_INET6 */
     }
 
     if (opt == java_net_SocketOptions_IP_MULTICAST_IF2) {
         /*
          * value is a NetworkInterface.
          */
+#ifdef AF_INET6
 #ifdef __solaris__
         if (ipv6_available()) {
             mcast_set_if_by_if_v6(env, this, fd, value);
@@ -1339,6 +1352,9 @@
             mcast_set_if_by_if_v6(env, this, fd, value);
         }
 #endif
+#else
+        mcast_set_if_by_if_v4(env, this, fd, value);
+#endif  /* AF_INET6 */
     }
 }
 
@@ -1368,6 +1384,7 @@
 /*
  * Enable/disable local loopback of multicast datagrams.
  */
+#ifdef AF_INET6
 static void mcast_set_loop_v6(JNIEnv *env, jobject this, int fd, jobject value) {
     jclass cls;
     jfieldID fid;
@@ -1397,12 +1414,14 @@
     }
 #endif
 }
+#endif  /* AF_INET6 */
 
 /*
  * Sets the multicast loopback mode.
  */
 static void setMulticastLoopbackMode(JNIEnv *env, jobject this, int fd,
                                   jint opt, jobject value) {
+#ifdef AF_INET6
 #ifdef __solaris__
     if (ipv6_available()) {
         mcast_set_loop_v6(env, this, fd, value);
@@ -1416,6 +1435,9 @@
         mcast_set_loop_v6(env, this, fd, value);
     }
 #endif
+#else
+    mcast_set_loop_v4(env, this, fd, value);
+#endif  /* AF_INET6 */
 }
 
 /*
@@ -1838,7 +1860,7 @@
     if (opt == java_net_SocketOptions_SO_BINDADDR) {
         /* find out local IP address */
         SOCKADDR him;
-        int len = 0;
+        socklen_t len = 0;
         int port;
         jobject iaObj;
 
@@ -1941,6 +1963,7 @@
 /*
  * Set hops limit for a socket. Throw exception if failed.
  */
+#ifdef AF_INET6
 static void setHopLimit(JNIEnv *env, int fd, jint ttl) {
     int ittl = (int)ttl;
     if (JVM_SetSockOpt(fd, IPPROTO_IPV6, IPV6_MULTICAST_HOPS,
@@ -1949,6 +1972,7 @@
                        "Error setting socket option");
     }
 }
+#endif
 
 /*
  * Class:     java_net_PlainDatagramSocketImpl
@@ -1971,6 +1995,7 @@
         fd = (*env)->GetIntField(env, fdObj, IO_fd_fdID);
     }
     /* setsockopt to be correct ttl */
+#ifdef AF_INET6
 #ifdef __solaris__
     if (ipv6_available()) {
         setHopLimit(env, fd, ttl);
@@ -1986,7 +2011,10 @@
             (*env)->SetIntField(env, this, pdsi_ttlID, ttl);
         }
     }
-#endif
+#endif  // __linux__
+#else
+    setTTL(env, fd, ttl);
+#endif  /* AF_INET6 */
 }
 
 /*
--- a/jdk/src/solaris/native/java/net/net_util_md.c	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/solaris/native/java/net/net_util_md.c	Fri Feb 19 15:13:37 2010 -0800
@@ -319,8 +319,6 @@
 
 #endif /* __solaris */
 
-#endif /* AF_INET6 */
-
     /*
      *  OK we may have the stack available in the kernel,
      *  we should also check if the APIs are available.
@@ -354,6 +352,7 @@
 
     close(fd);
     return JNI_TRUE;
+#endif /* AF_INET6 */
 }
 
 void
--- a/jdk/src/solaris/native/java/net/net_util_md.h	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/solaris/native/java/net/net_util_md.h	Fri Feb 19 15:13:37 2010 -0800
@@ -133,7 +133,7 @@
 
 #else
 
-#define SOCKADDR        union { struct sockaddr_in him4 }
+#define SOCKADDR        union { struct sockaddr_in him4; }
 #define SOCKADDR_LEN    sizeof(SOCKADDR)
 
 #endif
--- a/jdk/src/solaris/native/sun/net/spi/SdpProvider.c	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/solaris/native/sun/net/spi/SdpProvider.c	Fri Feb 19 15:13:37 2010 -0800
@@ -44,7 +44,11 @@
 Java_sun_net_spi_SdpProvider_convert(JNIEnv *env, jclass cls, jint fd)
 {
 #ifdef PROTO_SDP
+#ifdef AF_INET6
     int domain = ipv6_available() ? AF_INET6 : AF_INET;
+#else
+    int domain = AF_INET;
+#endif
     int s = socket(domain, SOCK_STREAM, PROTO_SDP);
     if (s < 0) {
         JNU_ThrowIOExceptionWithLastError(env, "socket");
--- a/jdk/src/solaris/native/sun/nio/ch/Net.c	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/solaris/native/sun/nio/ch/Net.c	Fri Feb 19 15:13:37 2010 -0800
@@ -124,6 +124,7 @@
  * Copy IPv6 group, interface index, and IPv6 source address
  * into group_source_req structure.
  */
+#ifdef AF_INET6
 static void initGroupSourceReq(JNIEnv* env, jbyteArray group, jint index,
                                jbyteArray source, struct my_group_source_req* req)
 {
@@ -139,7 +140,7 @@
     sin6->sin6_family = AF_INET6;
     COPY_INET6_ADDRESS(env, source, (jbyte*)&(sin6->sin6_addr));
 }
-
+#endif
 
 JNIEXPORT void JNICALL
 Java_sun_nio_ch_Net_initIDs(JNIEnv *env, jclass clazz)
@@ -159,7 +160,11 @@
 {
     int fd;
     int type = (stream ? SOCK_STREAM : SOCK_DGRAM);
+#ifdef AF_INET6
     int domain = (ipv6_available() && preferIPv6) ? AF_INET6 : AF_INET;
+#else
+    int domain = AF_INET;
+#endif
 
     fd = socket(domain, type, 0);
     if (fd < 0) {
@@ -176,7 +181,7 @@
             return -1;
         }
     }
-#ifdef __linux__
+#if defined(__linux__) && defined(AF_INET6)
     /* By default, Linux uses the route default */
     if (domain == AF_INET6 && type == SOCK_DGRAM) {
         int arg = 1;
@@ -424,6 +429,7 @@
 Java_sun_nio_ch_Net_joinOrDrop6(JNIEnv *env, jobject this, jboolean join, jobject fdo,
                                 jbyteArray group, jint index, jbyteArray source)
 {
+#ifdef AF_INET6
     struct ipv6_mreq mreq6;
     struct my_group_source_req req;
     int opt, n, optlen;
@@ -454,12 +460,17 @@
         handleSocketError(env, errno);
     }
     return 0;
+#else
+    JNU_ThrowInternalError(env, "Should not get here");
+    return IOS_THROWN;
+#endif  /* AF_INET6 */
 }
 
 JNIEXPORT jint JNICALL
 Java_sun_nio_ch_Net_blockOrUnblock6(JNIEnv *env, jobject this, jboolean block, jobject fdo,
                                     jbyteArray group, jint index, jbyteArray source)
 {
+#ifdef AF_INET6
     struct my_group_source_req req;
     int n;
     int opt = (block) ? MCAST_BLOCK_SOURCE : MCAST_UNBLOCK_SOURCE;
@@ -474,6 +485,10 @@
         handleSocketError(env, errno);
     }
     return 0;
+#else
+    JNU_ThrowInternalError(env, "Should not get here");
+    return IOS_THROWN;
+#endif
 }
 
 JNIEXPORT void JNICALL
--- a/jdk/src/solaris/native/sun/nio/ch/SctpNet.c	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/solaris/native/sun/nio/ch/SctpNet.c	Fri Feb 19 15:13:37 2010 -0800
@@ -168,14 +168,18 @@
   (JNIEnv *env, jclass klass, jboolean oneToOne) {
     int fd;
     struct sctp_event_subscribe event;
+#ifdef AF_INET6
+    int domain = ipv6_available() ? AF_INET6 : AF_INET;
+#else
+    int domain = AF_INET;
+#endif
 
     /* Try to load the socket API extension functions */
     if (!funcsLoaded && !loadSocketExtensionFuncs(env)) {
         return 0;
     }
 
-    fd = socket(ipv6_available() ? AF_INET6 : AF_INET,
-            (oneToOne ? SOCK_STREAM : SOCK_SEQPACKET), IPPROTO_SCTP);
+    fd = socket(domain, (oneToOne ? SOCK_STREAM : SOCK_SEQPACKET), IPPROTO_SCTP);
 
     if (fd < 0) {
         return handleSocketError(env, errno);
--- a/jdk/src/windows/native/java/net/NetworkInterface_winXP.c	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/src/windows/native/java/net/NetworkInterface_winXP.c	Fri Feb 19 15:13:37 2010 -0800
@@ -172,7 +172,7 @@
     DWORD ret;
     IP_ADAPTER_ADDRESSES *ptr, *adapters=0;
     ULONG len=ipinflen, count=0;
-    netif *nif=0, *dup_nif, *last=0, *loopif=0;
+    netif *nif=0, *dup_nif, *last=0, *loopif=0, *curr;
     int tun=0, net=0;
 
     *netifPP = 0;
@@ -197,6 +197,20 @@
         last = nif;
     }
 
+    // Retrieve IPv4 addresses with the IP Helper API
+    curr = *netifPP;
+    while (curr != NULL) {
+        netaddr *netaddrP;
+        ret = enumAddresses_win(env, curr, &netaddrP);
+        if ((*env)->ExceptionOccurred(env)) {
+            free_netaddr(netaddrP);
+            return -1;
+        }
+        curr->addrs = netaddrP;
+        curr->naddrs += ret;
+        curr = curr->next;
+    }
+
     ret = getAdapters (env, &adapters);
     if (ret != ERROR_SUCCESS) {
         goto err;
@@ -350,6 +364,14 @@
         /* address is only usable if dad state is preferred or deprecated */
         if (uni_addr->DadState == IpDadStateDeprecated ||
                 uni_addr->DadState == IpDadStatePreferred) {
+            sock = uni_addr->Address.lpSockaddr;
+
+            // IPv4 addresses already retrieved with enumAddresses_win
+            if (sock->sa_family == AF_INET) {
+                uni_addr = uni_addr->Next;
+                continue;
+            }
+
             curr = (netaddr *)calloc (1, sizeof (netaddr));
             if (curr == 0) {
                 return -1;
@@ -361,15 +383,9 @@
                 prev->next = curr;
             }
             prev = curr;
-            sock = uni_addr->Address.lpSockaddr;
             SOCKETADDRESS_COPY (&curr->addr, sock);
             if (prefix != NULL) {
               curr->mask = (short)prefix->PrefixLength;
-              if (sock->sa_family == AF_INET) {
-                sock = prefix->Address.lpSockaddr;
-                SOCKETADDRESS_COPY(&curr->brdcast, sock);
-                curr->brdcast.him4.sin_addr.s_addr |= htonl((0xffffffff >> curr->mask));
-              }
               prefix = prefix->Next;
             }
             count ++;
--- a/jdk/test/com/sun/crypto/provider/KeyFactory/TestProviderLeak.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/test/com/sun/crypto/provider/KeyFactory/TestProviderLeak.java	Fri Feb 19 15:13:37 2010 -0800
@@ -28,7 +28,12 @@
  *     LoginContext
  * @author Brad Wetmore
  *
- * @run main/othervm -Xmx2m TestProviderLeak
+ * @run main/othervm -Xmx2m -XX:OldSize=1m -XX:NewSize=512k TestProviderLeak
+ *
+ * The original test invocation is below, but had to use the above
+ * workaround for bug 6923123.
+ *
+ * run main/othervm -Xmx2m TestProviderLeak
  */
 
 /*
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/demo/jvmti/compiledMethodLoad/CompiledMethodLoadTest.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+
+/* @test
+ * @bug 6580131
+ * @summary Test jvmti demo compiledMethodLoad
+ *
+ * @compile ../DemoRun.java ../Hello.java
+ * @build CompiledMethodLoadTest
+ * @run main CompiledMethodLoadTest Hello
+ */
+
+public class CompiledMethodLoadTest {
+
+    public static void main(String args[]) throws Exception {
+        DemoRun demo;
+
+        /* Run demo that uses JVMTI compiledMethodLoad agent (no options) */
+        demo = new DemoRun("compiledMethodLoad", "" /* options to compiledMethodLoad */ );
+        demo.runit(args[0]);
+
+        /* Make sure patterns in output look ok */
+        if (demo.output_contains("ERROR")) {
+            throw new RuntimeException("Test failed - ERROR seen in output");
+        }
+
+        /* Must be a pass. */
+        System.out.println("Test passed - cleanly terminated");
+    }
+}
--- a/jdk/test/demo/jvmti/heapTracker/HeapTrackerTest.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/test/demo/jvmti/heapTracker/HeapTrackerTest.java	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 2004-2005 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 2004-2010 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -43,7 +43,7 @@
 
         /* Make sure patterns in output look ok */
         if (demo.output_contains("ERROR")) {
-            throw new RuntimeException("Test failed - ERROR seen in oputput");
+            throw new RuntimeException("Test failed - ERROR seen in output");
         }
 
         /* Must be a pass. */
--- a/jdk/test/demo/jvmti/hprof/CpuTimesDefineClassTest.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/test/demo/jvmti/hprof/CpuTimesDefineClassTest.java	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 2004-2005 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 2004-2010 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -44,7 +44,7 @@
 
         /* Make sure patterns in output look ok */
         if (hprof.output_contains("ERROR")) {
-            throw new RuntimeException("Test failed - ERROR seen in oputput");
+            throw new RuntimeException("Test failed - ERROR seen in output");
         }
 
         /* Must be a pass. */
--- a/jdk/test/demo/jvmti/hprof/CpuTimesTest.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/test/demo/jvmti/hprof/CpuTimesTest.java	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 2004-2005 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 2004-2010 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -42,7 +42,7 @@
 
         /* Make sure patterns in output look ok */
         if (hprof.output_contains("ERROR")) {
-            throw new RuntimeException("Test failed - ERROR seen in oputput");
+            throw new RuntimeException("Test failed - ERROR seen in output");
         }
 
         /* Must be a pass. */
--- a/jdk/test/demo/jvmti/minst/MinstTest.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/test/demo/jvmti/minst/MinstTest.java	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 2006 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 2006-2010 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -43,7 +43,7 @@
 
         /* Make sure patterns in output look ok */
         if (demo.output_contains("ERROR")) {
-            throw new RuntimeException("Test failed - ERROR seen in oputput");
+            throw new RuntimeException("Test failed - ERROR seen in output");
         }
 
         /* Must be a pass. */
--- a/jdk/test/demo/jvmti/mtrace/TraceJFrame.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/test/demo/jvmti/mtrace/TraceJFrame.java	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 2004-2005 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 2004-2010 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -43,7 +43,7 @@
 
         /* Make sure patterns in output look ok */
         if (demo.output_contains("ERROR")) {
-            throw new RuntimeException("Test failed - ERROR seen in oputput");
+            throw new RuntimeException("Test failed - ERROR seen in output");
         }
 
         /* Must be a pass. */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/FontClass/FontPrivilege.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/*
+ * @test
+ * @bug 5010310 6319835 6904882
+ * @summary test fonts can be created in the presence of a security manager
+ * @run main/othervm/secure=java.lang.SecurityManager FontPrivilege
+ */
+
+import java.awt.Font;
+
+public class FontPrivilege {
+
+    public static void main(String[] args) throws Exception {
+        new Font("Helvetica", Font.PLAIN, 12).getFamily();
+        new Font("foo bar", Font.PLAIN, 12).getFamily();
+   }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/GraphicsEnvironment/TestGetDefScreenDevice.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/*
+ * @test
+ * @bug 6896335
+ * @summary Test GraphicsEnvironment.getDefaultScreenDevice() in headless mode
+ * @run main/othervm -Djava.awt.headless=true TestGetDefScreenDevice
+ */
+
+import java.awt.*;
+public class TestGetDefScreenDevice {
+
+    public static void main(String[] args) throws Exception {
+        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
+        try {
+            ge.getDefaultScreenDevice();
+            throw new Exception("Failed. HeadlessException not thrown");
+        } catch (HeadlessException he) {
+            // OK, test passed.
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/PrintJob/Security/SecurityDialogTest.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,105 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/**
+ * @test
+ * @bug 6195901 6195923 6195928 6195933 6491273 6888734
+ * @summary No SecurityException should be thrown when printing to a file
+            using the given policy.
+            Print to file option should be selected.
+ * @run main/othervm/policy=policy SecurityDialogTest
+ */
+import java.awt.*;
+import java.awt.event.*;
+import java.util.*;
+import java.io.*;
+
+
+public class SecurityDialogTest extends Frame implements ActionListener {
+    // Declare things used in the test, like buttons and labels here
+
+    Button nativeDlg, setSecurity;
+        boolean isNative = true;
+
+    public SecurityDialogTest() {
+
+        nativeDlg = new Button("Print Dialog");
+        nativeDlg.addActionListener(this);
+        setSecurity = new Button("Toggle Dialog");
+        setSecurity.addActionListener(this);
+        add("South", nativeDlg);
+        add("North", setSecurity);
+        setSize(300, 300);
+        setVisible(true);
+    }
+
+    public static void main(String args[]) {
+        System.out.println("Native dialog is the default");
+        SecurityDialogTest test = new SecurityDialogTest();
+    }
+
+    public void actionPerformed(ActionEvent e) {
+
+        if (e.getSource() == setSecurity) {
+            if (isNative) {
+                isNative = false;
+                System.out.println("Common dialog is the default");
+
+            } else {
+                isNative = true;
+                System.out.println("Native dialog is the default");
+            }
+            return;
+        }
+
+        JobAttributes  ja = new JobAttributes();
+        PageAttributes pa = new PageAttributes();
+
+        if (isNative) {
+            ja.setDialog(JobAttributes.DialogType.NATIVE);
+        } else {
+            ja.setDialog(JobAttributes.DialogType.COMMON);
+        }
+        ja.setDestination(JobAttributes.DestinationType.FILE);
+        ja.setFileName("mohan.ps");
+
+
+        PrintJob pjob = getToolkit().getPrintJob(this, null, ja, pa);
+
+        if (pjob != null) {
+            Graphics pg = pjob.getGraphics();
+            System.out.println("PJOB: " + pjob);
+            if (pg != null) {
+                System.out.println("Printer Graphics: " + pg);
+                this.printAll(pg);
+                pg.dispose();
+            } else {
+                System.out.println("Printer Graphics is null");
+            }
+            pjob.end();
+            System.out.println("DONE");
+        } else {
+            System.out.println("PJOB is null");
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/PrintJob/Security/policy	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,32 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/* AUTOMATICALLY GENERATED ON Thu Jan 03 15:48:39 PST 2002*/
+/* DO NOT EDIT */
+
+grant {
+ permission java.io.FilePermission "<<ALL FILES>>", "read,write";
+ permission java.lang.RuntimePermission "queuePrintJob"; 
+ permission java.lang.RuntimePermission "setSecurityManager"; 
+};
+
--- a/jdk/test/java/awt/TextArea/UsingWithMouse/SelectionAutoscrollTest.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/test/java/awt/TextArea/UsingWithMouse/SelectionAutoscrollTest.java	Fri Feb 19 15:13:37 2010 -0800
@@ -56,6 +56,7 @@
     TextArea textArea;
     Robot robot;
     final int desiredSelectionEnd = ('z'-'a'+1)*2;  // 52
+    final static int SCROLL_DELAY = 10; // ms
 
     public void start () {
         createObjects();
@@ -126,6 +127,8 @@
 
             moveMouseBelowTextArea( tremble%2!=0 );
             Util.waitForIdle( robot );
+            // it is needed to add some small delay on Gnome
+            waitUntilScrollIsPerformed(robot);
         }
 
         robot.mouseRelease( MouseEvent.BUTTON1_MASK );
@@ -141,9 +144,19 @@
     void moveMouseBelowTextArea( boolean shift ) {
         Dimension d = textArea.getSize();
         Point l = textArea.getLocationOnScreen();
+        int x = (int)(l.x+d.width*.5);
         int y = (int)(l.y+d.height*1.5);
         if( shift ) y+=15;
-        robot.mouseMove( (int)(l.x+d.width*.5), y );
+        robot.mouseMove( x, y );
+    }
+
+    void waitUntilScrollIsPerformed(Robot robot) {
+        try {
+            Thread.sleep( SCROLL_DELAY );
+        }
+        catch( Exception e ) {
+            throw new RuntimeException( e );
+        }
     }
 
     void checkResults() {
--- a/jdk/test/java/beans/Introspector/6380849/TestBeanInfo.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/test/java/beans/Introspector/6380849/TestBeanInfo.java	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /**
- * Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -38,6 +38,7 @@
 
 import java.beans.BeanInfo;
 import java.beans.Introspector;
+import java.lang.ref.Reference;
 import java.lang.reflect.Field;
 
 import sun.awt.SunToolkit;
@@ -61,9 +62,10 @@
         try {
             actual = Introspector.getBeanInfo(type);
             type = actual.getClass();
-            Field field = type.getDeclaredField("targetBeanInfo"); // NON-NLS: field name
+            Field field = type.getDeclaredField("targetBeanInfoRef"); // NON-NLS: field name
             field.setAccessible(true);
-            actual = (BeanInfo) field.get(actual);
+            Reference ref = (Reference) field.get(actual);
+            actual = (BeanInfo) ref.get();
         }
         catch (Exception exception) {
             throw new Error("unexpected error", exception);
--- a/jdk/test/java/beans/Introspector/Test5102804.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/test/java/beans/Introspector/Test5102804.java	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -24,9 +24,9 @@
 /*
  * @test
  * @bug 5102804
- * @ignore This test is not predictable with regards to GC
  * @summary Tests memory leak
  * @author Sergey Malenkov
+ * @run main/othervm -ms16m -mx16m Test5102804
  */
 
 import java.beans.BeanInfo;
--- a/jdk/test/java/beans/XMLEncoder/Test4646747.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/test/java/beans/XMLEncoder/Test4646747.java	Fri Feb 19 15:13:37 2010 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright 2004-2007 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 2004-2010 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,6 +26,7 @@
  * @bug 4646747
  * @summary Tests that persistence delegate is correct after memory stress
  * @author Mark Davidson
+ * @run main/othervm -ms16m -mx16m Test4646747
  */
 
 import java.beans.DefaultPersistenceDelegate;
@@ -41,11 +42,14 @@
         encoder.setPersistenceDelegate(Test4646747.class, new MyPersistenceDelegate());
         // WARNING: This can eat up a lot of memory
         Object[] obs = new Object[10000];
-        for (int i = 0; i < obs.length; i++) {
-            obs[i] = new int[1000];
+        while (obs != null) {
+            try {
+                obs = new Object[obs.length + obs.length / 3];
+            }
+            catch (OutOfMemoryError error) {
+                obs = null;
+            }
         }
-        System.gc();
-        System.gc();
         PersistenceDelegate pd = encoder.getPersistenceDelegate(Test4646747.class);
         if (!(pd instanceof MyPersistenceDelegate))
             throw new Error("persistence delegate has been lost");
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/net/InterfaceAddress/NetworkPrefixLength.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,84 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/* @test
+ * @bug 6707289
+ * @summary InterfaceAddress.getNetworkPrefixLength() does not conform to Javadoc
+ */
+
+import java.net.InetAddress;
+import java.net.Inet4Address;
+import java.net.InterfaceAddress;
+import java.net.NetworkInterface;
+import java.util.Enumeration;
+import static java.lang.System.out;
+
+public class NetworkPrefixLength {
+    static boolean passed = true;
+
+    public static void main(String[] args) throws Exception {
+        Enumeration<NetworkInterface> nics = NetworkInterface.getNetworkInterfaces();
+
+        while (nics.hasMoreElements()) {
+            NetworkInterface nic = nics.nextElement();
+            for (InterfaceAddress iaddr : nic.getInterfaceAddresses()) {
+                boolean valid = checkPrefix(iaddr);
+                if (!valid) {
+                    passed = false;
+                    debug(nic.getName(), iaddr);
+                }
+            }
+        }
+
+        if (!passed)
+            throw new RuntimeException("Failed: some interfaces have invalid prefix lengths");
+    }
+
+    static boolean checkPrefix(InterfaceAddress iaddr) {
+        InetAddress addr = iaddr.getAddress();
+
+        if (addr instanceof Inet4Address)
+            return checkIPv4PrefixLength(iaddr.getNetworkPrefixLength());
+        else
+            return checkIPv6PrefixLength(iaddr.getNetworkPrefixLength());
+    }
+
+    static boolean checkIPv4PrefixLength(int prefix) {
+        if (prefix >=0 && prefix <= 32)
+            return true;
+
+        return false;
+    }
+
+    static boolean checkIPv6PrefixLength(int prefix) {
+        if (prefix >=0 && prefix <= 128)
+            return true;
+
+        return false;
+    }
+
+    static void debug(String nicName, InterfaceAddress iaddr) {
+        out.println("NIC " + nicName + " has an address with an invalid prefix length:\n" + iaddr);
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/nio/charset/Charset/AvailableCharsetNames.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/* @test
+ * @bug 4422044
+ * @summary Ensure that keys in available-charset map
+ *          are identical to canonical names
+ */
+
+import java.io.*;
+import java.nio.*;
+import java.nio.charset.*;
+import java.util.*;
+
+
+public class AvailableCharsetNames {
+
+    public static void main(String[] args) throws Exception {
+        Iterator charsetIterator = Charset.availableCharsets().keySet().iterator();
+        while (charsetIterator.hasNext()) {
+            String charsetName = (String) charsetIterator.next();
+            Charset charset = Charset.forName(charsetName);
+            if (!charset.name().equals(charsetName)) {
+                throw new Exception("Error: Charset name mismatch - expected "
+                                   + charsetName + ", got " + charset.name());
+            }
+        }
+
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/nio/charset/Charset/CharsetContainmentTest.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,115 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/* @test
+   @bug 4626545 4696726
+   @summary Checks the inter containment relationships between NIO charsets
+ */
+
+import java.nio.charset.*;
+
+public class CharsetContainmentTest {
+    static String[] encodings =
+        { "US-ASCII", "UTF-16", "UTF-16BE", "UTF-16LE", "UTF-8",
+          "windows-1252", "ISO-8859-1", "ISO-8859-15", "ISO-8859-2",
+          "ISO-8859-3", "ISO-8859-4", "ISO-8859-5", "ISO-8859-6",
+          "ISO-8859-7", "ISO-8859-8", "ISO-8859-9", "ISO-8859-13",
+          "ISO-2022-JP", "ISO-2022-KR",
+
+          // Temporarily remove ISO-2022-CN-* charsets until full encoder/decoder
+          // support is added (4673614)
+          // "x-ISO-2022-CN-CNS", "x-ISO-2022-CN-GB",
+
+          "x-ISCII91", "GBK", "GB18030", "Big5",
+          "x-EUC-TW", "GB2312", "EUC-KR", "x-Johab", "Big5-HKSCS",
+          "x-MS950-HKSCS", "windows-1251", "windows-1253", "windows-1254",
+          "windows-1255", "windows-1256", "windows-1257", "windows-1258",
+          "x-mswin-936", "x-windows-949", "x-windows-950", "windows-31j",
+          "Shift_JIS", "EUC-JP", "KOI8-R", "TIS-620"
+        };
+
+    static String[][] contains = {
+        { "US-ASCII"},
+           encodings,
+           encodings,
+           encodings,
+           encodings,
+          {"US-ASCII", "windows-1252"},
+          {"US-ASCII", "ISO-8859-1"},
+          {"US-ASCII", "ISO-8859-15"},
+          {"US-ASCII", "ISO-8859-2"},
+          {"US-ASCII", "ISO-8859-3"},
+          {"US-ASCII", "ISO-8859-4"},
+          {"US-ASCII", "ISO-8859-5"},
+          {"US-ASCII", "ISO-8859-6"},
+          {"US-ASCII", "ISO-8859-7"},
+          {"US-ASCII", "ISO-8859-8"},
+          {"US-ASCII", "ISO-8859-9"},
+          {"US-ASCII", "ISO-8859-13"},
+          {"ISO-2022-JP"},
+          {"ISO-2022-KR"},
+          // Temporarily remove ISO-2022-CN-* charsets until full encoder/decoder
+          // support is added (4673614)
+          //{"x-ISO-2022-CN-CNS"},
+          //{"x-ISO-2022-CN-GB"},
+          {"US-ASCII", "x-ISCII91"},
+          {"US-ASCII", "GBK"},
+          encodings,
+          {"US-ASCII", "Big5"},
+          {"US-ASCII", "x-EUC-TW"},
+          {"US-ASCII", "GB2312"},
+          {"US-ASCII", "EUC-KR"},
+          {"US-ASCII", "x-Johab"},
+          {"US-ASCII", "Big5-HKSCS", "Big5"},
+          {"US-ASCII", "x-MS950-HKSCS", "x-windows-950"},
+          {"US-ASCII", "windows-1251"},
+          {"US-ASCII", "windows-1253"},
+          {"US-ASCII", "windows-1254"},
+          {"US-ASCII", "windows-1255"},
+          {"US-ASCII", "windows-1256"},
+          {"US-ASCII", "windows-1257"},
+          {"US-ASCII", "windows-1258"},
+          {"US-ASCII", "x-mswin-936"},
+          {"US-ASCII", "x-windows-949"},
+          {"US-ASCII", "x-windows-950"},
+          {"US-ASCII", "windows-31j" },
+          {"US-ASCII", "Shift_JIS"},
+          {"US-ASCII", "EUC-JP"},
+          {"US-ASCII", "KOI8-R"},
+          {"US-ASCII", "TIS-620"}};
+
+
+    public static void main(String[] args) throws Exception {
+        for (int i = 0; i < encodings.length; i++) {
+            Charset c = Charset.forName(encodings[i]);
+                for (int j = 0 ; j < contains[i].length; j++) {
+                    if (c.contains(Charset.forName(contains[i][j])))
+                        continue;
+                    else {
+                        throw new Exception ("Error: charset " + encodings[i] +
+                                        "doesn't contain " + contains[i][j]);
+                    }
+                }
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/nio/charset/Charset/Contains.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,166 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/* @test
+ * @summary Unit test for charset containment
+ * @bug 6798572
+ */
+
+import java.nio.charset.*;
+
+
+public class Contains {
+
+    static void ck(Charset cs1, Charset cs2, boolean cont) throws Exception {
+        if ((cs1.contains(cs2)) != cont)
+            throw new Exception("Wrong answer: "
+                                + cs1.name() + " contains " + cs2.name());
+        System.err.println(cs1.name()
+                           + (cont ? " contains " : " does not contain ")
+                           + cs2.name());
+    }
+
+    public static void main(String[] args) throws Exception {
+
+        Charset us_ascii = Charset.forName("US-ASCII");
+        Charset iso_8859_1 = Charset.forName("ISO-8859-1");
+        Charset iso_8859_15 = Charset.forName("ISO-8859-15");
+        Charset utf_8 = Charset.forName("UTF-8");
+        Charset utf_16be = Charset.forName("UTF-16BE");
+        Charset cp1252 = Charset.forName("CP1252");
+
+        ck(us_ascii, us_ascii, true);
+        ck(us_ascii, iso_8859_1, false);
+        ck(us_ascii, iso_8859_15, false);
+        ck(us_ascii, utf_8, false);
+        ck(us_ascii, utf_16be, false);
+        ck(us_ascii, cp1252, false);
+
+        ck(iso_8859_1, us_ascii, true);
+        ck(iso_8859_1, iso_8859_1, true);
+        ck(iso_8859_1, iso_8859_15, false);
+        ck(iso_8859_1, utf_8, false);
+        ck(iso_8859_1, utf_16be, false);
+        ck(iso_8859_1, cp1252, false);
+
+        ck(iso_8859_15, us_ascii, true);
+        ck(iso_8859_15, iso_8859_1, false);
+        ck(iso_8859_15, iso_8859_15, true);
+        ck(iso_8859_15, utf_8, false);
+        ck(iso_8859_15, utf_16be, false);
+        ck(iso_8859_15, cp1252, false);
+
+        ck(utf_8, us_ascii, true);
+        ck(utf_8, iso_8859_1, true);
+        ck(utf_8, iso_8859_15, true);
+        ck(utf_8, utf_8, true);
+        ck(utf_8, utf_16be, true);
+        ck(utf_8, cp1252, true);
+
+        ck(utf_16be, us_ascii, true);
+        ck(utf_16be, iso_8859_1, true);
+        ck(utf_16be, iso_8859_15, true);
+        ck(utf_16be, utf_8, true);
+        ck(utf_16be, utf_16be, true);
+        ck(utf_16be, cp1252, true);
+
+        ck(cp1252, us_ascii, true);
+        ck(cp1252, iso_8859_1, false);
+        ck(cp1252, iso_8859_15, false);
+        ck(cp1252, utf_8, false);
+        ck(cp1252, utf_16be, false);
+        ck(cp1252, cp1252, true);
+
+        checkUTF();
+    }
+
+    static void checkUTF() throws Exception {
+        for (String utfName : utfNames)
+            for (String csName : charsetNames)
+                ck(Charset.forName(utfName),
+                   Charset.forName(csName),
+                   true);
+    }
+
+    static String[] utfNames = {"utf-16",
+                         "utf-8",
+                         "utf-16le",
+                         "utf-16be",
+                         "x-utf-16le-bom"};
+
+    static String[] charsetNames = {
+        "US-ASCII",
+        "UTF-8",
+        "UTF-16",
+        "UTF-16BE",
+        "UTF-16LE",
+        "x-UTF-16LE-BOM",
+        "GBK",
+        "GB18030",
+        "ISO-8859-1",
+        "ISO-8859-15",
+        "ISO-8859-2",
+        "ISO-8859-3",
+        "ISO-8859-4",
+        "ISO-8859-5",
+        "ISO-8859-6",
+        "ISO-8859-7",
+        "ISO-8859-8",
+        "ISO-8859-9",
+        "ISO-8859-13",
+        "JIS_X0201",
+        "x-JIS0208",
+        "JIS_X0212-1990",
+        "GB2312",
+        "EUC-KR",
+        "x-EUC-TW",
+        "EUC-JP",
+        "x-euc-jp-linux",
+        "KOI8-R",
+        "TIS-620",
+        "x-ISCII91",
+        "windows-1251",
+        "windows-1252",
+        "windows-1253",
+        "windows-1254",
+        "windows-1255",
+        "windows-1256",
+        "windows-1257",
+        "windows-1258",
+        "windows-932",
+        "x-mswin-936",
+        "x-windows-949",
+        "x-windows-950",
+        "windows-31j",
+        "Big5",
+        "Big5-HKSCS",
+        "x-MS950-HKSCS",
+        "ISO-2022-JP",
+        "ISO-2022-KR",
+        "x-ISO-2022-CN-CNS",
+        "x-ISO-2022-CN-GB",
+        "Big5-HKSCS",
+        "x-Johab",
+        "Shift_JIS"
+    };
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/nio/charset/Charset/Default.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/*
+ */
+
+import java.nio.charset.*;
+
+
+public class Default {
+
+    public static void main(String[] args) {
+        System.out.println(Charset.defaultCharset());
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/nio/charset/Charset/EmptyCharsetName.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,102 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/* @test
+ * @bug 4786884
+ * @summary Ensure that passing the empty string to Charset methods and
+ *          constructors causes an IllegalArgumentException to be thrown
+ *
+ * @build EmptyCharsetName
+ * @run main EmptyCharsetName
+ * @run main/othervm -Dsun.nio.cs.bugLevel=1.4 EmptyCharsetName
+ */
+
+import java.io.*;
+import java.nio.*;
+import java.nio.charset.*;
+
+
+public class EmptyCharsetName {
+
+    static boolean compat;
+
+    static abstract class Test {
+
+        public abstract void go() throws Exception;
+
+        Test() throws Exception {
+            try {
+                go();
+            } catch (Exception x) {
+                if (compat) {
+                    if (x instanceof UnsupportedCharsetException) {
+                        System.err.println("Thrown as expected: " + x);
+                        return;
+                    }
+                    throw new Exception("Exception thrown", x);
+                }
+                if (x instanceof IllegalCharsetNameException) {
+                    System.err.println("Thrown as expected: " + x);
+                    return;
+                }
+                throw new Exception("Incorrect exception: "
+                                    + x.getClass().getName(),
+                                    x);
+            }
+            if (!compat)
+                throw new Exception("No exception thrown");
+        }
+
+    }
+
+    public static void main(String[] args) throws Exception {
+
+        // If sun.nio.cs.bugLevel == 1.4 then we want the 1.4 behavior
+        String bl = System.getProperty("sun.nio.cs.bugLevel");
+        compat = (bl != null && bl.equals("1.4"));
+
+        new Test() {
+                public void go() throws Exception {
+                    Charset.forName("");
+                }};
+        new Test() {
+                public void go() throws Exception {
+                    Charset.isSupported("");
+                }};
+        new Test() {
+                public void go() throws Exception {
+                    new Charset("", new String[] { }) {
+                            public CharsetDecoder newDecoder() {
+                                return null;
+                            }
+                            public CharsetEncoder newEncoder() {
+                                return null;
+                            }
+                            public boolean contains(Charset cs) {
+                                return false;
+                            }
+                        };
+                }};
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/nio/charset/Charset/EncDec.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/* @test
+ * @summary Unit test for encode/decode convenience methods
+ */
+
+
+import java.nio.*;
+import java.nio.charset.*;
+
+
+public class EncDec {
+
+    public static void main(String[] args) throws Exception {
+        String s = "Hello, world!";
+        ByteBuffer bb = ByteBuffer.allocate(100);
+        bb.put(Charset.forName("ISO-8859-15").encode(s)).flip();
+        String t = Charset.forName("UTF-8").decode(bb).toString();
+        System.err.println(t);
+        if (!t.equals(s))
+            throw new Exception("Mismatch: " + s + " != " + t);
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/nio/charset/Charset/IllegalCharsetName.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/* @test
+ * @bug 6330020
+ * @summary Ensure Charset.forName/isSupport throws the correct exception
+ *          if the charset names passed in are illegal.
+ */
+
+import java.io.*;
+import java.nio.*;
+import java.nio.charset.*;
+import java.util.*;
+
+public class IllegalCharsetName {
+    public static void main(String[] args) throws Exception {
+        String[] illegalNames = {
+            ".",
+            "_",
+            ":",
+            "-",
+            ".name",
+            "_name",
+            ":name",
+            "-name",
+            "name*name",
+            "name?name"
+        };
+        for (int i = 0; i < illegalNames.length; i++) {
+            try {
+                Charset.forName(illegalNames[i]);
+                throw new Exception("Charset.forName(): No exception thrown");
+            } catch (IllegalCharsetNameException x) { //expected
+            }
+
+            try {
+                Charset.isSupported(illegalNames[i]);
+                throw new Exception("Charset.isSupported(): No exception thrown");
+            } catch (IllegalCharsetNameException x) { //expected
+            }
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/nio/charset/Charset/NIOCharsetAvailabilityTest.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,229 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/*
+ * @test
+ * @bug 4777124 6920545
+ * @summary Verify that all Charset subclasses are available through the API
+ */
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.nio.charset.Charset;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+import java.util.Vector;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
+import sun.misc.Launcher;
+
+
+public class NIOCharsetAvailabilityTest {
+
+    public static void main(String[] args) throws Exception {
+        // build the set of all Charset subclasses in the
+        // two known charset implementation packages
+        Set charsets = new HashSet();
+        addCharsets(charsets, "sun.nio.cs");
+        addCharsets(charsets, "sun.nio.cs.ext");
+
+        // remove the charsets that the API says are available
+        Collection availableCharsets = Charset.availableCharsets().values();
+        Iterator iter = availableCharsets.iterator();
+        while (iter.hasNext()) {
+            charsets.remove(((Charset) iter.next()).getClass());
+        }
+
+        // remove the known pseudo-charsets that serve only to implement
+        // other charsets, but shouldn't be known to the public
+        charsets.remove(Class.forName("sun.nio.cs.Unicode"));
+        charsets.remove(Class.forName("sun.nio.cs.ext.HKSCS"));
+        charsets.remove(Class.forName("sun.nio.cs.ext.HKSCS_2001"));
+        charsets.remove(Class.forName("sun.nio.cs.ext.ISO2022"));
+        charsets.remove(Class.forName("sun.nio.cs.ext.ISO2022_CN_GB"));
+        charsets.remove(Class.forName("sun.nio.cs.ext.ISO2022_CN_CNS"));
+
+        // report the charsets that are implemented but not available
+        iter = charsets.iterator();
+        while (iter.hasNext()) {
+            System.out.println("Unused Charset subclass: " + ((Class) iter.next()).getName());
+        }
+        if (charsets.size() > 0) {
+            throw new RuntimeException();
+        }
+    }
+
+    private static Vector classPathSegments = new Vector();
+
+    private static void addCharsets(Set charsets, final String packageName)
+            throws Exception {
+
+        String classPath =
+            (String) java.security.AccessController.doPrivileged(
+             new sun.security.action.GetPropertyAction("sun.boot.class.path"));
+        String s =
+            (String) java.security.AccessController.doPrivileged(
+             new sun.security.action.GetPropertyAction("java.class.path"));
+
+        // Search combined system and application class path
+        if (s != null && s.length() != 0) {
+            classPath += File.pathSeparator + s;
+        }
+        while (classPath != null && classPath.length() != 0) {
+            int i = classPath.lastIndexOf(java.io.File.pathSeparatorChar);
+            String dir = classPath.substring(i + 1);
+            if (i == -1) {
+                classPath = null;
+            } else {
+                classPath = classPath.substring(0, i);
+            }
+            classPathSegments.insertElementAt(dir, 0);
+        }
+
+        // add extensions from the extension class loader
+        ClassLoader appLoader = Launcher.getLauncher().getClassLoader();
+        URLClassLoader extLoader = (URLClassLoader) appLoader.getParent();
+        URL[] urls = extLoader.getURLs();
+        for (int i = 0; i < urls.length; i++) {
+            try {
+                URI uri = new URI(urls[i].toString());
+                classPathSegments.insertElementAt(uri.getPath(), 0);
+            } catch (URISyntaxException e) {
+            }
+        }
+
+        String[] classList = (String[])
+            java.security.AccessController.doPrivileged(
+                                    new java.security.PrivilegedAction() {
+                public Object run() {
+                    return getClassList(packageName, "");
+                }
+            });
+
+        for (int i = 0; i < classList.length; i++) {
+            try {
+                Class clazz = Class.forName(packageName + "." + classList[i]);
+                Class superclazz = clazz.getSuperclass();
+                while (superclazz != null && !superclazz.equals(Object.class)) {
+                    if (superclazz.equals(Charset.class)) {
+                        charsets.add(clazz);
+                        break;
+                    } else {
+                        superclazz = superclazz.getSuperclass();
+                    }
+                }
+            } catch (ClassNotFoundException e) {
+            }
+        }
+    }
+
+    private static final char ZIPSEPARATOR = '/';
+
+    /**
+     * Walk through CLASSPATH and find class list from a package.
+     * The class names start with prefix string
+     * @param package name, class name prefix
+     * @return class list in an array of String
+     */
+    private static String[] getClassList(String pkgName, String prefix) {
+        Vector listBuffer = new Vector();
+        String packagePath = pkgName.replace('.', File.separatorChar)
+            + File.separatorChar;
+        String zipPackagePath = pkgName.replace('.', ZIPSEPARATOR)
+            + ZIPSEPARATOR;
+        for (int i = 0; i < classPathSegments.size(); i++){
+            String onePath = (String) classPathSegments.elementAt(i);
+            File f = new File(onePath);
+            if (!f.exists())
+                continue;
+            if (f.isFile())
+                scanFile(f, zipPackagePath, listBuffer, prefix);
+            else if (f.isDirectory()) {
+                String fullPath;
+                if (onePath.endsWith(File.separator))
+                    fullPath = onePath + packagePath;
+                else
+                    fullPath = onePath + File.separatorChar + packagePath;
+                File dir = new File(fullPath);
+                if (dir.exists() && dir.isDirectory())
+                    scanDir(dir, listBuffer, prefix);
+            }
+        }
+        String[] classNames = new String[listBuffer.size()];
+        listBuffer.copyInto(classNames);
+        return classNames;
+    }
+
+    private static void addClass (String className, Vector listBuffer, String prefix) {
+        if (className != null && className.startsWith(prefix)
+                    && !listBuffer.contains(className))
+            listBuffer.addElement(className);
+    }
+
+    private static String midString(String str, String pre, String suf) {
+        String midStr;
+        if (str.startsWith(pre) && str.endsWith(suf))
+            midStr = str.substring(pre.length(), str.length() - suf.length());
+        else
+            midStr = null;
+        return midStr;
+    }
+
+    private static void scanDir(File dir, Vector listBuffer, String prefix) {
+        String[] fileList = dir.list();
+        for (int i = 0; i < fileList.length; i++) {
+            addClass(midString(fileList[i], "", ".class"), listBuffer, prefix);
+        }
+    }
+
+    private static void scanFile(File f, String packagePath, Vector listBuffer,
+                String prefix) {
+        try {
+            ZipInputStream zipFile = new ZipInputStream(new FileInputStream(f));
+            ZipEntry entry;
+            while ((entry = zipFile.getNextEntry()) != null) {
+                String eName = entry.getName();
+                if (eName.startsWith(packagePath)) {
+                    if (eName.endsWith(".class")) {
+                        addClass(midString(eName, packagePath, ".class"),
+                                listBuffer, prefix);
+                    }
+                }
+            }
+        } catch (FileNotFoundException e) {
+            System.out.println("file not found:" + e);
+        } catch (IOException e) {
+            System.out.println("file IO Exception:" + e);
+        } catch (Exception e) {
+            System.out.println("Exception:" + e);
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/nio/charset/Charset/NullCharsetName.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/* @test
+ * @bug 4448594
+ * @summary Ensure passing null to Charset.forName throws the correct exception
+ */
+
+import java.io.*;
+import java.nio.*;
+import java.nio.charset.*;
+import java.util.*;
+
+
+public class NullCharsetName {
+
+    public static void main(String[] args) throws Exception {
+        try {
+            Charset.forName(null);
+        } catch (Exception x) {
+            if (x instanceof IllegalArgumentException) {
+                System.err.println("Thrown as expected: " + x);
+                return;
+            }
+            throw new Exception("Incorrect exception: "
+                                + x.getClass().getName(),
+                                x);
+        }
+        throw new Exception("No exception thrown");
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/nio/charset/Charset/RegisteredCharsets.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,1270 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/* @test
+ * @bug 4473201 4696726 4652234 4482298 4784385 4966197 4267354 5015668
+ * @summary Check that registered charsets are actually registered
+ */
+
+import java.io.*;
+import java.nio.*;
+import java.nio.charset.*;
+import java.util.*;
+
+public class RegisteredCharsets {
+
+    static String [] ianaRegistered = {
+                            "US-ASCII", "UTF8", "Big5", "EUC-JP",
+                            "GBK", "GB18030", "ISO-2022-KR", "ISO-2022-JP",
+                            "GB2312",  // IANA preferred name for "EUC-CN"
+                            "ISO-8859-1", "ISO-8859-2", "ISO-8859-3",
+                            "ISO-8859-4", "ISO-8859-5", "ISO-8859-6",
+                            "ISO-8859-7", "ISO-8859-8", "ISO-8859-9",
+                            "ISO-8859-13", "ISO-8859-15", "windows-1251",
+                            "windows-1252", "windows-1253", "windows-1254",
+                            "windows-1255", "windows-1256", "windows-31j",
+                            "Shift_JIS", "JIS_X0201", "JIS_X0212-1990",
+                            "TIS-620", "Big5-HKSCS",
+                            "ISO-2022-CN",
+                            "IBM850",
+                            "IBM852",
+                            "IBM855",
+                            "IBM857",
+                            "IBM860",
+                            "IBM861",
+                            "IBM862",
+                            "IBM863",
+                            "IBM864",
+                            "IBM865",
+                            "IBM866",
+                            "IBM868",
+                            "IBM869",
+                            "IBM437",
+                            "IBM775",
+                            "IBM037",
+                            "IBM1026",
+                            "IBM273",
+                            "IBM277",
+                            "IBM278",
+                            "IBM280",
+                            "IBM284",
+                            "IBM285",
+                            "IBM297",
+                            "IBM420",
+                            "IBM424",
+                            "IBM500",
+                            "IBM-Thai",
+                            "IBM870",
+                            "IBM871",
+                            "IBM918",
+                            "IBM1047",
+                            "IBM01140",
+                            "IBM01141",
+                            "IBM01142",
+                            "IBM01143",
+                            "IBM01144",
+                            "IBM01145",
+                            "IBM01146",
+                            "IBM01147",
+                            "IBM01148",
+                            "IBM01149",
+                            "IBM00858" };
+
+    static String [] ianaUnRegistered = {
+                            "x-EUC-TW", "x-ISCII91",
+                            "x-windows-949", "x-windows-950",
+                            "x-mswin-936", "x-JIS0208",
+                            "x-ISO-8859-11",
+                            "x-windows-874",
+                            "x-PCK", "x-JISAutoDetect", "x-Johab",
+                            "x-MS950-HKSCS",
+                            "x-Big5-Solaris",
+                            "x-ISO-2022-CN-CNS",
+                            "x-ISO-2022-CN-GB",
+                            "x-MacArabic",
+                            "x-MacCentralEurope",
+                            "x-MacCroatian",
+                            "x-MacCyrillic",
+                            "x-MacDingbat",
+                            "x-MacGreek",
+                            "x-MacHebrew",
+                            "x-MacIceland",
+                            "x-MacRoman",
+                            "x-MacRomania",
+                            "x-MacSymbol",
+                            "x-MacThai",
+                            "x-MacTurkish",
+                            "x-MacUkraine",
+                            "x-IBM942",
+                            "x-IBM942C",
+                            "x-IBM943",
+                            "x-IBM943C",
+                            "x-IBM948",
+                            "x-IBM950",
+                            "x-IBM930",
+                            "x-IBM935",
+                            "x-IBM937",
+                            "x-IBM856",
+                            "x-IBM874",
+                            "x-IBM737",
+                            "x-IBM1006",
+                            "x-IBM1046",
+                            "x-IBM1098",
+                            "x-IBM1025",
+                            "x-IBM1112",
+                            "x-IBM1122",
+                            "x-IBM1123",
+                            "x-IBM1124",
+                            "x-IBM875",
+                            "x-IBM921",
+                            "x-IBM922",
+                            "x-IBM1097",
+                            "x-IBM949",
+                            "x-IBM949C",
+                            "x-IBM939",
+                            "x-IBM933",
+                            "x-IBM1381",
+                            "x-IBM1383",
+                            "x-IBM970",
+                            "x-IBM964",
+                            "x-IBM33722",
+                            "x-IBM1006",
+                            "x-IBM1046",
+                            "x-IBM1097",
+                            "x-IBM1098",
+                            "x-IBM1112",
+                            "x-IBM1122",
+                            "x-IBM1123",
+                            "x-IBM1124",
+                            "x-IBM33722",
+                            "x-IBM737",
+                            "x-IBM856",
+                            "x-IBM874",
+                            "x-IBM875",
+                            "x-IBM922",
+                            "x-IBM933",
+                            "x-IBM964" };
+
+    static void check(String csn, boolean testRegistered) throws Exception {
+        if (!Charset.forName(csn).isRegistered() && testRegistered)
+                throw new Exception("Not registered: " + csn);
+        else if (Charset.forName(csn).isRegistered() && !testRegistered)
+                throw new Exception("Registered: " + csn + "should be unregistered");
+    }
+
+    static void aliasCheck(String canonicalName, String[] aliasNames) throws Exception
+    {
+        for (int k = 0; k < aliasNames.length; k++ ) {
+            Charset cs = Charset.forName(aliasNames[k]);
+            if (!cs.name().equals(canonicalName)) {
+                throw new Exception("Unexpected Canonical name " + canonicalName);
+            }
+        }
+    }
+
+    public static void main(String[] args) throws Exception {
+
+        for (int i = 0; i < ianaRegistered.length ; i++)
+            check(ianaRegistered[i], true);
+
+        for (int i = 0; i < ianaUnRegistered.length ; i++)
+            check(ianaUnRegistered[i], false);
+
+        // Check aliases registered with IANA for all NIO supported
+        // Charset implementations.
+        //
+        // The aliases below are in sync with the IANA registered charset
+        // document at: http://www.iana.org/assignments/character-sets
+        // Last updated 7/25/2002
+
+        aliasCheck("US-ASCII",
+                new String[] {"ascii","ANSI_X3.4-1968",
+                "iso-ir-6","ANSI_X3.4-1986", "ISO_646.irv:1991",
+                "ASCII", "ISO646-US","us","IBM367","cp367",
+                "csASCII", "default"});
+
+        aliasCheck("UTF-8",
+                new String[] {
+                    "UTF8",
+                    "unicode-1-1-utf-8"
+                });
+
+        aliasCheck("UTF-16",
+                new String[] {
+                    "UTF_16",
+                    "utf16"
+                });
+
+        aliasCheck("UTF-16BE",
+                new String[] {
+                    "UTF_16BE",
+                    "ISO-10646-UCS-2",
+                    "X-UTF-16BE",
+                    "UnicodeBigUnmarked"
+                });
+
+        aliasCheck("UTF-16LE",
+                new String[] {
+                    "UTF_16LE",
+                    "X-UTF-16LE",
+                    "UnicodeLittleUnmarked"
+                });
+
+        aliasCheck("Big5",
+                new String[] {
+                    "csBig5"
+                });
+
+        aliasCheck("Big5-HKSCS",
+                new String[] {
+                    "Big5_HKSCS",
+                    "big5hk",
+                    "big5-hkscs",
+                    "big5-hkscs:unicode3.0",
+                    "big5hkscs"
+                });
+
+        aliasCheck("x-MS950-HKSCS",
+                new String[] {
+                    "MS950_HKSCS"
+                });
+
+        aliasCheck("GB18030",
+                new String[] {
+                    "gb18030-2000"
+                });
+
+        aliasCheck("ISO-2022-KR", new String[] {"csISO2022KR"});
+        aliasCheck("ISO-2022-JP", new String[] {"csISO2022JP"});
+        aliasCheck("EUC-KR", new String[] { "csEUCKR"});
+        aliasCheck("ISO-8859-1",
+                new String[] {
+
+                    // IANA aliases
+                    "iso-ir-100",
+                    "ISO_8859-1",
+                    "latin1",
+                    "l1",
+                    "IBM819",
+                    "cp819",
+                    "csISOLatin1",
+
+                    // JDK historical aliases
+                    "819",
+                    "IBM-819",
+                    "ISO8859_1",
+                    "ISO_8859-1:1987",
+                    "ISO_8859_1",
+                    "8859_1",
+                    "ISO8859-1",
+
+                });
+
+        aliasCheck("ISO-8859-2",
+            new String[] {
+                "ISO_8859-2",
+                "ISO_8859-2:1987",
+                "iso-ir-101",
+                "latin2",
+                "l2",
+                "8859_2",
+                "iso_8859-2:1987",
+                "iso8859-2",
+                "ibm912",
+                "ibm-912",
+                "cp912",
+                "912",
+                "csISOLatin2"});
+
+        aliasCheck("ISO-8859-3",
+                new String[] {"latin3",
+                "ISO_8859-3:1988",
+                "iso-ir-109",
+                "l3",
+                "8859_3",
+                "iso_8859-3:1988",
+                "iso8859-3",
+                "ibm913",
+                "ibm-913",
+                "cp913",
+                "913",
+                "csISOLatin3"});
+
+        aliasCheck("ISO-8859-4",
+                new String[] {"csISOLatin4",
+                    "ISO_8859-4:1988",
+                    "iso-ir-110",
+                    "latin4",
+                    "8859_4",
+                    "iso_8859-4:1988",
+                    "iso8859-4",
+                    "ibm914",
+                    "ibm-914",
+                    "cp914",
+                    "914",
+                    "l4"});
+
+        aliasCheck("ISO-8859-5",
+                new String[] {
+                    "iso8859_5", // JDK historical
+                    "8859_5",
+                    "iso-ir-144",
+                    "ISO_8859-5",
+                    "ISO_8859-5:1988",
+                    "ISO8859-5",
+                    "cyrillic",
+                    "ibm915",
+                    "ibm-915",
+                    "915",
+                    "cp915",
+                    "csISOLatinCyrillic"
+                });
+
+        aliasCheck("ISO-8859-6",
+                new String[] {"ISO_8859-6:1987",
+                "iso-ir-127",
+                "ISO_8859-6",
+                "ECMA-114",
+                "ASMO-708",
+                "arabic",
+                "8859_6",
+                "iso_8859-6:1987",
+                "iso8859-6",
+                "ibm1089",
+                "ibm-1089",
+                "cp1089",
+                "1089",
+                "csISOLatinArabic"});
+
+        aliasCheck("ISO-8859-7",
+                new String[] {"ISO_8859-7:1987",
+                "iso-ir-126",
+                "ISO_8859-7",
+                "ELOT_928",
+                "ECMA-118",
+                "greek",
+                "greek8",
+                "8859_7",
+                "iso_8859-7:1987",
+                "iso8859-7",
+                "ibm813",
+                "ibm-813",
+                "cp813",
+                "813",
+                "csISOLatinGreek"});
+
+        aliasCheck("ISO-8859-8",
+                new String[] {
+                "ISO_8859-8:1988",
+                "iso-ir-138",
+                "ISO_8859-8",
+                "hebrew",
+                "8859_8",
+                "iso_8859-8:1988",
+                "iso8859-8",
+                "ibm916",
+                "ibm-916",
+                "cp916",
+                "916",
+                "csISOLatinHebrew"});
+
+        aliasCheck("ISO-8859-9",
+                new String[] {"ISO_8859-9:1989",
+                "iso-ir-148",
+                "ISO_8859-9",
+                "latin5",
+                "l5",
+                "8859_9",
+                "iso8859-9",
+                "ibm920",
+                "ibm-920",
+                "cp920",
+                "920",
+                "csISOLatin5"});
+
+        aliasCheck("ISO-8859-13",
+                new String[] {
+                    "iso8859_13", // JDK historical
+                    "iso_8859-13",
+                    "8859_13",
+                    "ISO8859-13"
+                });
+
+        aliasCheck("ISO-8859-15",
+                new String[] {
+                    // IANA alias
+                    "ISO_8859-15",
+                    // JDK historical aliases
+                    "8859_15",
+                    "ISO-8859-15",
+                    "ISO_8859-15",
+                    "ISO8859-15",
+                    "ISO8859_15",
+                    "IBM923",
+                    "IBM-923",
+                    "cp923",
+                    "923",
+                    "LATIN0",
+                    "LATIN9",
+                    "L9",
+                    "csISOlatin0",
+                    "csISOlatin9",
+                    "ISO8859_15_FDIS"
+
+                });
+
+        aliasCheck("JIS_X0212-1990",
+                new String[] {
+                "iso-ir-159",
+                "csISO159JISX02121990"});
+
+        aliasCheck("JIS_X0201",
+                new String[]{
+                "X0201",
+                "csHalfWidthKatakana"});
+
+        aliasCheck("KOI8-R",
+                new String[] {
+                "KOI8_R",
+                "csKOI8R"});
+
+        aliasCheck("GBK",
+                new String[] {
+                "windows-936"});
+
+        aliasCheck("Shift_JIS",
+                new String[] {
+                "MS_Kanji",
+                "csShiftJIS"});
+
+        aliasCheck("EUC-JP",
+                new String[] {
+                "Extended_UNIX_Code_Packed_Format_for_Japanese",
+                "csEUCPkdFmtJapanese"});
+
+        aliasCheck("Big5", new String[] {"csBig5"});
+
+        aliasCheck("windows-31j", new String[] {"csWindows31J"});
+
+        aliasCheck("x-iso-8859-11",
+                    new String[] { "iso-8859-11", "iso8859_11" });
+
+        aliasCheck("windows-1250",
+                new String[] {
+                    "cp1250",
+                    "cp5346"
+                });
+
+        aliasCheck("windows-1251",
+                new String[] {
+                    "cp1251",
+                    "cp5347",
+                    "ansi-1251"
+                });
+
+        aliasCheck("windows-1252",
+                new String[] {
+                    "cp1252",
+                    "cp5348"
+                });
+
+        aliasCheck("windows-1253",
+                new String[] {
+                    "cp1253",
+                    "cp5349"
+                });
+
+        aliasCheck("windows-1254",
+                new String[] {
+                    "cp1254",
+                    "cp5350"
+                });
+
+        aliasCheck("windows-1255",
+                new String[] {
+                    "cp1255"
+                });
+
+        aliasCheck("windows-1256",
+                new String[] {
+                    "cp1256"
+                });
+
+        aliasCheck("windows-1257",
+                new String[] {
+                    "cp1257",
+                    "cp5353"
+                });
+
+        aliasCheck("windows-1258",
+                new String[] {
+                    "cp1258"
+                });
+
+        aliasCheck("x-windows-874",
+                new String[] {
+                    "ms874", "ms-874", "windows-874" });
+
+        aliasCheck("GB2312",
+                new String[] {
+                    "x-EUC-CN",
+                    "gb2312-80",
+                    "gb2312-1980",
+                    "euc-cn",
+                    "euccn" });
+
+        aliasCheck("x-IBM942" ,
+                new String[] {
+                    "cp942", // JDK historical
+                    "ibm942",
+                    "ibm-942",
+                    "942"
+                });
+
+        aliasCheck("x-IBM942C" ,
+                new String[] {
+                    "cp942C", // JDK historical
+                    "ibm942C",
+                    "ibm-942C",
+                    "942C"
+                } );
+
+        aliasCheck("x-IBM943" ,
+                new String[] {
+                    "cp943", // JDK historical
+                    "ibm943",
+                    "ibm-943",
+                    "943"
+                } );
+
+        aliasCheck("x-IBM943C" ,
+                new String[] {
+                    "cp943c", // JDK historical
+                    "ibm943C",
+                    "ibm-943C",
+                    "943C"
+                } );
+
+        aliasCheck("x-IBM948" ,
+                new String[] {
+                    "cp948", // JDK historical
+                    "ibm948",
+                    "ibm-948",
+                    "948"
+                } );
+
+        aliasCheck("x-IBM950" ,
+                new String[] {
+                    "cp950", // JDK historical
+                    "ibm950",
+                    "ibm-950",
+                    "950"
+                } );
+
+        aliasCheck("x-IBM930" ,
+                new String[] {
+                    "cp930", // JDK historical
+                    "ibm930",
+                    "ibm-930",
+                    "930"
+                } );
+
+        aliasCheck("x-IBM935" ,
+                new String[] {
+                    "cp935", // JDK historical
+                    "ibm935",
+                    "ibm-935",
+                    "935"
+                } );
+
+        aliasCheck("x-IBM937" ,
+                new String[] {
+                    "cp937", // JDK historical
+                    "ibm937",
+                    "ibm-937",
+                    "937"
+                } );
+
+        aliasCheck("IBM850" ,
+                new String[] {
+                    "cp850", // JDK historical
+                    "ibm-850",
+                    "ibm850",
+                    "850",
+                    "cspc850multilingual"
+                } );
+
+        aliasCheck("IBM852" ,
+                new String[] {
+                    "cp852", // JDK historical
+                    "ibm852",
+                    "ibm-852",
+                    "852",
+                    "csPCp852"
+                } );
+
+        aliasCheck("IBM855" ,
+                new String[] {
+                    "cp855", // JDK historical
+                    "ibm-855",
+                    "ibm855",
+                    "855",
+                    "cspcp855"
+                } );
+
+        aliasCheck("x-IBM856" ,
+                new String[] {
+                    "cp856", // JDK historical
+                    "ibm-856",
+                    "ibm856",
+                    "856"
+                } );
+
+        aliasCheck("IBM857" ,
+                new String[] {
+                    "cp857", // JDK historical
+                    "ibm857",
+                    "ibm-857",
+                    "857",
+                    "csIBM857"
+                } );
+
+        aliasCheck("IBM860" ,
+                new String[] {
+                    "cp860", // JDK historical
+                    "ibm860",
+                    "ibm-860",
+                    "860",
+                    "csIBM860"
+                } );
+        aliasCheck("IBM861" ,
+                new String[] {
+                    "cp861", // JDK historical
+                    "ibm861",
+                    "ibm-861",
+                    "861",
+                    "csIBM861"
+                } );
+
+        aliasCheck("IBM862" ,
+                new String[] {
+                    "cp862", // JDK historical
+                    "ibm862",
+                    "ibm-862",
+                    "862",
+                    "csIBM862"
+                } );
+
+        aliasCheck("IBM863" ,
+                new String[] {
+                    "cp863", // JDK historical
+                    "ibm863",
+                    "ibm-863",
+                    "863",
+                    "csIBM863"
+                } );
+
+        aliasCheck("IBM864" ,
+                new String[] {
+                    "cp864", // JDK historical
+                    "ibm864",
+                    "ibm-864",
+                    "864",
+                    "csIBM864"
+                } );
+
+        aliasCheck("IBM865" ,
+                new String[] {
+                    "cp865", // JDK historical
+                    "ibm865",
+                    "ibm-865",
+                    "865",
+                    "csIBM865"
+                } );
+
+        aliasCheck("IBM866" , new String[] {
+                    "cp866", // JDK historical
+                    "ibm866",
+                    "ibm-866",
+                    "866",
+                    "csIBM866"
+                } );
+        aliasCheck("IBM868" ,
+                new String[] {
+                    "cp868", // JDK historical
+                    "ibm868",
+                    "ibm-868",
+                    "868",
+                    "cp-ar",
+                    "csIBM868"
+                } );
+
+        aliasCheck("IBM869" ,
+                new String[] {
+                    "cp869", // JDK historical
+                    "ibm869",
+                    "ibm-869",
+                    "869",
+                    "cp-gr",
+                    "csIBM869"
+                } );
+
+        aliasCheck("IBM437" ,
+                new String[] {
+                    "cp437", // JDK historical
+                    "ibm437",
+                    "ibm-437",
+                    "437",
+                    "cspc8codepage437",
+                    "windows-437"
+                } );
+
+        aliasCheck("x-IBM874" ,
+                new String[] {
+                    "cp874", // JDK historical
+                    "ibm874",
+                    "ibm-874",
+                    "874"
+                } );
+        aliasCheck("x-IBM737" ,
+                new String[] {
+                    "cp737", // JDK historical
+                    "ibm737",
+                    "ibm-737",
+                    "737"
+                } );
+
+        aliasCheck("IBM775" ,
+                new String[] {
+                    "cp775", // JDK historical
+                    "ibm775",
+                    "ibm-775",
+                    "775"
+                } );
+
+        aliasCheck("x-IBM921" ,
+                new String[] {
+                    "cp921", // JDK historical
+                    "ibm921",
+                    "ibm-921",
+                    "921"
+                } );
+
+        aliasCheck("x-IBM1006" ,
+                new String[] {
+                    "cp1006", // JDK historical
+                    "ibm1006",
+                    "ibm-1006",
+                    "1006"
+                } );
+
+        aliasCheck("x-IBM1046" ,
+                new String[] {
+                    "cp1046", // JDK historical
+                    "ibm1046",
+                    "ibm-1046",
+                    "1046"
+                } );
+
+        aliasCheck("IBM1047" ,
+                new String[] {
+                    "cp1047", // JDK historical
+                    "ibm-1047",
+                    "1047"
+                } );
+
+        aliasCheck("x-IBM1098" ,
+                new String[] {
+                    "cp1098", // JDK historical
+                    "ibm1098",
+                    "ibm-1098",
+                    "1098",
+                } );
+
+        aliasCheck("IBM037" ,
+                new String[] {
+                    "cp037", // JDK historical
+                    "ibm037",
+                    "csIBM037",
+                    "cs-ebcdic-cp-us",
+                    "cs-ebcdic-cp-ca",
+                    "cs-ebcdic-cp-wt",
+                    "cs-ebcdic-cp-nl",
+                    "ibm-037",
+                    "ibm-37",
+                    "cpibm37",
+                    "037"
+                } );
+
+        aliasCheck("x-IBM1025" ,
+                new String[] {
+                    "cp1025", // JDK historical
+                    "ibm1025",
+                    "ibm-1025",
+                    "1025"
+                } );
+
+        aliasCheck("IBM1026" ,
+                new String[] {
+                    "cp1026", // JDK historical
+                    "ibm1026",
+                    "ibm-1026",
+                    "1026"
+                } );
+
+        aliasCheck("x-IBM1112" ,
+                new String[] {
+                    "cp1112", // JDK historical
+                    "ibm1112",
+                    "ibm-1112",
+                    "1112"
+                } );
+
+        aliasCheck("x-IBM1122" ,
+                new String[] {
+                    "cp1122", // JDK historical
+                    "ibm1122",
+                    "ibm-1122",
+                    "1122"
+                } );
+
+        aliasCheck("x-IBM1123" ,
+                new String[] {
+                    "cp1123", // JDK historical
+                    "ibm1123",
+                    "ibm-1123",
+                    "1123"
+                } );
+
+        aliasCheck("x-IBM1124" ,
+                new String[] {
+                    "cp1124", // JDK historical
+                    "ibm1124",
+                    "ibm-1124",
+                    "1124"
+                } );
+
+        aliasCheck("IBM273" ,
+                new String[] {
+                    "cp273", // JDK historical
+                    "ibm273",
+                    "ibm-273",
+                    "273"
+                } );
+
+        aliasCheck("IBM277" ,
+                new String[] {
+                    "cp277", // JDK historical
+                    "ibm277",
+                    "ibm-277",
+                    "277"
+                } );
+
+        aliasCheck("IBM278" ,
+                new String[] {
+                    "cp278", // JDK historical
+                    "ibm278",
+                    "ibm-278",
+                    "278",
+                    "ebcdic-sv",
+                    "ebcdic-cp-se",
+                    "csIBM278"
+                } );
+
+        aliasCheck("IBM280" ,
+                new String[] {
+                    "cp280", // JDK historical
+                    "ibm280",
+                    "ibm-280",
+                    "280"
+                } );
+
+        aliasCheck("IBM284" ,
+                new String[] {
+                    "cp284", // JDK historical
+                    "ibm284",
+                    "ibm-284",
+                    "284",
+                    "csIBM284",
+                    "cpibm284"
+                } );
+
+        aliasCheck("IBM285" ,
+                new String[] {
+                    "cp285", // JDK historical
+                    "ibm285",
+                    "ibm-285",
+                    "285",
+                    "ebcdic-cp-gb",
+                    "ebcdic-gb",
+                    "csIBM285",
+                    "cpibm285"
+                } );
+
+        aliasCheck("IBM297" ,
+                new String[] {
+                    "cp297", // JDK historical
+                    "ibm297",
+                    "ibm-297",
+                    "297",
+                    "ebcdic-cp-fr",
+                    "cpibm297",
+                    "csIBM297",
+                } );
+
+        aliasCheck("IBM420" ,
+                new String[] {
+                    "cp420", // JDK historical
+                    "ibm420",
+                    "ibm-420",
+                    "ebcdic-cp-ar1",
+                    "420",
+                    "csIBM420"
+                } );
+
+        aliasCheck("IBM424" ,
+                new String[] {
+                    "cp424", // JDK historical
+                    "ibm424",
+                    "ibm-424",
+                    "424",
+                    "ebcdic-cp-he",
+                    "csIBM424"
+                } );
+
+        aliasCheck("IBM500" ,
+                new String[] {
+                    "cp500", // JDK historical
+                    "ibm500",
+                    "ibm-500",
+                    "500",
+                    "ebcdic-cp-ch",
+                    "ebcdic-cp-bh",
+                    "csIBM500"
+                } );
+
+        aliasCheck("IBM-Thai" ,
+                new String[] {
+                    "cp838", // JDK historical
+                    "ibm838",
+                    "ibm-838",
+                    "ibm838",
+                    "838"
+                } );
+
+        aliasCheck("IBM870" ,
+                new String[] {
+                    "cp870", // JDK historical
+                    "ibm870",
+                    "ibm-870",
+                    "870",
+                    "ebcdic-cp-roece",
+                    "ebcdic-cp-yu",
+                    "csIBM870"
+                } );
+
+        aliasCheck("IBM871" ,
+                new String[] {
+                    "cp871", // JDK historical
+                    "ibm871",
+                    "ibm-871",
+                    "871",
+                    "ebcdic-cp-is",
+                    "csIBM871"
+                } );
+
+        aliasCheck("x-IBM875" ,
+                new String[] {
+                    "cp875", // JDK historical
+                    "ibm875",
+                    "ibm-875",
+                    "875"
+                } );
+
+        aliasCheck("IBM918" ,
+                new String[] {
+                    "cp918", // JDK historical
+                    "ibm-918",
+                    "918",
+                    "ebcdic-cp-ar2"
+                } );
+
+        aliasCheck("x-IBM922" ,
+                new String[] {
+                    "cp922", // JDK historical
+                    "ibm922",
+                    "ibm-922",
+                    "922"
+                } );
+
+        aliasCheck("x-IBM1097" ,
+                new String[] {
+                    "cp1097", // JDK historical
+                    "ibm1097",
+                    "ibm-1097",
+                    "1097"
+                } );
+
+        aliasCheck("x-IBM949" ,
+                new String[] {
+                    "cp949", // JDK historical
+                    "ibm949",
+                    "ibm-949",
+                    "949"
+                } );
+
+        aliasCheck("x-IBM949C" ,
+                new String[] {
+                    "cp949C", // JDK historical
+                    "ibm949C",
+                    "ibm-949C",
+                    "949C"
+                } );
+
+        aliasCheck("x-IBM939" ,
+                new String[] {
+                    "cp939", // JDK historical
+                    "ibm939",
+                    "ibm-939",
+                    "939"
+                } );
+
+        aliasCheck("x-IBM933" ,
+                new String[] {
+                    "cp933", // JDK historical
+                    "ibm933",
+                    "ibm-933",
+                    "933"
+                } );
+
+        aliasCheck("x-IBM1381" ,
+                new String[] {
+                    "cp1381", // JDK historical
+                    "ibm1381",
+                    "ibm-1381",
+                    "1381"
+                } );
+
+        aliasCheck("x-IBM1383" ,
+                new String[] {
+                    "cp1383", // JDK historical
+                    "ibm1383",
+                    "ibm-1383",
+                    "1383"
+                } );
+
+        aliasCheck("x-IBM970" ,
+                new String[] {
+                    "cp970", // JDK historical
+                    "ibm970",
+                    "ibm-970",
+                    "ibm-eucKR",
+                    "970"
+                } );
+
+        aliasCheck("x-IBM964" ,
+                new String[] {
+                    "cp964", // JDK historical
+                    "ibm964",
+                    "ibm-964",
+                    "964"
+                } );
+
+        aliasCheck("x-IBM33722" ,
+                new String[] {
+                    "cp33722", // JDK historical
+                    "ibm33722",
+                    "ibm-33722",
+                    "ibm-5050", // from IBM alias list
+                    "ibm-33722_vascii_vpua", // from IBM alias list
+                    "33722"
+                } );
+
+        aliasCheck("IBM01140" ,
+                new String[] {
+                    "cp1140", // JDK historical
+                    "ccsid01140",
+                    "cp01140",
+                    // "ebcdic-us-037+euro"
+                } );
+
+        aliasCheck("IBM01141" ,
+                new String[] {
+                    "cp1141", // JDK historical
+                    "ccsid01141",
+                    "cp01141",
+                    // "ebcdic-de-273+euro"
+                } );
+
+        aliasCheck("IBM01142" ,
+                new String[] {
+                    "cp1142", // JDK historical
+                    "ccsid01142",
+                    "cp01142",
+                    // "ebcdic-no-277+euro",
+                    // "ebcdic-dk-277+euro"
+                } );
+
+        aliasCheck("IBM01143" ,
+                new String[] {
+                    "cp1143", // JDK historical
+                    "ccsid01143",
+                    "cp01143",
+                    // "ebcdic-fi-278+euro",
+                    // "ebcdic-se-278+euro"
+                } );
+
+        aliasCheck("IBM01144" ,
+                new String[] {
+                    "cp1144", // JDK historical
+                    "ccsid01144",
+                    "cp01144",
+                    // "ebcdic-it-280+euro"
+                } );
+
+        aliasCheck("IBM01145" ,
+                new String[] {
+                    "cp1145", // JDK historical
+                    "ccsid01145",
+                    "cp01145",
+                    // "ebcdic-es-284+euro"
+                } );
+
+        aliasCheck("IBM01146" ,
+                new String[] {
+                    "cp1146", // JDK historical
+                    "ccsid01146",
+                    "cp01146",
+                    // "ebcdic-gb-285+euro"
+                } );
+
+        aliasCheck("IBM01147" ,
+                new String[] {
+                    "cp1147", // JDK historical
+                    "ccsid01147",
+                    "cp01147",
+                    // "ebcdic-fr-277+euro"
+                } );
+
+        aliasCheck("IBM01148" ,
+                new String[] {
+                    "cp1148", // JDK historical
+                    "ccsid01148",
+                    "cp01148",
+                    // "ebcdic-international-500+euro"
+                } );
+
+        aliasCheck("IBM01149" ,
+                new String[] {
+                    "cp1149", // JDK historical
+                    "ccsid01149",
+                    "cp01149",
+                    // "ebcdic-s-871+euro"
+                } );
+
+        aliasCheck("IBM00858" ,
+                new String[] {
+                    "cp858", // JDK historical
+                    "ccsid00858",
+                    "cp00858",
+                    // "PC-Multilingual-850+euro"
+                } );
+
+        aliasCheck("x-MacRoman",
+                new String[] {
+                    "MacRoman" // JDK historical
+                });
+
+        aliasCheck("x-MacCentralEurope",
+                new String[] {
+                    "MacCentralEurope" // JDK historical
+                });
+
+        aliasCheck("x-MacCroatian",
+                new String[] {
+                    "MacCroatian" // JDK historical
+                });
+
+
+        aliasCheck("x-MacCroatian",
+                new String[] {
+                    "MacCroatian" // JDK historical
+                });
+
+
+        aliasCheck("x-MacGreek",
+                new String[] {
+                    "MacGreek" // JDK historical
+                });
+
+        aliasCheck("x-MacCyrillic",
+                new String[] {
+                    "MacCyrillic" // JDK historical
+                });
+
+        aliasCheck("x-MacUkraine",
+                new String[] {
+                    "MacUkraine" // JDK historical
+                });
+
+        aliasCheck("x-MacTurkish",
+                new String[] {
+                    "MacTurkish" // JDK historical
+                });
+
+        aliasCheck("x-MacArabic",
+                new String[] {
+                    "MacArabic" // JDK historical
+                });
+
+        aliasCheck("x-MacHebrew",
+                new String[] {
+                    "MacHebrew" // JDK historical
+                });
+
+        aliasCheck("x-MacIceland",
+                new String[] {
+                    "MacIceland" // JDK historical
+                });
+
+        aliasCheck("x-MacRomania",
+                new String[] {
+                    "MacRomania" // JDK historical
+                });
+
+        aliasCheck("x-MacThai",
+                new String[] {
+                    "MacThai" // JDK historical
+                });
+
+        aliasCheck("x-MacSymbol",
+                new String[] {
+                    "MacSymbol" // JDK historical
+                });
+
+        aliasCheck("x-MacDingbat",
+                new String[] {
+                    "MacDingbat" // JDK historical
+                });
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/nio/charset/Charset/default.sh	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,97 @@
+#!/bin/sh
+
+#
+# Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+# 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+# CA 95054 USA or visit www.sun.com if you need additional information or
+# have any questions.
+#
+
+# @test
+# @bug 4772857
+# @summary Unit test for Charset.defaultCharset
+#
+# @build Default
+# @run shell default.sh
+#
+
+# Command-line usage: sh default.sh [/path/to/build]
+
+if [ -z "$TESTJAVA" ]; then
+  if [ $# -lt 1 ]; then exit 1; fi
+  TESTJAVA=$1; shift
+  TESTSRC=`pwd`
+  TESTCLASSES=`pwd`
+fi
+
+s="`uname -s`"
+if [ "$s" != Linux -a "$s" != SunOS ]; then
+  echo "$s: locale command not supported on this system, skipping..."
+  exit 0
+fi
+
+JAVA=$TESTJAVA/bin/java
+
+tolower() {
+  echo "$1" | tr '[A-Z]' '[a-z]'
+}
+
+go() {
+
+  L="$1"
+  shift
+  if [ "x`locale -a | grep \^$L\$`" != "x$L" ]; then
+    echo "$L: Locale not supported, skipping..."
+    return
+  fi
+
+  ecs="$1"; shift
+
+  echo -n "$L: "
+  cs="`LC_ALL=$L $JAVA -cp $TESTCLASSES Default`"
+  if [ $? != 0 ]; then
+    exit 1
+  elif [ "`tolower $cs`" != "`tolower $ecs`" ]; then
+    echo "$cs, expected $ecs -- ERROR"
+    exit 1
+  else
+    echo "$cs, as expected"
+  fi
+
+}
+
+go  en_US       iso-8859-1
+go  ja_JP.utf8  utf-8
+go  tr_TR       iso-8859-9
+go  C           us-ascii
+
+if [ "$s" = Linux ]; then
+  go  ja_JP        x-euc-jp-linux
+  go  ja_JP.eucjp  x-euc-jp-linux
+  go  ja_JP.ujis   x-euc-jp-linux
+  go  ja_JP.utf8   utf-8
+fi
+
+# Solaris
+if [ "$s" = SunOS ]; then
+  go  ja           x-eucjp-open
+  go  ja_JP.eucJP  x-eucjp-open
+  go  ja_JP.PCK    x-PCK
+  go  ja_JP.UTF-8  utf-8
+fi
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/nio/charset/CharsetDecoder/AverageMax.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,96 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/* @test
+ * @bug 4853350
+ * @summary Ensure that averages do not exceed maxima
+ *
+ * @build AverageMax
+ * @run main AverageMax
+ * @run main/othervm -Dsun.nio.cs.bugLevel=1.4 AverageMax
+ */
+
+import java.nio.*;
+import java.nio.charset.*;
+
+
+public class AverageMax {
+
+    static boolean compat;
+
+    static abstract class Test {
+
+        public abstract void go() throws Exception;
+
+        Test() throws Exception {
+            try {
+                go();
+            } catch (Exception x) {
+                if (compat) {
+                    throw new Exception("Exception thrown", x);
+                }
+                if (x instanceof IllegalArgumentException) {
+                    System.err.println("Thrown as expected: " + x);
+                    return;
+                }
+                throw new Exception("Incorrect exception: "
+                                    + x.getClass().getName(),
+                                    x);
+            }
+            if (!compat)
+                throw new Exception("No exception thrown");
+        }
+
+    }
+
+    public static void main(String[] args) throws Exception {
+
+        // If sun.nio.cs.bugLevel == 1.4 then we want the 1.4 behavior
+        String bl = System.getProperty("sun.nio.cs.bugLevel");
+        compat = (bl != null && bl.equals("1.4"));
+        final Charset ascii = Charset.forName("US-ASCII");
+
+        new Test() {
+                public void go() throws Exception {
+                    new CharsetDecoder(ascii, 3.9f, 1.2f) {
+                            protected CoderResult decodeLoop(ByteBuffer in,
+                                                             CharBuffer out)
+                            {
+                                return null;
+                            }
+                        };
+                }};
+
+        new Test() {
+                public void go() throws Exception {
+                    new CharsetEncoder(ascii, 3.9f, 1.2f) {
+                            protected CoderResult encodeLoop(CharBuffer in,
+                                                             ByteBuffer out)
+                            {
+                                return null;
+                            }
+                        };
+                }};
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/nio/charset/CharsetDecoder/EmptyInput.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/* @test
+ * @bug 4400697
+ * @summary Ensure that CharsetDecoder.decode throws BUE on empty input
+ */
+
+import java.nio.*;
+import java.nio.charset.*;
+
+
+public class EmptyInput {
+
+    public static void main(String[] args) throws Exception {
+        ByteBuffer bb = ByteBuffer.allocate(10);
+        bb.flip();
+        CharsetDecoder cd = Charset.forName("US-ASCII").newDecoder();
+        try {
+            cd.decode(bb, CharBuffer.allocate(10), true).throwException();
+        } catch (BufferUnderflowException x) {
+            System.err.println("BufferUnderflowException thrown as expected");
+            return;
+        }
+        throw new Exception("BufferUnderflowException not thrown");
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/nio/charset/CharsetEncoder/CanEncode.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,95 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/* @test
+ * @bug 4821213
+ * @summary Unit test for CharsetEncoder.canEncode methods
+ */
+
+import java.io.*;
+import java.nio.*;
+import java.nio.charset.*;
+
+
+public class CanEncode {
+
+    private static int errors = 0;
+    private static PrintStream out = System.err;
+
+    private static void wrong(CharsetEncoder ce, boolean can, String what) {
+        out.println(ce.charset().name()
+                    + ": Wrong answer for " + what
+                    + ": " + !can);
+        errors++;
+    }
+
+    private static void ck(CharsetEncoder ce, char c, boolean can)
+        throws Exception
+    {
+        if (ce.canEncode(c) != can)
+            wrong(ce, can,
+                  ("'" + c + "' (0x"
+                   + Integer.toHexString(c & 0xffff) + ")"));
+    }
+
+    private static void ck(CharsetEncoder ce, String s, boolean can)
+        throws Exception
+    {
+        if (ce.canEncode(CharBuffer.wrap(s.toCharArray())) != can)
+            wrong(ce, can, "array \"" + s + "\"");
+        if (ce.canEncode(CharBuffer.wrap(s)) != can)
+            wrong(ce, can, "buffer  \"" + s + "\"");
+    }
+
+    private static void test(String csn) throws Exception {
+
+        Charset cs = Charset.forName(csn);
+        CharsetEncoder ce = cs.newEncoder();
+
+        if (cs.name().equals("US-ASCII")) {
+            ck(ce, 'x', true);
+            ck(ce, '\u00B6', false);
+            ck(ce, "x", true);
+            ck(ce, "\u00B6", false);
+            ck(ce, "xyzzy", true);
+            ck(ce, "xy\u00B6", false);
+        }
+
+        // Unpaired surrogates should never be encodable
+        ck(ce, '\ud800', false);
+        ck(ce, '\ud801', false);
+        ck(ce, '\udffe', false);
+        ck(ce, '\udfff', false);
+        ck(ce, "\ud800", false);
+        ck(ce, "\ud801", false);
+        ck(ce, "\udffe", false);
+        ck(ce, "\udfff", false);
+
+    }
+
+    public static void main(String[] args) throws Exception {
+        test("US-ASCII");
+        test("UTF-8");
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/nio/charset/CharsetEncoder/Flush.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,113 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/* @test
+ * @bug 6227608
+ * @summary Test proper handling of flush()
+ * @author Martin Buchholz
+ */
+
+import java.util.*;
+import java.io.*;
+import java.nio.*;
+import java.nio.charset.*;
+
+public class Flush {
+    private static byte[] contents(ByteBuffer bb) {
+        byte[] contents = new byte[bb.position()];
+        ((ByteBuffer)(bb.duplicate().flip())).get(contents);
+        return contents;
+    }
+
+    private static ByteBuffer extend(ByteBuffer bb) {
+        ByteBuffer x = ByteBuffer.allocate(2*bb.capacity()+10);
+        bb.flip();
+        x.put(bb);
+        return x;
+    }
+
+    private static void realMain(String[] args) throws Throwable {
+        // A japanese character should decode as a 3-byte
+        // switch-to-japanese escape sequence, followed by a 2-byte
+        // encoding of the char itself, followed by a 3-byte return to
+        // ASCII escape sequence.
+        char[] jis0208 = {'\u3001'};
+        CharBuffer cb = CharBuffer.wrap(jis0208);
+        ByteBuffer bb = ByteBuffer.allocate(6);
+        CharsetEncoder enc = Charset.forName("ISO-2022-JP").newEncoder();
+
+        check(enc.encode(cb, bb, true).isUnderflow());
+
+        System.out.println(Arrays.toString(contents(bb)));
+        check(! cb.hasRemaining());
+        equal(contents(bb).length, 3 + 2);
+        equal(bb.get(0), (byte)0x1b);
+
+        //----------------------------------------------------------------
+        // We must be able to recover if flush() returns OVERFLOW
+        //----------------------------------------------------------------
+        check(enc.flush(bb).isOverflow());
+        check(enc.flush(bb).isOverflow());
+        equal(contents(bb).length, 3 + 2);
+
+        bb = extend(bb);
+
+        check(enc.flush(bb).isUnderflow());
+        equal(bb.get(3 + 2), (byte)0x1b);
+        System.out.println(Arrays.toString(contents(bb)));
+        equal(contents(bb).length, 3 + 2 + 3);
+
+        //----------------------------------------------------------------
+        // A final redundant flush() is a no-op
+        //----------------------------------------------------------------
+        check(enc.flush(bb).isUnderflow());
+        check(enc.flush(bb).isUnderflow());
+        equal(contents(bb).length, 3 + 2 + 3);
+
+        //----------------------------------------------------------------
+        // CharsetEncoder.encode(ByteBuffer) must call flush(ByteBuffer)
+        //----------------------------------------------------------------
+        bb = enc.encode(CharBuffer.wrap(jis0208));
+        byte[] expected = "\u001b$B!\"\u001b(B".getBytes("ASCII");
+        byte[] contents = new byte[bb.limit()]; bb.get(contents);
+        check(Arrays.equals(contents, expected));
+    }
+
+    //--------------------- Infrastructure ---------------------------
+    static volatile int passed = 0, failed = 0;
+    static void pass() { passed++; }
+    static void fail() { failed++; Thread.dumpStack(); }
+    static void fail(String msg) { System.out.println(msg); fail(); }
+    static void unexpected(Throwable t) { failed++; t.printStackTrace(); }
+    static void check(boolean cond) { if (cond) pass(); else fail(); }
+    static void equal(Object x, Object y) {
+        if (x == null ? y == null : x.equals(y)) pass();
+        else {System.out.println(x + " not equal to " + y); fail(); }}
+
+    public static void main(String[] args) throws Throwable {
+        try { realMain(args); } catch (Throwable t) { unexpected(t); }
+
+        System.out.printf("%nPassed = %d, failed = %d%n%n", passed, failed);
+        if (failed > 0) throw new Exception("Some tests failed");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/nio/charset/RemovingSunIO/SunioAlias.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,823 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/* @test
+   @bug 4454622
+   @summary Check if all supported sun.io encoding names are supported in nio.charset
+ */
+
+import java.util.HashMap;
+import java.util.Set;
+import java.io.UnsupportedEncodingException;
+import java.nio.charset.*;
+
+public class SunioAlias {
+    public static void main(String argv[]) throws UnsupportedEncodingException {
+        Set<String> keys = aliasTable.keySet();
+        String s = "testing string";
+        boolean failed = false;
+        for (String alias : keys) {
+            /* See if StringCoding works correctly without sun.io package */
+            try {
+                byte[] bs= s.getBytes(alias);
+                new String(bs, alias);
+
+                Charset csAlias = Charset.forName(alias);
+                Charset csName = Charset.forName(aliasTable.get(alias));
+                if (csName != csAlias) {
+                    System.out.printf("Alias %s and %s is NOT the same charset in nio\n",
+                                      alias, aliasTable.get(alias));
+                }
+            } catch (UnsupportedEncodingException e) {
+                System.out.printf("Alias %s is UnsupportedEncoding\n", alias);
+                failed = true;
+            } catch (IllegalCharsetNameException e) {
+                System.out.printf("Alias %s is IllegalCharsetName\n", alias);
+                failed = true;
+            }
+        }
+        if (failed)
+            throw new UnsupportedEncodingException ("sun.io encoding names are not supported in nio.charset!");
+    }
+    //aliasTable is copy/pasted from sun.io.CharacterEncoding.java
+
+    private static HashMap<String, String> aliasTable;
+    static {
+        aliasTable = new HashMap<String, String>(460, 1.0f);
+
+        /* known failed names... TBD
+        // JIS-defined Shift JIS
+        aliasTable.put("\u30b7\u30d5\u30c8\u7b26\u53f7\u5316\u8868\u73fe",
+                       "SJIS");
+        // Specialized auto-detection for Japanese charsets
+        aliasTable.put("jis auto detect",       "JISAutoDetect");
+        // MIBenum: 1010
+        aliasTable.put("unicode-1-1",       "UnicodeBigUnmarked");
+        */
+        aliasTable.put("unicode",               "UTF-16");
+        aliasTable.put("cspc862latinhebrew",    "Cp862");
+        aliasTable.put("cp-is",                 "Cp861");
+        /*
+        // X11 Compound Text
+        aliasTable.put("x-compound-text",       "COMPOUND_TEXT");
+        aliasTable.put("x11-compound_text",     "COMPOUND_TEXT");
+        */
+        aliasTable.put("us-ascii",              "ASCII");
+        aliasTable.put("ascii",                 "ASCII");
+        aliasTable.put("646",                   "ASCII");       // Solaris POSIX locale
+        aliasTable.put("iso_646.irv:1983",      "ASCII");       // Linux POSIX locale
+        aliasTable.put("ansi_x3.4-1968",        "ASCII");       // Caldera linux
+        aliasTable.put("iso646-us",             "ASCII");
+        aliasTable.put("default",               "ASCII");       // compatibility with obsolete "Default" converters
+        aliasTable.put("ascii7",                "ASCII");       // compatibility with obsolete "Default" converters
+
+        // Core encodings
+        aliasTable.put("8859_1",                "ISO8859_1");
+        aliasTable.put("iso8859_1",             "ISO8859_1");
+        aliasTable.put("utf-8",                 "UTF8");
+        aliasTable.put("utf8",                  "UTF8");
+        aliasTable.put("utf-16le",              "UnicodeLittleUnmarked");
+
+        // Standard encodings used on Solaris and Linux
+        aliasTable.put("iso8859-1",             "ISO8859_1");
+        aliasTable.put("iso8859-2",             "ISO8859_2");
+        aliasTable.put("iso8859-4",             "ISO8859_4");
+        aliasTable.put("iso8859-5",             "ISO8859_5");
+        aliasTable.put("iso8859-6",             "ISO8859_6");
+        aliasTable.put("iso8859-8",             "ISO8859_8");
+        aliasTable.put("iso8859-9",             "ISO8859_9");
+        aliasTable.put("iso8859-13",            "ISO8859_13");
+        aliasTable.put("iso8859-15",            "ISO8859_15");
+        aliasTable.put("5601",                  "EUC_KR");
+        aliasTable.put("ansi-1251",             "Cp1251");
+        aliasTable.put("big5",                  "Big5");
+        aliasTable.put("big5hk",                "Big5_HKSCS");
+        aliasTable.put("eucjp",                 "EUC_JP");
+        aliasTable.put("cns11643",              "EUC_TW");
+        aliasTable.put("gb2312",                "EUC_CN");
+        aliasTable.put("gb18030",               "GB18030");
+        aliasTable.put("gbk",                   "GBK");
+        aliasTable.put("koi8-r",                "KOI8_R");
+        aliasTable.put("tis620.2533",           "TIS620");
+
+        // Windows encodings
+        aliasTable.put("cp1250",                "Cp1250");
+        aliasTable.put("cp1251",                "Cp1251");
+        aliasTable.put("cp1252",                "Cp1252");
+        aliasTable.put("cp1253",                "Cp1253");
+        aliasTable.put("cp1254",                "Cp1254");
+        aliasTable.put("cp1255",                "Cp1255");
+        aliasTable.put("cp1256",                "Cp1256");
+        aliasTable.put("cp1257",                "Cp1257");
+        aliasTable.put("cp1258",                "Cp1258");
+        aliasTable.put("ms874",                 "MS874");
+        aliasTable.put("ms932",                 "MS932");
+        aliasTable.put("ms949",                 "MS949");
+        aliasTable.put("ms950",                 "MS950");
+        aliasTable.put("ms1361",                "MS1361");
+
+        // MIBenum: 4
+        aliasTable.put("8859_1",            "ISO8859_1");
+        aliasTable.put("iso_8859-1:1987",       "ISO8859_1");
+        aliasTable.put("iso-ir-100",            "ISO8859_1");
+        aliasTable.put("iso_8859-1",            "ISO8859_1");
+        aliasTable.put("iso-8859-1",            "ISO8859_1");
+        aliasTable.put("iso8859-1",             "ISO8859_1");
+        aliasTable.put("latin1",                "ISO8859_1");
+        aliasTable.put("l1",                    "ISO8859_1");
+        aliasTable.put("ibm819",                "ISO8859_1");
+        aliasTable.put("ibm-819",               "ISO8859_1");
+        aliasTable.put("cp819",                 "ISO8859_1");
+        aliasTable.put("819",                   "ISO8859_1");
+        aliasTable.put("csisolatin1",           "ISO8859_1");
+
+        // MIBenum: 5
+        aliasTable.put("8859_2",            "ISO8859_2");
+        aliasTable.put("iso_8859-2:1987",       "ISO8859_2");
+        aliasTable.put("iso-ir-101",            "ISO8859_2");
+        aliasTable.put("iso_8859-2",            "ISO8859_2");
+        aliasTable.put("iso-8859-2",            "ISO8859_2");
+        aliasTable.put("iso8859-2",             "ISO8859_2");
+        aliasTable.put("latin2",                "ISO8859_2");
+        aliasTable.put("l2",                    "ISO8859_2");
+        aliasTable.put("ibm912",                "ISO8859_2");
+        aliasTable.put("ibm-912",               "ISO8859_2");
+        aliasTable.put("cp912",                 "ISO8859_2");
+        aliasTable.put("912",                   "ISO8859_2");
+        aliasTable.put("csisolatin2",           "ISO8859_2");
+
+        // MIBenum: 6
+        aliasTable.put("8859_3",            "ISO8859_3");
+        aliasTable.put("iso_8859-3:1988",       "ISO8859_3");
+        aliasTable.put("iso-ir-109",            "ISO8859_3");
+        aliasTable.put("iso_8859-3",            "ISO8859_3");
+        aliasTable.put("iso-8859-3",            "ISO8859_3");
+        aliasTable.put("iso8859-3",             "ISO8859_3");
+        aliasTable.put("latin3",                "ISO8859_3");
+        aliasTable.put("l3",                    "ISO8859_3");
+        aliasTable.put("ibm913",                "ISO8859_3");
+        aliasTable.put("ibm-913",               "ISO8859_3");
+        aliasTable.put("cp913",                 "ISO8859_3");
+        aliasTable.put("913",                   "ISO8859_3");
+        aliasTable.put("csisolatin3",           "ISO8859_3");
+
+        // MIBenum: 7
+        aliasTable.put("8859_4",            "ISO8859_4");
+        aliasTable.put("iso_8859-4:1988",       "ISO8859_4");
+        aliasTable.put("iso-ir-110",            "ISO8859_4");
+        aliasTable.put("iso_8859-4",            "ISO8859_4");
+        aliasTable.put("iso-8859-4",            "ISO8859_4");
+        aliasTable.put("iso8859-4",             "ISO8859_4");
+        aliasTable.put("latin4",                "ISO8859_4");
+        aliasTable.put("l4",                    "ISO8859_4");
+        aliasTable.put("ibm914",                "ISO8859_4");
+        aliasTable.put("ibm-914",               "ISO8859_4");
+        aliasTable.put("cp914",                 "ISO8859_4");
+        aliasTable.put("914",                   "ISO8859_4");
+        aliasTable.put("csisolatin4",           "ISO8859_4");
+
+        // MIBenum: 8
+        aliasTable.put("8859_5",            "ISO8859_5");
+        aliasTable.put("iso_8859-5:1988",       "ISO8859_5");
+        aliasTable.put("iso-ir-144",            "ISO8859_5");
+        aliasTable.put("iso_8859-5",            "ISO8859_5");
+        aliasTable.put("iso-8859-5",            "ISO8859_5");
+        aliasTable.put("iso8859-5",             "ISO8859_5");
+        aliasTable.put("cyrillic",              "ISO8859_5");
+        aliasTable.put("csisolatincyrillic",    "ISO8859_5");
+        aliasTable.put("ibm915",                "ISO8859_5");
+        aliasTable.put("ibm-915",               "ISO8859_5");
+        aliasTable.put("cp915",                 "ISO8859_5");
+        aliasTable.put("915",                   "ISO8859_5");
+
+        // MIBenum: 9
+        aliasTable.put("8859_6",            "ISO8859_6");
+        aliasTable.put("iso_8859-6:1987",       "ISO8859_6");
+        aliasTable.put("iso-ir-127",            "ISO8859_6");
+        aliasTable.put("iso_8859-6",            "ISO8859_6");
+        aliasTable.put("iso-8859-6",            "ISO8859_6");
+        aliasTable.put("iso8859-6",             "ISO8859_6");
+        aliasTable.put("ecma-114",              "ISO8859_6");
+        aliasTable.put("asmo-708",              "ISO8859_6");
+        aliasTable.put("arabic",                "ISO8859_6");
+        aliasTable.put("csisolatinarabic",      "ISO8859_6");
+        aliasTable.put("ibm1089",               "ISO8859_6");
+        aliasTable.put("ibm-1089",              "ISO8859_6");
+        aliasTable.put("cp1089",                "ISO8859_6");
+        aliasTable.put("1089",                  "ISO8859_6");
+
+        // MIBenum: 10
+        aliasTable.put("8859_7",            "ISO8859_7");
+        aliasTable.put("iso_8859-7:1987",       "ISO8859_7");
+        aliasTable.put("iso-ir-126",            "ISO8859_7");
+        aliasTable.put("iso_8859-7",            "ISO8859_7");
+        aliasTable.put("iso-8859-7",            "ISO8859_7");
+        aliasTable.put("iso8859-7",             "ISO8859_7");
+        aliasTable.put("elot_928",              "ISO8859_7");
+        aliasTable.put("ecma-118",              "ISO8859_7");
+        aliasTable.put("greek",                 "ISO8859_7");
+        aliasTable.put("greek8",                "ISO8859_7");
+        aliasTable.put("csisolatingreek",       "ISO8859_7");
+        aliasTable.put("ibm813",                "ISO8859_7");
+        aliasTable.put("ibm-813",               "ISO8859_7");
+        aliasTable.put("cp813",                 "ISO8859_7");
+        aliasTable.put("813",                   "ISO8859_7");
+        aliasTable.put("sun_eu_greek",      "ISO8859_7");
+
+        // MIBenum: 11
+        aliasTable.put("8859_8",            "ISO8859_8");
+        aliasTable.put("iso_8859-8:1988",       "ISO8859_8");
+        aliasTable.put("iso-ir-138",            "ISO8859_8");
+        aliasTable.put("iso_8859-8",            "ISO8859_8");
+        aliasTable.put("iso-8859-8",            "ISO8859_8");
+        aliasTable.put("iso8859-8",             "ISO8859_8");
+        aliasTable.put("hebrew",                "ISO8859_8");
+        aliasTable.put("csisolatinhebrew",      "ISO8859_8");
+        aliasTable.put("ibm916",                "ISO8859_8");
+        aliasTable.put("ibm-916",               "ISO8859_8");
+        aliasTable.put("cp916",                 "ISO8859_8");
+        aliasTable.put("916",                   "ISO8859_8");
+
+        // MIBenum: 12
+        aliasTable.put("8859_9",            "ISO8859_9");
+        aliasTable.put("iso-ir-148",            "ISO8859_9");
+        aliasTable.put("iso_8859-9",            "ISO8859_9");
+        aliasTable.put("iso-8859-9",            "ISO8859_9");
+        aliasTable.put("iso8859-9",             "ISO8859_9");
+        aliasTable.put("latin5",                "ISO8859_9");
+        aliasTable.put("l5",                    "ISO8859_9");
+        aliasTable.put("ibm920",                "ISO8859_9");
+        aliasTable.put("ibm-920",               "ISO8859_9");
+        aliasTable.put("cp920",                 "ISO8859_9");
+        aliasTable.put("920",                   "ISO8859_9");
+        aliasTable.put("csisolatin5",           "ISO8859_9");
+
+        // MIBenum: ???
+        aliasTable.put("8859_13",               "ISO8859_13");
+        aliasTable.put("iso_8859-13",           "ISO8859_13");
+        aliasTable.put("iso-8859-13",           "ISO8859_13");
+        aliasTable.put("iso8859-13",            "ISO8859_13");
+
+
+        // MIBenum: ????
+        aliasTable.put("8859_15",               "ISO8859_15");
+        aliasTable.put("iso-8859-15",           "ISO8859_15");
+        aliasTable.put("iso_8859-15",           "ISO8859_15");
+        aliasTable.put("iso8859-15",            "ISO8859_15");
+        aliasTable.put("ibm923",                "ISO8859_15");
+        aliasTable.put("ibm-923",               "ISO8859_15");
+        aliasTable.put("cp923",                 "ISO8859_15");
+        aliasTable.put("923",                   "ISO8859_15");
+        aliasTable.put("latin0",                "ISO8859_15");
+        aliasTable.put("latin9",                "ISO8859_15");
+        aliasTable.put("csisolatin0",           "ISO8859_15");
+        aliasTable.put("csisolatin9",           "ISO8859_15");
+
+        //For compatibility purpose
+        aliasTable.put("iso8859_15_fdis",       "ISO8859_15");
+
+        // MIBenum: 106
+        aliasTable.put("utf-8",                 "UTF8");
+
+        // Alias recommended in RFC 1641
+        aliasTable.put("unicode-1-1-utf-8",     "UTF8");
+
+        // MIBenum: 1000
+        aliasTable.put("iso-10646-ucs-2",           "UnicodeBigUnmarked");
+
+        // Per Unicode standard
+        aliasTable.put("utf-16be",                  "UnicodeBigUnmarked");
+        aliasTable.put("utf-16le",                  "UnicodeLittleUnmarked");
+        aliasTable.put("utf-16",                    "UTF16");
+
+        // Used by drag-and-drop subsystem
+        aliasTable.put("x-utf-16be",        "UnicodeBigUnmarked");
+        aliasTable.put("x-utf-16le",        "UnicodeLittleUnmarked");
+
+        // MIBenum: ????
+        aliasTable.put("ibm037",                "Cp037");
+        aliasTable.put("ibm-037",               "Cp037");
+        aliasTable.put("cp037",                 "Cp037");
+        aliasTable.put("037",                   "Cp037");
+
+        // MIBenum: ????
+        aliasTable.put("ibm273",                "Cp273");
+        aliasTable.put("ibm-273",               "Cp273");
+        aliasTable.put("cp273",                 "Cp273");
+        aliasTable.put("273",                   "Cp273");
+
+        // MIBenum: ????
+        aliasTable.put("ibm277",                "Cp277");
+        aliasTable.put("ibm-277",               "Cp277");
+        aliasTable.put("cp277",                 "Cp277");
+        aliasTable.put("277",                   "Cp277");
+
+        // MIBenum: ????
+        aliasTable.put("ibm278",                "Cp278");
+        aliasTable.put("ibm-278",               "Cp278");
+        aliasTable.put("cp278",                 "Cp278");
+        aliasTable.put("278",                   "Cp278");
+
+        // MIBenum: ????
+        aliasTable.put("ibm280",                "Cp280");
+        aliasTable.put("ibm-280",               "Cp280");
+        aliasTable.put("cp280",                 "Cp280");
+        aliasTable.put("280",                   "Cp280");
+
+        // MIBenum: ????
+        aliasTable.put("ibm284",                "Cp284");
+        aliasTable.put("ibm-284",               "Cp284");
+        aliasTable.put("cp284",                 "Cp284");
+        aliasTable.put("284",                   "Cp284");
+
+        // MIBenum: ????
+        aliasTable.put("ibm285",                "Cp285");
+        aliasTable.put("ibm-285",               "Cp285");
+        aliasTable.put("cp285",                 "Cp285");
+        aliasTable.put("285",                   "Cp285");
+
+        // MIBenum: ????
+        aliasTable.put("ibm297",                "Cp297");
+        aliasTable.put("ibm-297",               "Cp297");
+        aliasTable.put("cp297",                 "Cp297");
+        aliasTable.put("297",                   "Cp297");
+
+        // MIBenum: ????
+        aliasTable.put("ibm420",                "Cp420");
+        aliasTable.put("ibm-420",               "Cp420");
+        aliasTable.put("cp420",                 "Cp420");
+        aliasTable.put("420",                   "Cp420");
+
+        // MIBenum: ????
+        aliasTable.put("ibm424",                "Cp424");
+        aliasTable.put("ibm-424",               "Cp424");
+        aliasTable.put("cp424",                 "Cp424");
+        aliasTable.put("424",                   "Cp424");
+
+        // MIBenum: 2011
+        aliasTable.put("ibm437",                "Cp437");
+        aliasTable.put("ibm-437",               "Cp437");
+        aliasTable.put("cp437",                 "Cp437");
+        aliasTable.put("437",                   "Cp437");
+        aliasTable.put("cspc8codepage437",      "Cp437");
+
+        // MIBenum: ????
+        aliasTable.put("ibm500",                "Cp500");
+        aliasTable.put("ibm-500",               "Cp500");
+        aliasTable.put("cp500",                 "Cp500");
+        aliasTable.put("500",                   "Cp500");
+
+        // MIBenum: ????
+        aliasTable.put("ibm737",                "Cp737");
+        aliasTable.put("ibm-737",               "Cp737");
+        aliasTable.put("cp737",                 "Cp737");
+        aliasTable.put("737",                   "Cp737");
+
+        // MIBenum: ????
+        aliasTable.put("ibm775",                "Cp775");
+        aliasTable.put("ibm-775",               "Cp775");
+        aliasTable.put("cp775",                 "Cp775");
+        aliasTable.put("775",                   "Cp775");
+
+        // MIBenum: ????
+        aliasTable.put("ibm838",                "Cp838");         /* MDA */
+        aliasTable.put("ibm-838",               "Cp838");         /* MDA */
+        aliasTable.put("cp838",                 "Cp838");         /* MDA */
+        aliasTable.put("838",                   "Cp838");         /* MDA */
+
+        // "Cp850"
+        // MIBenum: 2009
+        aliasTable.put("ibm850",                "Cp850");
+        aliasTable.put("ibm-850",               "Cp850");
+        aliasTable.put("cp850",                 "Cp850");
+        aliasTable.put("850",                   "Cp850");
+        aliasTable.put("cspc850multilingual",   "Cp850");
+
+        // "Cp852"
+        // MIBenum: 2010
+        aliasTable.put("ibm852",                "Cp852");
+        aliasTable.put("ibm-852",               "Cp852");
+        aliasTable.put("cp852",                 "Cp852");
+        aliasTable.put("852",                   "Cp852");
+        aliasTable.put("cspcp852",              "Cp852");
+
+        // "Cp855"
+        // MIBenum: 2046
+        aliasTable.put("ibm855",                "Cp855");
+        aliasTable.put("ibm-855",               "Cp855");
+        aliasTable.put("cp855",                 "Cp855");
+        aliasTable.put("855",                   "Cp855");
+        aliasTable.put("cspcp855",              "Cp855");
+
+        // "Cp855"
+        // MIBenum: ???
+        aliasTable.put("ibm856",                "Cp856");
+        aliasTable.put("ibm-856",               "Cp856");
+        aliasTable.put("cp856",                 "Cp856");
+        aliasTable.put("856",                   "Cp856");
+
+        // "Cp857"
+        // MIBenum: 2047
+        aliasTable.put("ibm857",                "Cp857");
+        aliasTable.put("ibm-857",               "Cp857");
+        aliasTable.put("cp857",                 "Cp857");
+        aliasTable.put("857",                   "Cp857");
+        aliasTable.put("csibm857",              "Cp857");
+
+        // "Cp860"
+        // MIBenum: 2048
+        aliasTable.put("ibm860",                "Cp860");
+        aliasTable.put("ibm-860",               "Cp860");
+        aliasTable.put("cp860",                 "Cp860");
+        aliasTable.put("860",                   "Cp860");
+        aliasTable.put("csibm860",              "Cp860");
+
+        // MIBenum: 2049
+        aliasTable.put("ibm861",                "Cp861");
+        aliasTable.put("ibm-861",               "Cp861");
+        aliasTable.put("cp861",                 "Cp861");
+        aliasTable.put("861",                   "Cp861");
+        aliasTable.put("csibm861",              "Cp861");
+
+        // MIBenum: 2013
+        aliasTable.put("ibm862",                "Cp862");
+        aliasTable.put("ibm-862",               "Cp862");
+        aliasTable.put("cp862",                 "Cp862");
+        aliasTable.put("862",                   "Cp862");
+
+        // MIBenum: 2050
+        aliasTable.put("ibm863",                "Cp863");
+        aliasTable.put("ibm-863",               "Cp863");
+        aliasTable.put("cp863",                 "Cp863");
+        aliasTable.put("863",                   "Cp863");
+        aliasTable.put("csibm863",              "Cp863");
+
+        // MIBenum: 2051
+        aliasTable.put("ibm864",                "Cp864");
+        aliasTable.put("ibm-864",               "Cp864");
+        aliasTable.put("cp864",                 "Cp864");
+        aliasTable.put("csibm864",              "Cp864");
+
+        // MIBenum: 2052
+        aliasTable.put("ibm865",                "Cp865");
+        aliasTable.put("ibm-865",               "Cp865");
+        aliasTable.put("cp865",                 "Cp865");
+        aliasTable.put("865",                   "Cp865");
+        aliasTable.put("csibm865",              "Cp865");
+
+        // MIBenum: ????
+        aliasTable.put("ibm866",                "Cp866");
+        aliasTable.put("ibm-866",               "Cp866");
+        aliasTable.put("cp866",                 "Cp866");
+        aliasTable.put("866",                   "Cp866");
+        aliasTable.put("csibm866",              "Cp866");
+
+        // MIBenum: ????
+        aliasTable.put("ibm868",                "Cp868");
+        aliasTable.put("ibm-868",               "Cp868");
+        aliasTable.put("cp868",                 "Cp868");
+        aliasTable.put("868",                   "Cp868");
+
+        // MIBenum: 2054
+        aliasTable.put("ibm869",                "Cp869");
+        aliasTable.put("ibm-869",               "Cp869");
+        aliasTable.put("cp869",                 "Cp869");
+        aliasTable.put("869",                   "Cp869");
+        aliasTable.put("cp-gr",                 "Cp869");
+        aliasTable.put("csibm869",              "Cp869");
+
+        // MIBenum: ????
+        aliasTable.put("ibm870",                "Cp870");
+        aliasTable.put("ibm-870",               "Cp870");
+        aliasTable.put("cp870",                 "Cp870");
+        aliasTable.put("870",                   "Cp870");
+
+        // MIBenum: ????
+        aliasTable.put("ibm871",                "Cp871");
+        aliasTable.put("ibm-871",               "Cp871");
+        aliasTable.put("cp871",                 "Cp871");
+        aliasTable.put("871",                   "Cp871");
+
+        // MIBenum: ????
+        aliasTable.put("ibm874",                "Cp874");
+        aliasTable.put("ibm-874",               "Cp874");
+        aliasTable.put("cp874",                 "Cp874");
+        aliasTable.put("874",                   "Cp874");
+
+        // MIBenum: ????
+        aliasTable.put("ibm875",                "Cp875");
+        aliasTable.put("ibm-875",               "Cp875");
+        aliasTable.put("cp875",                 "Cp875");
+        aliasTable.put("875",                   "Cp875");
+
+        // MIBenum: ????
+        aliasTable.put("ibm918",                "Cp918");
+        aliasTable.put("ibm-918",               "Cp918");
+        aliasTable.put("cp918",                 "Cp918");
+        aliasTable.put("918",                   "Cp918");
+
+        // MIBenum: ????
+        aliasTable.put("ibm921",                "Cp921");
+        aliasTable.put("ibm-921",               "Cp921");
+        aliasTable.put("cp921",                 "Cp921");
+        aliasTable.put("921",                   "Cp921");
+
+        // MIBenum: ????
+        aliasTable.put("ibm922",                "Cp922");
+        aliasTable.put("ibm-922",               "Cp922");
+        aliasTable.put("cp922",                 "Cp922");
+        aliasTable.put("922",                   "Cp922");
+
+        // MIBenum: ????
+        aliasTable.put("ibm930",                "Cp930");         /* MDA */
+        aliasTable.put("ibm-930",               "Cp930");         /* MDA */
+        aliasTable.put("cp930",                 "Cp930");         /* MDA */
+        aliasTable.put("930",                   "Cp930");         /* MDA */
+
+        // MIBenum: ????
+        aliasTable.put("ibm933",                "Cp933");         /* MDA */
+        aliasTable.put("ibm-933",               "Cp933");         /* MDA */
+        aliasTable.put("cp933",                 "Cp933");         /* MDA */
+        aliasTable.put("933",                   "Cp933");         /* MDA */
+
+        // MIBenum: ????
+        aliasTable.put("ibm935",                "Cp935");         /* MDA */
+        aliasTable.put("ibm-935",               "Cp935");         /* MDA */
+        aliasTable.put("cp935",                 "Cp935");         /* MDA */
+        aliasTable.put("935",                   "Cp935");         /* MDA */
+
+        // MIBenum: ????
+        aliasTable.put("ibm937",                "Cp937");         /* MDA */
+        aliasTable.put("ibm-937",               "Cp937");         /* MDA */
+        aliasTable.put("cp937",                 "Cp937");         /* MDA */
+        aliasTable.put("937",                   "Cp937");         /* MDA */
+
+        // MIBenum: ????
+        aliasTable.put("ibm939",                "Cp939");         /* MDA */
+        aliasTable.put("ibm-939",               "Cp939");         /* MDA */
+        aliasTable.put("cp939",                 "Cp939");         /* MDA */
+        aliasTable.put("939",                   "Cp939");         /* MDA */
+
+        // MIBenum: ????
+        aliasTable.put("ibm942",                "Cp942");         /* MDA */
+        aliasTable.put("ibm-942",               "Cp942");         /* MDA */
+        aliasTable.put("cp942",                 "Cp942");         /* MDA */
+        aliasTable.put("942",                   "Cp942");         /* MDA */
+
+        // MIBenum: ????
+        aliasTable.put("ibm943",                "Cp943");         /* ibm.3158 */
+        aliasTable.put("ibm-943",               "Cp943");         /* ibm.3158 */
+        aliasTable.put("cp943",                 "Cp943");         /* ibm.3158 */
+        aliasTable.put("943",                   "Cp943");         /* ibm.3158 */
+
+        // MIBenum: ????
+        aliasTable.put("ibm948",                "Cp948");         /* MDA */
+        aliasTable.put("ibm-948",               "Cp948");         /* MDA */
+        aliasTable.put("cp948",                 "Cp948");         /* MDA */
+        aliasTable.put("948",                   "Cp948");         /* MDA */
+
+        // MIBenum: ????
+        aliasTable.put("ibm949",                "Cp949");         /* MDA */
+        aliasTable.put("ibm-949",               "Cp949");         /* MDA */
+        aliasTable.put("cp949",                 "Cp949");         /* MDA */
+        aliasTable.put("949",                   "Cp949");         /* MDA */
+
+        // MIBenum: ????
+        aliasTable.put("ibm950",                "Cp950");         /* MDA */
+        aliasTable.put("ibm-950",               "Cp950");         /* MDA */
+        aliasTable.put("cp950",                 "Cp950");         /* MDA */
+        aliasTable.put("950",                   "Cp950");         /* MDA */
+
+        // MIBenum: ????
+        aliasTable.put("ibm964",                "Cp964");         /* MDA */
+        aliasTable.put("ibm-964",               "Cp964");         /* MDA */
+        aliasTable.put("cp964",                 "Cp964");         /* MDA */
+        aliasTable.put("964",                   "Cp964");         /* MDA */
+
+        // MIBenum: ????
+        aliasTable.put("ibm970",                "Cp970");         /* MDA */
+        aliasTable.put("ibm-970",               "Cp970");         /* MDA */
+        aliasTable.put("cp970",                 "Cp970");         /* MDA */
+        aliasTable.put("970",                   "Cp970");         /* MDA */
+
+        // MIBenum: ????
+        aliasTable.put("ibm1006",               "Cp1006");
+        aliasTable.put("ibm-1006",              "Cp1006");
+        aliasTable.put("cp1006",                "Cp1006");
+        aliasTable.put("1006",                  "Cp1006");
+
+        // MIBenum: ????
+        aliasTable.put("ibm1025",               "Cp1025");
+        aliasTable.put("ibm-1025",              "Cp1025");
+        aliasTable.put("cp1025",                "Cp1025");
+        aliasTable.put("1025",                  "Cp1025");
+
+        // MIBenum: ????
+        aliasTable.put("ibm1026",               "Cp1026");
+        aliasTable.put("ibm-1026",              "Cp1026");
+        aliasTable.put("cp1026",                "Cp1026");
+        aliasTable.put("1026",                  "Cp1026");
+
+        // MIBenum: ????
+        aliasTable.put("ibm1097",               "Cp1097");
+        aliasTable.put("ibm-1097",              "Cp1097");
+        aliasTable.put("cp1097",                "Cp1097");
+        aliasTable.put("1097",                  "Cp1097");
+
+        // MIBenum: ????
+        aliasTable.put("ibm1098",               "Cp1098");
+        aliasTable.put("ibm-1098",              "Cp1098");
+        aliasTable.put("cp1098",                "Cp1098");
+        aliasTable.put("1098",                  "Cp1098");
+
+        // MIBenum: ????
+        aliasTable.put("ibm1112",               "Cp1112");
+        aliasTable.put("ibm-1112",              "Cp1112");
+        aliasTable.put("cp1112",                "Cp1112");
+        aliasTable.put("1112",                  "Cp1112");
+
+        // MIBenum: ????
+        aliasTable.put("ibm1122",               "Cp1122");
+        aliasTable.put("ibm-1122",              "Cp1122");
+        aliasTable.put("cp1122",                "Cp1122");
+        aliasTable.put("1122",                  "Cp1122");
+
+        // MIBenum: ????
+        aliasTable.put("ibm1123",               "Cp1123");
+        aliasTable.put("ibm-1123",              "Cp1123");
+        aliasTable.put("cp1123",                "Cp1123");
+        aliasTable.put("1123",                  "Cp1123");
+
+        // MIBenum: ????
+        aliasTable.put("ibm1124",               "Cp1124");
+        aliasTable.put("ibm-1124",              "Cp1124");
+        aliasTable.put("cp1124",                "Cp1124");
+        aliasTable.put("1124",                  "Cp1124");
+
+        // MIBenum: ????
+        aliasTable.put("ibm1381",               "Cp1381");        /* MDA */
+        aliasTable.put("ibm-1381",              "Cp1381");        /* MDA */
+        aliasTable.put("cp1381",                "Cp1381");        /* MDA */
+        aliasTable.put("1381",                  "Cp1381");        /* MDA */
+
+        // MIBenum: ????
+        aliasTable.put("ibm1383",               "Cp1383");        /* MDA */
+        aliasTable.put("ibm-1383",              "Cp1383");        /* MDA */
+        aliasTable.put("cp1383",                "Cp1383");        /* MDA */
+        aliasTable.put("1383",                  "Cp1383");        /* MDA */
+
+        // MIBenum: 16/39
+        aliasTable.put("jis",               "ISO2022JP");
+        aliasTable.put("iso-2022-jp",           "ISO2022JP");
+        aliasTable.put("csiso2022jp",           "ISO2022JP");
+        aliasTable.put("jis_encoding",          "ISO2022JP");
+        aliasTable.put("csjisencoding",         "ISO2022JP");
+
+        // MIBenum: 17/2024
+        aliasTable.put("windows-31j",           "MS932");
+        aliasTable.put("cswindows31j",          "MS932");
+
+
+        aliasTable.put("pck", "PCK");       // Case independent PCK alias
+
+        /*if (sjisIsMS932) {
+        aliasTable.put("shift_jis",         "MS932");   // IANA shift jis aliases
+        aliasTable.put("csshiftjis",        "MS932");   // updated per 4556882
+        aliasTable.put("x-sjis",            "MS932");
+        aliasTable.put("ms_kanji",          "MS932");
+        } else {
+        */
+            aliasTable.put("shift_jis",         "SJIS");        // IANA shift jis aliases
+            aliasTable.put("csshiftjis",        "SJIS");
+            aliasTable.put("x-sjis",            "SJIS");
+            aliasTable.put("ms_kanji",          "SJIS");
+            /*
+        }
+            */
+        // MIBenum: 18
+        // Japanese EUC
+        aliasTable.put("eucjis",                    "EUC_JP");
+        aliasTable.put("euc-jp",                    "EUC_JP");
+        aliasTable.put("eucjp",             "EUC_JP");
+        aliasTable.put("extended_unix_code_packed_format_for_japanese",
+                       "EUC_JP");
+        aliasTable.put("cseucpkdfmtjapanese",   "EUC_JP");
+        aliasTable.put("x-euc-jp",          "EUC_JP");
+        aliasTable.put("x-eucjp",           "EUC_JP");
+            aliasTable.put("eucjp-open",            "EUC_JP_Solaris"); // 1.3.1_x compatibility
+
+        // For handing only JIS0202 and JIS0208 in linux
+        aliasTable.put("euc-jp-linux",          "EUC_JP_LINUX");
+
+        // MIBenum: 874
+        aliasTable.put("windows-874",           "MS874");
+
+        // MIBenum: 2250
+        aliasTable.put("windows-1250",          "Cp1250");
+
+        // MIBenum: 2251
+        aliasTable.put("windows-1251",          "Cp1251");
+        aliasTable.put("ansi-1251",             "Cp1251"); // Solaris ru_RU.ANSI1251 locale
+
+        // MIBenum: 2252
+        aliasTable.put("windows-1252",          "Cp1252");
+
+        // MIBenum: 2253
+        aliasTable.put("windows-1253",          "Cp1253");
+
+        // MIBenum: 2254
+        aliasTable.put("windows-1254",          "Cp1254");
+
+        // MIBenum: 2255
+        aliasTable.put("windows-1255",          "Cp1255");
+
+        // MIBenum: 2256
+        aliasTable.put("windows-1256",          "Cp1256");
+
+        // MIBenum: 2257
+        aliasTable.put("windows-1257",          "Cp1257");
+
+        // MIBenum: 2258
+        aliasTable.put("windows-1258",          "Cp1258");
+
+        // MIBenum: ????
+        aliasTable.put("ibm33722",              "Cp33722");       /* MDA */
+        aliasTable.put("ibm-33722",             "Cp33722");       /* MDA */
+        aliasTable.put("cp33722",               "Cp33722");       /* MDA */
+        aliasTable.put("33722",                 "Cp33722");       /* MDA */
+
+        // Russian KOI8-R
+        aliasTable.put("koi8-r",                "KOI8_R");
+        aliasTable.put("koi8",                  "KOI8_R");
+        aliasTable.put("cskoi8r",               "KOI8_R");
+
+        // Simplified Chinese
+        aliasTable.put("gb2312",                    "EUC_CN");
+        aliasTable.put("gb2312-80",                 "EUC_CN");
+        aliasTable.put("gb2312-1980",           "EUC_CN");
+        aliasTable.put("euc-cn",                    "EUC_CN");
+        aliasTable.put("euccn",             "EUC_CN");
+
+        aliasTable.put("big5",              "Big5");
+        aliasTable.put("big5hk",                    "Big5_HKSCS");
+        aliasTable.put("big5-hkscs",        "Big5_HKSCS");
+        // Added for future compatibility, explicit mapping to Unicode 3.0
+        aliasTable.put("big5-hkscs:unicode3.0", "Big5_HKSCS");
+        aliasTable.put("big5_solaris",      "Big5_Solaris");
+
+        // Traditional Chinese
+        aliasTable.put("cns11643",                  "EUC_TW");
+        aliasTable.put("euc-tw",                    "EUC_TW");
+        aliasTable.put("euctw",             "EUC_TW");
+
+        // Korean
+        aliasTable.put("ksc5601",               "EUC_KR");
+        aliasTable.put("euc-kr",                "EUC_KR");
+        aliasTable.put("euckr",                 "EUC_KR");
+        aliasTable.put("ks_c_5601-1987",        "EUC_KR");
+        aliasTable.put("ksc5601-1987",          "EUC_KR");
+        aliasTable.put("ksc5601_1987",          "EUC_KR");
+        aliasTable.put("ksc_5601",              "EUC_KR");
+        aliasTable.put("5601",                  "EUC_KR");
+
+        aliasTable.put("ksc5601-1992",          "Johab");
+        aliasTable.put("ksc5601_1992",          "Johab");
+        aliasTable.put("ms1361",                "Johab");
+
+        aliasTable.put("windows-949",           "MS949");
+
+        //MIBenum: 37
+        aliasTable.put("iso-2022-kr",           "ISO2022KR");
+        aliasTable.put("csiso2022kr",           "ISO2022KR");
+
+        // Thai
+        aliasTable.put("tis620.2533",           "TIS620");
+        aliasTable.put("tis-620",               "TIS620"); // Linux name
+
+        // Variants
+        aliasTable.put("cp942c", "Cp942C");
+        aliasTable.put("cp943c", "Cp943C");
+        aliasTable.put("cp949c", "Cp949C");
+        aliasTable.put("iscii", "ISCII91");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/nio/charset/RemovingSunIO/TestCOMP.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,76 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/* @test
+   @bug 6176819
+   @summary Check if COMPUND_TEXT charset works as expected
+   @run main/timeout=1200 TestCOMP
+ */
+
+import java.util.HashMap;
+import java.util.Set;
+import java.io.UnsupportedEncodingException;
+import java.nio.charset.*;
+import java.nio.*;
+
+public class TestCOMP {
+    public static void main(String[] argv) throws CharacterCodingException {
+        String osName = System.getProperty("os.name");
+        if (osName.startsWith("Windows"))
+            return;
+        try {
+            String src =
+                "JIS0208\u4eb0" +
+                "ASCII" +
+                "JIS0212\u4e74\u4e79" +
+                "GB2312\u7279\u5b9a" +
+                "JIS0201\uff67\uff68" +
+                "Johab\uac00\uac01";
+
+            byte[] ba = src.getBytes("COMPOUND_TEXT");
+            /*
+            System.out.print("ba=");
+            for (int i = 0; i < ba.length; i++) {
+                System.out.printf("<%x> ", ba[i] & 0xff);
+            }
+            System.out.println();
+            */
+            String dst = new String(ba, "COMPOUND_TEXT");
+            char[] ca = dst.toCharArray();
+            /*
+            System.out.print("ca=");
+            for (int i = 0; i < ca.length; i++) {
+                System.out.printf("<%x> ", ca[i] & 0xffff);
+            }
+            System.out.println();
+            */
+            if (!src.equals(dst)) {
+                System.out.printf("src=<%s>\n", src);
+                System.out.printf("dst=<%s>\n", dst);
+                throw new CharacterCodingException();
+            }
+        } catch (Exception e){
+            e.printStackTrace();
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/nio/charset/RemovingSunIO/TestUnmappableForLength.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,59 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/* @test
+   @bug 6227339
+   @summary Check if returned CoderResult.unmappableForLength has correct
+            length value.
+ */
+
+import java.nio.charset.*;
+import java.nio.*;
+
+public class TestUnmappableForLength {
+    public static void main(String[] argv) throws CharacterCodingException {
+            byte[] ba = {(byte)0xa2, (byte)0xff};
+            //EUC_TW has its own decodeArrayLoop()
+            testDecode("EUC_TW", ba, 2);
+
+            //EUC_CN uses DoubleByteDecoder's decodeArrayLoop()
+            testDecode("EUC_CN", ba, 2);
+    }
+
+    static void testDecode(String csName, byte[] ba, int expected)
+        throws CharacterCodingException
+    {
+        try {
+            CoderResult cr = Charset
+                .forName(csName)
+                .newDecoder()
+                .decode(ByteBuffer.wrap(ba), CharBuffer.allocate(4), true);
+            if (cr.isUnmappable() && cr.length() != expected) {
+                throw new CharacterCodingException();
+            }
+        } catch (IllegalArgumentException x){
+            x.printStackTrace();
+        }
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/nio/charset/coders/BashCache.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,89 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/* @test
+ * @bug 4517279
+ * @summary Stochastic test of thread-local coder caches
+ */
+
+import java.nio.*;
+import java.nio.charset.*;
+import java.util.*;
+
+
+public class BashCache {
+
+    private static final int THREADS = 10;
+    private static final int TRIALS = 1000;
+
+    private static final Charset[] charsets
+        = new Charset[] {
+            Charset.forName("US-ASCII"),
+            Charset.forName("UTF-8"),
+            Charset.forName("CP1252"),
+            Charset.forName("UTF-16BE") };
+
+    private static volatile boolean failed = false;
+
+    private static class Basher extends Thread {
+
+        Random rnd = new Random(System.identityHashCode(this));
+
+        public void run() {
+            for (int i = 0; i < TRIALS; i++) {
+                Charset cs = charsets[rnd.nextInt(4)];
+                try {
+                    if (rnd.nextBoolean()) {
+                        cs.encode("hi mom");
+                    } else {
+                        cs.decode(ByteBuffer.wrap(new byte[] {
+                            (byte)'x', (byte)'y',
+                            (byte)'z', (byte)'z',
+                            (byte)'y' }));
+                    }
+                } catch (Exception x) {
+                    x.printStackTrace();
+                    failed = true;
+                    return;
+                }
+                if (rnd.nextBoolean())
+                    Thread.yield();
+            }
+        }
+
+    }
+
+    public static void main(String[] args) throws Exception {
+        Charset cs = Charset.forName("us-ascii");
+        Basher[] bashers = new Basher[THREADS];
+        for (int i = 0; i < THREADS; i++) {
+            bashers[i] = new Basher();
+            bashers[i].start();
+        }
+        for (int i = 0; i < THREADS; i++)
+            bashers[i].join();
+        if (failed)
+            throw new Exception("Test failed");
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/nio/charset/coders/BashStreams.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,391 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/* @test
+ * @summary Stochastic test of charset-based streams
+ */
+
+import java.io.*;
+import java.util.*;
+import java.nio.*;
+import java.nio.channels.*;
+import java.nio.charset.*;
+
+
+public class BashStreams {
+
+    static final PrintStream log = System.err;
+
+
+    static class CharacterGenerator {
+
+        private final Random rand;
+        private final int max;
+        private final int limit;
+        private int count = 0;
+
+        CharacterGenerator(long seed, String csn, int limit) {
+            rand = new Random(seed);
+            this.max = Surrogate.UCS4_MAX + 1;
+            this.limit = limit;
+        }
+
+        private char[] saved = new char[10];
+        private int savedCount = 0;
+
+        void push(char c) {
+            saved[savedCount++] = c;
+            count--;
+        }
+
+        int count() {
+            return count;
+        }
+
+        boolean hasNext() {
+            return count < limit;
+        }
+
+        char next() {
+            if (count >= limit)
+                throw new RuntimeException("EOF");
+            if (savedCount > 0) {
+                savedCount--;
+                count++;
+                return saved[savedCount];
+            }
+            int c;
+            for (;;) {
+                c = rand.nextInt(max);
+                if (Surrogate.is(c) || (c == 0xfffe) || (c == 0xffff))
+                    continue;
+                if (Surrogate.neededFor(c) && (count == limit - 1))
+                    continue;
+                break;
+            }
+            count++;
+            if (Surrogate.neededFor(c)) {
+                count++;
+                push(Surrogate.low(c));
+                return Surrogate.high(c);
+            }
+            return (char)c;
+        }
+
+    }
+
+
+    static void mismatch(String csn, int count, char c, char d) {
+        throw new RuntimeException(csn + ": Mismatch at count "
+                                   + count
+                                   + ": " + Integer.toHexString(c)
+                                   + " != "
+                                   + Integer.toHexString(d));
+    }
+
+    static void mismatchedEOF(String csn, int count, int cgCount) {
+        throw new RuntimeException(csn + ": Mismatched EOFs: "
+                                   + count
+                                   + " != "
+                                   + cgCount);
+    }
+
+
+    static class Sink                   // One abomination...
+        extends OutputStream
+        implements WritableByteChannel
+    {
+
+        private final String csn;
+        private final CharacterGenerator cg;
+        private int count = 0;
+
+        Sink(String csn, long seed) {
+            this.csn = csn;
+            this.cg = new CharacterGenerator(seed, csn, Integer.MAX_VALUE);
+        }
+
+        public void write(int b) throws IOException {
+            write (new byte[] { (byte)b }, 0, 1);
+        }
+
+        private int check(byte[] ba, int off, int len) throws IOException {
+            String s = new String(ba, off, len, csn);
+            int n = s.length();
+            for (int i = 0; i < n; i++) {
+                char c = s.charAt(i);
+                char d = cg.next();
+                if (c != d) {
+                    if (c == '?') {
+                        if (Surrogate.isHigh(d))
+                            cg.next();
+                        continue;
+                    }
+                    mismatch(csn, count + i, c, d);
+                }
+            }
+            count += n;
+            return len;
+        }
+
+        public void write(byte[] ba, int off, int len) throws IOException {
+            check(ba, off, len);
+        }
+
+        public int write(ByteBuffer bb) throws IOException {
+            int n = check(bb.array(),
+                          bb.arrayOffset() + bb.position(),
+                          bb.remaining());
+            bb.position(bb.position() + n);
+            return n;
+        }
+
+        public void close() {
+            count = -1;
+        }
+
+        public boolean isOpen() {
+            return count >= 0;
+        }
+
+    }
+
+    static void testWrite(String csn, int limit, long seed, Writer w)
+        throws IOException
+    {
+        Random rand = new Random(seed);
+        CharacterGenerator cg = new CharacterGenerator(seed, csn,
+                                                       Integer.MAX_VALUE);
+        int count = 0;
+        char[] ca = new char[16384];
+
+        int n = 0;
+        while (count < limit) {
+            n = rand.nextInt(ca.length);
+            for (int i = 0; i < n; i++)
+                ca[i] = cg.next();
+            w.write(ca, 0, n);
+            count += n;
+        }
+        if (Surrogate.isHigh(ca[n - 1]))
+            w.write(cg.next());
+        w.close();
+    }
+
+    static void testStreamWrite(String csn, int limit, long seed)
+        throws IOException
+    {
+        log.println("  write stream");
+        testWrite(csn, limit, seed,
+                  new OutputStreamWriter(new Sink(csn, seed), csn));
+    }
+
+    static void testChannelWrite(String csn, int limit, long seed)
+        throws IOException
+    {
+        log.println("  write channel");
+        testWrite(csn, limit, seed,
+                  Channels.newWriter(new Sink(csn, seed),
+                                     Charset.forName(csn)
+                                     .newEncoder()
+                                     .onMalformedInput(CodingErrorAction.REPLACE)
+                                     .onUnmappableCharacter(CodingErrorAction.REPLACE),
+                                     8192));
+    }
+
+
+    static class Source                 // ... and another
+        extends InputStream
+        implements ReadableByteChannel
+    {
+
+        private final String csn;
+        private final CharsetEncoder enc;
+        private final CharacterGenerator cg;
+        private int count = 0;
+
+        Source(String csn, long seed, int limit) {
+            this.csn = csn.startsWith("\1") ? csn.substring(1) : csn;
+            this.enc = Charset.forName(this.csn).newEncoder()
+                .onMalformedInput(CodingErrorAction.REPLACE)
+                .onUnmappableCharacter(CodingErrorAction.REPLACE);
+            this.cg = new CharacterGenerator(seed, csn, limit);
+        }
+
+        public int read() throws IOException {
+            byte[] b = new byte[1];
+            read(b);
+            return b[0];
+        }
+
+        private CharBuffer cb = CharBuffer.allocate(8192);
+        private ByteBuffer bb = null;
+
+        public int read(byte[] ba, int off, int len) throws IOException {
+            if (!cg.hasNext())
+                return -1;
+            int end = off + len;
+            int i = off;
+            while (i < end) {
+                if ((bb == null) || !bb.hasRemaining()) {
+                    cb.clear();
+                    while (cb.hasRemaining()) {
+                        if (!cg.hasNext())
+                            break;
+                        char c = cg.next();
+                        if (Surrogate.isHigh(c) && (cb.remaining() == 1)) {
+                            cg.push(c);
+                            break;
+                        }
+                        cb.put(c);
+                    }
+                    cb.flip();
+                    if (!cb.hasRemaining())
+                        break;
+                    bb = enc.encode(cb);
+                }
+                int d = Math.min(bb.remaining(), end - i);
+                bb.get(ba, i, d);
+                i += d;
+            }
+            return i - off;
+        }
+
+        public int read(ByteBuffer bb) throws IOException {
+            int n = read(bb.array(),
+                         bb.arrayOffset() + bb.position(),
+                         bb.remaining());
+            if (n >= 0)
+                bb.position(bb.position() + n);
+            return n;
+        }
+
+        public void close() {
+            count = -1;
+        }
+
+        public boolean isOpen() {
+            return count != -1;
+        }
+
+    }
+
+    static void testRead(String csn, int limit, long seed, int max,
+                         Reader rd)
+        throws IOException
+    {
+        Random rand = new Random(seed);
+        CharacterGenerator cg = new CharacterGenerator(seed, csn, limit);
+        int count = 0;
+        char[] ca = new char[16384];
+
+        int n = 0;
+        while (count < limit) {
+            int rn = rand.nextInt(ca.length);
+            n = rd.read(ca, 0, rn);
+            if (n < 0)
+                break;
+            for (int i = 0; i < n; i++) {
+                char c = ca[i];
+                if (!cg.hasNext())
+                    mismatchedEOF(csn, count + i, cg.count());
+                char d = cg.next();
+                if (c == '?') {
+                    if (Surrogate.isHigh(d)) {
+                        cg.next();
+                        continue;
+                    }
+                    if (d > max)
+                        continue;
+                }
+                if (c != d)
+                    mismatch(csn, count + i, c, d);
+            }
+            count += n;
+        }
+        if (cg.hasNext())
+            mismatchedEOF(csn, count, cg.count());
+        rd.close();
+    }
+
+    static void testStreamRead(String csn, int limit, long seed, int max)
+        throws IOException
+    {
+        log.println("  read stream");
+        testRead(csn, limit, seed, max,
+                 new InputStreamReader(new Source(csn, seed, limit), csn));
+    }
+
+    static void testChannelRead(String csn, int limit, long seed, int max)
+        throws IOException
+    {
+        log.println("  read channel");
+        testRead(csn, limit, seed, max,
+                 Channels.newReader(new Source(csn, seed, limit), csn));
+    }
+
+
+    static final int LIMIT = 1 << 21;
+
+    static void test(String csn, int limit, long seed, int max)
+        throws Exception
+    {
+        log.println();
+        log.println(csn);
+
+        testStreamWrite(csn, limit, seed);
+        testChannelWrite(csn, limit, seed);
+        testStreamRead(csn, limit, seed, max);
+        testChannelRead(csn, limit, seed, max);
+    }
+
+    public static void main(String[] args) throws Exception {
+
+        if (System.getProperty("os.arch").equals("ia64")) {
+            // This test requires 54 minutes on an Itanium-1 processor
+            return;
+        }
+
+        int ai = 0, an = args.length;
+
+        int limit;
+        if (ai < an)
+            limit = 1 << Integer.parseInt(args[ai++]);
+        else
+            limit = LIMIT;
+        log.println("limit = " + limit);
+
+        long seed;
+        if (ai < an)
+            seed = Long.parseLong(args[ai++]);
+        else
+            seed = System.currentTimeMillis();
+        log.println("seed = " + seed);
+
+        test("UTF-8", limit, seed, Integer.MAX_VALUE);
+        test("US-ASCII", limit, seed, 0x7f);
+        test("ISO-8859-1", limit, seed, 0xff);
+
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/nio/charset/coders/Check.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,152 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/* @test
+ * @bug 4712786
+ * @summary Check charsets against reference files
+ *
+ * @build Util
+ * @run main Check shift_jis ref.shift_jis
+ * @run main/othervm -Dsun.nio.cs.map=Windows-31J/Shift_JIS Check shift_jis ref.windows-31j
+ */
+
+import java.io.*;
+import java.nio.*;
+import java.nio.channels.*;
+import java.nio.charset.*;
+import java.util.*;
+import java.util.regex.*;
+
+
+public class Check {
+
+    private static PrintStream log = System.err;
+
+    private static final int UNICODE_SIZE = (1 << 16);
+
+    private final String csName;
+    private final String refName;
+    private byte[][] bytes = new byte[UNICODE_SIZE][]; // Indexed by char
+
+    private int errors = 0;
+
+    private Check(String csn, String refn) {
+        csName = csn;
+        refName = refn;
+    }
+
+    private Check load()
+        throws IOException
+    {
+        File fn = new File(System.getProperty("test.src", "."), refName);
+        FileChannel fc = new FileInputStream(fn).getChannel();
+        ByteBuffer bb = fc.map(FileChannel.MapMode.READ_ONLY, 0, fc.size());
+        CharBuffer cb = Charset.forName("US-ASCII").decode(bb);
+        Pattern p = Pattern.compile("^(\\p{XDigit}+) +(\\p{XDigit}+)$",
+                                    Pattern.MULTILINE);
+        Matcher m = p.matcher(cb);
+        while (m.find()) {
+            char c = (char)Integer.parseInt(m.group(1), 16);
+            String v = m.group(2);
+            int nb = v.length() >> 1;
+            byte[] ba = new byte[nb];
+            for (int i = 0; i < nb; i++) {
+                ba[i] = (byte)Integer.parseInt(v.substring(i << 1, (i << 1) + 2),
+                                               16);
+            }
+            bytes[c] = ba;
+        }
+        return this;
+    }
+
+    private void error() {
+        if (++errors >= 100)
+            throw new RuntimeException("100 errors occurred (there might be more)");
+    }
+
+    private void mismatch(String s, byte[] expected, byte[] got) {
+        log.println("Encoding mismatch on \""
+                    + Util.toString(s)
+                    + "\": Expected {"
+                    + Util.toString(expected)
+                    + "}, got {"
+                    + Util.toString(got)
+                    + "}");
+        error();
+    }
+
+    private void mismatch(int i, byte[] ba, String expected, String got) {
+        log.println("Decoding mismatch on \""
+                    + Util.toString((char)i)
+                    + "\", input {"
+                    + Util.toString(ba)
+                    + "}: Expected \""
+                    + Util.toString(expected)
+                    + "\", got \""
+                    + Util.toString(got)
+                    + "\"");
+        error();
+    }
+
+    private void check()
+        throws IOException
+    {
+
+        // String.getBytes(String csn)
+        for (int i = 0; i < UNICODE_SIZE; i++) {
+            if (bytes[i] == null)
+                continue;
+            String s = new String(new char[]{ (char)i });
+            byte[] ba = s.getBytes(csName);
+            if (Util.cmp(ba, bytes[i]) >= 0)
+                mismatch(s, bytes[i], ba);
+        }
+        log.println("String.getBytes(\"" + csName + "\") okay");
+
+        // String(byte[] ba, String csn)
+        for (int i = 0; i < UNICODE_SIZE; i++) {
+            if (bytes[i] == null)
+                continue;
+            String r = new String(new char[]{ (char)i });
+            String s = new String(bytes[i], csName);
+            if (!r.equals(s))
+                mismatch(i, bytes[i], r, s);
+        }
+        log.println("String(byte[] ba, \"" + csName + "\") okay");
+
+        // To be really thorough we should test OutputStreamWriter,
+        // InputStreamReader, and Charset{De,En}Coder here also,
+        // but the above will do for now.
+
+        if (errors > 0) {
+            throw new RuntimeException(errors + " error(s) occurred");
+        }
+
+    }
+
+    // Usage: Check charsetName referenceFileName
+    public static void main(String[] args) throws Exception {
+        new Check(args[0], args[1]).load().check();
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/nio/charset/coders/CheckSJISMappingProp.sh	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,76 @@
+#!/bin/sh
+
+#
+# Copyright 2003 Sun Microsystems, Inc.  All Rights Reserved.
+# 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+# CA 95054 USA or visit www.sun.com if you need additional information or
+# have any questions.
+#
+
+# @test
+# @summary Verify that sun.nio.cs.map property interpreted in ja multibyte locales
+# @bug 4879123
+# @build SJISPropTest
+#
+# @run shell/timeout=300 CheckSJISMappingProp.sh
+
+# set platform-dependent variables
+
+OS=`uname -s`
+case "$OS" in
+  SunOS | Linux ) ;;
+  # Skip locale test for Windows
+  Windows* )
+    echo "Passed"; exit 0 ;;
+  * ) echo "Unrecognized system!" ;  exit 1 ;;
+esac
+
+expectPass() {
+  if [ $1 -eq 0 ]
+  then echo "--- passed as expected"
+  else
+    echo "--- failed"
+    exit $1
+  fi
+}
+
+
+JAVA="${TESTJAVA}/bin/java -cp ${TESTCLASSES}"
+runTest() {
+  echo "Testing:" ${1}
+  LC_ALL="$1" ; export LC_ALL
+  locale
+  # Firstly, test with property set
+  # (shift_jis should map to windows-31J charset) 
+  ${JAVA} -Dsun.nio.cs.map="Windows-31J/Shift_JIS" SJISPropTest MS932
+  expectPass $?
+
+  # Next, test without property set - "shift_jis" follows IANA conventions
+  # and should map to the sun.nio.cs.ext.Shift_JIS charset
+  ${JAVA} SJISPropTest Shift_JIS
+  expectPass $?
+}
+
+# Run the test in the common Solaris/Linux locales
+# Tests will simply run in current locale if locale isn't supported
+# on the test machine/platform
+
+for i in "ja" "ja_JP.PCK" "ja_JP.eucJP"  ; do
+  runTest ${i}
+done
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/nio/charset/coders/Errors.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,220 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/* @test
+ * @summary Check that error cases are replaced correctly in String/ISR/OSW
+ * @bug 4457851
+ *
+ * @build Errors Util
+ * @run main Errors
+ */
+
+import java.io.*;
+import java.nio.*;
+
+
+public class Errors {
+
+    static PrintStream log = System.err;
+    static int failures = 0;
+
+    static final byte Q = (byte)'?';
+    static final byte X = (byte)'x';
+    static final byte Y = (byte)'y';
+    static final byte Z = (byte)'z';
+
+    static abstract class Test {
+
+        protected final String csn;
+        protected final String what;
+
+        Test(String csn, String what) {
+            this.csn = csn;
+            this.what = what;
+        }
+
+        abstract byte[] enc(String s) throws IOException;
+
+        Test test(String s, byte[] ref) {
+            log.print("  " + Util.toString(s.toCharArray()));
+            byte[] ba = null;
+            try {
+                ba = enc(s);
+            } catch (IOException x) {
+                log.println(" -e-> ERROR: " + x.getClass().getName());
+                failures++;
+                return this;
+            }
+            log.println(" -e-> " + Util.toString(ba));
+            int i = Util.cmp(ba, ref);
+            if (i >= 0) {
+                log.println("    ERROR: Mismatch at index " + i
+                            + ", expected: " + Util.toString(ref));
+                failures++;
+            }
+            return this;
+        }
+
+        abstract String dec(byte[] ba) throws IOException;
+
+        Test test(byte[] ba, String ref) {
+            log.print("  " + Util.toString(ba));
+            String s = null;
+            try {
+                s = dec(ba);
+            } catch (IOException x) {
+                log.println(" -d-> ERROR: " + x.getClass().getName());
+                failures++;
+                return this;
+            }
+            log.println(" -d-> " + Util.toString(s.toCharArray()));
+            char[] ca = s.toCharArray();
+            char[] refa = ref.toCharArray();
+            int i = Util.cmp(ca, refa);
+            if (i >= 0) {
+                log.println("    ERROR: Mismatch at index " + i
+                            + ", expected: " + Util.toString(refa));
+                failures++;
+            }
+            return this;
+        }
+
+        Test run() {
+            log.println(csn + ", " + what);
+
+            test("xyzzy", new byte[] { X, Y, Z, Z, Y });
+
+            // Malformed surrogates
+            test("\uD800x", new byte[] { Q, X });
+            test("\uDC00x", new byte[] { Q, X });
+            test("\uD800\uDB00x", new byte[] { Q, Q, X });
+
+            return this;
+        }
+
+    }
+
+    static class TestStream extends Test {
+
+        TestStream(String csn) {
+            super(csn, "I/O streams");
+        }
+
+        byte[] enc(String s) throws IOException {
+            ByteArrayOutputStream bos = new ByteArrayOutputStream();
+            Writer wr = new OutputStreamWriter(bos, csn);
+            wr.write(s);
+            wr.close();
+            return bos.toByteArray();
+        }
+
+        String dec(byte[] ba) throws IOException {
+            ByteArrayInputStream bis = new ByteArrayInputStream(ba);
+            Reader rd = new InputStreamReader(bis, csn);
+            char[] ca = new char[1024];
+            int n = rd.read(ca);
+            String s = new String(ca, 0, n);
+            rd.close();
+            return s;
+        }
+
+    }
+
+    static class TestString extends Test {
+
+        TestString(String csn) {
+            super(csn, "strings");
+        }
+
+        byte[] enc(String s) throws IOException {
+            return s.getBytes(csn);
+        }
+
+        String dec(byte[] ba) throws IOException {
+            return new String(ba, 0, ba.length, csn);
+        }
+
+    }
+
+    static void test_US_ASCII(Test t) {
+        t.run();
+        t.test("\u0080", new byte[] { Q });
+        t.test("\u0100", new byte[] { Q });
+        t.test("\uD800\uDC00", new byte[] { Q });
+        t.test("\uF000", new byte[] { Q });
+        t.test("\uFFFE", new byte[] { Q });
+        t.test("\uFFFF", new byte[] { Q });
+        t.test(new byte[] { X, (byte)0x7f, Y }, "x\u007Fy");
+        t.test(new byte[] { X, (byte)0x80, Y }, "x\uFFFDy");
+        t.test(new byte[] { (byte)0xf0, (byte)0xf0 }, "\uFFFD\uFFFD");
+    }
+
+    static void test_ISO_8859_1(Test t) {
+        t.run();
+        t.test("\u0080", new byte[] { (byte)0x80 });
+        t.test("\u0100", new byte[] { Q });
+        t.test("\uD800\uDC00x", new byte[] { Q, X });
+        t.test("\uF000", new byte[] { Q });
+        t.test("\uFFFE", new byte[] { Q });
+        t.test("\uFFFF", new byte[] { Q });
+        t.test(new byte[] { X, (byte)0x7f, Y }, "x\u007Fy");
+        t.test(new byte[] { X, (byte)0x80, Y }, "x\u0080y");
+        t.test(new byte[] { (byte)0xf0, (byte)0xf0 }, "\u00F0\u00F0");
+    }
+
+    static void test_UTF_8(Test t) {
+        t.run();
+        t.test("\u0080", new byte[] { (byte)0xC2, (byte)0x80 });
+        t.test("\u0100", new byte[] { (byte)0xC4, (byte)0x80 });
+        t.test("\uD800\uDC00",
+               new byte[] { (byte)0xF0, (byte)0x90, (byte)0x80, (byte)0x80 });
+        t.test("\uF000", new byte[] { (byte)0xEF, (byte)0x80, (byte)0x80 });
+        t.test("\uFFFE", new byte[] { (byte)0xEF, (byte)0xBF, (byte)0xBE });
+        t.test("\uFFFF", new byte[] { (byte)0xEF, (byte)0xBF, (byte)0xBF });
+        t.test(new byte[] { X, (byte)0x7f, Y }, "x\u007Fy");
+        t.test(new byte[] { X, (byte)0x80, Y }, "x\uFFFDy");
+        t.test(new byte[] { (byte)0xf0, (byte)0xf0 }, "\uFFFD");
+    }
+
+    public static void main(String[] args) throws Exception {
+
+        test_US_ASCII(new TestString("US-ASCII"));
+        test_US_ASCII(new TestStream("US-ASCII"));
+
+        test_ISO_8859_1(new TestString("ISO-8859-1"));
+        test_ISO_8859_1(new TestStream("ISO-8859-1"));
+
+        test_ISO_8859_1(new TestString("ISO-8859-15"));
+        test_ISO_8859_1(new TestStream("ISO-8859-15"));
+
+        test_UTF_8(new TestString("UTF-8"));
+        test_UTF_8(new TestStream("UTF-8"));
+
+        if (failures > 0) {
+            log.println();
+            throw new Exception("Tests failed: " + failures);
+        }
+
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/nio/charset/coders/FullRead.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/* @test
+ * @summary Ensure that InputStreamReader reads as many characters as possible
+ */
+
+// InputStreamReader is not required by its spec to read as many characters as
+// possible upon each invocation of read(char[], int, int), but many programs
+// (e.g., javac) depend upon this behavior.
+
+import java.io.*;
+
+
+public class FullRead {
+
+    static int MAX_LEN = 1 << 16;
+
+    static void test(File f, int len) throws Exception {
+        FileOutputStream fo = new FileOutputStream(f);
+        for (int i = 0; i < len; i++)
+            fo.write('x');
+        fo.close();
+
+        FileInputStream fi = new FileInputStream(f);
+        Reader rd = new InputStreamReader(fi, "US-ASCII");
+        char[] cb = new char[MAX_LEN + 100];
+        int n = rd.read(cb, 0, cb.length);
+        System.out.println(len + " : " + n);
+        if (len != n)
+            throw new Exception("Expected " + len + ", read " + n);
+    }
+
+    public static void main(String[] args) throws Exception {
+        File f = File.createTempFile("foo", "bar");
+        f.deleteOnExit();
+        System.out.println(f);
+
+        for (int i = 4; i <= MAX_LEN; i <<= 1)
+            test(f, i);
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/nio/charset/coders/IOCoders.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,103 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/* @test
+ * @summary Unit test for ISR/OSW constructors that take coders
+ */
+
+import java.io.*;
+import java.nio.*;
+import java.nio.charset.*;
+
+
+public class IOCoders {
+
+    static Charset ascii = Charset.forName("US-ASCII");
+
+    static void isrPositive() throws Exception {
+        ByteArrayInputStream bis
+            = new ByteArrayInputStream(new byte[] { (byte)'h', (byte)'i' });
+        InputStreamReader isr
+            = new InputStreamReader(bis,
+                                    ascii.newDecoder()
+                                    .onMalformedInput(CodingErrorAction.REPORT)
+                                    .onUnmappableCharacter(CodingErrorAction.REPORT));
+        BufferedReader br = new BufferedReader(isr);
+        if (!br.readLine().equals("hi"))
+            throw new Exception();
+    }
+
+    static void isrNegative() throws Exception {
+        ByteArrayInputStream bis
+            = new ByteArrayInputStream(new byte[] { (byte)0xff, (byte)0xff });
+        InputStreamReader isr
+            = new InputStreamReader(bis,
+                                    ascii.newDecoder()
+                                    .onMalformedInput(CodingErrorAction.REPORT)
+                                    .onUnmappableCharacter(CodingErrorAction.REPORT));
+        BufferedReader br = new BufferedReader(isr);
+        try {
+            br.readLine();
+        } catch (MalformedInputException x) {
+            return;
+        }
+        throw new Exception();
+    }
+
+    static void oswPositive() throws Exception {
+        ByteArrayOutputStream bos = new ByteArrayOutputStream();
+        OutputStreamWriter osw
+            = new OutputStreamWriter(bos,
+                                     ascii.newEncoder()
+                                     .onMalformedInput(CodingErrorAction.REPORT)
+                                     .onUnmappableCharacter(CodingErrorAction.REPORT));
+        osw.write("hi");
+        osw.close();
+        if (!ascii.decode(ByteBuffer.wrap(bos.toByteArray()))
+            .toString().equals("hi"))
+            throw new Exception();
+    }
+
+    static void oswNegative() throws Exception {
+        ByteArrayOutputStream bos = new ByteArrayOutputStream();
+        OutputStreamWriter osw
+            = new OutputStreamWriter(bos,
+                                     ascii.newEncoder()
+                                     .onMalformedInput(CodingErrorAction.REPORT)
+                                     .onUnmappableCharacter(CodingErrorAction.REPORT));
+        try {
+            osw.write("\u00A0\u00A1");
+        } catch (UnmappableCharacterException x) {
+            return;
+        }
+        throw new Exception();
+    }
+
+    public static void main(String[] args) throws Exception {
+        isrPositive();
+        isrNegative();
+        oswPositive();
+        oswNegative();
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/nio/charset/coders/IsLegalReplacement.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,93 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/* @test
+ * @bug 4821286
+ * @summary Check correctness of CharsetEncoder.isLegalReplacement(byte[])
+ */
+
+import java.io.*;
+import java.nio.*;
+import java.nio.charset.*;
+import java.util.*;
+
+
+public class IsLegalReplacement {
+
+    static PrintStream out = System.err;
+    static int errors = 0;
+
+    static String toString(byte[] ba) {
+        StringBuffer sb = new StringBuffer();
+        for (int i = 0; i < ba.length; i++) {
+            byte b = ba[i];
+            if (i > 0)
+                sb.append(' ');
+            sb.append(Integer.toHexString((b >> 4) & 0xf));
+            sb.append(Integer.toHexString((b >> 0) & 0xf));
+        }
+        return sb.toString();
+    }
+
+    static CoderResult ilr(String csn, byte[] repl) {
+        CharsetDecoder dec = Charset.forName(csn).newDecoder();
+        dec.onMalformedInput(CodingErrorAction.REPORT);
+        dec.onUnmappableCharacter(CodingErrorAction.REPORT);
+        ByteBuffer bb = ByteBuffer.wrap(repl);
+        CharBuffer cb = CharBuffer.allocate((int)(bb.remaining()
+                                                  * dec.maxCharsPerByte()));
+        return dec.decode(bb, cb, true);
+    }
+
+    static void test(String csn, byte[] repl, boolean expected)
+        throws Exception
+    {
+        CharsetEncoder enc = Charset.forName(csn).newEncoder();
+        out.print(csn + ": " + toString(repl) + ": ");
+        if (enc.isLegalReplacement(repl) == expected) {
+            out.print("Okay");
+        } else {
+            out.print("Wrong: Expected " + expected);
+            errors++;
+        }
+        out.println(" (" + ilr(csn, repl) + ")");
+    }
+
+    public static void main(String[] args) throws Exception {
+
+        test("UTF-16", new byte [] { (byte)0xd8, 0, (byte)0xdc, 0 }, true);
+        test("UTF-16", new byte [] { (byte)0xdc, 0, (byte)0xd8, 0 }, false);
+        test("UTF-16", new byte [] { (byte)0xd8, 0 }, false);
+        test("UTF-16BE", new byte [] { (byte)0xd8, 0, (byte)0xdc, 0 }, true);
+        test("UTF-16BE", new byte [] { (byte)0xdc, 0, (byte)0xd8, 0 }, false);
+        test("UTF-16BE", new byte [] { (byte)0xd8, 0 }, false);
+        test("UTF-16LE", new byte [] { 0, (byte)0xd8, 0, (byte)0xdc }, true);
+        test("UTF-16LE", new byte [] { 0, (byte)0xdc, 0, (byte)0xd8 }, false);
+        test("UTF-16LE", new byte [] { 0, (byte)0xd8 }, false);
+
+        if (errors > 0)
+            throw new Exception(errors + " error(s) occurred");
+
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/nio/charset/coders/ResetISO2022JP.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/* @test
+   @bug 6226510
+   @summary Check that ISO-2022-JP's encoder correctly resets to ASCII mode
+   @author Martin Buchholz
+ */
+
+import java.nio.*;
+import java.nio.charset.*;
+
+public class ResetISO2022JP {
+
+    public static void main(String[] args) throws Exception {
+        if (! (encode(true).equals(encode(false))))
+            throw new Exception("Mismatch!");
+    }
+
+    static String encode(boolean reuseEncoder) {
+        String s = "\u3042\u3043\u3044";
+
+        CharsetEncoder e = Charset.forName("ISO-2022-JP").newEncoder();
+
+        if (reuseEncoder) {
+            // I'm turning japanese. Yes I'm turning japanese.  Yes I think so!
+            e.encode(CharBuffer.wrap(s), ByteBuffer.allocate(64), true);
+
+            // Should put encoder back into ASCII mode
+            e.reset();
+        }
+
+        ByteBuffer bb = ByteBuffer.allocate(64);
+        e.encode(CharBuffer.wrap(s), bb, true);
+        e.flush(bb);
+        bb.flip();
+        StringBuilder sb = new StringBuilder();
+        for (int i = 0; i < bb.limit(); i++)
+            sb.append(String.format("%02x ", bb.get(i)));
+        System.out.println(sb);
+        return sb.toString();
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/nio/charset/coders/SJISPropTest.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,59 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/*
+ *
+ *
+ * Regression test class run by CheckSJISMappingProp.sh to verify
+ * that sun.nio.cs.map property is correctly interpreted in
+ * multibyte Japanese locales
+ *
+ */
+
+public class SJISPropTest {
+    public static void main(String[] args) throws Exception {
+        boolean sjisIsMS932 = false;
+
+        if (args[0].equals("MS932"))
+                sjisIsMS932 = true;
+        byte[] testBytes = { (byte)0x81, (byte)0x60 };
+
+        // JIS X based Shift_JIS and Windows-31J differ
+        // in a number of mappings including this one.
+
+        String expectedMS932 = new String("\uFF5E");
+        String expectedSJIS = new String("\u301C");
+
+        // Alias "shift_jis" will map to Windows-31J
+        // if the sun.nio.cs.map system property is defined as
+        // "Windows-31J/Shift_JIS". This should work in all
+        // multibyte (especially Japanese) locales.
+
+        String s = new String(testBytes, "shift_jis");
+
+        if (sjisIsMS932 && !s.equals(expectedMS932))
+            throw new Exception("not MS932");
+        else if (!sjisIsMS932 && !s.equals(expectedSJIS))
+            throw new Exception("not SJIS");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/nio/charset/coders/StreamTimeout.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,137 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/* @test
+ * @bug 4521942
+ * @summary Ensure that InputStreamReaders work properly
+ *          when the underlying byte stream times out
+ */
+
+import java.net.*;
+import java.io.*;
+
+
+public class StreamTimeout {
+
+    private static PrintStream log = System.err;
+
+    private static String charset = "US-ASCII";
+
+    private static Object lock = new Object();
+    private static synchronized void waitABit(int millisec) {
+        synchronized(lock) {
+            try {
+                lock.wait(millisec);
+            } catch (InterruptedException e) {
+                //ignore
+            }
+        }
+    }
+
+    private static class Client extends Thread {
+        public void run() {
+            try {
+                Socket so = new Socket("127.0.0.1", 22222);
+                Writer wr = new OutputStreamWriter(so.getOutputStream(),
+                                                   charset);
+                wr.write("ab");
+                wr.flush();
+            } catch (IOException x) {
+                log.print("Unexpected exception in writer: ");
+                x.printStackTrace();
+                System.exit(1);
+            }
+        }
+    }
+
+    private static void gobble(InputStream is, Reader rd,
+                               int ec, boolean force)
+        throws Exception
+    {
+        int a = is.available();
+        boolean r = rd.ready();
+        log.print("" + a + " bytes available, "
+                  + "reader " + (r ? "" : "not ") + "ready");
+        if (!r && !force) {
+            log.println();
+            return;
+        }
+        int c;
+        try {
+            c = rd.read();
+        } catch (InterruptedIOException x) {
+            log.println();
+            throw x;
+        }
+        log.println(", read() ==> "
+                    + (c >= 0 ? ("'" + (char)c + "'" ): "EOF"));
+        if (c != ec)
+            throw new Exception("Incorrect value read: Expected "
+                                + ec + ", read " + (char)c);
+    }
+
+    public static void main(String[] args) throws Exception {
+
+        if (args.length > 0)
+            charset = args[0];
+
+        ServerSocket ss = new ServerSocket(22222);
+        Thread cl = new Client();
+        cl.start();
+        Socket s = ss.accept();
+        s.setSoTimeout(150);
+        InputStream is = s.getInputStream();
+        Reader rd = new InputStreamReader(is, charset);
+
+        while (is.available() <= 0)
+            Thread.yield();
+
+        gobble(is, rd, 'a', false);
+        gobble(is, rd, 'b', false);
+        gobble(is, rd, -1, false);
+
+        boolean caught = false;
+        try {
+            gobble(is, rd, -1, true);
+        } catch (InterruptedIOException e) {
+            log.println("Read timed out, as expected");
+            caught = true;
+        }
+        if (!caught) {
+            log.println("Read did not time out, test inapplicable");
+            return;
+        }
+
+        caught = false;
+        try {
+            gobble(is, rd, -1, true);
+        } catch (InterruptedIOException x) {
+            log.println("Second read timed out, as expected");
+            caught = true;
+        }
+        if (!caught)
+            throw new Exception("Second read completed");
+
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/nio/charset/coders/Surrogate.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+public class Surrogate {
+
+    public static final int UCS4_SURROGATE_MIN = 0x10000;
+    public static final int UCS4_MAX = (1 << 20) + UCS4_SURROGATE_MIN - 1;
+
+    // UTF-16 surrogate-character ranges
+    //
+    public static final char MIN_HIGH = '\uD800';
+    public static final char MAX_HIGH = '\uDBFF';
+    public static final char MIN_LOW  = '\uDC00';
+    public static final char MAX_LOW  = '\uDFFF';
+    public static final char MIN = MIN_HIGH;
+    public static final char MAX = MAX_LOW;
+
+    public static boolean neededFor(int uc) {
+        return (uc >= UCS4_SURROGATE_MIN) && (uc <= UCS4_MAX);
+    }
+
+    public static boolean isHigh(int c) {
+        return (MIN_HIGH <= c) && (c <= MAX_HIGH);
+    }
+
+    static char high(int uc) {
+        return (char)(0xd800 | (((uc - UCS4_SURROGATE_MIN) >> 10) & 0x3ff));
+    }
+
+    public static boolean isLow(int c) {
+        return (MIN_LOW <= c) && (c <= MAX_LOW);
+    }
+
+    static char low(int uc) {
+        return (char)(0xdc00 | ((uc - UCS4_SURROGATE_MIN) & 0x3ff));
+    }
+
+    public static boolean is(int c) {
+        return (MIN <= c) && (c <= MAX);
+    }
+
+    static int toUCS4(char c, char d) {
+        return (((c & 0x3ff) << 10) | (d & 0x3ff)) + 0x10000;
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/nio/charset/coders/Surrogates.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,90 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/* @test
+ * @summary Check that array-crossing surrogate pairs are handled properly
+ */
+
+import java.io.*;
+import java.nio.*;
+import java.nio.charset.*;
+
+
+public class Surrogates {
+
+    static PrintStream log = System.err;
+
+    static char[] input;
+    static byte[] output;
+
+    static final int LEN = 128;
+
+    static void initData() throws IOException {
+        StringBuffer sb = new StringBuffer();
+        for (int i = 0; i < LEN; i++) {
+            int c = Surrogate.UCS4_SURROGATE_MIN + 1;
+            sb.append(Surrogate.high(c));
+            sb.append(Surrogate.low(c));
+        }
+        input = sb.toString().toCharArray();
+        ByteArrayOutputStream bos = new ByteArrayOutputStream();
+        OutputStreamWriter osw
+            = new OutputStreamWriter(bos, Charset.forName("UTF-8"));
+        osw.write(input);
+        osw.close();
+        output = bos.toByteArray();
+    }
+
+    static void testLeftovers(boolean doMalformed)
+        throws Exception
+    {
+        log.print("Leftover surrogates, doMalformed = " + doMalformed);
+        ByteArrayOutputStream bos = new ByteArrayOutputStream();
+        OutputStreamWriter osw
+            = new OutputStreamWriter(bos, Charset.forName("UTF-8"));
+        for (int i = 0; i < input.length; i += 7)
+            osw.write(input, i, Math.min(input.length - i, 7));
+        if (doMalformed)
+            osw.write(input, 0, 1);
+        osw.close();
+        byte[] result = bos.toByteArray();
+
+        // Ignore a trailing '?' if we wrote a malformed final surrogate
+        int rl = result.length + (doMalformed ? -1 : 0);
+
+        if (rl != output.length)
+            throw new Exception("Incorrect result length "
+                                + rl + ", expected " + output.length);
+        for (int i = 0; i < output.length; i++)
+            if (result[i] != output[i])
+                throw new Exception("Unexpected result value at index " + i);
+        log.println(": Passed");
+    }
+
+    public static void main(String[] args) throws Exception {
+        initData();
+        testLeftovers(false);
+        testLeftovers(true);
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/nio/charset/coders/Util.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,114 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+
+public class Util {
+
+    private Util() { }
+
+    // Returns -1 if equal, o.w. returns index of first difference
+    //
+    public static int cmp(byte[] ba, byte[] bb) {
+        int n = Math.min(ba.length, bb.length);
+        for (int i = 0; i < n; i++) {
+            if ((i >= ba.length) || (i >= bb.length))
+                return i;
+            if (ba[i] != bb[i])
+                return i;
+        }
+        if (ba.length != bb.length)
+            return 0;
+        return -1;
+    }
+
+    // Returns -1 if equal, o.w. returns index of first difference
+    //
+    public static int cmp(char[] ca, char[] cb) {
+        int n = Math.min(ca.length, cb.length);
+        for (int i = 0; i < n; i++) {
+            if ((i >= ca.length) || (i >= cb.length))
+                return i;
+            if (ca[i] != cb[i])
+                return i;
+        }
+        if (ca.length != cb.length)
+            return 0;
+        return -1;
+    }
+
+    public static String toString(byte[] ba, int off, int len) {
+        StringBuffer sb = new StringBuffer();
+        for (int i = off; i < off + len; i++) {
+            int c = ba[i];
+            if (c == '\\') {
+                sb.append("\\\\");
+                continue;
+            }
+            if ((c >= ' ') && (c < 0x7f)) {
+                sb.append((char)c);
+                continue;
+            }
+            sb.append("\\x");
+            sb.append(Integer.toHexString(c & 0xff));
+        }
+        return sb.toString();
+    }
+
+    public static String toString(byte[] ba) {
+        return toString(ba, 0, ba.length);
+    }
+
+    public static String toString(char[] ca, int off, int len) {
+        StringBuffer sb = new StringBuffer();
+        for (int i = off; i < off + len; i++) {
+            char c = ca[i];
+            if (c == '\\') {
+                sb.append("\\\\");
+                continue;
+            }
+            if ((c >= ' ') && (c < 0x7f)) {
+                sb.append(c);
+                continue;
+            }
+            sb.append("\\u");
+            String s = Integer.toHexString(c);
+            while (s.length() < 4)
+                s = "0" + s;
+            sb.append(s);
+        }
+        return sb.toString();
+    }
+
+    public static String toString(char[] ca) {
+        return toString(ca, 0, ca.length);
+    }
+
+    public static String toString(String s) {
+        return toString(s.toCharArray());
+    }
+
+    public static String toString(char c) {
+        return toString(new char[]{ c });
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/nio/charset/coders/ref.shift_jis	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,7072 @@
+0 00
+1 01
+2 02
+3 03
+4 04
+5 05
+6 06
+7 07
+8 08
+9 09
+a 0a
+b 0b
+c 0c
+d 0d
+e 0e
+f 0f
+10 10
+11 11
+12 12
+13 13
+14 14
+15 15
+16 16
+17 17
+18 18
+19 19
+1a 1a
+1b 1b
+1c 1c
+1d 1d
+1e 1e
+1f 1f
+20 20
+21 21
+22 22
+23 23
+24 24
+25 25
+26 26
+27 27
+28 28
+29 29
+2a 2a
+2b 2b
+2c 2c
+2d 2d
+2e 2e
+2f 2f
+30 30
+31 31
+32 32
+33 33
+34 34
+35 35
+36 36
+37 37
+38 38
+39 39
+3a 3a
+3b 3b
+3c 3c
+3d 3d
+3e 3e
+3f 3f
+40 40
+41 41
+42 42
+43 43
+44 44
+45 45
+46 46
+47 47
+48 48
+49 49
+4a 4a
+4b 4b
+4c 4c
+4d 4d
+4e 4e
+4f 4f
+50 50
+51 51
+52 52
+53 53
+54 54
+55 55
+56 56
+57 57
+58 58
+59 59
+5a 5a
+5b 5b
+5c 5c
+5d 5d
+5e 5e
+5f 5f
+60 60
+61 61
+62 62
+63 63
+64 64
+65 65
+66 66
+67 67
+68 68
+69 69
+6a 6a
+6b 6b
+6c 6c
+6d 6d
+6e 6e
+6f 6f
+70 70
+71 71
+72 72
+73 73
+74 74
+75 75
+76 76
+77 77
+78 78
+79 79
+7a 7a
+7b 7b
+7c 7c
+7d 7d
+7e 7e
+7f 7f
+a2 8191
+a3 8192
+#a5 5c
+a7 8198
+a8 814e
+ac 81ca
+b0 818b
+b1 817d
+b4 814c
+b6 81f7
+d7 817e
+f7 8180
+391 839f
+392 83a0
+393 83a1
+394 83a2
+395 83a3
+396 83a4
+397 83a5
+398 83a6
+399 83a7
+39a 83a8
+39b 83a9
+39c 83aa
+39d 83ab
+39e 83ac
+39f 83ad
+3a0 83ae
+3a1 83af
+3a3 83b0
+3a4 83b1
+3a5 83b2
+3a6 83b3
+3a7 83b4
+3a8 83b5
+3a9 83b6
+3b1 83bf
+3b2 83c0
+3b3 83c1
+3b4 83c2
+3b5 83c3
+3b6 83c4
+3b7 83c5
+3b8 83c6
+3b9 83c7
+3ba 83c8
+3bb 83c9
+3bc 83ca
+3bd 83cb
+3be 83cc
+3bf 83cd
+3c0 83ce
+3c1 83cf
+3c3 83d0
+3c4 83d1
+3c5 83d2
+3c6 83d3
+3c7 83d4
+3c8 83d5
+3c9 83d6
+401 8446
+410 8440
+411 8441
+412 8442
+413 8443
+414 8444
+415 8445
+416 8447
+417 8448
+418 8449
+419 844a
+41a 844b
+41b 844c
+41c 844d
+41d 844e
+41e 844f
+41f 8450
+420 8451
+421 8452
+422 8453
+423 8454
+424 8455
+425 8456
+426 8457
+427 8458
+428 8459
+429 845a
+42a 845b
+42b 845c
+42c 845d
+42d 845e
+42e 845f
+42f 8460
+430 8470
+431 8471
+432 8472
+433 8473
+434 8474
+435 8475
+436 8477
+437 8478
+438 8479
+439 847a
+43a 847b
+43b 847c
+43c 847d
+43d 847e
+43e 8480
+43f 8481
+440 8482
+441 8483
+442 8484
+443 8485
+444 8486
+445 8487
+446 8488
+447 8489
+448 848a
+449 848b
+44a 848c
+44b 848d
+44c 848e
+44d 848f
+44e 8490
+44f 8491
+451 8476
+2010 815d
+2014 815c
+2016 8161
+2018 8165
+2019 8166
+201c 8167
+201d 8168
+2020 81f5
+2021 81f6
+2025 8164
+2026 8163
+2030 81f1
+2032 818c
+2033 818d
+203b 81a6
+#203e 7e
+2103 818e
+212b 81f0
+2190 81a9
+2191 81aa
+2192 81a8
+2193 81ab
+21d2 81cb
+21d4 81cc
+2200 81cd
+2202 81dd
+2203 81ce
+2207 81de
+2208 81b8
+220b 81b9
+2212 817c
+221a 81e3
+221d 81e5
+221e 8187
+2220 81da
+2227 81c8
+2228 81c9
+2229 81bf
+222a 81be
+222b 81e7
+222c 81e8
+2234 8188
+2235 81e6
+223d 81e4
+2252 81e0
+2260 8182
+2261 81df
+2266 8185
+2267 8186
+226a 81e1
+226b 81e2
+2282 81bc
+2283 81bd
+2286 81ba
+2287 81bb
+22a5 81db
+2312 81dc
+2500 849f
+2501 84aa
+2502 84a0
+2503 84ab
+250c 84a1
+250f 84ac
+2510 84a2
+2513 84ad
+2514 84a4
+2517 84af
+2518 84a3
+251b 84ae
+251c 84a5
+251d 84ba
+2520 84b5
+2523 84b0
+2524 84a7
+2525 84bc
+2528 84b7
+252b 84b2
+252c 84a6
+252f 84b6
+2530 84bb
+2533 84b1
+2534 84a8
+2537 84b8
+2538 84bd
+253b 84b3
+253c 84a9
+253f 84b9
+2542 84be
+254b 84b4
+25a0 81a1
+25a1 81a0
+25b2 81a3
+25b3 81a2
+25bc 81a5
+25bd 81a4
+25c6 819f
+25c7 819e
+25cb 819b
+25ce 819d
+25cf 819c
+25ef 81fc
+2605 819a
+2606 8199
+2640 818a
+2642 8189
+266a 81f4
+266d 81f3
+266f 81f2
+3000 8140
+3001 8141
+3002 8142
+3003 8156
+3005 8158
+3006 8159
+3007 815a
+3008 8171
+3009 8172
+300a 8173
+300b 8174
+300c 8175
+300d 8176
+300e 8177
+300f 8178
+3010 8179
+3011 817a
+3012 81a7
+3013 81ac
+3014 816b
+3015 816c
+301c 8160
+3041 829f
+3042 82a0
+3043 82a1
+3044 82a2
+3045 82a3
+3046 82a4
+3047 82a5
+3048 82a6
+3049 82a7
+304a 82a8
+304b 82a9
+304c 82aa
+304d 82ab
+304e 82ac
+304f 82ad
+3050 82ae
+3051 82af
+3052 82b0
+3053 82b1
+3054 82b2
+3055 82b3
+3056 82b4
+3057 82b5
+3058 82b6
+3059 82b7
+305a 82b8
+305b 82b9
+305c 82ba
+305d 82bb
+305e 82bc
+305f 82bd
+3060 82be
+3061 82bf
+3062 82c0
+3063 82c1
+3064 82c2
+3065 82c3
+3066 82c4
+3067 82c5
+3068 82c6
+3069 82c7
+306a 82c8
+306b 82c9
+306c 82ca
+306d 82cb
+306e 82cc
+306f 82cd
+3070 82ce
+3071 82cf
+3072 82d0
+3073 82d1
+3074 82d2
+3075 82d3
+3076 82d4
+3077 82d5
+3078 82d6
+3079 82d7
+307a 82d8
+307b 82d9
+307c 82da
+307d 82db
+307e 82dc
+307f 82dd
+3080 82de
+3081 82df
+3082 82e0
+3083 82e1
+3084 82e2
+3085 82e3
+3086 82e4
+3087 82e5
+3088 82e6
+3089 82e7
+308a 82e8
+308b 82e9
+308c 82ea
+308d 82eb
+308e 82ec
+308f 82ed
+3090 82ee
+3091 82ef
+3092 82f0
+3093 82f1
+309b 814a
+309c 814b
+309d 8154
+309e 8155
+30a1 8340
+30a2 8341
+30a3 8342
+30a4 8343
+30a5 8344
+30a6 8345
+30a7 8346
+30a8 8347
+30a9 8348
+30aa 8349
+30ab 834a
+30ac 834b
+30ad 834c
+30ae 834d
+30af 834e
+30b0 834f
+30b1 8350
+30b2 8351
+30b3 8352
+30b4 8353
+30b5 8354
+30b6 8355
+30b7 8356
+30b8 8357
+30b9 8358
+30ba 8359
+30bb 835a
+30bc 835b
+30bd 835c
+30be 835d
+30bf 835e
+30c0 835f
+30c1 8360
+30c2 8361
+30c3 8362
+30c4 8363
+30c5 8364
+30c6 8365
+30c7 8366
+30c8 8367
+30c9 8368
+30ca 8369
+30cb 836a
+30cc 836b
+30cd 836c
+30ce 836d
+30cf 836e
+30d0 836f
+30d1 8370
+30d2 8371
+30d3 8372
+30d4 8373
+30d5 8374
+30d6 8375
+30d7 8376
+30d8 8377
+30d9 8378
+30da 8379
+30db 837a
+30dc 837b
+30dd 837c
+30de 837d
+30df 837e
+30e0 8380
+30e1 8381
+30e2 8382
+30e3 8383
+30e4 8384
+30e5 8385
+30e6 8386
+30e7 8387
+30e8 8388
+30e9 8389
+30ea 838a
+30eb 838b
+30ec 838c
+30ed 838d
+30ee 838e
+30ef 838f
+30f0 8390
+30f1 8391
+30f2 8392
+30f3 8393
+30f4 8394
+30f5 8395
+30f6 8396
+30fb 8145
+30fc 815b
+30fd 8152
+30fe 8153
+4e00 88ea
+4e01 929a
+4e03 8eb5
+4e07 969c
+4e08 8fe4
+4e09 8e4f
+4e0a 8fe3
+4e0b 89ba
+4e0d 9573
+4e0e 975e
+4e10 98a0
+4e11 894e
+4e14 8a8e
+4e15 98a1
+4e16 90a2
+4e17 99c0
+4e18 8b75
+4e19 95b8
+4e1e 8fe5
+4e21 97bc
+4e26 95c0
+4e2a 98a2
+4e2d 9286
+4e31 98a3
+4e32 8bf8
+4e36 98a4
+4e38 8adb
+4e39 924f
+4e3b 8ee5
+4e3c 98a5
+4e3f 98a6
+4e42 98a7
+4e43 9454
+4e45 8b76
+4e4b 9456
+4e4d 93e1
+4e4e 8cc1
+4e4f 9652
+4e55 e568
+4e56 98a8
+4e57 8fe6
+4e58 98a9
+4e59 89b3
+4e5d 8be3
+4e5e 8cee
+4e5f 96e7
+4e62 9ba4
+4e71 9790
+4e73 93fb
+4e7e 8aa3
+4e80 8b54
+4e82 98aa
+4e85 98ab
+4e86 97b9
+4e88 975c
+4e89 9188
+4e8a 98ad
+4e8b 8e96
+4e8c 93f1
+4e8e 98b0
+4e91 895d
+4e92 8cdd
+4e94 8cdc
+4e95 88e4
+4e98 986a
+4e99 9869
+4e9b 8db1
+4e9c 889f
+4e9e 98b1
+4e9f 98b2
+4ea0 98b3
+4ea1 9653
+4ea2 98b4
+4ea4 8cf0
+4ea5 88e5
+4ea6 9692
+4ea8 8b9c
+4eab 8b9d
+4eac 8b9e
+4ead 92e0
+4eae 97ba
+4eb0 98b5
+4eb3 98b6
+4eb6 98b7
+4eba 906c
+4ec0 8f59
+4ec1 906d
+4ec2 98bc
+4ec4 98ba
+4ec6 98bb
+4ec7 8b77
+4eca 8da1
+4ecb 89ee
+4ecd 98b9
+4ece 98b8
+4ecf 95a7
+4ed4 8e65
+4ed5 8e64
+4ed6 91bc
+4ed7 98bd
+4ed8 9574
+4ed9 90e5
+4edd 8157
+4ede 98be
+4edf 98c0
+4ee3 91e3
+4ee4 97df
+4ee5 88c8
+4eed 98bf
+4eee 89bc
+4ef0 8bc2
+4ef2 9287
+4ef6 8c8f
+4ef7 98c1
+4efb 9443
+4f01 8ae9
+4f09 98c2
+4f0a 88c9
+4f0d 8cde
+4f0e 8aea
+4f0f 959a
+4f10 94b0
+4f11 8b78
+4f1a 89ef
+4f1c 98e5
+4f1d 9360
+4f2f 948c
+4f30 98c4
+4f34 94ba
+4f36 97e0
+4f38 904c
+4f3a 8e66
+4f3c 8e97
+4f3d 89be
+4f43 92cf
+4f46 9241
+4f47 98c8
+4f4d 88ca
+4f4e 92e1
+4f4f 8f5a
+4f50 8db2
+4f51 9743
+4f53 91cc
+4f55 89bd
+4f57 98c7
+4f59 975d
+4f5a 98c3
+4f5b 98c5
+4f5c 8dec
+4f5d 98c6
+4f5e 9b43
+4f69 98ce
+4f6f 98d1
+4f70 98cf
+4f73 89c0
+4f75 95b9
+4f76 98c9
+4f7b 98cd
+4f7c 8cf1
+4f7f 8e67
+4f83 8aa4
+4f86 98d2
+4f88 98ca
+4f8b 97e1
+4f8d 8e98
+4f8f 98cb
+4f91 98d0
+4f96 98d3
+4f98 98cc
+4f9b 8b9f
+4f9d 88cb
+4fa0 8ba0
+4fa1 89bf
+4fab 9b44
+4fad 9699
+4fae 958e
+4faf 8cf2
+4fb5 904e
+4fb6 97b5
+4fbf 95d6
+4fc2 8c57
+4fc3 91a3
+4fc4 89e2
+4fca 8f72
+4fce 98d7
+4fd0 98dc
+4fd1 98da
+4fd4 98d5
+4fd7 91ad
+4fd8 98d8
+4fda 98db
+4fdb 98d9
+4fdd 95db
+4fdf 98d6
+4fe1 904d
+4fe3 9693
+4fe4 98dd
+4fe5 98de
+4fee 8f43
+4fef 98eb
+4ff3 946f
+4ff5 9555
+4ff6 98e6
+4ff8 95ee
+4ffa 89b4
+4ffe 98ea
+5005 98e4
+5006 98ed
+5009 9171
+500b 8cc2
+500d 947b
+500f e0c5
+5011 98ec
+5012 937c
+5014 98e1
+5016 8cf4
+5019 8cf3
+501a 98df
+501f 8ed8
+5021 98e7
+5023 95ed
+5024 926c
+5025 98e3
+5026 8c91
+5028 98e0
+5029 98e8
+502a 98e2
+502b 97cf
+502c 98e9
+502d 9860
+5036 8be4
+5039 8c90
+5043 98ee
+5047 98ef
+5048 98f3
+5049 88cc
+504f 95ce
+5050 98f2
+5055 98f1
+5056 98f5
+505a 98f4
+505c 92e2
+5065 8c92
+506c 98f6
+5072 8ec3
+5074 91a4
+5075 92e3
+5076 8bf4
+5078 98f7
+507d 8b55
+5080 98f8
+5085 98fa
+508d 9654
+5091 8c86
+5098 8e50
+5099 94f5
+509a 98f9
+50ac 8dc3
+50ad 9762
+50b2 98fc
+50b3 9942
+50b4 98fb
+50b5 8dc2
+50b7 8f9d
+50be 8c58
+50c2 9943
+50c5 8bcd
+50c9 9940
+50ca 9941
+50cd 93ad
+50cf 919c
+50d1 8ba1
+50d5 966c
+50d6 9944
+50da 97bb
+50de 9945
+50e3 9948
+50e5 9946
+50e7 916d
+50ed 9947
+50ee 9949
+50f5 994b
+50f9 994a
+50fb 95c6
+5100 8b56
+5101 994d
+5102 994e
+5104 89ad
+5109 994c
+5112 8ef2
+5114 9951
+5115 9950
+5116 994f
+5118 98d4
+511a 9952
+511f 8f9e
+5121 9953
+512a 9744
+5132 96d7
+5137 9955
+513a 9954
+513b 9957
+513c 9956
+513f 9958
+5140 9959
+5141 88f2
+5143 8cb3
+5144 8c5a
+5145 8f5b
+5146 929b
+5147 8ba2
+5148 90e6
+5149 8cf5
+514b 8d8e
+514c 995b
+514d 96c6
+514e 9365
+5150 8e99
+5152 995a
+5154 995c
+515a 937d
+515c 8a95
+5162 995d
+5165 93fc
+5168 9153
+5169 995f
+516a 9960
+516b 94aa
+516c 8cf6
+516d 985a
+516e 9961
+5171 8ba4
+5175 95ba
+5176 91b4
+5177 8bef
+5178 9354
+517c 8c93
+5180 9962
+5182 9963
+5185 93e0
+5186 897e
+5189 9966
+518a 8dfb
+518c 9965
+518d 8dc4
+518f 9967
+5190 e3ec
+5191 9968
+5192 9660
+5193 9969
+5195 996a
+5196 996b
+5197 8fe7
+5199 8eca
+51a0 8aa5
+51a2 996e
+51a4 996c
+51a5 96bb
+51a6 996d
+51a8 9579
+51a9 996f
+51aa 9970
+51ab 9971
+51ac 937e
+51b0 9975
+51b1 9973
+51b2 9974
+51b3 9972
+51b4 8de1
+51b5 9976
+51b6 96e8
+51b7 97e2
+51bd 9977
+51c4 90a6
+51c5 9978
+51c6 8f79
+51c9 9979
+51cb 929c
+51cc 97bd
+51cd 9380
+51d6 99c3
+51db 997a
+51dc eaa3
+51dd 8bc3
+51e0 997b
+51e1 967d
+51e6 8f88
+51e7 91fa
+51e9 997d
+51ea 93e2
+51ed 997e
+51f0 9980
+51f1 8a4d
+51f5 9981
+51f6 8ba5
+51f8 93ca
+51f9 899a
+51fa 8f6f
+51fd 949f
+51fe 9982
+5200 9381
+5203 906e
+5204 9983
+5206 95aa
+5207 90d8
+5208 8aa0
+520a 8aa7
+520b 9984
+520e 9986
+5211 8c59
+5214 9985
+5217 97f1
+521d 8f89
+5224 94bb
+5225 95ca
+5227 9987
+5229 9798
+522a 9988
+522e 9989
+5230 939e
+5233 998a
+5236 90a7
+5237 8dfc
+5238 8c94
+5239 998b
+523a 8e68
+523b 8d8f
+5243 92e4
+5244 998d
+5247 91a5
+524a 8ded
+524b 998e
+524c 998f
+524d 914f
+524f 998c
+5254 9991
+5256 9655
+525b 8d84
+525e 9990
+5263 8c95
+5264 8ddc
+5265 948d
+5269 9994
+526a 9992
+526f 959b
+5270 8fe8
+5271 999b
+5272 8a84
+5273 9995
+5274 9993
+5275 916e
+527d 9997
+527f 9996
+5283 8a63
+5287 8c80
+5288 999c
+5289 97ab
+528d 9998
+5291 999d
+5292 999a
+5294 9999
+529b 97cd
+529f 8cf7
+52a0 89c1
+52a3 97f2
+52a9 8f95
+52aa 9377
+52ab 8d85
+52ac 99a0
+52ad 99a1
+52b1 97e3
+52b4 984a
+52b5 99a3
+52b9 8cf8
+52bc 99a2
+52be 8a4e
+52c1 99a4
+52c3 9675
+52c5 92ba
+52c7 9745
+52c9 95d7
+52cd 99a5
+52d2 e8d3
+52d5 93ae
+52d7 99a6
+52d8 8aa8
+52d9 96b1
+52dd 8f9f
+52de 99a7
+52df 95e5
+52e0 99ab
+52e2 90a8
+52e3 99a8
+52e4 8bce
+52e6 99a9
+52e7 8aa9
+52f2 8c4d
+52f3 99ac
+52f5 99ad
+52f8 99ae
+52f9 99af
+52fa 8ed9
+52fe 8cf9
+52ff 96dc
+5301 96e6
+5302 93f5
+5305 95ef
+5306 99b0
+5308 99b1
+530d 99b3
+530f 99b5
+5310 99b4
+5315 99b6
+5316 89bb
+5317 966b
+5319 8dfa
+531a 99b7
+531d 9178
+5320 8fa0
+5321 8ba7
+5323 99b8
+532a 94d9
+532f 99b9
+5331 99ba
+5333 99bb
+5338 99bc
+5339 9543
+533a 8be6
+533b 88e3
+533f 93bd
+5340 99bd
+5341 8f5c
+5343 90e7
+5345 99bf
+5346 99be
+5347 8fa1
+5348 8cdf
+5349 99c1
+534a 94bc
+534d 99c2
+5351 94da
+5352 91b2
+5353 91ec
+5354 8ba6
+5357 93ec
+5358 9250
+535a 948e
+535c 966d
+535e 99c4
+5360 90e8
+5366 8c54
+5369 99c5
+536e 99c6
+536f 894b
+5370 88f3
+5371 8aeb
+5373 91a6
+5374 8b70
+5375 9791
+5377 99c9
+5378 89b5
+537b 99c8
+537f 8ba8
+5382 99ca
+5384 96ef
+5396 99cb
+5398 97d0
+539a 8cfa
+539f 8cb4
+53a0 99cc
+53a5 99ce
+53a6 99cd
+53a8 907e
+53a9 8958
+53ad 897d
+53ae 99cf
+53b0 99d0
+53b3 8cb5
+53b6 99d1
+53bb 8b8e
+53c2 8e51
+53c3 99d2
+53c8 9694
+53c9 8db3
+53ca 8b79
+53cb 9746
+53cc 916f
+53cd 94bd
+53ce 8efb
+53d4 8f66
+53d6 8ee6
+53d7 8ef3
+53d9 8f96
+53db 94be
+53df 99d5
+53e1 8962
+53e2 9170
+53e3 8cfb
+53e4 8cc3
+53e5 8be5
+53e8 99d9
+53e9 9240
+53ea 91fc
+53eb 8ba9
+53ec 8fa2
+53ed 99da
+53ee 99d8
+53ef 89c2
+53f0 91e4
+53f1 8eb6
+53f2 8e6a
+53f3 8945
+53f6 8a90
+53f7 8d86
+53f8 8e69
+53fa 99db
+5401 99dc
+5403 8b68
+5404 8a65
+5408 8d87
+5409 8b67
+540a 92dd
+540b 8944
+540c 93af
+540d 96bc
+540e 8d40
+540f 9799
+5410 9366
+5411 8cfc
+541b 8c4e
+541d 99e5
+541f 8be1
+5420 9669
+5426 94db
+5429 99e4
+542b 8adc
+542c 99df
+542d 99e0
+542e 99e2
+5436 99e3
+5438 8b7a
+5439 9081
+543b 95ab
+543c 99e1
+543d 99dd
+543e 8ce1
+5440 99de
+5442 9843
+5446 95f0
+5448 92e6
+5449 8ce0
+544a 8d90
+544e 99e6
+5451 93db
+545f 99ea
+5468 8efc
+546a 8ef4
+5470 99ed
+5471 99eb
+5473 96a1
+5475 99e8
+5476 99f1
+5477 99ec
+547b 99ef
+547c 8cc4
+547d 96bd
+5480 99f0
+5484 99f2
+5486 99f4
+548b 8dee
+548c 9861
+548e 99e9
+548f 99e7
+5490 99f3
+5492 99ee
+54a2 99f6
+54a4 9a42
+54a5 99f8
+54a8 99fc
+54ab 9a40
+54ac 99f9
+54af 9a5d
+54b2 8de7
+54b3 8a50
+54b8 99f7
+54bc 9a44
+54bd 88f4
+54be 9a43
+54c0 88a3
+54c1 9569
+54c2 9a41
+54c4 99fa
+54c7 99f5
+54c8 99fb
+54c9 8dc6
+54d8 9a45
+54e1 88f5
+54e2 9a4e
+54e5 9a46
+54e6 9a47
+54e8 8fa3
+54e9 9689
+54ed 9a4c
+54ee 9a4b
+54f2 934e
+54fa 9a4d
+54fd 9a4a
+5504 8953
+5506 8db4
+5507 904f
+550f 9a48
+5510 9382
+5514 9a49
+5516 88a0
+552e 9a53
+552f 9742
+5531 8fa5
+5533 9a59
+5538 9a58
+5539 9a4f
+553e 91c1
+5540 9a50
+5544 91ed
+5545 9a55
+5546 8fa4
+554c 9a52
+554f 96e2
+5553 8c5b
+5556 9a56
+5557 9a57
+555c 9a54
+555d 9a5a
+5563 9a51
+557b 9a60
+557c 9a65
+557e 9a61
+5580 9a5c
+5583 9a66
+5584 9150
+5587 9a68
+5589 8d41
+558a 9a5e
+558b 929d
+5598 9a62
+5599 9a5b
+559a 8aab
+559c 8aec
+559d 8a85
+559e 9a63
+559f 9a5f
+55a7 8c96
+55a8 9a69
+55a9 9a67
+55aa 9172
+55ab 8b69
+55ac 8baa
+55ae 9a64
+55b0 8bf2
+55b6 8963
+55c4 9a6d
+55c5 9a6b
+55c7 9aa5
+55d4 9a70
+55da 9a6a
+55dc 9a6e
+55df 9a6c
+55e3 8e6b
+55e4 9a6f
+55f7 9a72
+55f9 9a77
+55fd 9a75
+55fe 9a74
+5606 9251
+5609 89c3
+5614 9a71
+5616 9a73
+5617 8fa6
+5618 8952
+561b 9a76
+5629 89dc
+562f 9a82
+5631 8ffa
+5632 9a7d
+5634 9a7b
+5636 9a7c
+5638 9a7e
+5642 895c
+564c 9158
+564e 9a78
+5650 9a79
+565b 8a9a
+5664 9a81
+5668 8aed
+566a 9a84
+566b 9a80
+566c 9a83
+5674 95ac
+5678 93d3
+567a 94b6
+5680 9a86
+5686 9a85
+5687 8a64
+568a 9a87
+568f 9a8a
+5694 9a89
+56a0 9a88
+56a2 9458
+56a5 9a8b
+56ae 9a8c
+56b4 9a8e
+56b6 9a8d
+56bc 9a90
+56c0 9a93
+56c1 9a91
+56c2 9a8f
+56c3 9a92
+56c8 9a94
+56ce 9a95
+56d1 9a96
+56d3 9a97
+56d7 9a98
+56d8 9964
+56da 8efa
+56db 8e6c
+56de 89f1
+56e0 88f6
+56e3 9263
+56ee 9a99
+56f0 8da2
+56f2 88cd
+56f3 907d
+56f9 9a9a
+56fa 8cc5
+56fd 8d91
+56ff 9a9c
+5700 9a9b
+5703 95de
+5704 9a9d
+5708 9a9f
+5709 9a9e
+570b 9aa0
+570d 9aa1
+570f 8c97
+5712 8980
+5713 9aa2
+5716 9aa4
+5718 9aa3
+571c 9aa6
+571f 9379
+5726 9aa7
+5727 88b3
+5728 8ddd
+572d 8c5c
+5730 926e
+5737 9aa8
+5738 9aa9
+573b 9aab
+5740 9aac
+5742 8de2
+5747 8bcf
+574a 9656
+574e 9aaa
+574f 9aad
+5750 8dbf
+5751 8d42
+5761 9ab1
+5764 8da3
+5766 9252
+5769 9aae
+576a 92d8
+577f 9ab2
+5782 9082
+5788 9ab0
+5789 9ab3
+578b 8c5e
+5793 9ab4
+57a0 9ab5
+57a2 8d43
+57a3 8a5f
+57a4 9ab7
+57aa 9ab8
+57b0 9ab9
+57b3 9ab6
+57c0 9aaf
+57c3 9aba
+57c6 9abb
+57cb 9684
+57ce 8fe9
+57d2 9abd
+57d3 9abe
+57d4 9abc
+57d6 9ac0
+57dc 9457
+57df 88e6
+57e0 9575
+57e3 9ac1
+57f4 8ffb
+57f7 8eb7
+57f9 947c
+57fa 8aee
+57fc 8de9
+5800 9678
+5802 93b0
+5805 8c98
+5806 91cd
+580a 9abf
+580b 9ac2
+5815 91c2
+5819 9ac3
+581d 9ac4
+5821 9ac6
+5824 92e7
+582a 8aac
+582f ea9f
+5830 8981
+5831 95f1
+5834 8fea
+5835 9367
+583a 8de4
+583d 9acc
+5840 95bb
+5841 97db
+584a 89f2
+584b 9ac8
+5851 9159
+5852 9acb
+5854 9383
+5857 9368
+5858 9384
+5859 94b7
+585a 92cb
+585e 8dc7
+5862 9ac7
+5869 8996
+586b 9355
+5870 9ac9
+5872 9ac5
+5875 906f
+5879 9acd
+587e 8f6d
+5883 8bab
+5885 9ace
+5893 95e6
+5897 919d
+589c 92c4
+589f 9ad0
+58a8 966e
+58ab 9ad1
+58ae 9ad6
+58b3 95ad
+58b8 9ad5
+58b9 9acf
+58ba 9ad2
+58bb 9ad4
+58be 8da4
+58c1 95c7
+58c5 9ad7
+58c7 9264
+58ca 89f3
+58cc 8feb
+58d1 9ad9
+58d3 9ad8
+58d5 8d88
+58d7 9ada
+58d8 9adc
+58d9 9adb
+58dc 9ade
+58de 9ad3
+58df 9ae0
+58e4 9adf
+58e5 9add
+58eb 8e6d
+58ec 9070
+58ee 9173
+58ef 9ae1
+58f0 90ba
+58f1 88eb
+58f2 9484
+58f7 92d9
+58f9 9ae3
+58fa 9ae2
+58fb 9ae4
+58fc 9ae5
+58fd 9ae6
+5902 9ae7
+5909 95cf
+590a 9ae8
+590f 89c4
+5910 9ae9
+5915 975b
+5916 8a4f
+5918 99c7
+5919 8f67
+591a 91bd
+591b 9aea
+591c 96e9
+5922 96b2
+5925 9aec
+5927 91e5
+5929 9356
+592a 91be
+592b 9576
+592c 9aed
+592d 9aee
+592e 899b
+5931 8eb8
+5932 9aef
+5937 88ce
+5938 9af0
+593e 9af1
+5944 8982
+5947 8aef
+5948 93de
+5949 95f2
+594e 9af5
+594f 9174
+5950 9af4
+5951 8c5f
+5954 967a
+5955 9af3
+5957 9385
+5958 9af7
+595a 9af6
+5960 9af9
+5962 9af8
+5965 899c
+5967 9afa
+5968 8fa7
+5969 9afc
+596a 9244
+596c 9afb
+596e 95b1
+5973 8f97
+5974 937a
+5978 9b40
+597d 8d44
+5981 9b41
+5982 9440
+5983 94dc
+5984 96cf
+598a 9444
+598d 9b4a
+5993 8b57
+5996 9764
+5999 96ad
+599b 9baa
+599d 9b42
+59a3 9b45
+59a5 91c3
+59a8 9657
+59ac 9369
+59b2 9b46
+59b9 9685
+59bb 8dc8
+59be 8fa8
+59c6 9b47
+59c9 8e6f
+59cb 8e6e
+59d0 88b7
+59d1 8cc6
+59d3 90a9
+59d4 88cf
+59d9 9b4b
+59da 9b4c
+59dc 9b49
+59e5 8957
+59e6 8aad
+59e8 9b48
+59ea 96c3
+59eb 9550
+59f6 88a6
+59fb 88f7
+59ff 8e70
+5a01 88d0
+5a03 88a1
+5a09 9b51
+5a11 9b4f
+5a18 96ba
+5a1a 9b52
+5a1c 9b50
+5a1f 9b4e
+5a20 9050
+5a25 9b4d
+5a29 95d8
+5a2f 8ce2
+5a35 9b56
+5a36 9b57
+5a3c 8fa9
+5a40 9b53
+5a41 984b
+5a46 946b
+5a49 9b55
+5a5a 8da5
+5a62 9b58
+5a66 9577
+5a6a 9b59
+5a6c 9b54
+5a7f 96b9
+5a92 947d
+5a9a 9b5a
+5a9b 9551
+5abc 9b5b
+5abd 9b5f
+5abe 9b5c
+5ac1 89c5
+5ac2 9b5e
+5ac9 8eb9
+5acb 9b5d
+5acc 8c99
+5ad0 9b6b
+5ad6 9b64
+5ad7 9b61
+5ae1 9284
+5ae3 9b60
+5ae6 9b62
+5ae9 9b63
+5afa 9b65
+5afb 9b66
+5b09 8af0
+5b0b 9b68
+5b0c 9b67
+5b16 9b69
+5b22 8fec
+5b2a 9b6c
+5b2c 92da
+5b30 8964
+5b32 9b6a
+5b36 9b6d
+5b3e 9b6e
+5b40 9b71
+5b43 9b6f
+5b45 9b70
+5b50 8e71
+5b51 9b72
+5b54 8d45
+5b55 9b73
+5b57 8e9a
+5b58 91b6
+5b5a 9b74
+5b5b 9b75
+5b5c 8e79
+5b5d 8d46
+5b5f 96d0
+5b63 8b47
+5b64 8cc7
+5b65 9b76
+5b66 8a77
+5b69 9b77
+5b6b 91b7
+5b70 9b78
+5b71 9ba1
+5b73 9b79
+5b75 9b7a
+5b78 9b7b
+5b7a 9b7d
+5b80 9b7e
+5b83 9b80
+5b85 91ee
+5b87 8946
+5b88 8ee7
+5b89 88c0
+5b8b 9176
+5b8c 8aae
+5b8d 8eb3
+5b8f 8d47
+5b95 9386
+5b97 8f40
+5b98 8aaf
+5b99 9288
+5b9a 92e8
+5b9b 88b6
+5b9c 8b58
+5b9d 95f3
+5b9f 8ec0
+5ba2 8b71
+5ba3 90e9
+5ba4 8eba
+5ba5 9747
+5ba6 9b81
+5bae 8b7b
+5bb0 8dc9
+5bb3 8a51
+5bb4 8983
+5bb5 8faa
+5bb6 89c6
+5bb8 9b82
+5bb9 9765
+5bbf 8f68
+5bc2 8ee2
+5bc3 9b83
+5bc4 8af1
+5bc5 93d0
+5bc6 96a7
+5bc7 9b84
+5bc9 9b85
+5bcc 9578
+5bd0 9b87
+5bd2 8aa6
+5bd3 8bf5
+5bd4 9b86
+5bdb 8ab0
+5bdd 9051
+5bde 9b8b
+5bdf 8e40
+5be1 89c7
+5be2 9b8a
+5be4 9b88
+5be5 9b8c
+5be6 9b89
+5be7 944a
+5be8 9ecb
+5be9 9052
+5beb 9b8d
+5bee 97be
+5bf0 9b8e
+5bf3 9b90
+5bf5 929e
+5bf6 9b8f
+5bf8 90a1
+5bfa 8e9b
+5bfe 91ce
+5bff 8ef5
+5c01 9595
+5c02 90ea
+5c04 8ecb
+5c05 9b91
+5c06 8fab
+5c07 9b92
+5c08 9b93
+5c09 88d1
+5c0a 91b8
+5c0b 9071
+5c0d 9b94
+5c0e 93b1
+5c0f 8fac
+5c11 8fad
+5c13 9b95
+5c16 90eb
+5c1a 8fae
+5c20 9b96
+5c22 9b97
+5c24 96de
+5c28 9b98
+5c2d 8bc4
+5c31 8f41
+5c38 9b99
+5c39 9b9a
+5c3a 8eda
+5c3b 904b
+5c3c 93f2
+5c3d 9073
+5c3e 94f6
+5c3f 9441
+5c40 8bc7
+5c41 9b9b
+5c45 8b8f
+5c46 9b9c
+5c48 8bfc
+5c4a 93cd
+5c4b 89ae
+5c4d 8e72
+5c4e 9b9d
+5c4f 9ba0
+5c50 9b9f
+5c51 8bfb
+5c53 9b9e
+5c55 9357
+5c5e 91ae
+5c60 936a
+5c61 8ec6
+5c64 9177
+5c65 979a
+5c6c 9ba2
+5c6e 9ba3
+5c6f 93d4
+5c71 8e52
+5c76 9ba5
+5c79 9ba6
+5c8c 9ba7
+5c90 8af2
+5c91 9ba8
+5c94 9ba9
+5ca1 89aa
+5ca8 915a
+5ca9 8ae2
+5cab 9bab
+5cac 96a6
+5cb1 91d0
+5cb3 8a78
+5cb6 9bad
+5cb7 9baf
+5cb8 8add
+5cbb 9bac
+5cbc 9bae
+5cbe 9bb1
+5cc5 9bb0
+5cc7 9bb2
+5cd9 9bb3
+5ce0 93bb
+5ce1 8bac
+5ce8 89e3
+5ce9 9bb4
+5cea 9bb9
+5ced 9bb7
+5cef 95f5
+5cf0 95f4
+5cf6 9387
+5cfa 9bb6
+5cfb 8f73
+5cfd 9bb5
+5d07 9092
+5d0b 9bba
+5d0e 8de8
+5d11 9bc0
+5d14 9bc1
+5d15 9bbb
+5d16 8a52
+5d17 9bbc
+5d18 9bc5
+5d19 9bc4
+5d1a 9bc3
+5d1b 9bbf
+5d1f 9bbe
+5d22 9bc2
+5d29 95f6
+5d4b 9bc9
+5d4c 9bc6
+5d4e 9bc8
+5d50 9792
+5d52 9bc7
+5d5c 9bbd
+5d69 9093
+5d6c 9bca
+5d6f 8db5
+5d73 9bcb
+5d76 9bcc
+5d82 9bcf
+5d84 9bce
+5d87 9bcd
+5d8b 9388
+5d8c 9bb8
+5d90 9bd5
+5d9d 9bd1
+5da2 9bd0
+5dac 9bd2
+5dae 9bd3
+5db7 9bd6
+5dba 97e4
+5dbc 9bd7
+5dbd 9bd4
+5dc9 9bd8
+5dcc 8ade
+5dcd 9bd9
+5dd2 9bdb
+5dd3 9bda
+5dd6 9bdc
+5ddb 9bdd
+5ddd 90ec
+5dde 8f42
+5de1 8f84
+5de3 9183
+5de5 8d48
+5de6 8db6
+5de7 8d49
+5de8 8b90
+5deb 9bde
+5dee 8db7
+5df1 8cc8
+5df2 9bdf
+5df3 96a4
+5df4 9462
+5df5 9be0
+5df7 8d4a
+5dfb 8aaa
+5dfd 9246
+5dfe 8bd0
+5e02 8e73
+5e03 957a
+5e06 94bf
+5e0b 9be1
+5e0c 8af3
+5e11 9be4
+5e16 929f
+5e19 9be3
+5e1a 9be2
+5e1b 9be5
+5e1d 92e9
+5e25 9083
+5e2b 8e74
+5e2d 90c8
+5e2f 91d1
+5e30 8b41
+5e33 92a0
+5e36 9be6
+5e37 9be7
+5e38 8fed
+5e3d 9658
+5e40 9bea
+5e43 9be9
+5e44 9be8
+5e45 959d
+5e47 9bf1
+5e4c 9679
+5e4e 9beb
+5e54 9bed
+5e55 968b
+5e57 9bec
+5e5f 9bee
+5e61 94a6
+5e62 9bef
+5e63 95bc
+5e64 9bf0
+5e72 8ab1
+5e73 95bd
+5e74 944e
+5e75 9bf2
+5e76 9bf3
+5e78 8d4b
+5e79 8ab2
+5e7a 9bf4
+5e7b 8cb6
+5e7c 9763
+5e7d 9748
+5e7e 8af4
+5e7f 9bf6
+5e81 92a1
+5e83 8d4c
+5e84 8faf
+5e87 94dd
+5e8a 8fb0
+5e8f 8f98
+5e95 92ea
+5e96 95f7
+5e97 9358
+5e9a 8d4d
+5e9c 957b
+5ea0 9bf7
+5ea6 9378
+5ea7 8dc0
+5eab 8cc9
+5ead 92eb
+5eb5 88c1
+5eb6 8f8e
+5eb7 8d4e
+5eb8 9766
+5ec1 9bf8
+5ec2 9bf9
+5ec3 9470
+5ec8 9bfa
+5ec9 97f5
+5eca 984c
+5ecf 9bfc
+5ed0 9bfb
+5ed3 8a66
+5ed6 9c40
+5eda 9c43
+5edb 9c44
+5edd 9c42
+5edf 955f
+5ee0 8fb1
+5ee1 9c46
+5ee2 9c45
+5ee3 9c41
+5ee8 9c47
+5ee9 9c48
+5eec 9c49
+5ef0 9c4c
+5ef1 9c4a
+5ef3 9c4b
+5ef4 9c4d
+5ef6 8984
+5ef7 92ec
+5ef8 9c4e
+5efa 8c9a
+5efb 89f4
+5efc 9455
+5efe 9c4f
+5eff 93f9
+5f01 95d9
+5f03 9c50
+5f04 984d
+5f09 9c51
+5f0a 95be
+5f0b 9c54
+5f0c 989f
+5f0d 98af
+5f0f 8eae
+5f10 93f3
+5f11 9c55
+5f13 8b7c
+5f14 92a2
+5f15 88f8
+5f16 9c56
+5f17 95a4
+5f18 8d4f
+5f1b 926f
+5f1f 92ed
+5f25 96ed
+5f26 8cb7
+5f27 8cca
+5f29 9c57
+5f2d 9c58
+5f2f 9c5e
+5f31 8ee3
+5f35 92a3
+5f37 8bad
+5f38 9c59
+5f3c 954a
+5f3e 9265
+5f41 9c5a
+5f48 9c5b
+5f4a 8bae
+5f4c 9c5c
+5f4e 9c5d
+5f51 9c5f
+5f53 9396
+5f56 9c60
+5f57 9c61
+5f59 9c62
+5f5c 9c53
+5f5d 9c52
+5f61 9c63
+5f62 8c60
+5f66 9546
+5f69 8dca
+5f6a 9556
+5f6b 92a4
+5f6c 956a
+5f6d 9c64
+5f70 8fb2
+5f71 8965
+5f73 9c65
+5f77 9c66
+5f79 96f0
+5f7c 94de
+5f7f 9c69
+5f80 899d
+5f81 90aa
+5f82 9c68
+5f83 9c67
+5f84 8c61
+5f85 91d2
+5f87 9c6d
+5f88 9c6b
+5f8a 9c6a
+5f8b 97a5
+5f8c 8ce3
+5f90 8f99
+5f91 9c6c
+5f92 936b
+5f93 8f5d
+5f97 93be
+5f98 9c70
+5f99 9c6f
+5f9e 9c6e
+5fa0 9c71
+5fa1 8ce4
+5fa8 9c72
+5fa9 959c
+5faa 8f7a
+5fad 9c73
+5fae 94f7
+5fb3 93bf
+5fb4 92a5
+5fb9 934f
+5fbc 9c74
+5fbd 8b4a
+5fc3 9053
+5fc5 954b
+5fcc 8af5
+5fcd 9445
+5fd6 9c75
+5fd7 8e75
+5fd8 9659
+5fd9 965a
+5fdc 899e
+5fdd 9c7a
+5fe0 9289
+5fe4 9c77
+5feb 89f5
+5ff0 9cab
+5ff1 9c79
+5ff5 944f
+5ff8 9c78
+5ffb 9c76
+5ffd 8d9a
+5fff 9c7c
+600e 9c83
+600f 9c89
+6010 9c81
+6012 937b
+6015 9c86
+6016 957c
+6019 9c80
+601b 9c85
+601c 97e5
+601d 8e76
+6020 91d3
+6021 9c7d
+6025 8b7d
+6026 9c88
+6027 90ab
+6028 8985
+6029 9c82
+602a 89f6
+602b 9c87
+602f 8baf
+6031 9c84
+603a 9c8a
+6041 9c8c
+6042 9c96
+6043 9c94
+6046 9c91
+604a 9c90
+604b 97f6
+604d 9c92
+6050 8bb0
+6052 8d50
+6055 8f9a
+6059 9c99
+605a 9c8b
+605f 9c8f
+6060 9c7e
+6062 89f8
+6063 9c93
+6064 9c95
+6065 9270
+6068 8da6
+6069 89b6
+606a 9c8d
+606b 9c98
+606c 9c97
+606d 8bb1
+606f 91a7
+6070 8a86
+6075 8c62
+6077 9c8e
+6081 9c9a
+6083 9c9d
+6084 9c9f
+6089 8ebb
+608b 9ca5
+608c 92ee
+608d 9c9b
+6092 9ca3
+6094 89f7
+6096 9ca1
+6097 9ca2
+609a 9c9e
+609b 9ca0
+609f 8ce5
+60a0 9749
+60a3 8ab3
+60a6 8978
+60a7 9ca4
+60a9 9459
+60aa 88ab
+60b2 94df
+60b3 9c7b
+60b4 9caa
+60b5 9cae
+60b6 96e3
+60b8 9ca7
+60bc 9389
+60bd 9cac
+60c5 8fee
+60c6 9cad
+60c7 93d5
+60d1 9866
+60d3 9ca9
+60d8 9caf
+60da 8d9b
+60dc 90c9
+60df 88d2
+60e0 9ca8
+60e1 9ca6
+60e3 9179
+60e7 9c9c
+60e8 8e53
+60f0 91c4
+60f1 9cbb
+60f3 917a
+60f4 9cb6
+60f6 9cb3
+60f7 9cb4
+60f9 8ee4
+60fa 9cb7
+60fb 9cba
+6100 9cb5
+6101 8f44
+6103 9cb8
+6106 9cb2
+6108 96fa
+6109 96f9
+610d 9cbc
+610e 9cbd
+610f 88d3
+6115 9cb1
+611a 8bf0
+611b 88a4
+611f 8ab4
+6121 9cb9
+6127 9cc1
+6128 9cc0
+612c 9cc5
+6134 9cc6
+613c 9cc4
+613d 9cc7
+613e 9cbf
+613f 9cc3
+6142 9cc8
+6144 9cc9
+6147 9cbe
+6148 8e9c
+614a 9cc2
+614b 91d4
+614c 8d51
+614d 9cb0
+614e 9054
+6153 9cd6
+6155 95e7
+6158 9ccc
+6159 9ccd
+615a 9cce
+615d 9cd5
+615f 9cd4
+6162 969d
+6163 8ab5
+6165 9cd2
+6167 8c64
+6168 8a53
+616b 9ccf
+616e 97b6
+616f 9cd1
+6170 88d4
+6171 9cd3
+6173 9cca
+6174 9cd0
+6175 9cd7
+6176 8c63
+6177 9ccb
+617e 977c
+6182 974a
+6187 9cda
+618a 9cde
+618e 919e
+6190 97f7
+6191 9cdf
+6194 9cdc
+6196 9cd9
+6199 9cd8
+619a 9cdd
+61a4 95ae
+61a7 93b2
+61a9 8c65
+61ab 9ce0
+61ac 9cdb
+61ae 9ce1
+61b2 8c9b
+61b6 89af
+61ba 9ce9
+61be 8ab6
+61c3 9ce7
+61c6 9ce8
+61c7 8da7
+61c8 9ce6
+61c9 9ce4
+61ca 9ce3
+61cb 9cea
+61cc 9ce2
+61cd 9cec
+61d0 89f9
+61e3 9cee
+61e6 9ced
+61f2 92a6
+61f4 9cf1
+61f6 9cef
+61f7 9ce5
+61f8 8c9c
+61fa 9cf0
+61fc 9cf4
+61fd 9cf3
+61fe 9cf5
+61ff 9cf2
+6200 9cf6
+6208 9cf7
+6209 9cf8
+620a 95e8
+620c 9cfa
+620d 9cf9
+620e 8f5e
+6210 90ac
+6211 89e4
+6212 89fa
+6214 9cfb
+6216 88bd
+621a 90ca
+621b 9cfc
+621d e6c1
+621e 9d40
+621f 8c81
+6221 9d41
+6226 90ed
+622a 9d42
+622e 9d43
+622f 8b59
+6230 9d44
+6232 9d45
+6233 9d46
+6234 91d5
+6238 8ccb
+623b 96df
+623f 965b
+6240 8f8a
+6241 9d47
+6247 90ee
+6248 e7bb
+6249 94e0
+624b 8ee8
+624d 8dcb
+624e 9d48
+6253 91c5
+6255 95a5
+6258 91ef
+625b 9d4b
+625e 9d49
+6260 9d4c
+6263 9d4a
+6268 9d4d
+626e 95af
+6271 88b5
+6276 957d
+6279 94e1
+627c 9d4e
+627e 9d51
+627f 8fb3
+6280 8b5a
+6282 9d4f
+6283 9d56
+6284 8fb4
+6289 9d50
+628a 9463
+6291 977d
+6292 9d52
+6293 9d53
+6294 9d57
+6295 938a
+6296 9d54
+6297 8d52
+6298 90dc
+629b 9d65
+629c 94b2
+629e 91f0
+62ab 94e2
+62ac 9dab
+62b1 95f8
+62b5 92ef
+62b9 9695
+62bb 9d5a
+62bc 899f
+62bd 928a
+62c2 9d63
+62c5 9253
+62c6 9d5d
+62c7 9d64
+62c8 9d5f
+62c9 9d66
+62ca 9d62
+62cc 9d61
+62cd 948f
+62cf 9d5b
+62d0 89fb
+62d1 9d59
+62d2 8b91
+62d3 91f1
+62d4 9d55
+62d7 9d58
+62d8 8d53
+62d9 90d9
+62db 8fb5
+62dc 9d60
+62dd 9471
+62e0 8b92
+62e1 8a67
+62ec 8a87
+62ed 9040
+62ee 9d68
+62ef 9d6d
+62f1 9d69
+62f3 8c9d
+62f5 9d6e
+62f6 8e41
+62f7 8d89
+62fe 8f45
+62ff 9d5c
+6301 8e9d
+6302 9d6b
+6307 8e77
+6308 9d6c
+6309 88c2
+630c 9d67
+6311 92a7
+6319 8b93
+631f 8bb2
+6327 9d6a
+6328 88a5
+632b 8dc1
+632f 9055
+633a 92f0
+633d 94d2
+633e 9d70
+633f 917d
+6349 91a8
+634c 8e4a
+634d 9d71
+634f 9d73
+6350 9d6f
+6355 95df
+6357 92bb
+635c 917b
+6367 95f9
+6368 8ecc
+6369 9d80
+636b 9d7e
+636e 9098
+6372 8c9e
+6376 9d78
+6377 8fb7
+637a 93e6
+637b 9450
+6380 9d76
+6383 917c
+6388 8ef6
+6389 9d7b
+638c 8fb6
+638e 9d75
+638f 9d7a
+6392 9472
+6396 9d74
+6398 8c40
+639b 8a7c
+639f 9d7c
+63a0 97a9
+63a1 8dcc
+63a2 9254
+63a3 9d79
+63a5 90da
+63a7 8d54
+63a8 9084
+63a9 8986
+63aa 915b
+63ab 9d77
+63ac 8b64
+63b2 8c66
+63b4 92cd
+63b5 9d7d
+63bb 917e
+63be 9d81
+63c0 9d83
+63c3 91b5
+63c4 9d89
+63c6 9d84
+63c9 9d86
+63cf 9560
+63d0 92f1
+63d2 9d87
+63d6 974b
+63da 9767
+63db 8ab7
+63e1 88ac
+63e3 9d85
+63e9 9d82
+63ee 8af6
+63f4 8987
+63f6 9d88
+63fa 9768
+6406 9d8c
+640d 91b9
+640f 9d93
+6413 9d8d
+6416 9d8a
+6417 9d91
+641c 9d72
+6426 9d8e
+6428 9d92
+642c 94c0
+642d 938b
+6434 9d8b
+6436 9d8f
+643a 8c67
+643e 8def
+6442 90db
+644e 9d97
+6458 9345
+6467 9d94
+6469 9680
+646f 9d95
+6476 9d96
+6478 96cc
+647a 90a0
+6483 8c82
+6488 9d9d
+6492 8e54
+6493 9d9a
+6495 9d99
+649a 9451
+649e 93b3
+64a4 9350
+64a5 9d9b
+64a9 9d9c
+64ab 958f
+64ad 9464
+64ae 8e42
+64b0 90ef
+64b2 966f
+64b9 8a68
+64bb 9da3
+64bc 9d9e
+64c1 9769
+64c2 9da5
+64c5 9da1
+64c7 9da2
+64cd 9180
+64d2 9da0
+64d4 9d5e
+64d8 9da4
+64da 9d9f
+64e0 9da9
+64e1 9daa
+64e2 9346
+64e3 9dac
+64e6 8e43
+64e7 9da7
+64ec 8b5b
+64ef 9dad
+64f1 9da6
+64f2 9db1
+64f4 9db0
+64f6 9daf
+64fa 9db2
+64fd 9db4
+64fe 8fef
+6500 9db3
+6505 9db7
+6518 9db5
+651c 9db6
+651d 9d90
+6523 9db9
+6524 9db8
+652a 9d98
+652b 9dba
+652c 9dae
+652f 8e78
+6534 9dbb
+6535 9dbc
+6536 9dbe
+6537 9dbd
+6538 9dbf
+6539 89fc
+653b 8d55
+653e 95fa
+653f 90ad
+6545 8ccc
+6548 9dc1
+654d 9dc4
+654f 9571
+6551 8b7e
+6555 9dc3
+6556 9dc2
+6557 9473
+6558 9dc5
+6559 8bb3
+655d 9dc7
+655e 9dc6
+6562 8ab8
+6563 8e55
+6566 93d6
+656c 8c68
+6570 9094
+6572 9dc8
+6574 90ae
+6575 9347
+6577 957e
+6578 9dc9
+6582 9dca
+6583 9dcb
+6587 95b6
+6588 9b7c
+6589 90c4
+658c 956b
+658e 8dd6
+6590 94e3
+6591 94c1
+6597 936c
+6599 97bf
+659b 9dcd
+659c 8ece
+659f 9dce
+65a1 88b4
+65a4 8bd2
+65a5 90cb
+65a7 9580
+65ab 9dcf
+65ac 8e61
+65ad 9266
+65af 8e7a
+65b0 9056
+65b7 9dd0
+65b9 95fb
+65bc 8997
+65bd 8e7b
+65c1 9dd3
+65c3 9dd1
+65c4 9dd4
+65c5 97b7
+65c6 9dd2
+65cb 90f9
+65cc 9dd5
+65cf 91b0
+65d2 9dd6
+65d7 8af8
+65d9 9dd8
+65db 9dd7
+65e0 9dd9
+65e1 9dda
+65e2 8af9
+65e5 93fa
+65e6 9255
+65e7 8b8c
+65e8 8e7c
+65e9 9181
+65ec 8f7b
+65ed 88ae
+65f1 9ddb
+65fa 89a0
+65fb 9ddf
+6602 8d56
+6603 9dde
+6606 8da9
+6607 8fb8
+660a 9ddd
+660c 8fb9
+660e 96be
+660f 8da8
+6613 88d5
+6614 90cc
+661c 9de4
+661f 90af
+6620 8966
+6625 8f74
+6627 9686
+6628 8df0
+662d 8fba
+662f 90a5
+6634 9de3
+6635 9de1
+6636 9de2
+663c 928b
+663f 9e45
+6641 9de8
+6642 8e9e
+6643 8d57
+6644 9de6
+6649 9de7
+664b 9057
+664f 9de5
+6652 8e4e
+665d 9dea
+665e 9de9
+665f 9dee
+6662 9def
+6664 9deb
+6666 8a41
+6667 9dec
+6668 9ded
+6669 94d3
+666e 9581
+666f 8c69
+6670 9df0
+6674 90b0
+6676 8fbb
+667a 9271
+6681 8bc5
+6683 9df1
+6684 9df5
+6687 89c9
+6688 9df2
+6689 9df4
+668e 9df3
+6691 8f8b
+6696 9267
+6697 88c3
+6698 9df6
+669d 9df7
+66a2 92a8
+66a6 97ef
+66ab 8e62
+66ae 95e9
+66b4 965c
+66b8 9e41
+66b9 9df9
+66bc 9dfc
+66be 9dfb
+66c1 9df8
+66c4 9e40
+66c7 93dc
+66c9 9dfa
+66d6 9e42
+66d9 8f8c
+66da 9e43
+66dc 976a
+66dd 9498
+66e0 9e44
+66e6 9e46
+66e9 9e47
+66f0 9e48
+66f2 8bc8
+66f3 8967
+66f4 8d58
+66f5 9e49
+66f7 9e4a
+66f8 8f91
+66f9 9182
+66fc 99d6
+66fd 915d
+66fe 915c
+66ff 91d6
+6700 8dc5
+6703 98f0
+6708 8c8e
+6709 974c
+670b 95fc
+670d 959e
+670f 9e4b
+6714 8df1
+6715 92bd
+6716 9e4c
+6717 984e
+671b 965d
+671d 92a9
+671e 9e4d
+671f 8afa
+6726 9e4e
+6727 9e4f
+6728 96d8
+672a 96a2
+672b 9696
+672c 967b
+672d 8e44
+672e 9e51
+6731 8ee9
+6734 9670
+6736 9e53
+6737 9e56
+6738 9e55
+673a 8af7
+673d 8b80
+673f 9e52
+6741 9e54
+6746 9e57
+6749 9099
+674e 979b
+674f 88c7
+6750 8dde
+6751 91ba
+6753 8edb
+6756 8ff1
+6759 9e5a
+675c 936d
+675e 9e58
+675f 91a9
+6760 9e59
+6761 8ff0
+6762 96db
+6763 9e5b
+6764 9e5c
+6765 9788
+676a 9e61
+676d 8d59
+676f 9474
+6770 9e5e
+6771 938c
+6772 9ddc
+6773 9de0
+6775 8b6e
+6777 9466
+677c 9e60
+677e 8fbc
+677f 94c2
+6785 9e66
+6787 94f8
+6789 9e5d
+678b 9e63
+678c 9e62
+6790 90cd
+6795 968d
+6797 97d1
+679a 9687
+679c 89ca
+679d 8e7d
+67a0 9867
+67a1 9e65
+67a2 9095
+67a6 9e64
+67a9 9e5f
+67af 8ccd
+67b3 9e6b
+67b4 9e69
+67b6 89cb
+67b7 9e67
+67b8 9e6d
+67b9 9e73
+67c1 91c6
+67c4 95bf
+67c6 9e75
+67ca 9541
+67ce 9e74
+67cf 9490
+67d0 965e
+67d1 8ab9
+67d3 90f5
+67d4 8f5f
+67d8 92d1
+67da 974d
+67dd 9e70
+67de 9e6f
+67e2 9e71
+67e4 9e6e
+67e7 9e76
+67e9 9e6c
+67ec 9e6a
+67ee 9e72
+67ef 9e68
+67f1 928c
+67f3 96f6
+67f4 8ec4
+67f5 8df2
+67fb 8db8
+67fe 968f
+67ff 8a60
+6802 92cc
+6803 93c8
+6804 8968
+6813 90f0
+6816 90b2
+6817 8c49
+681e 9e78
+6821 8d5a
+6822 8a9c
+6829 9e7a
+682a 8a94
+682b 9e81
+6832 9e7d
+6834 90f1
+6838 8a6a
+6839 8daa
+683c 8a69
+683d 8dcd
+6840 9e7b
+6841 8c85
+6842 8c6a
+6843 938d
+6846 9e79
+6848 88c4
+684d 9e7c
+684e 9e7e
+6850 8bcb
+6851 8c4b
+6853 8aba
+6854 8b6a
+6859 9e82
+685c 8df7
+685d 9691
+685f 8e56
+6863 9e83
+6867 954f
+6874 9e8f
+6876 89b1
+6877 9e84
+687e 9e95
+687f 9e85
+6881 97c0
+6883 9e8c
+6885 947e
+688d 9e94
+688f 9e87
+6893 88b2
+6894 9e89
+6897 8d5b
+689b 9e8b
+689d 9e8a
+689f 9e86
+68a0 9e91
+68a2 8fbd
+68a6 9aeb
+68a7 8ce6
+68a8 979c
+68ad 9e88
+68af 92f2
+68b0 8a42
+68b1 8dab
+68b3 9e80
+68b5 9e90
+68b6 8a81
+68b9 9e8e
+68ba 9e92
+68bc 938e
+68c4 8afc
+68c6 9eb0
+68c9 96c7
+68ca 9e97
+68cb 8afb
+68cd 9e9e
+68d2 965f
+68d4 9e9f
+68d5 9ea1
+68d7 9ea5
+68d8 9e99
+68da 9249
+68df 938f
+68e0 9ea9
+68e1 9e9c
+68e3 9ea6
+68e7 9ea0
+68ee 9058
+68ef 9eaa
+68f2 90b1
+68f9 9ea8
+68fa 8abb
+6900 986f
+6901 9e96
+6904 9ea4
+6905 88d6
+6908 9e98
+690b 96b8
+690c 9e9d
+690d 9041
+690e 92c5
+690f 9e93
+6912 9ea3
+6919 909a
+691a 9ead
+691b 8a91
+691c 8c9f
+6921 9eaf
+6922 9e9a
+6923 9eae
+6925 9ea7
+6926 9e9b
+6928 9eab
+692a 9eac
+6930 9ebd
+6934 93cc
+6936 9ea2
+6939 9eb9
+693d 9ebb
+693f 92d6
+694a 976b
+6953 9596
+6954 9eb6
+6955 91c8
+6959 9ebc
+695a 915e
+695c 9eb3
+695d 9ec0
+695e 9ebf
+6960 93ed
+6961 9ebe
+6962 93e8
+696a 9ec2
+696b 9eb5
+696d 8bc6
+696e 9eb8
+696f 8f7c
+6973 9480
+6974 9eba
+6975 8bc9
+6977 9eb2
+6978 9eb4
+6979 9eb1
+697c 984f
+697d 8a79
+697e 9eb7
+6981 9ec1
+6982 8a54
+698a 8de5
+698e 897c
+6991 9ed2
+6994 9850
+6995 9ed5
+699b 9059
+699c 9ed4
+69a0 9ed3
+69a7 9ed0
+69ae 9ec4
+69b1 9ee1
+69b2 9ec3
+69b4 9ed6
+69bb 9ece
+69be 9ec9
+69bf 9ec6
+69c1 9ec7
+69c3 9ecf
+69c7 eaa0
+69ca 9ecc
+69cb 8d5c
+69cc 92c6
+69cd 9184
+69ce 9eca
+69d0 9ec5
+69d3 9ec8
+69d8 976c
+69d9 968a
+69dd 9ecd
+69de 9ed7
+69e7 9edf
+69e8 9ed8
+69eb 9ee5
+69ed 9ee3
+69f2 9ede
+69f9 9edd
+69fb 92ce
+69fd 9185
+69ff 9edb
+6a02 9ed9
+6a05 9ee0
+6a0a 9ee6
+6a0b 94f3
+6a0c 9eec
+6a12 9ee7
+6a13 9eea
+6a14 9ee4
+6a17 9294
+6a19 9557
+6a1b 9eda
+6a1e 9ee2
+6a1f 8fbe
+6a21 96cd
+6a22 9ef6
+6a23 9ee9
+6a29 8ca0
+6a2a 89a1
+6a2b 8a7e
+6a2e 9ed1
+6a35 8fbf
+6a36 9eee
+6a38 9ef5
+6a39 8ef7
+6a3a 8a92
+6a3d 924d
+6a44 9eeb
+6a47 9ef0
+6a48 9ef4
+6a4b 8bb4
+6a58 8b6b
+6a59 9ef2
+6a5f 8b40
+6a61 93c9
+6a62 9ef1
+6a66 9ef3
+6a72 9eed
+6a78 9eef
+6a7f 8a80
+6a80 9268
+6a84 9efa
+6a8d 9ef8
+6a8e 8ce7
+6a90 9ef7
+6a97 9f40
+6a9c 9e77
+6aa0 9ef9
+6aa2 9efb
+6aa3 9efc
+6aaa 9f4b
+6aac 9f47
+6aae 9e8d
+6ab3 9f46
+6ab8 9f45
+6abb 9f42
+6ac1 9ee8
+6ac2 9f44
+6ac3 9f43
+6ad1 9f49
+6ad3 9845
+6ada 9f4c
+6adb 8bf9
+6ade 9f48
+6adf 9f4a
+6ae8 94a5
+6aea 9f4d
+6afa 9f51
+6afb 9f4e
+6b04 9793
+6b05 9f4f
+6b0a 9edc
+6b12 9f52
+6b16 9f53
+6b1d 8954
+6b1f 9f55
+6b20 8c87
+6b21 8e9f
+6b23 8bd3
+6b27 89a2
+6b32 977e
+6b37 9f57
+6b38 9f56
+6b39 9f59
+6b3a 8b5c
+6b3d 8bd4
+6b3e 8abc
+6b43 9f5c
+6b47 9f5b
+6b49 9f5d
+6b4c 89cc
+6b4e 9256
+6b50 9f5e
+6b53 8abd
+6b54 9f60
+6b59 9f5f
+6b5b 9f61
+6b5f 9f62
+6b61 9f63
+6b62 8e7e
+6b63 90b3
+6b64 8d9f
+6b66 9590
+6b69 95e0
+6b6a 9863
+6b6f 8e95
+6b73 8dce
+6b74 97f0
+6b78 9f64
+6b79 9f65
+6b7b 8e80
+6b7f 9f66
+6b80 9f67
+6b83 9f69
+6b84 9f68
+6b86 9677
+6b89 8f7d
+6b8a 8eea
+6b8b 8e63
+6b8d 9f6a
+6b95 9f6c
+6b96 9042
+6b98 9f6b
+6b9e 9f6d
+6ba4 9f6e
+6baa 9f6f
+6bab 9f70
+6baf 9f71
+6bb1 9f73
+6bb2 9f72
+6bb3 9f74
+6bb4 89a3
+6bb5 9269
+6bb7 9f75
+6bba 8e45
+6bbb 8a6b
+6bbc 9f76
+6bbf 9361
+6bc0 9aca
+6bc5 8b42
+6bc6 9f77
+6bcb 9f78
+6bcd 95ea
+6bce 9688
+6bd2 93c5
+6bd3 9f79
+6bd4 94e4
+6bd8 94f9
+6bdb 96d1
+6bdf 9f7a
+6beb 9f7c
+6bec 9f7b
+6bef 9f7e
+6bf3 9f7d
+6c08 9f81
+6c0f 8e81
+6c11 96af
+6c13 9f82
+6c14 9f83
+6c17 8b43
+6c1b 9f84
+6c23 9f86
+6c24 9f85
+6c34 9085
+6c37 9558
+6c38 8969
+6c3e 94c3
+6c40 92f3
+6c41 8f60
+6c42 8b81
+6c4e 94c4
+6c50 8eac
+6c55 9f88
+6c57 8abe
+6c5a 8998
+6c5d 93f0
+6c5e 9f87
+6c5f 8d5d
+6c60 9272
+6c62 9f89
+6c68 9f91
+6c6a 9f8a
+6c70 91bf
+6c72 8b82
+6c73 9f92
+6c7a 8c88
+6c7d 8b44
+6c7e 9f90
+6c81 9f8e
+6c82 9f8b
+6c83 9780
+6c88 92be
+6c8c 93d7
+6c8d 9f8c
+6c90 9f94
+6c92 9f93
+6c93 8c42
+6c96 89ab
+6c99 8db9
+6c9a 9f8d
+6c9b 9f8f
+6ca1 9676
+6ca2 91f2
+6cab 9697
+6cae 9f9c
+6cb1 9f9d
+6cb3 89cd
+6cb8 95a6
+6cb9 96fb
+6cba 9f9f
+6cbb 8ea1
+6cbc 8fc0
+6cbd 9f98
+6cbe 9f9e
+6cbf 8988
+6cc1 8bb5
+6cc4 9f95
+6cc5 9f9a
+6cc9 90f2
+6cca 9491
+6ccc 94e5
+6cd3 9f97
+6cd5 9640
+6cd7 9f99
+6cd9 9fa2
+6cdb 9fa0
+6cdd 9f9b
+6ce1 9641
+6ce2 9467
+6ce3 8b83
+6ce5 9344
+6ce8 928d
+6cea 9fa3
+6cef 9fa1
+6cf0 91d7
+6cf1 9f96
+6cf3 896a
+6d0b 976d
+6d0c 9fae
+6d12 9fad
+6d17 90f4
+6d19 9faa
+6d1b 978c
+6d1e 93b4
+6d1f 9fa4
+6d25 92c3
+6d29 896b
+6d2a 8d5e
+6d2b 9fa7
+6d32 8f46
+6d33 9fac
+6d35 9fab
+6d36 9fa6
+6d38 9fa9
+6d3b 8a88
+6d3d 9fa8
+6d3e 9468
+6d41 97ac
+6d44 8ff2
+6d45 90f3
+6d59 9fb4
+6d5a 9fb2
+6d5c 956c
+6d63 9faf
+6d64 9fb1
+6d66 8959
+6d69 8d5f
+6d6a 9851
+6d6c 8a5c
+6d6e 9582
+6d74 9781
+6d77 8a43
+6d78 905a
+6d79 9fb3
+6d85 9fb8
+6d88 8fc1
+6d8c 974f
+6d8e 9fb5
+6d93 9fb0
+6d95 9fb6
+6d99 97dc
+6d9b 9393
+6d9c 93c0
+6daf 8a55
+6db2 8974
+6db5 9fbc
+6db8 9fbf
+6dbc 97c1
+6dc0 9784
+6dc5 9fc6
+6dc6 9fc0
+6dc7 9fbd
+6dcb 97d2
+6dcc 9fc3
+6dd1 8f69
+6dd2 9fc5
+6dd5 9fca
+6dd8 9391
+6dd9 9fc8
+6dde 9fc2
+6de1 9257
+6de4 9fc9
+6de6 9fbe
+6de8 9fc4
+6dea 9fcb
+6deb 88fa
+6dec 9fc1
+6dee 9fcc
+6df1 905b
+6df3 8f7e
+6df5 95a3
+6df7 8dac
+6df9 9fb9
+6dfa 9fc7
+6dfb 9359
+6e05 90b4
+6e07 8a89
+6e08 8dcf
+6e09 8fc2
+6e0a 9fbb
+6e0b 8f61
+6e13 8c6b
+6e15 9fba
+6e19 9fd0
+6e1a 8f8d
+6e1b 8cb8
+6e1d 9fdf
+6e1f 9fd9
+6e20 8b94
+6e21 936e
+6e23 9fd4
+6e24 9fdd
+6e25 88ad
+6e26 8951
+6e29 89b7
+6e2b 9fd6
+6e2c 91aa
+6e2d 9fcd
+6e2e 9fcf
+6e2f 8d60
+6e38 9fe0
+6e3a 9fdb
+6e3e 9fd3
+6e43 9fda
+6e4a 96a9
+6e4d 9fd8
+6e4e 9fdc
+6e56 8cce
+6e58 8fc3
+6e5b 9258
+6e5f 9fd2
+6e67 974e
+6e6b 9fd5
+6e6e 9fce
+6e6f 9392
+6e72 9fd1
+6e76 9fd7
+6e7e 9870
+6e7f 8ebc
+6e80 969e
+6e82 9fe1
+6e8c 94ac
+6e8f 9fed
+6e90 8cb9
+6e96 8f80
+6e98 9fe3
+6e9c 97ad
+6e9d 8d61
+6e9f 9ff0
+6ea2 88ec
+6ea5 9fee
+6eaa 9fe2
+6eaf 9fe8
+6eb2 9fea
+6eb6 976e
+6eb7 9fe5
+6eba 934d
+6ebd 9fe7
+6ec2 9fef
+6ec4 9fe9
+6ec5 96c5
+6ec9 9fe4
+6ecb 8ea0
+6ecc 9ffc
+6ed1 8a8a
+6ed3 9fe6
+6ed4 9feb
+6ed5 9fec
+6edd 91ea
+6ede 91d8
+6eec 9ff4
+6eef 9ffa
+6ef2 9ff8
+6ef4 9348
+6ef7 e042
+6ef8 9ff5
+6efe 9ff6
+6eff 9fde
+6f01 8b99
+6f02 9559
+6f06 8ebd
+6f09 8d97
+6f0f 9852
+6f11 9ff2
+6f13 e041
+6f14 8989
+6f15 9186
+6f20 9499
+6f22 8abf
+6f23 97f8
+6f2b 969f
+6f2c 92d0
+6f31 9ff9
+6f32 9ffb
+6f38 9151
+6f3e e040
+6f3f 9ff7
+6f41 9ff1
+6f45 8ac1
+6f54 8c89
+6f58 e04e
+6f5b e049
+6f5c 90f6
+6f5f 8a83
+6f64 8f81
+6f66 e052
+6f6d e04b
+6f6e 92aa
+6f6f e048
+6f70 92d7
+6f74 e06b
+6f78 e045
+6f7a e044
+6f7c e04d
+6f80 e047
+6f81 e046
+6f82 e04c
+6f84 909f
+6f86 e043
+6f8e e04f
+6f91 e050
+6f97 8ac0
+6fa1 e055
+6fa3 e054
+6fa4 e056
+6faa e059
+6fb1 9362
+6fb3 e053
+6fb9 e057
+6fc0 8c83
+6fc1 91f7
+6fc2 e051
+6fc3 945a
+6fc6 e058
+6fd4 e05d
+6fd5 e05b
+6fd8 e05e
+6fdb e061
+6fdf e05a
+6fe0 8d8a
+6fe1 9447
+6fe4 9fb7
+6feb 9794
+6fec e05c
+6fee e060
+6fef 91f3
+6ff1 e05f
+6ff3 e04a
+6ff6 e889
+6ffa e064
+6ffe e068
+7001 e066
+7009 e062
+700b e063
+700f e067
+7011 e065
+7015 956d
+7018 e06d
+701a e06a
+701b e069
+701d e06c
+701e 93d2
+701f e06e
+7026 9295
+7027 91eb
+702c 90a3
+7030 e06f
+7032 e071
+703e e070
+704c 9ff3
+7051 e072
+7058 93e5
+7063 e073
+706b 89ce
+706f 9394
+7070 8a44
+7078 8b84
+707c 8edc
+707d 8dd0
+7089 9846
+708a 9086
+708e 898a
+7092 e075
+7099 e074
+70ac e078
+70ad 9259
+70ae e07b
+70af e076
+70b3 e07a
+70b8 e079
+70b9 935f
+70ba 88d7
+70c8 97f3
+70cb e07d
+70cf 8947
+70d9 e080
+70dd e07e
+70df e07c
+70f1 e077
+70f9 9642
+70fd e082
+7109 e081
+7114 898b
+7119 e084
+711a 95b0
+711c e083
+7121 96b3
+7126 8fc5
+7136 9152
+713c 8fc4
+7149 97f9
+714c e08a
+714e 90f7
+7155 e086
+7156 e08b
+7159 898c
+7162 e089
+7164 9481
+7165 e085
+7166 e088
+7167 8fc6
+7169 94cf
+716c e08c
+716e 8ecf
+717d 90f8
+7184 e08f
+7188 e087
+718a 8c46
+718f e08d
+7194 976f
+7195 e090
+7199 eaa4
+719f 8f6e
+71a8 e091
+71ac e092
+71b1 944d
+71b9 e094
+71be e095
+71c3 9452
+71c8 9395
+71c9 e097
+71ce e099
+71d0 97d3
+71d2 e096
+71d4 e098
+71d5 898d
+71d7 e093
+71df 9a7a
+71e0 e09a
+71e5 9187
+71e6 8e57
+71e7 e09c
+71ec e09b
+71ed 9043
+71ee 99d7
+71f5 e09d
+71f9 e09f
+71fb e08e
+71fc e09e
+71ff e0a0
+7206 949a
+720d e0a1
+7210 e0a2
+721b e0a3
+7228 e0a4
+722a 92dc
+722c e0a6
+722d e0a5
+7230 e0a7
+7232 e0a8
+7235 8edd
+7236 9583
+723a 96ea
+723b e0a9
+723c e0aa
+723d 9175
+723e 8ea2
+723f e0ab
+7240 e0ac
+7246 e0ad
+7247 95d0
+7248 94c5
+724b e0ae
+724c 9476
+7252 92ab
+7258 e0af
+7259 89e5
+725b 8b8d
+725d 96c4
+725f 96b4
+7261 89b2
+7262 9853
+7267 9671
+7269 95a8
+7272 90b5
+7274 e0b0
+7279 93c1
+727d 8ca1
+727e e0b1
+7280 8dd2
+7281 e0b3
+7282 e0b2
+7287 e0b4
+7292 e0b5
+7296 e0b6
+72a0 8b5d
+72a2 e0b7
+72a7 e0b8
+72ac 8ca2
+72af 94c6
+72b2 e0ba
+72b6 8ff3
+72b9 e0b9
+72c2 8bb6
+72c3 e0bb
+72c4 e0bd
+72c6 e0bc
+72ce e0be
+72d0 8ccf
+72d2 e0bf
+72d7 8be7
+72d9 915f
+72db 8d9d
+72e0 e0c1
+72e1 e0c2
+72e2 e0c0
+72e9 8eeb
+72ec 93c6
+72ed 8bb7
+72f7 e0c4
+72f8 924b
+72f9 e0c3
+72fc 9854
+72fd 9482
+730a e0c7
+7316 e0c9
+7317 e0c6
+731b 96d2
+731c e0c8
+731d e0ca
+731f 97c2
+7325 e0ce
+7329 e0cd
+732a 9296
+732b 944c
+732e 8ca3
+732f e0cc
+7334 e0cb
+7336 9750
+7337 9751
+733e e0cf
+733f 898e
+7344 8d96
+7345 8e82
+734e e0d0
+734f e0d1
+7357 e0d3
+7363 8f62
+7368 e0d5
+736a e0d4
+7370 e0d6
+7372 8a6c
+7375 e0d8
+7378 e0d7
+737a e0da
+737b e0d9
+7384 8cba
+7387 97a6
+7389 8bca
+738b 89a4
+7396 8be8
+73a9 8adf
+73b2 97e6
+73b3 e0dc
+73bb e0de
+73c0 e0df
+73c2 89cf
+73c8 e0db
+73ca 8e58
+73cd 92bf
+73ce e0dd
+73de e0e2
+73e0 8eec
+73e5 e0e0
+73ea 8c5d
+73ed 94c7
+73ee e0e1
+73f1 e0fc
+73f8 e0e7
+73fe 8cbb
+7403 8b85
+7405 e0e4
+7406 979d
+7409 97ae
+7422 91f4
+7425 e0e6
+7432 e0e8
+7433 97d4
+7434 8bd5
+7435 94fa
+7436 9469
+743a e0e9
+743f e0eb
+7441 e0ee
+7455 e0ea
+7459 e0ed
+745a 8ce8
+745b 896c
+745c e0ef
+745e 9090
+745f e0ec
+7460 97da
+7463 e0f2
+7464 eaa2
+7469 e0f0
+746a e0f3
+746f e0e5
+7470 e0f1
+7473 8dba
+7476 e0f4
+747e e0f5
+7483 979e
+748b e0f6
+749e e0f7
+74a2 e0e3
+74a7 e0f8
+74b0 8ac2
+74bd 8ea3
+74ca e0f9
+74cf e0fa
+74d4 e0fb
+74dc 895a
+74e0 e140
+74e2 955a
+74e3 e141
+74e6 8aa2
+74e7 e142
+74e9 e143
+74ee e144
+74f0 e146
+74f1 e147
+74f2 e145
+74f6 9572
+74f7 e149
+74f8 e148
+7503 e14b
+7504 e14a
+7505 e14c
+750c e14d
+750d e14f
+750e e14e
+7511 8d99
+7513 e151
+7515 e150
+7518 8ac3
+751a 9072
+751c 935b
+751e e152
+751f 90b6
+7523 8e59
+7525 8999
+7526 e153
+7528 9770
+752b 95e1
+752c e154
+7530 9363
+7531 9752
+7532 8d62
+7533 905c
+7537 926a
+7538 99b2
+753a 92ac
+753b 89e6
+753c e155
+7544 e156
+7546 e15b
+7549 e159
+754a e158
+754b 9dc0
+754c 8a45
+754d e157
+754f 88d8
+7551 94a8
+7554 94c8
+7559 97af
+755a e15c
+755b e15a
+755c 927b
+755d 90a4
+7560 94a9
+7562 954c
+7564 e15e
+7565 97aa
+7566 8c6c
+7567 e15f
+7569 e15d
+756a 94d4
+756b e160
+756d e161
+7570 88d9
+7573 8ff4
+7574 e166
+7576 e163
+7577 93eb
+7578 e162
+757f 8b45
+7582 e169
+7586 e164
+7587 e165
+7589 e168
+758a e167
+758b 9544
+758e 9161
+758f 9160
+7591 8b5e
+7594 e16a
+759a e16b
+759d e16c
+75a3 e16e
+75a5 e16d
+75ab 8975
+75b1 e176
+75b2 94e6
+75b3 e170
+75b5 e172
+75b8 e174
+75b9 905d
+75bc e175
+75bd e173
+75be 8ebe
+75c2 e16f
+75c3 e171
+75c5 9561
+75c7 8fc7
+75ca e178
+75cd e177
+75d2 e179
+75d4 8ea4
+75d5 8dad
+75d8 9397
+75d9 e17a
+75db 92c9
+75de e17c
+75e2 979f
+75e3 e17b
+75e9 9189
+75f0 e182
+75f2 e184
+75f3 e185
+75f4 9273
+75fa e183
+75fc e180
+75fe e17d
+75ff e17e
+7601 e181
+7609 e188
+760b e186
+760d e187
+761f e189
+7620 e18b
+7621 e18c
+7622 e18d
+7624 e18e
+7627 e18a
+7630 e190
+7634 e18f
+763b e191
+7642 97c3
+7646 e194
+7647 e192
+7648 e193
+764c 8ae0
+7652 96fc
+7656 95c8
+7658 e196
+765c e195
+7661 e197
+7662 e198
+7667 e19c
+7668 e199
+7669 e19a
+766a e19b
+766c e19d
+7670 e19e
+7672 e19f
+7676 e1a0
+7678 e1a1
+767a 94ad
+767b 936f
+767c e1a2
+767d 9492
+767e 9553
+7680 e1a3
+7683 e1a4
+7684 9349
+7686 8a46
+7687 8d63
+7688 e1a5
+768b e1a6
+768e e1a7
+7690 8e48
+7693 e1a9
+7696 e1a8
+7699 e1aa
+769a e1ab
+76ae 94e7
+76b0 e1ac
+76b4 e1ad
+76b7 ea89
+76b8 e1ae
+76b9 e1af
+76ba e1b0
+76bf 8e4d
+76c2 e1b1
+76c3 9475
+76c6 967e
+76c8 896d
+76ca 8976
+76cd e1b2
+76d2 e1b4
+76d6 e1b3
+76d7 9390
+76db 90b7
+76dc 9f58
+76de e1b5
+76df 96bf
+76e1 e1b6
+76e3 8ac4
+76e4 94d5
+76e5 e1b7
+76e7 e1b8
+76ea e1b9
+76ee 96da
+76f2 96d3
+76f4 92bc
+76f8 918a
+76fb e1bb
+76fe 8f82
+7701 8fc8
+7704 e1be
+7707 e1bd
+7708 e1bc
+7709 94fb
+770b 8ac5
+770c 8ca7
+771b e1c4
+771e e1c1
+771f 905e
+7720 96b0
+7724 e1c0
+7725 e1c2
+7726 e1c3
+7729 e1bf
+7737 e1c5
+7738 e1c6
+773a 92ad
+773c 8ae1
+7740 9285
+7747 e1c7
+775a e1c8
+775b e1cb
+7761 9087
+7763 93c2
+7765 e1cc
+7766 9672
+7768 e1c9
+776b e1ca
+7779 e1cf
+777e e1ce
+777f e1cd
+778b e1d1
+778e e1d0
+7791 e1d2
+779e e1d4
+77a0 e1d3
+77a5 95cb
+77ac 8f75
+77ad 97c4
+77b0 e1d5
+77b3 93b5
+77b6 e1d6
+77b9 e1d7
+77bb e1db
+77bc e1d9
+77bd e1da
+77bf e1d8
+77c7 e1dc
+77cd e1dd
+77d7 e1de
+77da e1df
+77db 96b5
+77dc e1e0
+77e2 96ee
+77e3 e1e1
+77e5 926d
+77e7 948a
+77e9 8be9
+77ed 925a
+77ee e1e2
+77ef 8bb8
+77f3 90ce
+77fc e1e3
+7802 8dbb
+780c e1e4
+7812 e1e5
+7814 8ca4
+7815 8dd3
+7820 e1e7
+7825 9375
+7826 8dd4
+7827 8b6d
+7832 9643
+7834 946a
+783a 9376
+783f 8d7b
+7845 e1e9
+785d 8fc9
+786b 97b0
+786c 8d64
+786f 8ca5
+7872 94a1
+7874 e1eb
+787c e1ed
+7881 8ce9
+7886 e1ec
+7887 92f4
+788c e1ef
+788d 8a56
+788e e1ea
+7891 94e8
+7893 894f
+7895 8dea
+7897 9871
+789a e1ee
+78a3 e1f0
+78a7 95c9
+78a9 90d7
+78aa e1f2
+78af e1f3
+78b5 e1f1
+78ba 8a6d
+78bc e1f9
+78be e1f8
+78c1 8ea5
+78c5 e1fa
+78c6 e1f5
+78ca e1fb
+78cb e1f6
+78d0 94d6
+78d1 e1f4
+78d4 e1f7
+78da e241
+78e7 e240
+78e8 9681
+78ec e1fc
+78ef 88e9
+78f4 e243
+78fd e242
+7901 8fca
+7907 e244
+790e 9162
+7911 e246
+7912 e245
+7919 e247
+7926 e1e6
+792a e1e8
+792b e249
+792c e248
+793a 8ea6
+793c 97e7
+793e 8ed0
+7940 e24a
+7941 8c56
+7947 8b5f
+7948 8b46
+7949 8e83
+7950 9753
+7953 e250
+7955 e24f
+7956 9163
+7957 e24c
+795a e24e
+795d 8f6a
+795e 905f
+795f e24d
+7960 e24b
+7962 9449
+7965 8fcb
+7968 955b
+796d 8dd5
+7977 9398
+797a e251
+797f e252
+7980 e268
+7981 8bd6
+7984 985c
+7985 9154
+798a e253
+798d 89d0
+798e 92f5
+798f 959f
+799d e254
+79a6 8b9a
+79a7 e255
+79aa e257
+79ae e258
+79b0 9448
+79b3 e259
+79b9 e25a
+79ba e25b
+79bd 8bd7
+79be 89d1
+79bf 93c3
+79c0 8f47
+79c1 8e84
+79c9 e25c
+79cb 8f48
+79d1 89c8
+79d2 9562
+79d5 e25d
+79d8 94e9
+79df 9164
+79e1 e260
+79e3 e261
+79e4 9489
+79e6 9060
+79e7 e25e
+79e9 9281
+79ec e25f
+79f0 8fcc
+79fb 88da
+7a00 8b48
+7a08 e262
+7a0b 92f6
+7a0d e263
+7a0e 90c5
+7a14 96ab
+7a17 9542
+7a18 e264
+7a19 e265
+7a1a 9274
+7a1c 97c5
+7a1f e267
+7a20 e266
+7a2e 8eed
+7a31 e269
+7a32 88ee
+7a37 e26c
+7a3b e26a
+7a3c 89d2
+7a3d 8c6d
+7a3e e26b
+7a3f 8d65
+7a40 8d92
+7a42 95e4
+7a43 e26d
+7a46 9673
+7a49 e26f
+7a4d 90cf
+7a4e 896e
+7a4f 89b8
+7a50 88aa
+7a57 e26e
+7a61 e270
+7a62 e271
+7a63 8ff5
+7a69 e272
+7a6b 8a6e
+7a70 e274
+7a74 8c8a
+7a76 8b86
+7a79 e275
+7a7a 8bf3
+7a7d e276
+7a7f 90fa
+7a81 93cb
+7a83 90de
+7a84 8df3
+7a88 e277
+7a92 9282
+7a93 918b
+7a95 e279
+7a96 e27b
+7a97 e278
+7a98 e27a
+7a9f 8c41
+7aa9 e27c
+7aaa 8c45
+7aae 8b87
+7aaf 9771
+7ab0 e27e
+7ab6 e280
+7aba 894d
+7abf e283
+7ac3 8a96
+7ac4 e282
+7ac5 e281
+7ac7 e285
+7ac8 e27d
+7aca e286
+7acb 97a7
+7acd e287
+7acf e288
+7ad2 9af2
+7ad3 e28a
+7ad5 e289
+7ad9 e28b
+7ada e28c
+7adc 97b3
+7add e28d
+7adf e8ed
+7ae0 8fcd
+7ae1 e28e
+7ae2 e28f
+7ae3 8f76
+7ae5 93b6
+7ae6 e290
+7aea 9247
+7aed e291
+7aef 925b
+7af0 e292
+7af6 8ba3
+7af8 995e
+7af9 927c
+7afa 8eb1
+7aff 8ac6
+7b02 e293
+7b04 e2a0
+7b06 e296
+7b08 8b88
+7b0a e295
+7b0b e2a2
+7b0f e294
+7b11 8fce
+7b18 e298
+7b19 e299
+7b1b 934a
+7b1e e29a
+7b20 8a7d
+7b25 9079
+7b26 9584
+7b28 e29c
+7b2c 91e6
+7b33 e297
+7b35 e29b
+7b36 e29d
+7b39 8df9
+7b45 e2a4
+7b46 954d
+7b48 94a4
+7b49 9399
+7b4b 8bd8
+7b4c e2a3
+7b4d e2a1
+7b4f 94b3
+7b50 e29e
+7b51 927d
+7b52 939b
+7b54 939a
+7b56 8df4
+7b5d e2b6
+7b65 e2a6
+7b67 e2a8
+7b6c e2ab
+7b6e e2ac
+7b70 e2a9
+7b71 e2aa
+7b74 e2a7
+7b75 e2a5
+7b7a e29f
+7b86 95cd
+7b87 89d3
+7b8b e2b3
+7b8d e2b0
+7b8f e2b5
+7b92 e2b4
+7b94 9493
+7b95 96a5
+7b97 8e5a
+7b98 e2ae
+7b99 e2b7
+7b9a e2b2
+7b9c e2b1
+7b9d e2ad
+7b9f e2af
+7ba1 8ac7
+7baa 925c
+7bad 90fb
+7bb1 94a0
+7bb4 e2bc
+7bb8 94a2
+7bc0 90df
+7bc1 e2b9
+7bc4 94cd
+7bc6 e2bd
+7bc7 95d1
+7bc9 927a
+7bcb e2b8
+7bcc e2ba
+7bcf e2bb
+7bdd e2be
+7be0 8ec2
+7be4 93c4
+7be5 e2c3
+7be6 e2c2
+7be9 e2bf
+7bed 9855
+7bf3 e2c8
+7bf6 e2cc
+7bf7 e2c9
+7c00 e2c5
+7c07 e2c6
+7c0d e2cb
+7c11 e2c0
+7c12 99d3
+7c13 e2c7
+7c14 e2c1
+7c17 e2ca
+7c1f e2d0
+7c21 8ac8
+7c23 e2cd
+7c27 e2ce
+7c2a e2cf
+7c2b e2d2
+7c37 e2d1
+7c38 94f4
+7c3d e2d3
+7c3e 97fa
+7c3f 95eb
+7c40 e2d8
+7c43 e2d5
+7c4c e2d4
+7c4d 90d0
+7c4f e2d7
+7c50 e2d9
+7c54 e2d6
+7c56 e2dd
+7c58 e2da
+7c5f e2db
+7c60 e2c4
+7c64 e2dc
+7c65 e2de
+7c6c e2df
+7c73 95c4
+7c75 e2e0
+7c7e 96e0
+7c81 8bcc
+7c82 8c48
+7c83 e2e1
+7c89 95b2
+7c8b 9088
+7c8d 96ae
+7c90 e2e2
+7c92 97b1
+7c95 9494
+7c97 9165
+7c98 9453
+7c9b 8f6c
+7c9f 88be
+7ca1 e2e7
+7ca2 e2e5
+7ca4 e2e3
+7ca5 8a9f
+7ca7 8fcf
+7ca8 e2e8
+7cab e2e6
+7cad e2e4
+7cae e2ec
+7cb1 e2eb
+7cb2 e2ea
+7cb3 e2e9
+7cb9 e2ed
+7cbd e2ee
+7cbe 90b8
+7cc0 e2ef
+7cc2 e2f1
+7cc5 e2f0
+7cca 8cd0
+7cce 9157
+7cd2 e2f3
+7cd6 939c
+7cd8 e2f2
+7cdc e2f4
+7cde 95b3
+7cdf 918c
+7ce0 8d66
+7ce2 e2f5
+7ce7 97c6
+7cef e2f7
+7cf2 e2f8
+7cf4 e2f9
+7cf6 e2fa
+7cf8 8e85
+7cfa e2fb
+7cfb 8c6e
+7cfe 8b8a
+7d00 8b49
+7d02 e340
+7d04 96f1
+7d05 8d67
+7d06 e2fc
+7d0a e343
+7d0b 96e4
+7d0d 945b
+7d10 9552
+7d14 8f83
+7d15 e342
+7d17 8ed1
+7d18 8d68
+7d19 8e86
+7d1a 8b89
+7d1b 95b4
+7d1c e341
+7d20 9166
+7d21 9661
+7d22 8df5
+7d2b 8e87
+7d2c 92db
+7d2e e346
+7d2f 97dd
+7d30 8dd7
+7d32 e347
+7d33 9061
+7d35 e349
+7d39 8fd0
+7d3a 8dae
+7d3f e348
+7d42 8f49
+7d43 8cbc
+7d44 9167
+7d45 e344
+7d46 e34a
+7d4b e345
+7d4c 8c6f
+7d4e e34d
+7d4f e351
+7d50 8c8b
+7d56 e34c
+7d5b e355
+7d5e 8d69
+7d61 978d
+7d62 88ba
+7d63 e352
+7d66 8b8b
+7d68 e34f
+7d6e e350
+7d71 939d
+7d72 e34e
+7d73 e34b
+7d75 8a47
+7d76 90e2
+7d79 8ca6
+7d7d e357
+7d89 e354
+7d8f e356
+7d93 e353
+7d99 8c70
+7d9a 91b1
+7d9b e358
+7d9c 918e
+7d9f e365
+7da2 e361
+7da3 e35b
+7dab e35f
+7dac 8ef8
+7dad 88db
+7dae e35a
+7daf e362
+7db0 e366
+7db1 8d6a
+7db2 96d4
+7db4 92d4
+7db5 e35c
+7db8 e364
+7dba e359
+7dbb 925d
+7dbd e35e
+7dbe 88bb
+7dbf 96c8
+7dc7 e35d
+7dca 8bd9
+7dcb 94ea
+7dcf 918d
+7dd1 97ce
+7dd2 8f8f
+7dd5 e38e
+7dd8 e367
+7dda 90fc
+7ddc e363
+7ddd e368
+7dde e36a
+7de0 92f7
+7de1 e36d
+7de4 e369
+7de8 95d2
+7de9 8ac9
+7dec 96c9
+7def 88dc
+7df2 e36c
+7df4 97fb
+7dfb e36b
+7e01 898f
+7e04 93ea
+7e05 e36e
+7e09 e375
+7e0a e36f
+7e0b e376
+7e12 e372
+7e1b 949b
+7e1e 8ec8
+7e1f e374
+7e21 e371
+7e22 e377
+7e23 e370
+7e26 8f63
+7e2b 9644
+7e2e 8f6b
+7e31 e373
+7e32 e380
+7e35 e37b
+7e37 e37e
+7e39 e37c
+7e3a e381
+7e3b e37a
+7e3d e360
+7e3e 90d1
+7e41 94c9
+7e43 e37d
+7e46 e378
+7e4a 9140
+7e4b 8c71
+7e4d 8f4a
+7e54 9044
+7e55 9155
+7e56 e384
+7e59 e386
+7e5a e387
+7e5d e383
+7e5e e385
+7e66 e379
+7e67 e382
+7e69 e38a
+7e6a e389
+7e6d 969a
+7e70 8c4a
+7e79 e388
+7e7b e38c
+7e7c e38b
+7e7d e38f
+7e7f e391
+7e82 8e5b
+7e83 e38d
+7e88 e392
+7e89 e393
+7e8c e394
+7e8e e39a
+7e8f 935a
+7e90 e396
+7e92 e395
+7e93 e397
+7e94 e398
+7e96 e399
+7e9b e39b
+7e9c e39c
+7f36 8aca
+7f38 e39d
+7f3a e39e
+7f45 e39f
+7f4c e3a0
+7f4d e3a1
+7f4e e3a2
+7f50 e3a3
+7f51 e3a4
+7f54 e3a6
+7f55 e3a5
+7f58 e3a7
+7f5f e3a8
+7f60 e3a9
+7f67 e3ac
+7f68 e3aa
+7f69 e3ab
+7f6a 8ddf
+7f6b 8c72
+7f6e 9275
+7f70 94b1
+7f72 8f90
+7f75 946c
+7f77 94eb
+7f78 e3ad
+7f79 9ceb
+7f82 e3ae
+7f83 e3b0
+7f85 9785
+7f86 e3af
+7f87 e3b2
+7f88 e3b1
+7f8a 9772
+7f8c e3b3
+7f8e 94fc
+7f94 e3b4
+7f9a e3b7
+7f9d e3b6
+7f9e e3b5
+7fa3 e3b8
+7fa4 8c51
+7fa8 9141
+7fa9 8b60
+7fae e3bc
+7faf e3b9
+7fb2 e3ba
+7fb6 e3bd
+7fb8 e3be
+7fb9 e3bb
+7fbd 8948
+7fc1 89a5
+7fc5 e3c0
+7fc6 e3c1
+7fca e3c2
+7fcc 9782
+7fd2 8f4b
+7fd4 e3c4
+7fd5 e3c3
+7fe0 9089
+7fe1 e3c5
+7fe6 e3c6
+7fe9 e3c7
+7feb 8ae3
+7ff0 8acb
+7ff3 e3c8
+7ff9 e3c9
+7ffb 967c
+7ffc 9783
+8000 9773
+8001 9856
+8003 8d6c
+8004 e3cc
+8005 8ed2
+8006 e3cb
+800b e3cd
+800c 8ea7
+8010 91cf
+8012 e3ce
+8015 8d6b
+8017 96d5
+8018 e3cf
+8019 e3d0
+801c e3d1
+8021 e3d2
+8028 e3d3
+8033 8ea8
+8036 96eb
+803b e3d5
+803d 925e
+803f e3d4
+8046 e3d7
+804a e3d6
+8052 e3d8
+8056 90b9
+8058 e3d9
+805a e3da
+805e 95b7
+805f e3db
+8061 918f
+8062 e3dc
+8068 e3dd
+806f 97fc
+8070 e3e0
+8072 e3df
+8073 e3de
+8074 92ae
+8076 e3e1
+8077 9045
+8079 e3e2
+807d e3e3
+807e 9857
+807f e3e4
+8084 e3e5
+8085 e3e7
+8086 e3e6
+8087 94a3
+8089 93f7
+808b 985d
+808c 94a7
+8093 e3e9
+8096 8fd1
+8098 9549
+809a e3ea
+809b e3e8
+809d 8acc
+80a1 8cd2
+80a2 8e88
+80a5 94ec
+80a9 8ca8
+80aa 9662
+80ac e3ed
+80ad e3eb
+80af 8d6d
+80b1 8d6e
+80b2 88e7
+80b4 8de6
+80ba 9478
+80c3 88dd
+80c4 e3f2
+80c6 925f
+80cc 9477
+80ce 91d9
+80d6 e3f4
+80d9 e3f0
+80da e3f3
+80db e3ee
+80dd e3f1
+80de 9645
+80e1 8cd3
+80e4 88fb
+80e5 e3ef
+80ef e3f6
+80f1 e3f7
+80f4 93b7
+80f8 8bb9
+80fc e445
+80fd 945c
+8102 8e89
+8105 8bba
+8106 90c6
+8107 9865
+8108 96ac
+8109 e3f5
+810a 90d2
+811a 8b72
+811b e3f8
+8123 e3fa
+8129 e3f9
+812f e3fb
+8131 9245
+8133 945d
+8139 92af
+813e e442
+8146 e441
+814b e3fc
+814e 9074
+8150 9585
+8151 e444
+8153 e443
+8154 8d6f
+8155 9872
+815f e454
+8165 e448
+8166 e449
+816b 8eee
+816e e447
+8170 8d98
+8171 e446
+8174 e44a
+8178 92b0
+8179 95a0
+817a 9142
+817f 91da
+8180 e44e
+8182 e44f
+8183 e44b
+8188 e44c
+818a e44d
+818f 8d70
+8193 e455
+8195 e451
+819a 9586
+819c 968c
+819d 9547
+81a0 e450
+81a3 e453
+81a4 e452
+81a8 9663
+81a9 e456
+81b0 e457
+81b3 9156
+81b5 e458
+81b8 e45a
+81ba e45e
+81bd e45b
+81be e459
+81bf 945e
+81c0 e45c
+81c2 e45d
+81c6 89b0
+81c8 e464
+81c9 e45f
+81cd e460
+81d1 e461
+81d3 919f
+81d8 e463
+81d9 e462
+81da e465
+81df e466
+81e0 e467
+81e3 9062
+81e5 89e7
+81e7 e468
+81e8 97d5
+81ea 8ea9
+81ed 8f4c
+81f3 8e8a
+81f4 9276
+81fa e469
+81fb e46a
+81fc 8950
+81fe e46b
+8201 e46c
+8202 e46d
+8205 e46e
+8207 e46f
+8208 8bbb
+8209 9da8
+820a e470
+820c 90e3
+820d e471
+820e 8ec9
+8210 e472
+8212 98ae
+8216 e473
+8217 95dc
+8218 8ada
+821b 9143
+821c 8f77
+821e 9591
+821f 8f4d
+8229 e474
+822a 8d71
+822b e475
+822c 94ca
+822e e484
+8233 e477
+8235 91c7
+8236 9495
+8237 8cbd
+8238 e476
+8239 9144
+8240 e478
+8247 92f8
+8258 e47a
+8259 e479
+825a e47c
+825d e47b
+825f e47d
+8262 e480
+8264 e47e
+8266 8acd
+8268 e481
+826a e482
+826b e483
+826e 8daf
+826f 97c7
+8271 e485
+8272 9046
+8276 8990
+8277 e486
+8278 e487
+827e e488
+828b 88f0
+828d e489
+8292 e48a
+8299 9587
+829d 8ec5
+829f e48c
+82a5 8a48
+82a6 88b0
+82ab e48b
+82ac e48e
+82ad 946d
+82af 9063
+82b1 89d4
+82b3 9646
+82b8 8c7c
+82b9 8bda
+82bb e48d
+82bd 89e8
+82c5 8aa1
+82d1 8991
+82d2 e492
+82d3 97e8
+82d4 91db
+82d7 9563
+82d9 e49e
+82db 89d5
+82dc e49c
+82de e49a
+82df e491
+82e1 e48f
+82e3 e490
+82e5 8ee1
+82e6 8bea
+82e7 9297
+82eb 93cf
+82f1 8970
+82f3 e494
+82f4 e493
+82f9 e499
+82fa e495
+82fb e498
+8302 96ce
+8303 e497
+8304 89d6
+8305 8a9d
+8306 e49b
+8309 e49d
+830e 8c73
+8316 e4a1
+8317 e4aa
+8318 e4ab
+831c 88a9
+8323 e4b2
+8328 88ef
+832b e4a9
+832f e4a8
+8331 e4a3
+8332 e4a2
+8334 e4a0
+8335 e49f
+8336 9283
+8338 91f9
+8339 e4a5
+8340 e4a4
+8345 e4a7
+8349 9190
+834a 8c74
+834f 8960
+8350 e4a6
+8352 8d72
+8358 9191
+8373 e4b8
+8375 e4b9
+8377 89d7
+837b 89ac
+837c e4b6
+8385 e4ac
+8387 e4b4
+8389 e4bb
+838a e4b5
+838e e4b3
+8393 e496
+8396 e4b1
+839a e4ad
+839e 8ace
+839f e4af
+83a0 e4ba
+83a2 e4b0
+83a8 e4bc
+83aa e4ae
+83ab 949c
+83b1 9789
+83b5 e4b7
+83bd e4cd
+83c1 e4c5
+83c5 909b
+83ca 8b65
+83cc 8bdb
+83ce e4c0
+83d3 89d9
+83d6 8fd2
+83d8 e4c3
+83dc 8dd8
+83df 9370
+83e0 e4c8
+83e9 95ec
+83eb e4bf
+83ef 89d8
+83f0 8cd4
+83f1 9548
+83f2 e4c9
+83f4 e4bd
+83f7 e4c6
+83fb e4d0
+83fd e4c1
+8403 e4c2
+8404 93b8
+8407 e4c7
+840b e4c4
+840c 9647
+840d e4ca
+840e 88de
+8413 e4be
+8420 e4cc
+8422 e4cb
+8429 948b
+842a e4d2
+842c e4dd
+8431 8a9e
+8435 e4e0
+8438 e4ce
+843c e4d3
+843d 978e
+8446 e4dc
+8449 9774
+844e 97a8
+8457 9298
+845b 8a8b
+8461 9592
+8462 e4e2
+8463 939f
+8466 88af
+8469 e4db
+846b e4d7
+846c 9192
+846d e4d1
+846e e4d9
+846f e4de
+8471 944b
+8475 88a8
+8477 e4d6
+8479 e4df
+847a 9598
+8482 e4da
+8484 e4d5
+848b 8fd3
+8490 8f4e
+8494 8eaa
+8499 96d6
+849c 9566
+849f e4e5
+84a1 e4ee
+84ad e4d8
+84b2 8a97
+84b8 8ff6
+84b9 e4e3
+84bb e4e8
+84bc 9193
+84bf e4e4
+84c1 e4eb
+84c4 927e
+84c6 e4ec
+84c9 9775
+84ca e4e1
+84cb 8a57
+84cd e4e7
+84d0 e4ea
+84d1 96aa
+84d6 e4ed
+84d9 e4e6
+84da e4e9
+84ec 9648
+84ee 9840
+84f4 e4f1
+84fc e4f8
+84ff e4f0
+8500 8ec1
+8506 e4cf
+8511 95cc
+8513 96a0
+8514 e4f7
+8515 e4f6
+8517 e4f2
+8518 e4f3
+851a 8955
+851f e4f5
+8521 e4ef
+8526 92d3
+852c e4f4
+852d 88fc
+8535 91a0
+853d 95c1
+8540 e4f9
+8541 e540
+8543 94d7
+8548 e4fc
+8549 8fd4
+854a 8ec7
+854b e542
+854e 8bbc
+8555 e543
+8557 9599
+8558 e4fb
+855a e4d4
+8563 e4fa
+8568 986e
+8569 93a0
+856a 9593
+856d e54a
+8577 e550
+857e e551
+8580 e544
+8584 9496
+8587 e54e
+8588 e546
+858a e548
+8590 e552
+8591 e547
+8594 e54b
+8597 8992
+8599 93e3
+859b e54c
+859c e54f
+85a4 e545
+85a6 9145
+85a8 e549
+85a9 8e46
+85aa 9064
+85ab 8c4f
+85ac 96f2
+85ae 96f7
+85af 8f92
+85b9 e556
+85ba e554
+85c1 986d
+85c9 e553
+85cd 9795
+85cf e555
+85d0 e557
+85d5 e558
+85dc e55b
+85dd e559
+85e4 93a1
+85e5 e55a
+85e9 94cb
+85ea e54d
+85f7 8f93
+85f9 e55c
+85fa e561
+85fb 9194
+85fe e560
+8602 e541
+8606 e562
+8607 9168
+860a e55d
+860b e55f
+8613 e55e
+8616 9f50
+8617 9f41
+861a e564
+8622 e563
+862d 9796
+862f e1ba
+8630 e565
+863f e566
+864d e567
+864e 8cd5
+8650 8b73
+8654 e569
+8655 997c
+865a 8b95
+865c 97b8
+865e 8bf1
+865f e56a
+8667 e56b
+866b 928e
+8671 e56c
+8679 93f8
+867b 88b8
+868a 89e1
+868b e571
+868c e572
+8693 e56d
+8695 8e5c
+86a3 e56e
+86a4 9461
+86a9 e56f
+86aa e570
+86ab e57a
+86af e574
+86b0 e577
+86b6 e573
+86c4 e575
+86c6 e576
+86c7 8ed6
+86c9 e578
+86cb 9260
+86cd 8c75
+86ce 8a61
+86d4 e57b
+86d9 8a5e
+86db e581
+86de e57c
+86df e580
+86e4 94b8
+86e9 e57d
+86ec e57e
+86ed 9567
+86ee 94d8
+86ef e582
+86f8 91fb
+86f9 e58c
+86fb e588
+86fe 89e9
+8700 e586
+8702 9649
+8703 e587
+8706 e584
+8708 e585
+8709 e58a
+870a e58d
+870d e58b
+8711 e589
+8712 e583
+8718 9277
+871a e594
+871c 96a8
+8725 e592
+8729 e593
+8734 e58e
+8737 e590
+873b e591
+873f e58f
+8749 90e4
+874b 9858
+874c e598
+874e e599
+8753 e59f
+8755 9049
+8757 e59b
+8759 e59e
+875f e596
+8760 e595
+8763 e5a0
+8766 89da
+8768 e59c
+876a e5a1
+876e e59d
+8774 e59a
+8776 92b1
+8778 e597
+877f 9488
+8782 e5a5
+878d 975a
+879f e5a4
+87a2 e5a3
+87ab e5ac
+87af e5a6
+87b3 e5ae
+87ba 9786
+87bb e5b1
+87bd e5a8
+87c0 e5a9
+87c4 e5ad
+87c6 e5b0
+87c7 e5af
+87cb e5a7
+87d0 e5aa
+87d2 e5bb
+87e0 e5b4
+87ef e5b2
+87f2 e5b3
+87f6 e5b8
+87f7 e5b9
+87f9 8a49
+87fb 8b61
+87fe e5b7
+8805 e5a2
+880d e5b6
+880e e5ba
+880f e5b5
+8811 e5bc
+8815 e5be
+8816 e5bd
+8821 e5c0
+8822 e5bf
+8823 e579
+8827 e5c4
+8831 e5c1
+8836 e5c2
+8839 e5c3
+883b e5c5
+8840 8c8c
+8842 e5c7
+8844 e5c6
+8846 8f4f
+884c 8d73
+884d 9fa5
+8852 e5c8
+8853 8f70
+8857 8a58
+8859 e5c9
+885b 8971
+885d 8fd5
+885e e5ca
+8861 8d74
+8862 e5cb
+8863 88df
+8868 955c
+886b e5cc
+8870 908a
+8872 e5d3
+8875 e5d0
+8877 928f
+887d e5d1
+887e e5ce
+887f 8bdc
+8881 e5cd
+8882 e5d4
+8888 8c55
+888b 91dc
+888d e5da
+8892 e5d6
+8896 91b3
+8897 e5d5
+8899 e5d8
+889e e5cf
+88a2 e5d9
+88a4 e5db
+88ab 94ed
+88ae e5d7
+88b0 e5dc
+88b1 e5de
+88b4 8cd1
+88b5 e5d2
+88b7 88bf
+88bf e5dd
+88c1 8dd9
+88c2 97f4
+88c3 e5df
+88c4 e5e0
+88c5 9195
+88cf 97a0
+88d4 e5e1
+88d5 9754
+88d8 e5e2
+88d9 e5e3
+88dc 95e2
+88dd e5e4
+88df 8dbe
+88e1 97a1
+88e8 e5e9
+88f2 e5ea
+88f3 8fd6
+88f4 e5e8
+88f8 9787
+88f9 e5e5
+88fc e5e7
+88fd 90bb
+88fe 909e
+8902 e5e6
+8904 e5eb
+8907 95a1
+890a e5ed
+890c e5ec
+8910 8a8c
+8912 964a
+8913 e5ee
+891d e5fa
+891e e5f0
+8925 e5f1
+892a e5f2
+892b e5f3
+8936 e5f7
+8938 e5f8
+893b e5f6
+8941 e5f4
+8943 e5ef
+8944 e5f5
+894c e5f9
+894d e8b5
+8956 89a6
+895e e5fc
+895f 8bdd
+8960 e5fb
+8964 e641
+8966 e640
+896a e643
+896d e642
+896f e644
+8972 8f50
+8974 e645
+8977 e646
+897e e647
+897f 90bc
+8981 9776
+8983 e648
+8986 95a2
+8987 9465
+8988 e649
+898a e64a
+898b 8ca9
+898f 8b4b
+8993 e64b
+8996 8e8b
+8997 9460
+8998 e64c
+899a 8a6f
+89a1 e64d
+89a6 e64f
+89a7 9797
+89a9 e64e
+89aa 9065
+89ac e650
+89af e651
+89b2 e652
+89b3 8acf
+89ba e653
+89bd e654
+89bf e655
+89c0 e656
+89d2 8a70
+89da e657
+89dc e658
+89dd e659
+89e3 89f0
+89e6 9047
+89e7 e65a
+89f4 e65b
+89f8 e65c
+8a00 8cbe
+8a02 92f9
+8a03 e65d
+8a08 8c76
+8a0a 9075
+8a0c e660
+8a0e 93a2
+8a10 e65f
+8a13 8c50
+8a16 e65e
+8a17 91f5
+8a18 8b4c
+8a1b e661
+8a1d e662
+8a1f 8fd7
+8a23 8c8d
+8a25 e663
+8a2a 964b
+8a2d 90dd
+8a31 8b96
+8a33 96f3
+8a34 9169
+8a36 e664
+8a3a 9066
+8a3b 9290
+8a3c 8fd8
+8a41 e665
+8a46 e668
+8a48 e669
+8a50 8dbc
+8a51 91c0
+8a52 e667
+8a54 8fd9
+8a55 955d
+8a5b e666
+8a5e 8e8c
+8a60 8972
+8a62 e66d
+8a63 8c77
+8a66 8e8e
+8a69 8e8d
+8a6b 986c
+8a6c e66c
+8a6d e66b
+8a6e 9146
+8a70 8b6c
+8a71 9862
+8a72 8a59
+8a73 8fda
+8a7c e66a
+8a82 e66f
+8a84 e670
+8a85 e66e
+8a87 8cd6
+8a89 975f
+8a8c 8e8f
+8a8d 9446
+8a91 e673
+8a93 90be
+8a95 9261
+8a98 9755
+8a9a e676
+8a9e 8cea
+8aa0 90bd
+8aa1 e672
+8aa3 e677
+8aa4 8ceb
+8aa5 e674
+8aa6 e675
+8aa8 e671
+8aac 90e0
+8aad 93c7
+8ab0 924e
+8ab2 89db
+8ab9 94ee
+8abc 8b62
+8abf 92b2
+8ac2 e67a
+8ac4 e678
+8ac7 926b
+8acb 90bf
+8acc 8ad0
+8acd e679
+8acf 907a
+8ad2 97c8
+8ad6 985f
+8ada e67b
+8adb e687
+8adc 92b3
+8ade e686
+8ae0 e683
+8ae1 e68b
+8ae2 e684
+8ae4 e680
+8ae6 92fa
+8ae7 e67e
+8aeb e67c
+8aed 9740
+8aee 8e90
+8af1 e681
+8af3 e67d
+8af7 e685
+8af8 8f94
+8afa 8cbf
+8afe 91f8
+8b00 9664
+8b01 8979
+8b02 88e0
+8b04 93a3
+8b07 e689
+8b0c e688
+8b0e 93e4
+8b10 e68d
+8b14 e682
+8b16 e68c
+8b17 e68e
+8b19 8caa
+8b1a e68a
+8b1b 8d75
+8b1d 8ed3
+8b20 e68f
+8b21 9777
+8b26 e692
+8b28 e695
+8b2b e693
+8b2c 9554
+8b33 e690
+8b39 8bde
+8b3e e694
+8b41 e696
+8b49 e69a
+8b4c e697
+8b4e e699
+8b4f e698
+8b56 e69b
+8b58 8eaf
+8b5a e69d
+8b5b e69c
+8b5c 9588
+8b5f e69f
+8b66 8c78
+8b6b e69e
+8b6c e6a0
+8b6f e6a1
+8b70 8b63
+8b71 e3bf
+8b72 8ff7
+8b74 e6a2
+8b77 8cec
+8b7d e6a3
+8b80 e6a4
+8b83 8e5d
+8b8a 9dcc
+8b8c e6a5
+8b8e e6a6
+8b90 8f51
+8b92 e6a7
+8b93 e6a8
+8b96 e6a9
+8b99 e6aa
+8b9a e6ab
+8c37 924a
+8c3a e6ac
+8c3f e6ae
+8c41 e6ad
+8c46 93a4
+8c48 e6af
+8c4a 964c
+8c4c e6b0
+8c4e e6b1
+8c50 e6b2
+8c55 e6b3
+8c5a 93d8
+8c61 8fdb
+8c62 e6b4
+8c6a 8d8b
+8c6b 98ac
+8c6c e6b5
+8c78 e6b6
+8c79 955e
+8c7a e6b7
+8c7c e6bf
+8c82 e6b8
+8c85 e6ba
+8c89 e6b9
+8c8a e6bb
+8c8c 9665
+8c8d e6bc
+8c8e e6bd
+8c94 e6be
+8c98 e6c0
+8c9d 8a4c
+8c9e 92e5
+8ca0 9589
+8ca1 8de0
+8ca2 8d76
+8ca7 956e
+8ca8 89dd
+8ca9 94cc
+8caa e6c3
+8cab 8ad1
+8cac 90d3
+8cad e6c2
+8cae e6c7
+8caf 9299
+8cb0 96e1
+8cb2 e6c5
+8cb3 e6c6
+8cb4 8b4d
+8cb6 e6c8
+8cb7 9483
+8cb8 91dd
+8cbb 94ef
+8cbc 935c
+8cbd e6c4
+8cbf 9666
+8cc0 89ea
+8cc1 e6ca
+8cc2 9847
+8cc3 92c0
+8cc4 9864
+8cc7 8e91
+8cc8 e6c9
+8cca 91af
+8ccd e6da
+8cce 9147
+8cd1 93f6
+8cd3 956f
+8cda e6cd
+8cdb 8e5e
+8cdc 8e92
+8cde 8fdc
+8ce0 9485
+8ce2 8cab
+8ce3 e6cc
+8ce4 e6cb
+8ce6 958a
+8cea 8ebf
+8ced 9371
+8cfa e6cf
+8cfb e6d0
+8cfc 8d77
+8cfd e6ce
+8d04 e6d1
+8d05 e6d2
+8d07 e6d4
+8d08 91a1
+8d0a e6d3
+8d0b 8ae4
+8d0d e6d6
+8d0f e6d5
+8d10 e6d7
+8d13 e6d9
+8d14 e6db
+8d16 e6dc
+8d64 90d4
+8d66 8ecd
+8d67 e6dd
+8d6b 8a71
+8d6d e6de
+8d70 9196
+8d71 e6df
+8d73 e6e0
+8d74 958b
+8d77 8b4e
+8d81 e6e1
+8d85 92b4
+8d8a 897a
+8d99 e6e2
+8da3 8eef
+8da8 9096
+8db3 91ab
+8dba e6e5
+8dbe e6e4
+8dc2 e6e3
+8dcb e6eb
+8dcc e6e9
+8dcf e6e6
+8dd6 e6e8
+8dda e6e7
+8ddb e6ea
+8ddd 8b97
+8ddf e6ee
+8de1 90d5
+8de3 e6ef
+8de8 8cd7
+8dea e6ec
+8deb e6ed
+8def 9848
+8df3 92b5
+8df5 9148
+8dfc e6f0
+8dff e6f3
+8e08 e6f1
+8e09 e6f2
+8e0a 9778
+8e0f 93a5
+8e10 e6f6
+8e1d e6f4
+8e1e e6f5
+8e1f e6f7
+8e2a e748
+8e30 e6fa
+8e34 e6fb
+8e35 e6f9
+8e42 e6f8
+8e44 92fb
+8e47 e740
+8e48 e744
+8e49 e741
+8e4a e6fc
+8e4c e742
+8e50 e743
+8e55 e74a
+8e59 e745
+8e5f 90d6
+8e60 e747
+8e63 e749
+8e64 e746
+8e72 e74c
+8e74 8f52
+8e76 e74b
+8e7c e74d
+8e81 e74e
+8e84 e751
+8e85 e750
+8e87 e74f
+8e8a e753
+8e8b e752
+8e8d 96f4
+8e91 e755
+8e93 e754
+8e94 e756
+8e99 e757
+8ea1 e759
+8eaa e758
+8eab 9067
+8eac e75a
+8eaf 8beb
+8eb0 e75b
+8eb1 e75d
+8ebe e75e
+8ec5 e75f
+8ec6 e75c
+8ec8 e760
+8eca 8ed4
+8ecb e761
+8ecc 8b4f
+8ecd 8c52
+8ed2 8cac
+8edb e762
+8edf 93ee
+8ee2 935d
+8ee3 e763
+8eeb e766
+8ef8 8eb2
+8efb e765
+8efc e764
+8efd 8c79
+8efe e767
+8f03 8a72
+8f05 e769
+8f09 8dda
+8f0a e768
+8f0c e771
+8f12 e76b
+8f13 e76d
+8f14 95e3
+8f15 e76a
+8f19 e76c
+8f1b e770
+8f1c e76e
+8f1d 8b50
+8f1f e76f
+8f26 e772
+8f29 9479
+8f2a 97d6
+8f2f 8f53
+8f33 e773
+8f38 9741
+8f39 e775
+8f3b e774
+8f3e e778
+8f3f 9760
+8f42 e777
+8f44 8a8d
+8f45 e776
+8f46 e77b
+8f49 e77a
+8f4c e779
+8f4d 9351
+8f4e e77c
+8f57 e77d
+8f5c e77e
+8f5f 8d8c
+8f61 8c44
+8f62 e780
+8f63 e781
+8f64 e782
+8f9b 9068
+8f9c e783
+8f9e 8eab
+8f9f e784
+8fa3 e785
+8fa7 999f
+8fa8 999e
+8fad e786
+8fae e390
+8faf e787
+8fb0 9243
+8fb1 904a
+8fb2 945f
+8fb7 e788
+8fba 95d3
+8fbb 92d2
+8fbc 8d9e
+8fbf 9248
+8fc2 8949
+8fc4 9698
+8fc5 9076
+8fce 8c7d
+8fd1 8bdf
+8fd4 95d4
+8fda e789
+8fe2 e78b
+8fe5 e78a
+8fe6 89de
+8fe9 93f4
+8fea e78c
+8feb 9497
+8fed 9352
+8fef e78d
+8ff0 8f71
+8ff4 e78f
+8ff7 96c0
+8ff8 e79e
+8ff9 e791
+8ffa e792
+8ffd 92c7
+9000 91de
+9001 9197
+9003 93a6
+9005 e790
+9006 8b74
+900b e799
+900d e796
+900e e7a3
+900f 93a7
+9010 9280
+9011 e793
+9013 92fc
+9014 9372
+9015 e794
+9016 e798
+9017 9080
+9019 9487
+901a 92ca
+901d 90c0
+901e e797
+901f 91ac
+9020 91a2
+9021 e795
+9022 88a7
+9023 9841
+9027 e79a
+902e 91df
+9031 8f54
+9032 9069
+9035 e79c
+9036 e79b
+9038 88ed
+9039 e79d
+903c 954e
+903e e7a5
+9041 93d9
+9042 908b
+9045 9278
+9047 8bf6
+9049 e7a4
+904a 9756
+904b 895e
+904d 95d5
+904e 89df
+904f e79f
+9050 e7a0
+9051 e7a1
+9052 e7a2
+9053 93b9
+9054 9242
+9055 88e1
+9056 e7a6
+9058 e7a7
+9059 eaa1
+905c 91bb
+905e e7a8
+9060 8993
+9061 916b
+9063 8cad
+9065 9779
+9068 e7a9
+9069 934b
+906d 9198
+906e 8ed5
+906f e7aa
+9072 e7ad
+9075 8f85
+9076 e7ab
+9077 914a
+9078 9149
+907a 88e2
+907c 97c9
+907d e7af
+907f 94f0
+9080 e7b1
+9081 e7b0
+9082 e7ae
+9083 e284
+9084 8ad2
+9087 e78e
+9089 e7b3
+908a e7b2
+908f e7b4
+9091 9757
+90a3 93df
+90a6 964d
+90a8 e7b5
+90aa 8ed7
+90af e7b6
+90b1 e7b7
+90b5 e7b8
+90b8 9340
+90c1 88e8
+90ca 8d78
+90ce 9859
+90db e7bc
+90e1 8c53
+90e2 e7b9
+90e4 e7ba
+90e8 9594
+90ed 8a73
+90f5 9758
+90f7 8bbd
+90fd 9373
+9102 e7bd
+9112 e7be
+9119 e7bf
+912d 9341
+9130 e7c1
+9132 e7c0
+9149 93d1
+914a e7c2
+914b 8f55
+914c 8ede
+914d 947a
+914e 9291
+9152 8ef0
+9154 908c
+9156 e7c3
+9158 e7c4
+9162 907c
+9163 e7c5
+9165 e7c6
+9169 e7c7
+916a 978f
+916c 8f56
+9172 e7c9
+9173 e7c8
+9175 8d79
+9177 8d93
+9178 8e5f
+9182 e7cc
+9187 8f86
+9189 e7cb
+918b e7ca
+918d 91e7
+9190 8ced
+9192 90c1
+9197 94ae
+919c 8f58
+91a2 e7cd
+91a4 8fdd
+91aa e7d0
+91ab e7ce
+91af e7cf
+91b4 e7d2
+91b5 e7d1
+91b8 8ff8
+91ba e7d3
+91c0 e7d4
+91c1 e7d5
+91c6 94ce
+91c7 8dd1
+91c8 8edf
+91c9 e7d6
+91cb e7d7
+91cc 97a2
+91cd 8f64
+91ce 96ec
+91cf 97ca
+91d0 e7d8
+91d1 8be0
+91d6 e7d9
+91d8 9342
+91db e7dc
+91dc 8a98
+91dd 906a
+91df e7da
+91e1 e7db
+91e3 92de
+91e6 9674
+91e7 8bfa
+91f5 e7de
+91f6 e7df
+91fc e7dd
+91ff e7e1
+920d 93dd
+920e 8a62
+9211 e7e5
+9214 e7e2
+9215 e7e4
+921e e7e0
+9229 e86e
+922c e7e3
+9234 97e9
+9237 8cd8
+923f e7ed
+9244 9353
+9245 e7e8
+9248 e7eb
+9249 e7e9
+924b e7ee
+9250 e7ef
+9257 e7e7
+925a e7f4
+925b 8994
+925e e7e6
+9262 94ab
+9264 e7ea
+9266 8fde
+9271 8d7a
+927e 9667
+9280 8be2
+9283 8f65
+9285 93ba
+9291 914c
+9293 e7f2
+9295 e7ec
+9296 e7f1
+9298 96c1
+929a 92b6
+929b e7f3
+929c e7f0
+92ad 914b
+92b7 e7f7
+92b9 e7f6
+92cf e7f5
+92d2 964e
+92e4 8f9b
+92e9 e7f8
+92ea 95dd
+92ed 8973
+92f2 9565
+92f3 9292
+92f8 8b98
+92fa e7fa
+92fc 8d7c
+9306 8e4b
+930f e7f9
+9310 908d
+9318 908e
+9319 e840
+931a e842
+9320 8ff9
+9322 e841
+9323 e843
+9326 8bd1
+9328 9564
+932b 8ee0
+932c 9842
+932e e7fc
+932f 8df6
+9332 985e
+9335 e845
+933a e844
+933b e846
+9344 e7fb
+934b 93e7
+934d 9374
+9354 92d5
+9356 e84b
+935b 9262
+935c e847
+9360 e848
+936c 8c4c
+936e e84a
+9375 8cae
+937c e849
+937e 8fdf
+938c 8a99
+9394 e84f
+9396 8dbd
+9397 9199
+939a 92c8
+93a7 8a5a
+93ac e84d
+93ad e84e
+93ae 92c1
+93b0 e84c
+93b9 e850
+93c3 e856
+93c8 e859
+93d0 e858
+93d1 934c
+93d6 e851
+93d7 e852
+93d8 e855
+93dd e857
+93e1 8bbe
+93e4 e85a
+93e5 e854
+93e8 e853
+9403 e85e
+9407 e85f
+9410 e860
+9413 e85d
+9414 e85c
+9418 8fe0
+9419 93a8
+941a e85b
+9421 e864
+942b e862
+9435 e863
+9436 e861
+9438 91f6
+943a e865
+9441 e866
+9444 e868
+9451 8ad3
+9452 e867
+9453 96f8
+945a e873
+945b e869
+945e e86c
+9460 e86a
+9462 e86b
+946a e86d
+9470 e86f
+9475 e870
+9477 e871
+947c e874
+947d e872
+947e e875
+947f e877
+9481 e876
+9577 92b7
+9580 96e5
+9582 e878
+9583 914d
+9587 e879
+9589 95c2
+958a e87a
+958b 8a4a
+958f 895b
+9591 8ad5
+9593 8ad4
+9594 e87b
+9596 e87c
+9598 e87d
+9599 e87e
+95a0 e880
+95a2 8ad6
+95a3 8a74
+95a4 8d7d
+95a5 94b4
+95a7 e882
+95a8 e881
+95ad e883
+95b2 897b
+95b9 e886
+95bb e885
+95bc e884
+95be e887
+95c3 e88a
+95c7 88c5
+95ca e888
+95cc e88c
+95cd e88b
+95d4 e88e
+95d5 e88d
+95d6 e88f
+95d8 93ac
+95dc e890
+95e1 e891
+95e2 e893
+95e5 e892
+961c 958c
+9621 e894
+9628 e895
+962a 8de3
+962e e896
+962f e897
+9632 9668
+963b 916a
+963f 88a2
+9640 91c9
+9642 e898
+9644 958d
+964b e89b
+964c e899
+964d 8d7e
+964f e89a
+9650 8cc0
+965b 95c3
+965c e89d
+965d e89f
+965e e89e
+965f e8a0
+9662 8940
+9663 9077
+9664 8f9c
+9665 8ad7
+9666 e8a1
+966a 9486
+966c e8a3
+9670 8941
+9672 e8a2
+9673 92c2
+9675 97cb
+9676 93a9
+9677 e89c
+9678 97a4
+967a 8caf
+967d 977a
+9685 8bf7
+9686 97b2
+9688 8c47
+968a 91e0
+968b e440
+968d e8a4
+968e 8a4b
+968f 908f
+9694 8a75
+9695 e8a6
+9697 e8a7
+9698 e8a5
+9699 8c84
+969b 8ddb
+969c 8fe1
+96a0 8942
+96a3 97d7
+96a7 e8a9
+96a8 e7ac
+96aa e8a8
+96b0 e8ac
+96b1 e8aa
+96b2 e8ab
+96b4 e8ad
+96b6 e8ae
+96b7 97ea
+96b8 e8af
+96b9 e8b0
+96bb 90c7
+96bc 94b9
+96c0 909d
+96c1 8ae5
+96c4 9759
+96c5 89eb
+96c6 8f57
+96c7 8cd9
+96c9 e8b3
+96cb e8b2
+96cc 8e93
+96cd e8b4
+96ce e8b1
+96d1 8e47
+96d5 e8b8
+96d6 e5ab
+96d9 99d4
+96db 9097
+96dc e8b6
+96e2 97a3
+96e3 93ef
+96e8 894a
+96ea 90e1
+96eb 8eb4
+96f0 95b5
+96f2 895f
+96f6 97eb
+96f7 978b
+96f9 e8b9
+96fb 9364
+9700 8ef9
+9704 e8ba
+9706 e8bb
+9707 906b
+9708 e8bc
+970a 97ec
+970d e8b7
+970e e8be
+970f e8c0
+9711 e8bf
+9713 e8bd
+9716 e8c1
+9719 e8c2
+971c 919a
+971e 89e0
+9724 e8c3
+9727 96b6
+972a e8c4
+9730 e8c5
+9732 9849
+9738 9e50
+9739 e8c6
+973d e8c7
+973e e8c8
+9742 e8cc
+9744 e8c9
+9746 e8ca
+9748 e8cb
+9749 e8cd
+9752 90c2
+9756 96f5
+9759 90c3
+975c e8ce
+975e 94f1
+9760 e8cf
+9761 ea72
+9762 96ca
+9764 e8d0
+9766 e8d1
+9768 e8d2
+9769 8a76
+976b e8d4
+976d 9078
+9771 e8d5
+9774 8c43
+9779 e8d6
+977a e8da
+977c e8d8
+9781 e8d9
+9784 8a93
+9785 e8d7
+9786 e8db
+978b e8dc
+978d 88c6
+978f e8dd
+9790 e8de
+9798 8fe2
+979c e8df
+97a0 8b66
+97a3 e8e2
+97a6 e8e1
+97a8 e8e0
+97ab e691
+97ad 95da
+97b3 e8e3
+97b4 e8e4
+97c3 e8e5
+97c6 e8e6
+97c8 e8e7
+97cb e8e8
+97d3 8ad8
+97dc e8e9
+97ed e8ea
+97ee 9442
+97f2 e8ec
+97f3 89b9
+97f5 e8ef
+97f6 e8ee
+97fb 8943
+97ff 8bbf
+9801 95c5
+9802 92b8
+9803 8da0
+9805 8d80
+9806 8f87
+9808 907b
+980c e8f1
+980f e8f0
+9810 9761
+9811 8ae6
+9812 94d0
+9813 93da
+9817 909c
+9818 97cc
+981a 8c7a
+9821 e8f4
+9824 e8f3
+982c 966a
+982d 93aa
+9834 896f
+9837 e8f5
+9838 e8f2
+983b 9570
+983c 978a
+983d e8f6
+9846 e8f7
+984b e8f9
+984c 91e8
+984d 8a7a
+984e 8a7b
+984f e8f8
+9854 8ae7
+9855 8cb0
+9858 8ae8
+985b 935e
+985e 97de
+9867 8cda
+986b e8fa
+986f e8fb
+9870 e8fc
+9871 e940
+9873 e942
+9874 e941
+98a8 9597
+98aa e943
+98af e944
+98b1 e945
+98b6 e946
+98c3 e948
+98c4 e947
+98c6 e949
+98db 94f2
+98dc e3ca
+98df 9048
+98e2 8b51
+98e9 e94a
+98eb e94b
+98ed 99aa
+98ee 9f5a
+98ef 94d1
+98f2 88f9
+98f4 88b9
+98fc 8e94
+98fd 964f
+98fe 8ffc
+9903 e94c
+9905 96dd
+9909 e94d
+990a 977b
+990c 8961
+9910 8e60
+9912 e94e
+9913 89ec
+9914 e94f
+9918 e950
+991d e952
+991e e953
+9920 e955
+9921 e951
+9924 e954
+9928 8ad9
+992c e956
+992e e957
+993d e958
+993e e959
+9942 e95a
+9945 e95c
+9949 e95b
+994b e95e
+994c e961
+9950 e95d
+9951 e95f
+9952 e960
+9955 e962
+9957 8bc0
+9996 8ef1
+9997 e963
+9998 e964
+9999 8d81
+99a5 e965
+99a8 8a5d
+99ac 946e
+99ad e966
+99ae e967
+99b3 9279
+99b4 93e9
+99bc e968
+99c1 949d
+99c4 91ca
+99c5 8977
+99c6 8bec
+99c8 8bed
+99d0 9293
+99d1 e96d
+99d2 8bee
+99d5 89ed
+99d8 e96c
+99db e96a
+99dd e96b
+99df e969
+99e2 e977
+99ed e96e
+99ee e96f
+99f1 e970
+99f2 e971
+99f8 e973
+99fb e972
+99ff 8f78
+9a01 e974
+9a05 e976
+9a0e 8b52
+9a0f e975
+9a12 919b
+9a13 8cb1
+9a19 e978
+9a28 91cb
+9a2b e979
+9a30 93ab
+9a37 e97a
+9a3e e980
+9a40 e97d
+9a42 e97c
+9a43 e97e
+9a45 e97b
+9a4d e982
+9a55 e981
+9a57 e984
+9a5a 8bc1
+9a5b e983
+9a5f e985
+9a62 e986
+9a64 e988
+9a65 e987
+9a69 e989
+9a6a e98b
+9a6b e98a
+9aa8 8d9c
+9aad e98c
+9ab0 e98d
+9ab8 8a5b
+9abc e98e
+9ac0 e98f
+9ac4 9091
+9acf e990
+9ad1 e991
+9ad3 e992
+9ad4 e993
+9ad8 8d82
+9ade e994
+9adf e995
+9ae2 e996
+9ae3 e997
+9ae6 e998
+9aea 94af
+9aeb e99a
+9aed 9545
+9aee e99b
+9aef e999
+9af1 e99d
+9af4 e99c
+9af7 e99e
+9afb e99f
+9b06 e9a0
+9b18 e9a1
+9b1a e9a2
+9b1f e9a3
+9b22 e9a4
+9b23 e9a5
+9b25 e9a6
+9b27 e9a7
+9b28 e9a8
+9b29 e9a9
+9b2a e9aa
+9b2e e9ab
+9b2f e9ac
+9b31 9f54
+9b32 e9ad
+9b3b e2f6
+9b3c 8b53
+9b41 8a40
+9b42 8db0
+9b43 e9af
+9b44 e9ae
+9b45 96a3
+9b4d e9b1
+9b4e e9b2
+9b4f e9b0
+9b51 e9b3
+9b54 9682
+9b58 e9b4
+9b5a 8b9b
+9b6f 9844
+9b74 e9b5
+9b83 e9b7
+9b8e 88bc
+9b91 e9b8
+9b92 95a9
+9b93 e9b6
+9b96 e9b9
+9b97 e9ba
+9b9f e9bb
+9ba0 e9bc
+9ba8 e9bd
+9baa 968e
+9bab 8e4c
+9bad 8df8
+9bae 914e
+9bb4 e9be
+9bb9 e9c1
+9bc0 e9bf
+9bc6 e9c2
+9bc9 8cef
+9bca e9c0
+9bcf e9c3
+9bd1 e9c4
+9bd2 e9c5
+9bd4 e9c9
+9bd6 8e49
+9bdb 91e2
+9be1 e9ca
+9be2 e9c7
+9be3 e9c6
+9be4 e9c8
+9be8 8c7e
+9bf0 e9ce
+9bf1 e9cd
+9bf2 e9cc
+9bf5 88b1
+9c04 e9d8
+9c06 e9d4
+9c08 e9d5
+9c09 e9d1
+9c0a e9d7
+9c0c e9d3
+9c0d 8a82
+9c10 986b
+9c12 e9d6
+9c13 e9d2
+9c14 e9d0
+9c15 e9cf
+9c1b e9da
+9c21 e9dd
+9c24 e9dc
+9c25 e9db
+9c2d 9568
+9c2e e9d9
+9c2f 88f1
+9c30 e9de
+9c32 e9e0
+9c39 8a8f
+9c3a e9cb
+9c3b 8956
+9c3e e9e2
+9c46 e9e1
+9c47 e9df
+9c48 924c
+9c52 9690
+9c57 97d8
+9c5a e9e3
+9c60 e9e4
+9c67 e9e5
+9c76 e9e6
+9c78 e9e7
+9ce5 92b9
+9ce7 e9e8
+9ce9 94b5
+9ceb e9ed
+9cec e9e9
+9cf0 e9ea
+9cf3 9650
+9cf4 96c2
+9cf6 93ce
+9d03 e9ee
+9d06 e9ef
+9d07 93bc
+9d08 e9ec
+9d09 e9eb
+9d0e 89a8
+9d12 e9f7
+9d15 e9f6
+9d1b 8995
+9d1f e9f4
+9d23 e9f3
+9d26 e9f1
+9d28 8a9b
+9d2a e9f0
+9d2b 8eb0
+9d2c 89a7
+9d3b 8d83
+9d3e e9fa
+9d3f e9f9
+9d41 e9f8
+9d44 e9f5
+9d46 e9fb
+9d48 e9fc
+9d50 ea44
+9d51 ea43
+9d59 ea45
+9d5c 894c
+9d5d ea40
+9d5e ea41
+9d60 8d94
+9d61 96b7
+9d64 ea42
+9d6c 9651
+9d6f ea4a
+9d72 ea46
+9d7a ea4b
+9d87 ea48
+9d89 ea47
+9d8f 8c7b
+9d9a ea4c
+9da4 ea4d
+9da9 ea4e
+9dab ea49
+9daf e9f2
+9db2 ea4f
+9db4 92df
+9db8 ea53
+9dba ea54
+9dbb ea52
+9dc1 ea51
+9dc2 ea57
+9dc4 ea50
+9dc6 ea55
+9dcf ea56
+9dd3 ea59
+9dd9 ea58
+9de6 ea5b
+9ded ea5c
+9def ea5d
+9df2 9868
+9df8 ea5a
+9df9 91e9
+9dfa 8deb
+9dfd ea5e
+9e1a ea5f
+9e1b ea60
+9e1e ea61
+9e75 ea62
+9e78 8cb2
+9e79 ea63
+9e7d ea64
+9e7f 8ead
+9e81 ea65
+9e88 ea66
+9e8b ea67
+9e8c ea68
+9e91 ea6b
+9e92 ea69
+9e93 985b
+9e95 ea6a
+9e97 97ed
+9e9d ea6c
+9e9f 97d9
+9ea5 ea6d
+9ea6 949e
+9ea9 ea6e
+9eaa ea70
+9ead ea71
+9eb8 ea6f
+9eb9 8d8d
+9eba 96cb
+9ebb 9683
+9ebc 9bf5
+9ebe 9f80
+9ebf 969b
+9ec4 89a9
+9ecc ea73
+9ecd 8b6f
+9ece ea74
+9ecf ea75
+9ed0 ea76
+9ed2 8d95
+9ed4 ea77
+9ed8 e0d2
+9ed9 96d9
+9edb 91e1
+9edc ea78
+9edd ea7a
+9ede ea79
+9ee0 ea7b
+9ee5 ea7c
+9ee8 ea7d
+9eef ea7e
+9ef4 ea80
+9ef6 ea81
+9ef7 ea82
+9ef9 ea83
+9efb ea84
+9efc ea85
+9efd ea86
+9f07 ea87
+9f08 ea88
+9f0e 9343
+9f13 8cdb
+9f15 ea8a
+9f20 916c
+9f21 ea8b
+9f2c ea8c
+9f3b 9540
+9f3e ea8d
+9f4a ea8e
+9f4b e256
+9f4e e6d8
+9f4f e8eb
+9f52 ea8f
+9f54 ea90
+9f5f ea92
+9f60 ea93
+9f61 ea94
+9f62 97ee
+9f63 ea91
+9f66 ea95
+9f67 ea96
+9f6a ea98
+9f6c ea97
+9f72 ea9a
+9f76 ea9b
+9f77 ea99
+9f8d 97b4
+9f95 ea9c
+9f9c ea9d
+9f9d e273
+9fa0 ea9e
+ff01 8149
+ff03 8194
+ff04 8190
+ff05 8193
+ff06 8195
+ff08 8169
+ff09 816a
+ff0a 8196
+ff0b 817b
+ff0c 8143
+ff0e 8144
+ff0f 815e
+ff10 824f
+ff11 8250
+ff12 8251
+ff13 8252
+ff14 8253
+ff15 8254
+ff16 8255
+ff17 8256
+ff18 8257
+ff19 8258
+ff1a 8146
+ff1b 8147
+ff1c 8183
+ff1d 8181
+ff1e 8184
+ff1f 8148
+ff20 8197
+ff21 8260
+ff22 8261
+ff23 8262
+ff24 8263
+ff25 8264
+ff26 8265
+ff27 8266
+ff28 8267
+ff29 8268
+ff2a 8269
+ff2b 826a
+ff2c 826b
+ff2d 826c
+ff2e 826d
+ff2f 826e
+ff30 826f
+ff31 8270
+ff32 8271
+ff33 8272
+ff34 8273
+ff35 8274
+ff36 8275
+ff37 8276
+ff38 8277
+ff39 8278
+ff3a 8279
+ff3b 816d
+ff3c 815f
+ff3d 816e
+ff3e 814f
+ff3f 8151
+ff40 814d
+ff41 8281
+ff42 8282
+ff43 8283
+ff44 8284
+ff45 8285
+ff46 8286
+ff47 8287
+ff48 8288
+ff49 8289
+ff4a 828a
+ff4b 828b
+ff4c 828c
+ff4d 828d
+ff4e 828e
+ff4f 828f
+ff50 8290
+ff51 8291
+ff52 8292
+ff53 8293
+ff54 8294
+ff55 8295
+ff56 8296
+ff57 8297
+ff58 8298
+ff59 8299
+ff5a 829a
+ff5b 816f
+ff5c 8162
+ff5d 8170
+ff61 a1
+ff62 a2
+ff63 a3
+ff64 a4
+ff65 a5
+ff66 a6
+ff67 a7
+ff68 a8
+ff69 a9
+ff6a aa
+ff6b ab
+ff6c ac
+ff6d ad
+ff6e ae
+ff6f af
+ff70 b0
+ff71 b1
+ff72 b2
+ff73 b3
+ff74 b4
+ff75 b5
+ff76 b6
+ff77 b7
+ff78 b8
+ff79 b9
+ff7a ba
+ff7b bb
+ff7c bc
+ff7d bd
+ff7e be
+ff7f bf
+ff80 c0
+ff81 c1
+ff82 c2
+ff83 c3
+ff84 c4
+ff85 c5
+ff86 c6
+ff87 c7
+ff88 c8
+ff89 c9
+ff8a ca
+ff8b cb
+ff8c cc
+ff8d cd
+ff8e ce
+ff8f cf
+ff90 d0
+ff91 d1
+ff92 d2
+ff93 d3
+ff94 d4
+ff95 d5
+ff96 d6
+ff97 d7
+ff98 d8
+ff99 d9
+ff9a da
+ff9b db
+ff9c dc
+ff9d dd
+ff9e de
+ff9f df
+ffe3 8150
+ffe5 818f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/nio/charset/coders/ref.windows-31j	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,9409 @@
+0 00
+1 01
+2 02
+3 03
+4 04
+5 05
+6 06
+7 07
+8 08
+9 09
+a 0a
+b 0b
+c 0c
+d 0d
+e 0e
+f 0f
+10 10
+11 11
+12 12
+13 13
+14 14
+15 15
+16 16
+17 17
+18 18
+19 19
+1a 1a
+1b 1b
+1c 1c
+1d 1d
+1e 1e
+1f 1f
+20 20
+21 21
+22 22
+23 23
+24 24
+25 25
+26 26
+27 27
+28 28
+29 29
+2a 2a
+2b 2b
+2c 2c
+2d 2d
+2e 2e
+2f 2f
+30 30
+31 31
+32 32
+33 33
+34 34
+35 35
+36 36
+37 37
+38 38
+39 39
+3a 3a
+3b 3b
+3c 3c
+3d 3d
+3e 3e
+3f 3f
+40 40
+41 41
+42 42
+43 43
+44 44
+45 45
+46 46
+47 47
+48 48
+49 49
+4a 4a
+4b 4b
+4c 4c
+4d 4d
+4e 4e
+4f 4f
+50 50
+51 51
+52 52
+53 53
+54 54
+55 55
+56 56
+57 57
+58 58
+59 59
+5a 5a
+5b 5b
+5c 5c
+5d 5d
+5e 5e
+5f 5f
+60 60
+61 61
+62 62
+63 63
+64 64
+65 65
+66 66
+67 67
+68 68
+69 69
+6a 6a
+6b 6b
+6c 6c
+6d 6d
+6e 6e
+6f 6f
+70 70
+71 71
+72 72
+73 73
+74 74
+75 75
+76 76
+77 77
+78 78
+79 79
+7a 7a
+7b 7b
+7c 7c
+7d 7d
+7e 7e
+7f 7f
+#a2 8191
+#a3 8192
+#a5 5c
+a7 8198
+a8 814e
+#ab 81e1
+#ac 81ca
+#af 8150
+b0 818b
+b1 817d
+b4 814c
+#b5 83ca
+b6 81f7
+#b7 8145
+#b8 8143
+#bb 81e2
+d7 817e
+f7 8180
+391 839f
+392 83a0
+393 83a1
+394 83a2
+395 83a3
+396 83a4
+397 83a5
+398 83a6
+399 83a7
+39a 83a8
+39b 83a9
+39c 83aa
+39d 83ab
+39e 83ac
+39f 83ad
+3a0 83ae
+3a1 83af
+3a3 83b0
+3a4 83b1
+3a5 83b2
+3a6 83b3
+3a7 83b4
+3a8 83b5
+3a9 83b6
+3b1 83bf
+3b2 83c0
+3b3 83c1
+3b4 83c2
+3b5 83c3
+3b6 83c4
+3b7 83c5
+3b8 83c6
+3b9 83c7
+3ba 83c8
+3bb 83c9
+3bc 83ca
+3bd 83cb
+3be 83cc
+3bf 83cd
+3c0 83ce
+3c1 83cf
+3c3 83d0
+3c4 83d1
+3c5 83d2
+3c6 83d3
+3c7 83d4
+3c8 83d5
+3c9 83d6
+401 8446
+410 8440
+411 8441
+412 8442
+413 8443
+414 8444
+415 8445
+416 8447
+417 8448
+418 8449
+419 844a
+41a 844b
+41b 844c
+41c 844d
+41d 844e
+41e 844f
+41f 8450
+420 8451
+421 8452
+422 8453
+423 8454
+424 8455
+425 8456
+426 8457
+427 8458
+428 8459
+429 845a
+42a 845b
+42b 845c
+42c 845d
+42d 845e
+42e 845f
+42f 8460
+430 8470
+431 8471
+432 8472
+433 8473
+434 8474
+435 8475
+436 8477
+437 8478
+438 8479
+439 847a
+43a 847b
+43b 847c
+43c 847d
+43d 847e
+43e 8480
+43f 8481
+440 8482
+441 8483
+442 8484
+443 8485
+444 8486
+445 8487
+446 8488
+447 8489
+448 848a
+449 848b
+44a 848c
+44b 848d
+44c 848e
+44d 848f
+44e 8490
+44f 8491
+451 8476
+2010 815d
+2015 815c
+2018 8165
+2019 8166
+201c 8167
+201d 8168
+2020 81f5
+2021 81f6
+2025 8164
+2026 8163
+2030 81f1
+2032 818c
+2033 818d
+203b 81a6
+#203e 7e
+2103 818e
+2116 8782
+2121 8784
+212b 81f0
+2160 8754
+2161 8755
+2162 8756
+2163 8757
+2164 8758
+2165 8759
+2166 875a
+2167 875b
+2168 875c
+2169 875d
+2170 fa40
+2171 fa41
+2172 fa42
+2173 fa43
+2174 fa44
+2175 fa45
+2176 fa46
+2177 fa47
+2178 fa48
+2179 fa49
+2190 81a9
+2191 81aa
+2192 81a8
+2193 81ab
+21d2 81cb
+21d4 81cc
+2200 81cd
+2202 81dd
+2203 81ce
+2207 81de
+2208 81b8
+220b 81b9
+2211 8794
+221a 81e3
+221d 81e5
+221e 8187
+221f 8798
+2220 81da
+2225 8161
+2227 81c8
+2228 81c9
+2229 81bf
+222a 81be
+222b 81e7
+222c 81e8
+222e 8793
+2234 8188
+2235 81e6
+223d 81e4
+2252 81e0
+2260 8182
+2261 81df
+2266 8185
+2267 8186
+226a 81e1
+226b 81e2
+2282 81bc
+2283 81bd
+2286 81ba
+2287 81bb
+22a5 81db
+22bf 8799
+2312 81dc
+2460 8740
+2461 8741
+2462 8742
+2463 8743
+2464 8744
+2465 8745
+2466 8746
+2467 8747
+2468 8748
+2469 8749
+246a 874a
+246b 874b
+246c 874c
+246d 874d
+246e 874e
+246f 874f
+2470 8750
+2471 8751
+2472 8752
+2473 8753
+2500 849f
+2501 84aa
+2502 84a0
+2503 84ab
+250c 84a1
+250f 84ac
+2510 84a2
+2513 84ad
+2514 84a4
+2517 84af
+2518 84a3
+251b 84ae
+251c 84a5
+251d 84ba
+2520 84b5
+2523 84b0
+2524 84a7
+2525 84bc
+2528 84b7
+252b 84b2
+252c 84a6
+252f 84b6
+2530 84bb
+2533 84b1
+2534 84a8
+2537 84b8
+2538 84bd
+253b 84b3
+253c 84a9
+253f 84b9
+2542 84be
+254b 84b4
+25a0 81a1
+25a1 81a0
+25b2 81a3
+25b3 81a2
+25bc 81a5
+25bd 81a4
+25c6 819f
+25c7 819e
+25cb 819b
+25ce 819d
+25cf 819c
+25ef 81fc
+2605 819a
+2606 8199
+2640 818a
+2642 8189
+266a 81f4
+266d 81f3
+266f 81f2
+3000 8140
+3001 8141
+3002 8142
+3003 8156
+3005 8158
+3006 8159
+3007 815a
+3008 8171
+3009 8172
+300a 8173
+300b 8174
+300c 8175
+300d 8176
+300e 8177
+300f 8178
+3010 8179
+3011 817a
+3012 81a7
+3013 81ac
+3014 816b
+3015 816c
+301d 8780
+301f 8781
+3041 829f
+3042 82a0
+3043 82a1
+3044 82a2
+3045 82a3
+3046 82a4
+3047 82a5
+3048 82a6
+3049 82a7
+304a 82a8
+304b 82a9
+304c 82aa
+304d 82ab
+304e 82ac
+304f 82ad
+3050 82ae
+3051 82af
+3052 82b0
+3053 82b1
+3054 82b2
+3055 82b3
+3056 82b4
+3057 82b5
+3058 82b6
+3059 82b7
+305a 82b8
+305b 82b9
+305c 82ba
+305d 82bb
+305e 82bc
+305f 82bd
+3060 82be
+3061 82bf
+3062 82c0
+3063 82c1
+3064 82c2
+3065 82c3
+3066 82c4
+3067 82c5
+3068 82c6
+3069 82c7
+306a 82c8
+306b 82c9
+306c 82ca
+306d 82cb
+306e 82cc
+306f 82cd
+3070 82ce
+3071 82cf
+3072 82d0
+3073 82d1
+3074 82d2
+3075 82d3
+3076 82d4
+3077 82d5
+3078 82d6
+3079 82d7
+307a 82d8
+307b 82d9
+307c 82da
+307d 82db
+307e 82dc
+307f 82dd
+3080 82de
+3081 82df
+3082 82e0
+3083 82e1
+3084 82e2
+3085 82e3
+3086 82e4
+3087 82e5
+3088 82e6
+3089 82e7
+308a 82e8
+308b 82e9
+308c 82ea
+308d 82eb
+308e 82ec
+308f 82ed
+3090 82ee
+3091 82ef
+3092 82f0
+3093 82f1
+#3094 8394
+309b 814a
+309c 814b
+309d 8154
+309e 8155
+30a1 8340
+30a2 8341
+30a3 8342
+30a4 8343
+30a5 8344
+30a6 8345
+30a7 8346
+30a8 8347
+30a9 8348
+30aa 8349
+30ab 834a
+30ac 834b
+30ad 834c
+30ae 834d
+30af 834e
+30b0 834f
+30b1 8350
+30b2 8351
+30b3 8352
+30b4 8353
+30b5 8354
+30b6 8355
+30b7 8356
+30b8 8357
+30b9 8358
+30ba 8359
+30bb 835a
+30bc 835b
+30bd 835c
+30be 835d
+30bf 835e
+30c0 835f
+30c1 8360
+30c2 8361
+30c3 8362
+30c4 8363
+30c5 8364
+30c6 8365
+30c7 8366
+30c8 8367
+30c9 8368
+30ca 8369
+30cb 836a
+30cc 836b
+30cd 836c
+30ce 836d
+30cf 836e
+30d0 836f
+30d1 8370
+30d2 8371
+30d3 8372
+30d4 8373
+30d5 8374
+30d6 8375
+30d7 8376
+30d8 8377
+30d9 8378
+30da 8379
+30db 837a
+30dc 837b
+30dd 837c
+30de 837d
+30df 837e
+30e0 8380
+30e1 8381
+30e2 8382
+30e3 8383
+30e4 8384
+30e5 8385
+30e6 8386
+30e7 8387
+30e8 8388
+30e9 8389
+30ea 838a
+30eb 838b
+30ec 838c
+30ed 838d
+30ee 838e
+30ef 838f
+30f0 8390
+30f1 8391
+30f2 8392
+30f3 8393
+30f4 8394
+30f5 8395
+30f6 8396
+30fb 8145
+30fc 815b
+30fd 8152
+30fe 8153
+3231 878a
+3232 878b
+3239 878c
+32a4 8785
+32a5 8786
+32a6 8787
+32a7 8788
+32a8 8789
+3303 8765
+330d 8769
+3314 8760
+3318 8763
+3322 8761
+3323 876b
+3326 876a
+3327 8764
+332b 876c
+3336 8766
+333b 876e
+3349 875f
+334a 876d
+334d 8762
+3351 8767
+3357 8768
+337b 877e
+337c 878f
+337d 878e
+337e 878d
+338e 8772
+338f 8773
+339c 876f
+339d 8770
+339e 8771
+33a1 8775
+33c4 8774
+33cd 8783
+4e00 88ea
+4e01 929a
+4e03 8eb5
+4e07 969c
+4e08 8fe4
+4e09 8e4f
+4e0a 8fe3
+4e0b 89ba
+4e0d 9573
+4e0e 975e
+4e10 98a0
+4e11 894e
+4e14 8a8e
+4e15 98a1
+4e16 90a2
+4e17 99c0
+4e18 8b75
+4e19 95b8
+4e1e 8fe5
+4e21 97bc
+4e26 95c0
+4e28 fa68
+4e2a 98a2
+4e2d 9286
+4e31 98a3
+4e32 8bf8
+4e36 98a4
+4e38 8adb
+4e39 924f
+4e3b 8ee5
+4e3c 98a5
+4e3f 98a6
+4e42 98a7
+4e43 9454
+4e45 8b76
+4e4b 9456
+4e4d 93e1
+4e4e 8cc1
+4e4f 9652
+4e55 e568
+4e56 98a8
+4e57 8fe6
+4e58 98a9
+4e59 89b3
+4e5d 8be3
+4e5e 8cee
+4e5f 96e7
+4e62 9ba4
+4e71 9790
+4e73 93fb
+4e7e 8aa3
+4e80 8b54
+4e82 98aa
+4e85 98ab
+4e86 97b9
+4e88 975c
+4e89 9188
+4e8a 98ad
+4e8b 8e96
+4e8c 93f1
+4e8e 98b0
+4e91 895d
+4e92 8cdd
+4e94 8cdc
+4e95 88e4
+4e98 986a
+4e99 9869
+4e9b 8db1
+4e9c 889f
+4e9e 98b1
+4e9f 98b2
+4ea0 98b3
+4ea1 9653
+4ea2 98b4
+4ea4 8cf0
+4ea5 88e5
+4ea6 9692
+4ea8 8b9c
+4eab 8b9d
+4eac 8b9e
+4ead 92e0
+4eae 97ba
+4eb0 98b5
+4eb3 98b6
+4eb6 98b7
+4eba 906c
+4ec0 8f59
+4ec1 906d
+4ec2 98bc
+4ec4 98ba
+4ec6 98bb
+4ec7 8b77
+4eca 8da1
+4ecb 89ee
+4ecd 98b9
+4ece 98b8
+4ecf 95a7
+4ed4 8e65
+4ed5 8e64
+4ed6 91bc
+4ed7 98bd
+4ed8 9574
+4ed9 90e5
+4edd 8157
+4ede 98be
+4edf 98c0
+4ee1 fa69
+4ee3 91e3
+4ee4 97df
+4ee5 88c8
+4eed 98bf
+4eee 89bc
+4ef0 8bc2
+4ef2 9287
+4ef6 8c8f
+4ef7 98c1
+4efb 9443
+4efc fa6a
+4f00 fa6b
+4f01 8ae9
+4f03 fa6c
+4f09 98c2
+4f0a 88c9
+4f0d 8cde
+4f0e 8aea
+4f0f 959a
+4f10 94b0
+4f11 8b78
+4f1a 89ef
+4f1c 98e5
+4f1d 9360
+4f2f 948c
+4f30 98c4
+4f34 94ba
+4f36 97e0
+4f38 904c
+4f39 fa6d
+4f3a 8e66
+4f3c 8e97
+4f3d 89be
+4f43 92cf
+4f46 9241
+4f47 98c8
+4f4d 88ca
+4f4e 92e1
+4f4f 8f5a
+4f50 8db2
+4f51 9743
+4f53 91cc
+4f55 89bd
+4f56 fa6e
+4f57 98c7
+4f59 975d
+4f5a 98c3
+4f5b 98c5
+4f5c 8dec
+4f5d 98c6
+4f5e 9b43
+4f69 98ce
+4f6f 98d1
+4f70 98cf
+4f73 89c0
+4f75 95b9
+4f76 98c9
+4f7b 98cd
+4f7c 8cf1
+4f7f 8e67
+4f83 8aa4
+4f86 98d2
+4f88 98ca
+4f8a fa70
+4f8b 97e1
+4f8d 8e98
+4f8f 98cb
+4f91 98d0
+4f92 fa6f
+4f94 fa72
+4f96 98d3
+4f98 98cc
+4f9a fa71
+4f9b 8b9f
+4f9d 88cb
+4fa0 8ba0
+4fa1 89bf
+4fab 9b44
+4fad 9699
+4fae 958e
+4faf 8cf2
+4fb5 904e
+4fb6 97b5
+4fbf 95d6
+4fc2 8c57
+4fc3 91a3
+4fc4 89e2
+4fc9 fa61
+4fca 8f72
+4fcd fa73
+4fce 98d7
+4fd0 98dc
+4fd1 98da
+4fd4 98d5
+4fd7 91ad
+4fd8 98d8
+4fda 98db
+4fdb 98d9
+4fdd 95db
+4fdf 98d6
+4fe1 904d
+4fe3 9693
+4fe4 98dd
+4fe5 98de
+4fee 8f43
+4fef 98eb
+4ff3 946f
+4ff5 9555
+4ff6 98e6
+4ff8 95ee
+4ffa 89b4
+4ffe 98ea
+4fff fa76
+5005 98e4
+5006 98ed
+5009 9171
+500b 8cc2
+500d 947b
+500f e0c5
+5011 98ec
+5012 937c
+5014 98e1
+5016 8cf4
+5019 8cf3
+501a 98df
+501e fa77
+501f 8ed8
+5021 98e7
+5022 fa75
+5023 95ed
+5024 926c
+5025 98e3
+5026 8c91
+5028 98e0
+5029 98e8
+502a 98e2
+502b 97cf
+502c 98e9
+502d 9860
+5036 8be4
+5039 8c90
+5040 fa74
+5042 fa7a
+5043 98ee
+5046 fa78
+5047 98ef
+5048 98f3
+5049 88cc
+504f 95ce
+5050 98f2
+5055 98f1
+5056 98f5
+505a 98f4
+505c 92e2
+5065 8c92
+506c 98f6
+5070 fa79
+5072 8ec3
+5074 91a4
+5075 92e3
+5076 8bf4
+5078 98f7
+507d 8b55
+5080 98f8
+5085 98fa
+508d 9654
+5091 8c86
+5094 fa7b
+5098 8e50
+5099 94f5
+509a 98f9
+50ac 8dc3
+50ad 9762
+50b2 98fc
+50b3 9942
+50b4 98fb
+50b5 8dc2
+50b7 8f9d
+50be 8c58
+50c2 9943
+50c5 8bcd
+50c9 9940
+50ca 9941
+50cd 93ad
+50cf 919c
+50d1 8ba1
+50d5 966c
+50d6 9944
+50d8 fa7d
+50da 97bb
+50de 9945
+50e3 9948
+50e5 9946
+50e7 916d
+50ed 9947
+50ee 9949
+50f4 fa7c
+50f5 994b
+50f9 994a
+50fb 95c6
+5100 8b56
+5101 994d
+5102 994e
+5104 89ad
+5109 994c
+5112 8ef2
+5114 9951
+5115 9950
+5116 994f
+5118 98d4
+511a 9952
+511f 8f9e
+5121 9953
+512a 9744
+5132 96d7
+5137 9955
+513a 9954
+513b 9957
+513c 9956
+513f 9958
+5140 9959
+5141 88f2
+5143 8cb3
+5144 8c5a
+5145 8f5b
+5146 929b
+5147 8ba2
+5148 90e6
+5149 8cf5
+514a fa7e
+514b 8d8e
+514c 995b
+514d 96c6
+514e 9365
+5150 8e99
+5152 995a
+5154 995c
+515a 937d
+515c 8a95
+5162 995d
+5164 fa80
+5165 93fc
+5168 9153
+5169 995f
+516a 9960
+516b 94aa
+516c 8cf6
+516d 985a
+516e 9961
+5171 8ba4
+5175 95ba
+5176 91b4
+5177 8bef
+5178 9354
+517c 8c93
+5180 9962
+5182 9963
+5185 93e0
+5186 897e
+5189 9966
+518a 8dfb
+518c 9965
+518d 8dc4
+518f 9967
+5190 e3ec
+5191 9968
+5192 9660
+5193 9969
+5195 996a
+5196 996b
+5197 8fe7
+5199 8eca
+519d fa81
+51a0 8aa5
+51a2 996e
+51a4 996c
+51a5 96bb
+51a6 996d
+51a8 9579
+51a9 996f
+51aa 9970
+51ab 9971
+51ac 937e
+51b0 9975
+51b1 9973
+51b2 9974
+51b3 9972
+51b4 8de1
+51b5 9976
+51b6 96e8
+51b7 97e2
+51bd 9977
+51be fa82
+51c4 90a6
+51c5 9978
+51c6 8f79
+51c9 9979
+51cb 929c
+51cc 97bd
+51cd 9380
+51d6 99c3
+51db 997a
+51dc eaa3
+51dd 8bc3
+51e0 997b
+51e1 967d
+51e6 8f88
+51e7 91fa
+51e9 997d
+51ea 93e2
+51ec fa83
+51ed 997e
+51f0 9980
+51f1 8a4d
+51f5 9981
+51f6 8ba5
+51f8 93ca
+51f9 899a
+51fa 8f6f
+51fd 949f
+51fe 9982
+5200 9381
+5203 906e
+5204 9983
+5206 95aa
+5207 90d8
+5208 8aa0
+520a 8aa7
+520b 9984
+520e 9986
+5211 8c59
+5214 9985
+5215 fa84
+5217 97f1
+521d 8f89
+5224 94bb
+5225 95ca
+5227 9987
+5229 9798
+522a 9988
+522e 9989
+5230 939e
+5233 998a
+5236 90a7
+5237 8dfc
+5238 8c94
+5239 998b
+523a 8e68
+523b 8d8f
+5243 92e4
+5244 998d
+5247 91a5
+524a 8ded
+524b 998e
+524c 998f
+524d 914f
+524f 998c
+5254 9991
+5256 9655
+525b 8d84
+525e 9990
+5263 8c95
+5264 8ddc
+5265 948d
+5269 9994
+526a 9992
+526f 959b
+5270 8fe8
+5271 999b
+5272 8a84
+5273 9995
+5274 9993
+5275 916e
+527d 9997
+527f 9996
+5283 8a63
+5287 8c80
+5288 999c
+5289 97ab
+528d 9998
+5291 999d
+5292 999a
+5294 9999
+529b 97cd
+529c fa85
+529f 8cf7
+52a0 89c1
+52a3 97f2
+52a6 fa86
+52a9 8f95
+52aa 9377
+52ab 8d85
+52ac 99a0
+52ad 99a1
+52af fb77
+52b1 97e3
+52b4 984a
+52b5 99a3
+52b9 8cf8
+52bc 99a2
+52be 8a4e
+52c0 fa87
+52c1 99a4
+52c3 9675
+52c5 92ba
+52c7 9745
+52c9 95d7
+52cd 99a5
+52d2 e8d3
+52d5 93ae
+52d7 99a6
+52d8 8aa8
+52d9 96b1
+52db fa88
+52dd 8f9f
+52de 99a7
+52df 95e5
+52e0 99ab
+52e2 90a8
+52e3 99a8
+52e4 8bce
+52e6 99a9
+52e7 8aa9
+52f2 8c4d
+52f3 99ac
+52f5 99ad
+52f8 99ae
+52f9 99af
+52fa 8ed9
+52fe 8cf9
+52ff 96dc
+5300 fa89
+5301 96e6
+5302 93f5
+5305 95ef
+5306 99b0
+5307 fa8a
+5308 99b1
+530d 99b3
+530f 99b5
+5310 99b4
+5315 99b6
+5316 89bb
+5317 966b
+5319 8dfa
+531a 99b7
+531d 9178
+5320 8fa0
+5321 8ba7
+5323 99b8
+5324 fa8b
+532a 94d9
+532f 99b9
+5331 99ba
+5333 99bb
+5338 99bc
+5339 9543
+533a 8be6
+533b 88e3
+533f 93bd
+5340 99bd
+5341 8f5c
+5343 90e7
+5345 99bf
+5346 99be
+5347 8fa1
+5348 8cdf
+5349 99c1
+534a 94bc
+534d 99c2
+5351 94da
+5352 91b2
+5353 91ec
+5354 8ba6
+5357 93ec
+5358 9250
+535a 948e
+535c 966d
+535e 99c4
+5360 90e8
+5366 8c54
+5369 99c5
+536e 99c6
+536f 894b
+5370 88f3
+5371 8aeb
+5372 fa8c
+5373 91a6
+5374 8b70
+5375 9791
+5377 99c9
+5378 89b5
+537b 99c8
+537f 8ba8
+5382 99ca
+5384 96ef
+5393 fa8d
+5396 99cb
+5398 97d0
+539a 8cfa
+539f 8cb4
+53a0 99cc
+53a5 99ce
+53a6 99cd
+53a8 907e
+53a9 8958
+53ad 897d
+53ae 99cf
+53b0 99d0
+53b2 fa8e
+53b3 8cb5
+53b6 99d1
+53bb 8b8e
+53c2 8e51
+53c3 99d2
+53c8 9694
+53c9 8db3
+53ca 8b79
+53cb 9746
+53cc 916f
+53cd 94bd
+53ce 8efb
+53d4 8f66
+53d6 8ee6
+53d7 8ef3
+53d9 8f96
+53db 94be
+53dd fa8f
+53df 99d5
+53e1 8962
+53e2 9170
+53e3 8cfb
+53e4 8cc3
+53e5 8be5
+53e8 99d9
+53e9 9240
+53ea 91fc
+53eb 8ba9
+53ec 8fa2
+53ed 99da
+53ee 99d8
+53ef 89c2
+53f0 91e4
+53f1 8eb6
+53f2 8e6a
+53f3 8945
+53f6 8a90
+53f7 8d86
+53f8 8e69
+53fa 99db
+5401 99dc
+5403 8b68
+5404 8a65
+5408 8d87
+5409 8b67
+540a 92dd
+540b 8944
+540c 93af
+540d 96bc
+540e 8d40
+540f 9799
+5410 9366
+5411 8cfc
+541b 8c4e
+541d 99e5
+541f 8be1
+5420 9669
+5426 94db
+5429 99e4
+542b 8adc
+542c 99df
+542d 99e0
+542e 99e2
+5436 99e3
+5438 8b7a
+5439 9081
+543b 95ab
+543c 99e1
+543d 99dd
+543e 8ce1
+5440 99de
+5442 9843
+5446 95f0
+5448 92e6
+5449 8ce0
+544a 8d90
+544e 99e6
+5451 93db
+545f 99ea
+5468 8efc
+546a 8ef4
+5470 99ed
+5471 99eb
+5473 96a1
+5475 99e8
+5476 99f1
+5477 99ec
+547b 99ef
+547c 8cc4
+547d 96bd
+5480 99f0
+5484 99f2
+5486 99f4
+548a fa92
+548b 8dee
+548c 9861
+548e 99e9
+548f 99e7
+5490 99f3
+5492 99ee
+549c fa91
+54a2 99f6
+54a4 9a42
+54a5 99f8
+54a8 99fc
+54a9 fa93
+54ab 9a40
+54ac 99f9
+54af 9a5d
+54b2 8de7
+54b3 8a50
+54b8 99f7
+54bc 9a44
+54bd 88f4
+54be 9a43
+54c0 88a3
+54c1 9569
+54c2 9a41
+54c4 99fa
+54c7 99f5
+54c8 99fb
+54c9 8dc6
+54d8 9a45
+54e1 88f5
+54e2 9a4e
+54e5 9a46
+54e6 9a47
+54e8 8fa3
+54e9 9689
+54ed 9a4c
+54ee 9a4b
+54f2 934e
+54fa 9a4d
+54fd 9a4a
+54ff fa94
+5504 8953
+5506 8db4
+5507 904f
+550f 9a48
+5510 9382
+5514 9a49
+5516 88a0
+552e 9a53
+552f 9742
+5531 8fa5
+5533 9a59
+5538 9a58
+5539 9a4f
+553e 91c1
+5540 9a50
+5544 91ed
+5545 9a55
+5546 8fa4
+554c 9a52
+554f 96e2
+5553 8c5b
+5556 9a56
+5557 9a57
+555c 9a54
+555d 9a5a
+5563 9a51
+557b 9a60
+557c 9a65
+557e 9a61
+5580 9a5c
+5583 9a66
+5584 9150
+5586 fa95
+5587 9a68
+5589 8d41
+558a 9a5e
+558b 929d
+5598 9a62
+5599 9a5b
+559a 8aab
+559c 8aec
+559d 8a85
+559e 9a63
+559f 9a5f
+55a7 8c96
+55a8 9a69
+55a9 9a67
+55aa 9172
+55ab 8b69
+55ac 8baa
+55ae 9a64
+55b0 8bf2
+55b6 8963
+55c4 9a6d
+55c5 9a6b
+55c7 9aa5
+55d4 9a70
+55da 9a6a
+55dc 9a6e
+55df 9a6c
+55e3 8e6b
+55e4 9a6f
+55f7 9a72
+55f9 9a77
+55fd 9a75
+55fe 9a74
+5606 9251
+5609 89c3
+5614 9a71
+5616 9a73
+5617 8fa6
+5618 8952
+561b 9a76
+5629 89dc
+562f 9a82
+5631 8ffa
+5632 9a7d
+5634 9a7b
+5636 9a7c
+5638 9a7e
+5642 895c
+564c 9158
+564e 9a78
+5650 9a79
+565b 8a9a
+5664 9a81
+5668 8aed
+566a 9a84
+566b 9a80
+566c 9a83
+5674 95ac
+5678 93d3
+567a 94b6
+5680 9a86
+5686 9a85
+5687 8a64
+568a 9a87
+568f 9a8a
+5694 9a89
+56a0 9a88
+56a2 9458
+56a5 9a8b
+56ae 9a8c
+56b4 9a8e
+56b6 9a8d
+56bc 9a90
+56c0 9a93
+56c1 9a91
+56c2 9a8f
+56c3 9a92
+56c8 9a94
+56ce 9a95
+56d1 9a96
+56d3 9a97
+56d7 9a98
+56d8 9964
+56da 8efa
+56db 8e6c
+56de 89f1
+56e0 88f6
+56e3 9263
+56ee 9a99
+56f0 8da2
+56f2 88cd
+56f3 907d
+56f9 9a9a
+56fa 8cc5
+56fd 8d91
+56ff 9a9c
+5700 9a9b
+5703 95de
+5704 9a9d
+5708 9a9f
+5709 9a9e
+570b 9aa0
+570d 9aa1
+570f 8c97
+5712 8980
+5713 9aa2
+5716 9aa4
+5718 9aa3
+571c 9aa6
+571f 9379
+5726 9aa7
+5727 88b3
+5728 8ddd
+572d 8c5c
+5730 926e
+5737 9aa8
+5738 9aa9
+573b 9aab
+5740 9aac
+5742 8de2
+5747 8bcf
+574a 9656
+574e 9aaa
+574f 9aad
+5750 8dbf
+5751 8d42
+5759 fa96
+5761 9ab1
+5764 8da3
+5765 fa97
+5766 9252
+5769 9aae
+576a 92d8
+577f 9ab2
+5782 9082
+5788 9ab0
+5789 9ab3
+578b 8c5e
+5793 9ab4
+57a0 9ab5
+57a2 8d43
+57a3 8a5f
+57a4 9ab7
+57aa 9ab8
+57ac fa98
+57b0 9ab9
+57b3 9ab6
+57c0 9aaf
+57c3 9aba
+57c6 9abb
+57c7 fa9a
+57c8 fa99
+57cb 9684
+57ce 8fe9
+57d2 9abd
+57d3 9abe
+57d4 9abc
+57d6 9ac0
+57dc 9457
+57df 88e6
+57e0 9575
+57e3 9ac1
+57f4 8ffb
+57f7 8eb7
+57f9 947c
+57fa 8aee
+57fc 8de9
+5800 9678
+5802 93b0
+5805 8c98
+5806 91cd
+580a 9abf
+580b 9ac2
+5815 91c2
+5819 9ac3
+581d 9ac4
+5821 9ac6
+5824 92e7
+582a 8aac
+582f ea9f
+5830 8981
+5831 95f1
+5834 8fea
+5835 9367
+583a 8de4
+583d 9acc
+5840 95bb
+5841 97db
+584a 89f2
+584b 9ac8
+5851 9159
+5852 9acb
+5854 9383
+5857 9368
+5858 9384
+5859 94b7
+585a 92cb
+585e 8dc7
+5862 9ac7
+5869 8996
+586b 9355
+5870 9ac9
+5872 9ac5
+5875 906f
+5879 9acd
+587e 8f6d
+5883 8bab
+5885 9ace
+5893 95e6
+5897 919d
+589c 92c4
+589e fa9d
+589f 9ad0
+58a8 966e
+58ab 9ad1
+58ae 9ad6
+58b2 fa9e
+58b3 95ad
+58b8 9ad5
+58b9 9acf
+58ba 9ad2
+58bb 9ad4
+58be 8da4
+58c1 95c7
+58c5 9ad7
+58c7 9264
+58ca 89f3
+58cc 8feb
+58d1 9ad9
+58d3 9ad8
+58d5 8d88
+58d7 9ada
+58d8 9adc
+58d9 9adb
+58dc 9ade
+58de 9ad3
+58df 9ae0
+58e4 9adf
+58e5 9add
+58eb 8e6d
+58ec 9070
+58ee 9173
+58ef 9ae1
+58f0 90ba
+58f1 88eb
+58f2 9484
+58f7 92d9
+58f9 9ae3
+58fa 9ae2
+58fb 9ae4
+58fc 9ae5
+58fd 9ae6
+5902 9ae7
+5909 95cf
+590a 9ae8
+590b fa9f
+590f 89c4
+5910 9ae9
+5915 975b
+5916 8a4f
+5918 99c7
+5919 8f67
+591a 91bd
+591b 9aea
+591c 96e9
+5922 96b2
+5925 9aec
+5927 91e5
+5929 9356
+592a 91be
+592b 9576
+592c 9aed
+592d 9aee
+592e 899b
+5931 8eb8
+5932 9aef
+5937 88ce
+5938 9af0
+593e 9af1
+5944 8982
+5947 8aef
+5948 93de
+5949 95f2
+594e 9af5
+594f 9174
+5950 9af4
+5951 8c5f
+5953 faa0
+5954 967a
+5955 9af3
+5957 9385
+5958 9af7
+595a 9af6
+595b faa1
+595d faa2
+5960 9af9
+5962 9af8
+5963 faa3
+5965 899c
+5967 9afa
+5968 8fa7
+5969 9afc
+596a 9244
+596c 9afb
+596e 95b1
+5973 8f97
+5974 937a
+5978 9b40
+597d 8d44
+5981 9b41
+5982 9440
+5983 94dc
+5984 96cf
+598a 9444
+598d 9b4a
+5993 8b57
+5996 9764
+5999 96ad
+599b 9baa
+599d 9b42
+59a3 9b45
+59a4 faa4
+59a5 91c3
+59a8 9657
+59ac 9369
+59b2 9b46
+59b9 9685
+59ba faa5
+59bb 8dc8
+59be 8fa8
+59c6 9b47
+59c9 8e6f
+59cb 8e6e
+59d0 88b7
+59d1 8cc6
+59d3 90a9
+59d4 88cf
+59d9 9b4b
+59da 9b4c
+59dc 9b49
+59e5 8957
+59e6 8aad
+59e8 9b48
+59ea 96c3
+59eb 9550
+59f6 88a6
+59fb 88f7
+59ff 8e70
+5a01 88d0
+5a03 88a1
+5a09 9b51
+5a11 9b4f
+5a18 96ba
+5a1a 9b52
+5a1c 9b50
+5a1f 9b4e
+5a20 9050
+5a25 9b4d
+5a29 95d8
+5a2f 8ce2
+5a35 9b56
+5a36 9b57
+5a3c 8fa9
+5a40 9b53
+5a41 984b
+5a46 946b
+5a49 9b55
+5a5a 8da5
+5a62 9b58
+5a66 9577
+5a6a 9b59
+5a6c 9b54
+5a7f 96b9
+5a92 947d
+5a9a 9b5a
+5a9b 9551
+5abc 9b5b
+5abd 9b5f
+5abe 9b5c
+5ac1 89c5
+5ac2 9b5e
+5ac9 8eb9
+5acb 9b5d
+5acc 8c99
+5ad0 9b6b
+5ad6 9b64
+5ad7 9b61
+5ae1 9284
+5ae3 9b60
+5ae6 9b62
+5ae9 9b63
+5afa 9b65
+5afb 9b66
+5b09 8af0
+5b0b 9b68
+5b0c 9b67
+5b16 9b69
+5b22 8fec
+5b2a 9b6c
+5b2c 92da
+5b30 8964
+5b32 9b6a
+5b36 9b6d
+5b3e 9b6e
+5b40 9b71
+5b43 9b6f
+5b45 9b70
+5b50 8e71
+5b51 9b72
+5b54 8d45
+5b55 9b73
+5b56 faa6
+5b57 8e9a
+5b58 91b6
+5b5a 9b74
+5b5b 9b75
+5b5c 8e79
+5b5d 8d46
+5b5f 96d0
+5b63 8b47
+5b64 8cc7
+5b65 9b76
+5b66 8a77
+5b69 9b77
+5b6b 91b7
+5b70 9b78
+5b71 9ba1
+5b73 9b79
+5b75 9b7a
+5b78 9b7b
+5b7a 9b7d
+5b80 9b7e
+5b83 9b80
+5b85 91ee
+5b87 8946
+5b88 8ee7
+5b89 88c0
+5b8b 9176
+5b8c 8aae
+5b8d 8eb3
+5b8f 8d47
+5b95 9386
+5b97 8f40
+5b98 8aaf
+5b99 9288
+5b9a 92e8
+5b9b 88b6
+5b9c 8b58
+5b9d 95f3
+5b9f 8ec0
+5ba2 8b71
+5ba3 90e9
+5ba4 8eba
+5ba5 9747
+5ba6 9b81
+5bae 8b7b
+5bb0 8dc9
+5bb3 8a51
+5bb4 8983
+5bb5 8faa
+5bb6 89c6
+5bb8 9b82
+5bb9 9765
+5bbf 8f68
+5bc0 faa7
+5bc2 8ee2
+5bc3 9b83
+5bc4 8af1
+5bc5 93d0
+5bc6 96a7
+5bc7 9b84
+5bc9 9b85
+5bcc 9578
+5bd0 9b87
+5bd2 8aa6
+5bd3 8bf5
+5bd4 9b86
+5bd8 faa9
+5bdb 8ab0
+5bdd 9051
+5bde 9b8b
+5bdf 8e40
+5be1 89c7
+5be2 9b8a
+5be4 9b88
+5be5 9b8c
+5be6 9b89
+5be7 944a
+5be8 9ecb
+5be9 9052
+5beb 9b8d
+5bec faaa
+5bee 97be
+5bf0 9b8e
+5bf3 9b90
+5bf5 929e
+5bf6 9b8f
+5bf8 90a1
+5bfa 8e9b
+5bfe 91ce
+5bff 8ef5
+5c01 9595
+5c02 90ea
+5c04 8ecb
+5c05 9b91
+5c06 8fab
+5c07 9b92
+5c08 9b93
+5c09 88d1
+5c0a 91b8
+5c0b 9071
+5c0d 9b94
+5c0e 93b1
+5c0f 8fac
+5c11 8fad
+5c13 9b95
+5c16 90eb
+5c1a 8fae
+5c1e faab
+5c20 9b96
+5c22 9b97
+5c24 96de
+5c28 9b98
+5c2d 8bc4
+5c31 8f41
+5c38 9b99
+5c39 9b9a
+5c3a 8eda
+5c3b 904b
+5c3c 93f2
+5c3d 9073
+5c3e 94f6
+5c3f 9441
+5c40 8bc7
+5c41 9b9b
+5c45 8b8f
+5c46 9b9c
+5c48 8bfc
+5c4a 93cd
+5c4b 89ae
+5c4d 8e72
+5c4e 9b9d
+5c4f 9ba0
+5c50 9b9f
+5c51 8bfb
+5c53 9b9e
+5c55 9357
+5c5e 91ae
+5c60 936a
+5c61 8ec6
+5c64 9177
+5c65 979a
+5c6c 9ba2
+5c6e 9ba3
+5c6f 93d4
+5c71 8e52
+5c76 9ba5
+5c79 9ba6
+5c8c 9ba7
+5c90 8af2
+5c91 9ba8
+5c94 9ba9
+5ca1 89aa
+5ca6 faac
+5ca8 915a
+5ca9 8ae2
+5cab 9bab
+5cac 96a6
+5cb1 91d0
+5cb3 8a78
+5cb6 9bad
+5cb7 9baf
+5cb8 8add
+5cba faad
+5cbb 9bac
+5cbc 9bae
+5cbe 9bb1
+5cc5 9bb0
+5cc7 9bb2
+5cd9 9bb3
+5ce0 93bb
+5ce1 8bac
+5ce8 89e3
+5ce9 9bb4
+5cea 9bb9
+5ced 9bb7
+5cef 95f5
+5cf0 95f4
+5cf5 faae
+5cf6 9387
+5cfa 9bb6
+5cfb 8f73
+5cfd 9bb5
+5d07 9092
+5d0b 9bba
+5d0e 8de8
+5d11 9bc0
+5d14 9bc1
+5d15 9bbb
+5d16 8a52
+5d17 9bbc
+5d18 9bc5
+5d19 9bc4
+5d1a 9bc3
+5d1b 9bbf
+5d1f 9bbe
+5d22 9bc2
+5d27 faaf
+5d29 95f6
+5d42 fab2
+5d4b 9bc9
+5d4c 9bc6
+5d4e 9bc8
+5d50 9792
+5d52 9bc7
+5d53 fab0
+5d5c 9bbd
+5d69 9093
+5d6c 9bca
+5d6d fab3
+5d6f 8db5
+5d73 9bcb
+5d76 9bcc
+5d82 9bcf
+5d84 9bce
+5d87 9bcd
+5d8b 9388
+5d8c 9bb8
+5d90 9bd5
+5d9d 9bd1
+5da2 9bd0
+5dac 9bd2
+5dae 9bd3
+5db7 9bd6
+5db8 fab4
+5db9 fab5
+5dba 97e4
+5dbc 9bd7
+5dbd 9bd4
+5dc9 9bd8
+5dcc 8ade
+5dcd 9bd9
+5dd0 fab6
+5dd2 9bdb
+5dd3 9bda
+5dd6 9bdc
+5ddb 9bdd
+5ddd 90ec
+5dde 8f42
+5de1 8f84
+5de3 9183
+5de5 8d48
+5de6 8db6
+5de7 8d49
+5de8 8b90
+5deb 9bde
+5dee 8db7
+5df1 8cc8
+5df2 9bdf
+5df3 96a4
+5df4 9462
+5df5 9be0
+5df7 8d4a
+5dfb 8aaa
+5dfd 9246
+5dfe 8bd0
+5e02 8e73
+5e03 957a
+5e06 94bf
+5e0b 9be1
+5e0c 8af3
+5e11 9be4
+5e16 929f
+5e19 9be3
+5e1a 9be2
+5e1b 9be5
+5e1d 92e9
+5e25 9083
+5e2b 8e74
+5e2d 90c8
+5e2f 91d1
+5e30 8b41
+5e33 92a0
+5e36 9be6
+5e37 9be7
+5e38 8fed
+5e3d 9658
+5e40 9bea
+5e43 9be9
+5e44 9be8
+5e45 959d
+5e47 9bf1
+5e4c 9679
+5e4e 9beb
+5e54 9bed
+5e55 968b
+5e57 9bec
+5e5f 9bee
+5e61 94a6
+5e62 9bef
+5e63 95bc
+5e64 9bf0
+5e72 8ab1
+5e73 95bd
+5e74 944e
+5e75 9bf2
+5e76 9bf3
+5e78 8d4b
+5e79 8ab2
+5e7a 9bf4
+5e7b 8cb6
+5e7c 9763
+5e7d 9748
+5e7e 8af4
+5e7f 9bf6
+5e81 92a1
+5e83 8d4c
+5e84 8faf
+5e87 94dd
+5e8a 8fb0
+5e8f 8f98
+5e95 92ea
+5e96 95f7
+5e97 9358
+5e9a 8d4d
+5e9c 957b
+5ea0 9bf7
+5ea6 9378
+5ea7 8dc0
+5eab 8cc9
+5ead 92eb
+5eb5 88c1
+5eb6 8f8e
+5eb7 8d4e
+5eb8 9766
+5ec1 9bf8
+5ec2 9bf9
+5ec3 9470
+5ec8 9bfa
+5ec9 97f5
+5eca 984c
+5ecf 9bfc
+5ed0 9bfb
+5ed3 8a66
+5ed6 9c40
+5eda 9c43
+5edb 9c44
+5edd 9c42
+5edf 955f
+5ee0 8fb1
+5ee1 9c46
+5ee2 9c45
+5ee3 9c41
+5ee8 9c47
+5ee9 9c48
+5eec 9c49
+5ef0 9c4c
+5ef1 9c4a
+5ef3 9c4b
+5ef4 9c4d
+5ef6 8984
+5ef7 92ec
+5ef8 9c4e
+5efa 8c9a
+5efb 89f4
+5efc 9455
+5efe 9c4f
+5eff 93f9
+5f01 95d9
+5f03 9c50
+5f04 984d
+5f09 9c51
+5f0a 95be
+5f0b 9c54
+5f0c 989f
+5f0d 98af
+5f0f 8eae
+5f10 93f3
+5f11 9c55
+5f13 8b7c
+5f14 92a2
+5f15 88f8
+5f16 9c56
+5f17 95a4
+5f18 8d4f
+5f1b 926f
+5f1f 92ed
+5f21 fab7
+5f25 96ed
+5f26 8cb7
+5f27 8cca
+5f29 9c57
+5f2d 9c58
+5f2f 9c5e
+5f31 8ee3
+5f34 fab8
+5f35 92a3
+5f37 8bad
+5f38 9c59
+5f3c 954a
+5f3e 9265
+5f41 9c5a
+5f45 fa67
+5f48 9c5b
+5f4a 8bae
+5f4c 9c5c
+5f4e 9c5d
+5f51 9c5f
+5f53 9396
+5f56 9c60
+5f57 9c61
+5f59 9c62
+5f5c 9c53
+5f5d 9c52
+5f61 9c63
+5f62 8c60
+5f66 9546
+5f67 fab9
+5f69 8dca
+5f6a 9556
+5f6b 92a4
+5f6c 956a
+5f6d 9c64
+5f70 8fb2
+5f71 8965
+5f73 9c65
+5f77 9c66
+5f79 96f0
+5f7c 94de
+5f7f 9c69
+5f80 899d
+5f81 90aa
+5f82 9c68
+5f83 9c67
+5f84 8c61
+5f85 91d2
+5f87 9c6d
+5f88 9c6b
+5f8a 9c6a
+5f8b 97a5
+5f8c 8ce3
+5f90 8f99
+5f91 9c6c
+5f92 936b
+5f93 8f5d
+5f97 93be
+5f98 9c70
+5f99 9c6f
+5f9e 9c6e
+5fa0 9c71
+5fa1 8ce4
+5fa8 9c72
+5fa9 959c
+5faa 8f7a
+5fad 9c73
+5fae 94f7
+5fb3 93bf
+5fb4 92a5
+5fb7 faba
+5fb9 934f
+5fbc 9c74
+5fbd 8b4a
+5fc3 9053
+5fc5 954b
+5fcc 8af5
+5fcd 9445
+5fd6 9c75
+5fd7 8e75
+5fd8 9659
+5fd9 965a
+5fdc 899e
+5fdd 9c7a
+5fde fabb
+5fe0 9289
+5fe4 9c77
+5feb 89f5
+5ff0 9cab
+5ff1 9c79
+5ff5 944f
+5ff8 9c78
+5ffb 9c76
+5ffd 8d9a
+5fff 9c7c
+600e 9c83
+600f 9c89
+6010 9c81
+6012 937b
+6015 9c86
+6016 957c
+6019 9c80
+601b 9c85
+601c 97e5
+601d 8e76
+6020 91d3
+6021 9c7d
+6025 8b7d
+6026 9c88
+6027 90ab
+6028 8985
+6029 9c82
+602a 89f6
+602b 9c87
+602f 8baf
+6031 9c84
+603a 9c8a
+6041 9c8c
+6042 9c96
+6043 9c94
+6046 9c91
+604a 9c90
+604b 97f6
+604d 9c92
+6050 8bb0
+6052 8d50
+6055 8f9a
+6059 9c99
+605a 9c8b
+605d fabc
+605f 9c8f
+6060 9c7e
+6062 89f8
+6063 9c93
+6064 9c95
+6065 9270
+6068 8da6
+6069 89b6
+606a 9c8d
+606b 9c98
+606c 9c97
+606d 8bb1
+606f 91a7
+6070 8a86
+6075 8c62
+6077 9c8e
+6081 9c9a
+6083 9c9d
+6084 9c9f
+6085 fabd
+6089 8ebb
+608a fabe
+608b 9ca5
+608c 92ee
+608d 9c9b
+6092 9ca3
+6094 89f7
+6096 9ca1
+6097 9ca2
+609a 9c9e
+609b 9ca0
+609f 8ce5
+60a0 9749
+60a3 8ab3
+60a6 8978
+60a7 9ca4
+60a9 9459
+60aa 88ab
+60b2 94df
+60b3 9c7b
+60b4 9caa
+60b5 9cae
+60b6 96e3
+60b8 9ca7
+60bc 9389
+60bd 9cac
+60c5 8fee
+60c6 9cad
+60c7 93d5
+60d1 9866
+60d3 9ca9
+60d5 fac0
+60d8 9caf
+60da 8d9b
+60dc 90c9
+60de fabf
+60df 88d2
+60e0 9ca8
+60e1 9ca6
+60e3 9179
+60e7 9c9c
+60e8 8e53
+60f0 91c4
+60f1 9cbb
+60f2 fac2
+60f3 917a
+60f4 9cb6
+60f6 9cb3
+60f7 9cb4
+60f9 8ee4
+60fa 9cb7
+60fb 9cba
+6100 9cb5
+6101 8f44
+6103 9cb8
+6106 9cb2
+6108 96fa
+6109 96f9
+610d 9cbc
+610e 9cbd
+610f 88d3
+6111 fac3
+6115 9cb1
+611a 8bf0
+611b 88a4
+611f 8ab4
+6120 fac1
+6121 9cb9
+6127 9cc1
+6128 9cc0
+612c 9cc5
+6130 fac5
+6134 9cc6
+6137 fac4
+613c 9cc4
+613d 9cc7
+613e 9cbf
+613f 9cc3
+6142 9cc8
+6144 9cc9
+6147 9cbe
+6148 8e9c
+614a 9cc2
+614b 91d4
+614c 8d51
+614d 9cb0
+614e 9054
+6153 9cd6
+6155 95e7
+6158 9ccc
+6159 9ccd
+615a 9cce
+615d 9cd5
+615f 9cd4
+6162 969d
+6163 8ab5
+6165 9cd2
+6167 8c64
+6168 8a53
+616b 9ccf
+616e 97b6
+616f 9cd1
+6170 88d4
+6171 9cd3
+6173 9cca
+6174 9cd0
+6175 9cd7
+6176 8c63
+6177 9ccb
+617e 977c
+6182 974a
+6187 9cda
+618a 9cde
+618e 919e
+6190 97f7
+6191 9cdf
+6194 9cdc
+6196 9cd9
+6198 fac6
+6199 9cd8
+619a 9cdd
+61a4 95ae
+61a7 93b2
+61a9 8c65
+61ab 9ce0
+61ac 9cdb
+61ae 9ce1
+61b2 8c9b
+61b6 89af
+61ba 9ce9
+61be 8ab6
+61c3 9ce7
+61c6 9ce8
+61c7 8da7
+61c8 9ce6
+61c9 9ce4
+61ca 9ce3
+61cb 9cea
+61cc 9ce2
+61cd 9cec
+61d0 89f9
+61e3 9cee
+61e6 9ced
+61f2 92a6
+61f4 9cf1
+61f6 9cef
+61f7 9ce5
+61f8 8c9c
+61fa 9cf0
+61fc 9cf4
+61fd 9cf3
+61fe 9cf5
+61ff 9cf2
+6200 9cf6
+6208 9cf7
+6209 9cf8
+620a 95e8
+620c 9cfa
+620d 9cf9
+620e 8f5e
+6210 90ac
+6211 89e4
+6212 89fa
+6213 fac7
+6214 9cfb
+6216 88bd
+621a 90ca
+621b 9cfc
+621d e6c1
+621e 9d40
+621f 8c81
+6221 9d41
+6226 90ed
+622a 9d42
+622e 9d43
+622f 8b59
+6230 9d44
+6232 9d45
+6233 9d46
+6234 91d5
+6238 8ccb
+623b 96df
+623f 965b
+6240 8f8a
+6241 9d47
+6247 90ee
+6248 e7bb
+6249 94e0
+624b 8ee8
+624d 8dcb
+624e 9d48
+6253 91c5
+6255 95a5
+6258 91ef
+625b 9d4b
+625e 9d49
+6260 9d4c
+6263 9d4a
+6268 9d4d
+626e 95af
+6271 88b5
+6276 957d
+6279 94e1
+627c 9d4e
+627e 9d51
+627f 8fb3
+6280 8b5a
+6282 9d4f
+6283 9d56
+6284 8fb4
+6289 9d50
+628a 9463
+6291 977d
+6292 9d52
+6293 9d53
+6294 9d57
+6295 938a
+6296 9d54
+6297 8d52
+6298 90dc
+629b 9d65
+629c 94b2
+629e 91f0
+62a6 fac8
+62ab 94e2
+62ac 9dab
+62b1 95f8
+62b5 92ef
+62b9 9695
+62bb 9d5a
+62bc 899f
+62bd 928a
+62c2 9d63
+62c5 9253
+62c6 9d5d
+62c7 9d64
+62c8 9d5f
+62c9 9d66
+62ca 9d62
+62cc 9d61
+62cd 948f
+62cf 9d5b
+62d0 89fb
+62d1 9d59
+62d2 8b91
+62d3 91f1
+62d4 9d55
+62d7 9d58
+62d8 8d53
+62d9 90d9
+62db 8fb5
+62dc 9d60
+62dd 9471
+62e0 8b92
+62e1 8a67
+62ec 8a87
+62ed 9040
+62ee 9d68
+62ef 9d6d
+62f1 9d69
+62f3 8c9d
+62f5 9d6e
+62f6 8e41
+62f7 8d89
+62fe 8f45
+62ff 9d5c
+6301 8e9d
+6302 9d6b
+6307 8e77
+6308 9d6c
+6309 88c2
+630c 9d67
+6311 92a7
+6319 8b93
+631f 8bb2
+6327 9d6a
+6328 88a5
+632b 8dc1
+632f 9055
+633a 92f0
+633d 94d2
+633e 9d70
+633f 917d
+6349 91a8
+634c 8e4a
+634d 9d71
+634f 9d73
+6350 9d6f
+6355 95df
+6357 92bb
+635c 917b
+6367 95f9
+6368 8ecc
+6369 9d80
+636b 9d7e
+636e 9098
+6372 8c9e
+6376 9d78
+6377 8fb7
+637a 93e6
+637b 9450
+6380 9d76
+6383 917c
+6388 8ef6
+6389 9d7b
+638c 8fb6
+638e 9d75
+638f 9d7a
+6392 9472
+6396 9d74
+6398 8c40
+639b 8a7c
+639f 9d7c
+63a0 97a9
+63a1 8dcc
+63a2 9254
+63a3 9d79
+63a5 90da
+63a7 8d54
+63a8 9084
+63a9 8986
+63aa 915b
+63ab 9d77
+63ac 8b64
+63b2 8c66
+63b4 92cd
+63b5 9d7d
+63bb 917e
+63be 9d81
+63c0 9d83
+63c3 91b5
+63c4 9d89
+63c6 9d84
+63c9 9d86
+63cf 9560
+63d0 92f1
+63d2 9d87
+63d6 974b
+63da 9767
+63db 8ab7
+63e1 88ac
+63e3 9d85
+63e9 9d82
+63ee 8af6
+63f4 8987
+63f5 fac9
+63f6 9d88
+63fa 9768
+6406 9d8c
+640d 91b9
+640f 9d93
+6413 9d8d
+6416 9d8a
+6417 9d91
+641c 9d72
+6426 9d8e
+6428 9d92
+642c 94c0
+642d 938b
+6434 9d8b
+6436 9d8f
+643a 8c67
+643e 8def
+6442 90db
+644e 9d97
+6458 9345
+6460 faca
+6467 9d94
+6469 9680
+646f 9d95
+6476 9d96
+6478 96cc
+647a 90a0
+6483 8c82
+6488 9d9d
+6492 8e54
+6493 9d9a
+6495 9d99
+649a 9451
+649d facb
+649e 93b3
+64a4 9350
+64a5 9d9b
+64a9 9d9c
+64ab 958f
+64ad 9464
+64ae 8e42
+64b0 90ef
+64b2 966f
+64b9 8a68
+64bb 9da3
+64bc 9d9e
+64c1 9769
+64c2 9da5
+64c5 9da1
+64c7 9da2
+64cd 9180
+64ce facc
+64d2 9da0
+64d4 9d5e
+64d8 9da4
+64da 9d9f
+64e0 9da9
+64e1 9daa
+64e2 9346
+64e3 9dac
+64e6 8e43
+64e7 9da7
+64ec 8b5b
+64ef 9dad
+64f1 9da6
+64f2 9db1
+64f4 9db0
+64f6 9daf
+64fa 9db2
+64fd 9db4
+64fe 8fef
+6500 9db3
+6505 9db7
+6518 9db5
+651c 9db6
+651d 9d90
+6523 9db9
+6524 9db8
+652a 9d98
+652b 9dba
+652c 9dae
+652f 8e78
+6534 9dbb
+6535 9dbc
+6536 9dbe
+6537 9dbd
+6538 9dbf
+6539 89fc
+653b 8d55
+653e 95fa
+653f 90ad
+6545 8ccc
+6548 9dc1
+654d 9dc4
+654e facd
+654f 9571
+6551 8b7e
+6555 9dc3
+6556 9dc2
+6557 9473
+6558 9dc5
+6559 8bb3
+655d 9dc7
+655e 9dc6
+6562 8ab8
+6563 8e55
+6566 93d6
+656c 8c68
+6570 9094
+6572 9dc8
+6574 90ae
+6575 9347
+6577 957e
+6578 9dc9
+6582 9dca
+6583 9dcb
+6587 95b6
+6588 9b7c
+6589 90c4
+658c 956b
+658e 8dd6
+6590 94e3
+6591 94c1
+6597 936c
+6599 97bf
+659b 9dcd
+659c 8ece
+659f 9dce
+65a1 88b4
+65a4 8bd2
+65a5 90cb
+65a7 9580
+65ab 9dcf
+65ac 8e61
+65ad 9266
+65af 8e7a
+65b0 9056
+65b7 9dd0
+65b9 95fb
+65bc 8997
+65bd 8e7b
+65c1 9dd3
+65c3 9dd1
+65c4 9dd4
+65c5 97b7
+65c6 9dd2
+65cb 90f9
+65cc 9dd5
+65cf 91b0
+65d2 9dd6
+65d7 8af8
+65d9 9dd8
+65db 9dd7
+65e0 9dd9
+65e1 9dda
+65e2 8af9
+65e5 93fa
+65e6 9255
+65e7 8b8c
+65e8 8e7c
+65e9 9181
+65ec 8f7b
+65ed 88ae
+65f1 9ddb
+65fa 89a0
+65fb 9ddf
+6600 face
+6602 8d56
+6603 9dde
+6606 8da9
+6607 8fb8
+6609 fad1
+660a 9ddd
+660c 8fb9
+660e 96be
+660f 8da8
+6613 88d5
+6614 90cc
+6615 facf
+661c 9de4
+661e fad3
+661f 90af
+6620 8966
+6624 fad4
+6625 8f74
+6627 9686
+6628 8df0
+662d 8fba
+662e fad2
+662f 90a5
+6631 fa63
+6634 9de3
+6635 9de1
+6636 9de2
+663b fad0
+663c 928b
+663f 9e45
+6641 9de8
+6642 8e9e
+6643 8d57
+6644 9de6
+6649 9de7
+664b 9057
+664f 9de5
+6652 8e4e
+6657 fad6
+6659 fad7
+665d 9dea
+665e 9de9
+665f 9dee
+6662 9def
+6664 9deb
+6665 fad5
+6666 8a41
+6667 9dec
+6668 9ded
+6669 94d3
+666e 9581
+666f 8c69
+6670 9df0
+6673 fad9
+6674 90b0
+6676 8fbb
+667a 9271
+6681 8bc5
+6683 9df1
+6684 9df5
+6687 89c9
+6688 9df2
+6689 9df4
+668e 9df3
+6691 8f8b
+6696 9267
+6697 88c3
+6698 9df6
+6699 fada
+669d 9df7
+66a0 fadb
+66a2 92a8
+66a6 97ef
+66ab 8e62
+66ae 95e9
+66b2 fadc
+66b4 965c
+66b8 9e41
+66b9 9df9
+66bc 9dfc
+66be 9dfb
+66bf fadd
+66c1 9df8
+66c4 9e40
+66c7 93dc
+66c9 9dfa
+66d6 9e42
+66d9 8f8c
+66da 9e43
+66dc 976a
+66dd 9498
+66e0 9e44
+66e6 9e46
+66e9 9e47
+66f0 9e48
+66f2 8bc8
+66f3 8967
+66f4 8d58
+66f5 9e49
+66f7 9e4a
+66f8 8f91
+66f9 9182
+66fa fade
+66fb fa66
+66fc 99d6
+66fd 915d
+66fe 915c
+66ff 91d6
+6700 8dc5
+6703 98f0
+6708 8c8e
+6709 974c
+670b 95fc
+670d 959e
+670e fadf
+670f 9e4b
+6714 8df1
+6715 92bd
+6716 9e4c
+6717 984e
+671b 965d
+671d 92a9
+671e 9e4d
+671f 8afa
+6726 9e4e
+6727 9e4f
+6728 96d8
+672a 96a2
+672b 9696
+672c 967b
+672d 8e44
+672e 9e51
+6731 8ee9
+6734 9670
+6736 9e53
+6737 9e56
+6738 9e55
+673a 8af7
+673d 8b80
+673f 9e52
+6741 9e54
+6746 9e57
+6749 9099
+674e 979b
+674f 88c7
+6750 8dde
+6751 91ba
+6753 8edb
+6756 8ff1
+6759 9e5a
+675c 936d
+675e 9e58
+675f 91a9
+6760 9e59
+6761 8ff0
+6762 96db
+6763 9e5b
+6764 9e5c
+6765 9788
+6766 fae1
+676a 9e61
+676d 8d59
+676f 9474
+6770 9e5e
+6771 938c
+6772 9ddc
+6773 9de0
+6775 8b6e
+6777 9466
+677c 9e60
+677e 8fbc
+677f 94c2
+6785 9e66
+6787 94f8
+6789 9e5d
+678b 9e63
+678c 9e62
+6790 90cd
+6795 968d
+6797 97d1
+679a 9687
+679c 89ca
+679d 8e7d
+67a0 9867
+67a1 9e65
+67a2 9095
+67a6 9e64
+67a9 9e5f
+67af 8ccd
+67b3 9e6b
+67b4 9e69
+67b6 89cb
+67b7 9e67
+67b8 9e6d
+67b9 9e73
+67bb fae2
+67c0 fae4
+67c1 91c6
+67c4 95bf
+67c6 9e75
+67ca 9541
+67ce 9e74
+67cf 9490
+67d0 965e
+67d1 8ab9
+67d3 90f5
+67d4 8f5f
+67d8 92d1
+67da 974d
+67dd 9e70
+67de 9e6f
+67e2 9e71
+67e4 9e6e
+67e7 9e76
+67e9 9e6c
+67ec 9e6a
+67ee 9e72
+67ef 9e68
+67f1 928c
+67f3 96f6
+67f4 8ec4
+67f5 8df2
+67fb 8db8
+67fe 968f
+67ff 8a60
+6801 fae5
+6802 92cc
+6803 93c8
+6804 8968
+6813 90f0
+6816 90b2
+6817 8c49
+681e 9e78
+6821 8d5a
+6822 8a9c
+6829 9e7a
+682a 8a94
+682b 9e81
+6832 9e7d
+6834 90f1
+6838 8a6a
+6839 8daa
+683c 8a69
+683d 8dcd
+6840 9e7b
+6841 8c85
+6842 8c6a
+6843 938d
+6844 fae6
+6846 9e79
+6848 88c4
+684d 9e7c
+684e 9e7e
+6850 8bcb
+6851 8c4b
+6852 fae3
+6853 8aba
+6854 8b6a
+6859 9e82
+685c 8df7
+685d 9691
+685f 8e56
+6863 9e83
+6867 954f
+6874 9e8f
+6876 89b1
+6877 9e84
+687e 9e95
+687f 9e85
+6881 97c0
+6883 9e8c
+6885 947e
+688d 9e94
+688f 9e87
+6893 88b2
+6894 9e89
+6897 8d5b
+689b 9e8b
+689d 9e8a
+689f 9e86
+68a0 9e91
+68a2 8fbd
+68a6 9aeb
+68a7 8ce6
+68a8 979c
+68ad 9e88
+68af 92f2
+68b0 8a42
+68b1 8dab
+68b3 9e80
+68b5 9e90
+68b6 8a81
+68b9 9e8e
+68ba 9e92
+68bc 938e
+68c4 8afc
+68c6 9eb0
+68c8 fa64
+68c9 96c7
+68ca 9e97
+68cb 8afb
+68cd 9e9e
+68cf fae7
+68d2 965f
+68d4 9e9f
+68d5 9ea1
+68d7 9ea5
+68d8 9e99
+68da 9249
+68df 938f
+68e0 9ea9
+68e1 9e9c
+68e3 9ea6
+68e7 9ea0
+68ee 9058
+68ef 9eaa
+68f2 90b1
+68f9 9ea8
+68fa 8abb
+6900 986f
+6901 9e96
+6904 9ea4
+6905 88d6
+6908 9e98
+690b 96b8
+690c 9e9d
+690d 9041
+690e 92c5
+690f 9e93
+6912 9ea3
+6919 909a
+691a 9ead
+691b 8a91
+691c 8c9f
+6921 9eaf
+6922 9e9a
+6923 9eae
+6925 9ea7
+6926 9e9b
+6928 9eab
+692a 9eac
+6930 9ebd
+6934 93cc
+6936 9ea2
+6939 9eb9
+693d 9ebb
+693f 92d6
+694a 976b
+6953 9596
+6954 9eb6
+6955 91c8
+6959 9ebc
+695a 915e
+695c 9eb3
+695d 9ec0
+695e 9ebf
+6960 93ed
+6961 9ebe
+6962 93e8
+6968 fae9
+696a 9ec2
+696b 9eb5
+696d 8bc6
+696e 9eb8
+696f 8f7c
+6973 9480
+6974 9eba
+6975 8bc9
+6977 9eb2
+6978 9eb4
+6979 9eb1
+697c 984f
+697d 8a79
+697e 9eb7
+6981 9ec1
+6982 8a54
+698a 8de5
+698e 897c
+6991 9ed2
+6994 9850
+6995 9ed5
+6998 faeb
+699b 9059
+699c 9ed4
+69a0 9ed3
+69a7 9ed0
+69ae 9ec4
+69b1 9ee1
+69b2 9ec3
+69b4 9ed6
+69bb 9ece
+69be 9ec9
+69bf 9ec6
+69c1 9ec7
+69c3 9ecf
+69c7 eaa0
+69ca 9ecc
+69cb 8d5c
+69cc 92c6
+69cd 9184
+69ce 9eca
+69d0 9ec5
+69d3 9ec8
+69d8 976c
+69d9 968a
+69dd 9ecd
+69de 9ed7
+69e2 faec
+69e7 9edf
+69e8 9ed8
+69eb 9ee5
+69ed 9ee3
+69f2 9ede
+69f9 9edd
+69fb 92ce
+69fd 9185
+69ff 9edb
+6a02 9ed9
+6a05 9ee0
+6a0a 9ee6
+6a0b 94f3
+6a0c 9eec
+6a12 9ee7
+6a13 9eea
+6a14 9ee4
+6a17 9294
+6a19 9557
+6a1b 9eda
+6a1e 9ee2
+6a1f 8fbe
+6a21 96cd
+6a22 9ef6
+6a23 9ee9
+6a29 8ca0
+6a2a 89a1
+6a2b 8a7e
+6a2e 9ed1
+6a30 faed
+6a35 8fbf
+6a36 9eee
+6a38 9ef5
+6a39 8ef7
+6a3a 8a92
+6a3d 924d
+6a44 9eeb
+6a46 faef
+6a47 9ef0
+6a48 9ef4
+6a4b 8bb4
+6a58 8b6b
+6a59 9ef2
+6a5f 8b40
+6a61 93c9
+6a62 9ef1
+6a66 9ef3
+6a6b faee
+6a72 9eed
+6a73 faf0
+6a78 9eef
+6a7e faf1
+6a7f 8a80
+6a80 9268
+6a84 9efa
+6a8d 9ef8
+6a8e 8ce7
+6a90 9ef7
+6a97 9f40
+6a9c 9e77
+6aa0 9ef9
+6aa2 9efb
+6aa3 9efc
+6aaa 9f4b
+6aac 9f47
+6aae 9e8d
+6ab3 9f46
+6ab8 9f45
+6abb 9f42
+6ac1 9ee8
+6ac2 9f44
+6ac3 9f43
+6ad1 9f49
+6ad3 9845
+6ada 9f4c
+6adb 8bf9
+6ade 9f48
+6adf 9f4a
+6ae2 faf2
+6ae4 faf3
+6ae8 94a5
+6aea 9f4d
+6afa 9f51
+6afb 9f4e
+6b04 9793
+6b05 9f4f
+6b0a 9edc
+6b12 9f52
+6b16 9f53
+6b1d 8954
+6b1f 9f55
+6b20 8c87
+6b21 8e9f
+6b23 8bd3
+6b27 89a2
+6b32 977e
+6b37 9f57
+6b38 9f56
+6b39 9f59
+6b3a 8b5c
+6b3d 8bd4
+6b3e 8abc
+6b43 9f5c
+6b47 9f5b
+6b49 9f5d
+6b4c 89cc
+6b4e 9256
+6b50 9f5e
+6b53 8abd
+6b54 9f60
+6b59 9f5f
+6b5b 9f61
+6b5f 9f62
+6b61 9f63
+6b62 8e7e
+6b63 90b3
+6b64 8d9f
+6b66 9590
+6b69 95e0
+6b6a 9863
+6b6f 8e95
+6b73 8dce
+6b74 97f0
+6b78 9f64
+6b79 9f65
+6b7b 8e80
+6b7f 9f66
+6b80 9f67
+6b83 9f69
+6b84 9f68
+6b86 9677
+6b89 8f7d
+6b8a 8eea
+6b8b 8e63
+6b8d 9f6a
+6b95 9f6c
+6b96 9042
+6b98 9f6b
+6b9e 9f6d
+6ba4 9f6e
+6baa 9f6f
+6bab 9f70
+6baf 9f71
+6bb1 9f73
+6bb2 9f72
+6bb3 9f74
+6bb4 89a3
+6bb5 9269
+6bb7 9f75
+6bba 8e45
+6bbb 8a6b
+6bbc 9f76
+6bbf 9361
+6bc0 9aca
+6bc5 8b42
+6bc6 9f77
+6bcb 9f78
+6bcd 95ea
+6bce 9688
+6bd2 93c5
+6bd3 9f79
+6bd4 94e4
+6bd6 faf4
+6bd8 94f9
+6bdb 96d1
+6bdf 9f7a
+6beb 9f7c
+6bec 9f7b
+6bef 9f7e
+6bf3 9f7d
+6c08 9f81
+6c0f 8e81
+6c11 96af
+6c13 9f82
+6c14 9f83
+6c17 8b43
+6c1b 9f84
+6c23 9f86
+6c24 9f85
+6c34 9085
+6c37 9558
+6c38 8969
+6c3e 94c3
+6c3f faf5
+6c40 92f3
+6c41 8f60
+6c42 8b81
+6c4e 94c4
+6c50 8eac
+6c55 9f88
+6c57 8abe
+6c5a 8998
+6c5c faf6
+6c5d 93f0
+6c5e 9f87
+6c5f 8d5d
+6c60 9272
+6c62 9f89
+6c68 9f91
+6c6a 9f8a
+6c6f faf8
+6c70 91bf
+6c72 8b82
+6c73 9f92
+6c7a 8c88
+6c7d 8b44
+6c7e 9f90
+6c81 9f8e
+6c82 9f8b
+6c83 9780
+6c86 faf7
+6c88 92be
+6c8c 93d7
+6c8d 9f8c
+6c90 9f94
+6c92 9f93
+6c93 8c42
+6c96 89ab
+6c99 8db9
+6c9a 9f8d
+6c9b 9f8f
+6ca1 9676
+6ca2 91f2
+6cab 9697
+6cae 9f9c
+6cb1 9f9d
+6cb3 89cd
+6cb8 95a6
+6cb9 96fb
+6cba 9f9f
+6cbb 8ea1
+6cbc 8fc0
+6cbd 9f98
+6cbe 9f9e
+6cbf 8988
+6cc1 8bb5
+6cc4 9f95
+6cc5 9f9a
+6cc9 90f2
+6cca 9491
+6ccc 94e5
+6cd3 9f97
+6cd5 9640
+6cd7 9f99
+6cd9 9fa2
+6cda faf9
+6cdb 9fa0
+6cdd 9f9b
+6ce1 9641
+6ce2 9467
+6ce3 8b83
+6ce5 9344
+6ce8 928d
+6cea 9fa3
+6cef 9fa1
+6cf0 91d7
+6cf1 9f96
+6cf3 896a
+6d04 fafa
+6d0b 976d
+6d0c 9fae
+6d12 9fad
+6d17 90f4
+6d19 9faa
+6d1b 978c
+6d1e 93b4
+6d1f 9fa4
+6d25 92c3
+6d29 896b
+6d2a 8d5e
+6d2b 9fa7
+6d32 8f46
+6d33 9fac
+6d35 9fab
+6d36 9fa6
+6d38 9fa9
+6d3b 8a88
+6d3d 9fa8
+6d3e 9468
+6d41 97ac
+6d44 8ff2
+6d45 90f3
+6d59 9fb4
+6d5a 9fb2
+6d5c 956c
+6d63 9faf
+6d64 9fb1
+6d66 8959
+6d69 8d5f
+6d6a 9851
+6d6c 8a5c
+6d6e 9582
+6d6f fafc
+6d74 9781
+6d77 8a43
+6d78 905a
+6d79 9fb3
+6d85 9fb8
+6d87 fafb
+6d88 8fc1
+6d8c 974f
+6d8e 9fb5
+6d93 9fb0
+6d95 9fb6
+6d96 fb40
+6d99 97dc
+6d9b 9393
+6d9c 93c0
+6dac fb41
+6daf 8a55
+6db2 8974
+6db5 9fbc
+6db8 9fbf
+6dbc 97c1
+6dc0 9784
+6dc5 9fc6
+6dc6 9fc0
+6dc7 9fbd
+6dcb 97d2
+6dcc 9fc3
+6dcf fb42
+6dd1 8f69
+6dd2 9fc5
+6dd5 9fca
+6dd8 9391
+6dd9 9fc8
+6dde 9fc2
+6de1 9257
+6de4 9fc9
+6de6 9fbe
+6de8 9fc4
+6dea 9fcb
+6deb 88fa
+6dec 9fc1
+6dee 9fcc
+6df1 905b
+6df2 fb44
+6df3 8f7e
+6df5 95a3
+6df7 8dac
+6df8 fb43
+6df9 9fb9
+6dfa 9fc7
+6dfb 9359
+6dfc fb45
+6e05 90b4
+6e07 8a89
+6e08 8dcf
+6e09 8fc2
+6e0a 9fbb
+6e0b 8f61
+6e13 8c6b
+6e15 9fba
+6e19 9fd0
+6e1a 8f8d
+6e1b 8cb8
+6e1d 9fdf
+6e1f 9fd9
+6e20 8b94
+6e21 936e
+6e23 9fd4
+6e24 9fdd
+6e25 88ad
+6e26 8951
+6e27 fb48
+6e29 89b7
+6e2b 9fd6
+6e2c 91aa
+6e2d 9fcd
+6e2e 9fcf
+6e2f 8d60
+6e38 9fe0
+6e39 fb46
+6e3a 9fdb
+6e3c fb49
+6e3e 9fd3
+6e43 9fda
+6e4a 96a9
+6e4d 9fd8
+6e4e 9fdc
+6e56 8cce
+6e58 8fc3
+6e5b 9258
+6e5c fb47
+6e5f 9fd2
+6e67 974e
+6e6b 9fd5
+6e6e 9fce
+6e6f 9392
+6e72 9fd1
+6e76 9fd7
+6e7e 9870
+6e7f 8ebc
+6e80 969e
+6e82 9fe1
+6e8c 94ac
+6e8f 9fed
+6e90 8cb9
+6e96 8f80
+6e98 9fe3
+6e9c 97ad
+6e9d 8d61
+6e9f 9ff0
+6ea2 88ec
+6ea5 9fee
+6eaa 9fe2
+6eaf 9fe8
+6eb2 9fea
+6eb6 976e
+6eb7 9fe5
+6eba 934d
+6ebd 9fe7
+6ebf fb4a
+6ec2 9fef
+6ec4 9fe9
+6ec5 96c5
+6ec9 9fe4
+6ecb 8ea0
+6ecc 9ffc
+6ed1 8a8a
+6ed3 9fe6
+6ed4 9feb
+6ed5 9fec
+6edd 91ea
+6ede 91d8
+6eec 9ff4
+6eef 9ffa
+6ef2 9ff8
+6ef4 9348
+6ef7 e042
+6ef8 9ff5
+6efe 9ff6
+6eff 9fde
+6f01 8b99
+6f02 9559
+6f06 8ebd
+6f09 8d97
+6f0f 9852
+6f11 9ff2
+6f13 e041
+6f14 8989
+6f15 9186
+6f20 9499
+6f22 8abf
+6f23 97f8
+6f2b 969f
+6f2c 92d0
+6f31 9ff9
+6f32 9ffb
+6f38 9151
+6f3e e040
+6f3f 9ff7
+6f41 9ff1
+6f45 8ac1
+6f54 8c89
+6f58 e04e
+6f5b e049
+6f5c 90f6
+6f5f 8a83
+6f64 8f81
+6f66 e052
+6f6d e04b
+6f6e 92aa
+6f6f e048
+6f70 92d7
+6f74 e06b
+6f78 e045
+6f7a e044
+6f7c e04d
+6f80 e047
+6f81 e046
+6f82 e04c
+6f84 909f
+6f86 e043
+6f88 fb4b
+6f8e e04f
+6f91 e050
+6f97 8ac0
+6fa1 e055
+6fa3 e054
+6fa4 e056
+6faa e059
+6fb1 9362
+6fb3 e053
+6fb5 fb4c
+6fb9 e057
+6fc0 8c83
+6fc1 91f7
+6fc2 e051
+6fc3 945a
+6fc6 e058
+6fd4 e05d
+6fd5 e05b
+6fd8 e05e
+6fdb e061
+6fdf e05a
+6fe0 8d8a
+6fe1 9447
+6fe4 9fb7
+6feb 9794
+6fec e05c
+6fee e060
+6fef 91f3
+6ff1 e05f
+6ff3 e04a
+6ff5 fb4d
+6ff6 e889
+6ffa e064
+6ffe e068
+7001 e066
+7005 fb4e
+7007 fb4f
+7009 e062
+700b e063
+700f e067
+7011 e065
+7015 956d
+7018 e06d
+701a e06a
+701b e069
+701d e06c
+701e 93d2
+701f e06e
+7026 9295
+7027 91eb
+7028 fb50
+702c 90a3
+7030 e06f
+7032 e071
+703e e070
+704c 9ff3
+7051 e072
+7058 93e5
+7063 e073
+706b 89ce
+706f 9394
+7070 8a44
+7078 8b84
+707c 8edc
+707d 8dd0
+7085 fb51
+7089 9846
+708a 9086
+708e 898a
+7092 e075
+7099 e074
+70ab fb52
+70ac e078
+70ad 9259
+70ae e07b
+70af e076
+70b3 e07a
+70b8 e079
+70b9 935f
+70ba 88d7
+70bb fa62
+70c8 97f3
+70cb e07d
+70cf 8947
+70d9 e080
+70dd e07e
+70df e07c
+70f1 e077
+70f9 9642
+70fd e082
+7104 fb54
+7109 e081
+710f fb53
+7114 898b
+7119 e084
+711a 95b0
+711c e083
+7121 96b3
+7126 8fc5
+7136 9152
+713c 8fc4
+7146 fb56
+7147 fb57
+7149 97f9
+714c e08a
+714e 90f7
+7155 e086
+7156 e08b
+7159 898c
+715c fb55
+7162 e089
+7164 9481
+7165 e085
+7166 e088
+7167 8fc6
+7169 94cf
+716c e08c
+716e 8ecf
+717d 90f8
+7184 e08f
+7188 e087
+718a 8c46
+718f e08d
+7194 976f
+7195 e090
+7199 eaa4
+719f 8f6e
+71a8 e091
+71ac e092
+71b1 944d
+71b9 e094
+71be e095
+71c1 fb59
+71c3 9452
+71c8 9395
+71c9 e097
+71ce e099
+71d0 97d3
+71d2 e096
+71d4 e098
+71d5 898d
+71d7 e093
+71df 9a7a
+71e0 e09a
+71e5 9187
+71e6 8e57
+71e7 e09c
+71ec e09b
+71ed 9043
+71ee 99d7
+71f5 e09d
+71f9 e09f
+71fb e08e
+71fc e09e
+71fe fb5a
+71ff e0a0
+7206 949a
+720d e0a1
+7210 e0a2
+721b e0a3
+7228 e0a4
+722a 92dc
+722c e0a6
+722d e0a5
+7230 e0a7
+7232 e0a8
+7235 8edd
+7236 9583
+723a 96ea
+723b e0a9
+723c e0aa
+723d 9175
+723e 8ea2
+723f e0ab
+7240 e0ac
+7246 e0ad
+7247 95d0
+7248 94c5
+724b e0ae
+724c 9476
+7252 92ab
+7258 e0af
+7259 89e5
+725b 8b8d
+725d 96c4
+725f 96b4
+7261 89b2
+7262 9853
+7267 9671
+7269 95a8
+7272 90b5
+7274 e0b0
+7279 93c1
+727d 8ca1
+727e e0b1
+7280 8dd2
+7281 e0b3
+7282 e0b2
+7287 e0b4
+7292 e0b5
+7296 e0b6
+72a0 8b5d
+72a2 e0b7
+72a7 e0b8
+72ac 8ca2
+72af 94c6
+72b1 fb5b
+72b2 e0ba
+72b6 8ff3
+72b9 e0b9
+72be fb5c
+72c2 8bb6
+72c3 e0bb
+72c4 e0bd
+72c6 e0bc
+72ce e0be
+72d0 8ccf
+72d2 e0bf
+72d7 8be7
+72d9 915f
+72db 8d9d
+72e0 e0c1
+72e1 e0c2
+72e2 e0c0
+72e9 8eeb
+72ec 93c6
+72ed 8bb7
+72f7 e0c4
+72f8 924b
+72f9 e0c3
+72fc 9854
+72fd 9482
+730a e0c7
+7316 e0c9
+7317 e0c6
+731b 96d2
+731c e0c8
+731d e0ca
+731f 97c2
+7324 fb5d
+7325 e0ce
+7329 e0cd
+732a 9296
+732b 944c
+732e 8ca3
+732f e0cc
+7334 e0cb
+7336 9750
+7337 9751
+733e e0cf
+733f 898e
+7344 8d96
+7345 8e82
+734e e0d0
+734f e0d1
+7357 e0d3
+7363 8f62
+7368 e0d5
+736a e0d4
+7370 e0d6
+7372 8a6c
+7375 e0d8
+7377 fb5f
+7378 e0d7
+737a e0da
+737b e0d9
+7384 8cba
+7387 97a6
+7389 8bca
+738b 89a4
+7396 8be8
+73a9 8adf
+73b2 97e6
+73b3 e0dc
+73bb e0de
+73bd fb60
+73c0 e0df
+73c2 89cf
+73c8 e0db
+73c9 fb61
+73ca 8e58
+73cd 92bf
+73ce e0dd
+73d2 fb64
+73d6 fb62
+73de e0e2
+73e0 8eec
+73e3 fb63
+73e5 e0e0
+73ea 8c5d
+73ed 94c7
+73ee e0e1
+73f1 e0fc
+73f5 fb66
+73f8 e0e7
+73fe 8cbb
+7403 8b85
+7405 e0e4
+7406 979d
+7407 fb65
+7409 97ae
+7422 91f4
+7425 e0e6
+7426 fb67
+7429 fb69
+742a fb68
+742e fb6a
+7432 e0e8
+7433 97d4
+7434 8bd5
+7435 94fa
+7436 9469
+743a e0e9
+743f e0eb
+7441 e0ee
+7455 e0ea
+7459 e0ed
+745a 8ce8
+745b 896c
+745c e0ef
+745e 9090
+745f e0ec
+7460 97da
+7462 fb6b
+7463 e0f2
+7464 eaa2
+7469 e0f0
+746a e0f3
+746f e0e5
+7470 e0f1
+7473 8dba
+7476 e0f4
+747e e0f5
+7483 979e
+7489 fb6c
+748b e0f6
+749e e0f7
+749f fb6d
+74a2 e0e3
+74a7 e0f8
+74b0 8ac2
+74bd 8ea3
+74ca e0f9
+74cf e0fa
+74d4 e0fb
+74dc 895a
+74e0 e140
+74e2 955a
+74e3 e141
+74e6 8aa2
+74e7 e142
+74e9 e143
+74ee e144
+74f0 e146
+74f1 e147
+74f2 e145
+74f6 9572
+74f7 e149
+74f8 e148
+7501 fb6e
+7503 e14b
+7504 e14a
+7505 e14c
+750c e14d
+750d e14f
+750e e14e
+7511 8d99
+7513 e151
+7515 e150
+7518 8ac3
+751a 9072
+751c 935b
+751e e152
+751f 90b6
+7523 8e59
+7525 8999
+7526 e153
+7528 9770
+752b 95e1
+752c e154
+752f faa8
+7530 9363
+7531 9752
+7532 8d62
+7533 905c
+7537 926a
+7538 99b2
+753a 92ac
+753b 89e6
+753c e155
+7544 e156
+7546 e15b
+7549 e159
+754a e158
+754b 9dc0
+754c 8a45
+754d e157
+754f 88d8
+7551 94a8
+7554 94c8
+7559 97af
+755a e15c
+755b e15a
+755c 927b
+755d 90a4
+7560 94a9
+7562 954c
+7564 e15e
+7565 97aa
+7566 8c6c
+7567 e15f
+7569 e15d
+756a 94d4
+756b e160
+756d e161
+756f fb6f
+7570 88d9
+7573 8ff4
+7574 e166
+7576 e163
+7577 93eb
+7578 e162
+757f 8b45
+7582 e169
+7586 e164
+7587 e165
+7589 e168
+758a e167
+758b 9544
+758e 9161
+758f 9160
+7591 8b5e
+7594 e16a
+759a e16b
+759d e16c
+75a3 e16e
+75a5 e16d
+75ab 8975
+75b1 e176
+75b2 94e6
+75b3 e170
+75b5 e172
+75b8 e174
+75b9 905d
+75bc e175
+75bd e173
+75be 8ebe
+75c2 e16f
+75c3 e171
+75c5 9561
+75c7 8fc7
+75ca e178
+75cd e177
+75d2 e179
+75d4 8ea4
+75d5 8dad
+75d8 9397
+75d9 e17a
+75db 92c9
+75de e17c
+75e2 979f
+75e3 e17b
+75e9 9189
+75f0 e182
+75f2 e184
+75f3 e185
+75f4 9273
+75fa e183
+75fc e180
+75fe e17d
+75ff e17e
+7601 e181
+7609 e188
+760b e186
+760d e187
+761f e189
+7620 e18b
+7621 e18c
+7622 e18d
+7624 e18e
+7627 e18a
+7630 e190
+7634 e18f
+763b e191
+7642 97c3
+7646 e194
+7647 e192
+7648 e193
+764c 8ae0
+7652 96fc
+7656 95c8
+7658 e196
+765c e195
+7661 e197
+7662 e198
+7667 e19c
+7668 e199
+7669 e19a
+766a e19b
+766c e19d
+7670 e19e
+7672 e19f
+7676 e1a0
+7678 e1a1
+767a 94ad
+767b 936f
+767c e1a2
+767d 9492
+767e 9553
+7680 e1a3
+7682 fb70
+7683 e1a4
+7684 9349
+7686 8a46
+7687 8d63
+7688 e1a5
+768b e1a6
+768e e1a7
+7690 8e48
+7693 e1a9
+7696 e1a8
+7699 e1aa
+769a e1ab
+769b fb73
+769c fb71
+769e fb72
+76a6 fb74
+76ae 94e7
+76b0 e1ac
+76b4 e1ad
+76b7 ea89
+76b8 e1ae
+76b9 e1af
+76ba e1b0
+76bf 8e4d
+76c2 e1b1
+76c3 9475
+76c6 967e
+76c8 896d
+76ca 8976
+76cd e1b2
+76d2 e1b4
+76d6 e1b3
+76d7 9390
+76db 90b7
+76dc 9f58
+76de e1b5
+76df 96bf
+76e1 e1b6
+76e3 8ac4
+76e4 94d5
+76e5 e1b7
+76e7 e1b8
+76ea e1b9
+76ee 96da
+76f2 96d3
+76f4 92bc
+76f8 918a
+76fb e1bb
+76fe 8f82
+7701 8fc8
+7704 e1be
+7707 e1bd
+7708 e1bc
+7709 94fb
+770b 8ac5
+770c 8ca7
+771b e1c4
+771e e1c1
+771f 905e
+7720 96b0
+7724 e1c0
+7725 e1c2
+7726 e1c3
+7729 e1bf
+7737 e1c5
+7738 e1c6
+773a 92ad
+773c 8ae1
+7740 9285
+7746 fb76
+7747 e1c7
+775a e1c8
+775b e1cb
+7761 9087
+7763 93c2
+7765 e1cc
+7766 9672
+7768 e1c9
+776b e1ca
+7779 e1cf
+777e e1ce
+777f e1cd
+778b e1d1
+778e e1d0
+7791 e1d2
+779e e1d4
+77a0 e1d3
+77a5 95cb
+77ac 8f75
+77ad 97c4
+77b0 e1d5
+77b3 93b5
+77b6 e1d6
+77b9 e1d7
+77bb e1db
+77bc e1d9
+77bd e1da
+77bf e1d8
+77c7 e1dc
+77cd e1dd
+77d7 e1de
+77da e1df
+77db 96b5
+77dc e1e0
+77e2 96ee
+77e3 e1e1
+77e5 926d
+77e7 948a
+77e9 8be9
+77ed 925a
+77ee e1e2
+77ef 8bb8
+77f3 90ce
+77fc e1e3
+7802 8dbb
+780c e1e4
+7812 e1e5
+7814 8ca4
+7815 8dd3
+7820 e1e7
+7821 fb78
+7825 9375
+7826 8dd4
+7827 8b6d
+7832 9643
+7834 946a
+783a 9376
+783f 8d7b
+7845 e1e9
+784e fb79
+785d 8fc9
+7864 fb7a
+786b 97b0
+786c 8d64
+786f 8ca5
+7872 94a1
+7874 e1eb
+787a fb7b
+787c e1ed
+7881 8ce9
+7886 e1ec
+7887 92f4
+788c e1ef
+788d 8a56
+788e e1ea
+7891 94e8
+7893 894f
+7895 8dea
+7897 9871
+789a e1ee
+78a3 e1f0
+78a7 95c9
+78a9 90d7
+78aa e1f2
+78af e1f3
+78b5 e1f1
+78ba 8a6d
+78bc e1f9
+78be e1f8
+78c1 8ea5
+78c5 e1fa
+78c6 e1f5
+78ca e1fb
+78cb e1f6
+78d0 94d6
+78d1 e1f4
+78d4 e1f7
+78da e241
+78e7 e240
+78e8 9681
+78ec e1fc
+78ef 88e9
+78f4 e243
+78fd e242
+7901 8fca
+7907 e244
+790e 9162
+7911 e246
+7912 e245
+7919 e247
+7926 e1e6
+792a e1e8
+792b e249
+792c e248
+7930 fb7c
+793a 8ea6
+793c 97e7
+793e 8ed0
+7940 e24a
+7941 8c56
+7947 8b5f
+7948 8b46
+7949 8e83
+7950 9753
+7953 e250
+7955 e24f
+7956 9163
+7957 e24c
+795a e24e
+795d 8f6a
+795e 905f
+795f e24d
+7960 e24b
+7962 9449
+7965 8fcb
+7968 955b
+796d 8dd5
+7977 9398
+797a e251
+797f e252
+7980 e268
+7981 8bd6
+7984 985c
+7985 9154
+798a e253
+798d 89d0
+798e 92f5
+798f 959f
+7994 fb81
+799b fb83
+799d e254
+79a6 8b9a
+79a7 e255
+79aa e257
+79ae e258
+79b0 9448
+79b3 e259
+79b9 e25a
+79ba e25b
+79bd 8bd7
+79be 89d1
+79bf 93c3
+79c0 8f47
+79c1 8e84
+79c9 e25c
+79cb 8f48
+79d1 89c8
+79d2 9562
+79d5 e25d
+79d8 94e9
+79df 9164
+79e1 e260
+79e3 e261
+79e4 9489
+79e6 9060
+79e7 e25e
+79e9 9281
+79ec e25f
+79f0 8fcc
+79fb 88da
+7a00 8b48
+7a08 e262
+7a0b 92f6
+7a0d e263
+7a0e 90c5
+7a14 96ab
+7a17 9542
+7a18 e264
+7a19 e265
+7a1a 9274
+7a1c 97c5
+7a1f e267
+7a20 e266
+7a2e 8eed
+7a31 e269
+7a32 88ee
+7a37 e26c
+7a3b e26a
+7a3c 89d2
+7a3d 8c6d
+7a3e e26b
+7a3f 8d65
+7a40 8d92
+7a42 95e4
+7a43 e26d
+7a46 9673
+7a49 e26f
+7a4d 90cf
+7a4e 896e
+7a4f 89b8
+7a50 88aa
+7a57 e26e
+7a61 e270
+7a62 e271
+7a63 8ff5
+7a69 e272
+7a6b 8a6e
+7a70 e274
+7a74 8c8a
+7a76 8b86
+7a79 e275
+7a7a 8bf3
+7a7d e276
+7a7f 90fa
+7a81 93cb
+7a83 90de
+7a84 8df3
+7a88 e277
+7a92 9282
+7a93 918b
+7a95 e279
+7a96 e27b
+7a97 e278
+7a98 e27a
+7a9f 8c41
+7aa9 e27c
+7aaa 8c45
+7aae 8b87
+7aaf 9771
+7ab0 e27e
+7ab6 e280
+7aba 894d
+7abf e283
+7ac3 8a96
+7ac4 e282
+7ac5 e281
+7ac7 e285
+7ac8 e27d
+7aca e286
+7acb 97a7
+7acd e287
+7acf e288
+7ad1 fb84
+7ad2 9af2
+7ad3 e28a
+7ad5 e289
+7ad9 e28b
+7ada e28c
+7adc 97b3
+7add e28d
+7adf e8ed
+7ae0 8fcd
+7ae1 e28e
+7ae2 e28f
+7ae3 8f76
+7ae5 93b6
+7ae6 e290
+7ae7 fb85
+7aea 9247
+7aeb fb87
+7aed e291
+7aef 925b
+7af0 e292
+7af6 8ba3
+7af8 995e
+7af9 927c
+7afa 8eb1
+7aff 8ac6
+7b02 e293
+7b04 e2a0
+7b06 e296
+7b08 8b88
+7b0a e295
+7b0b e2a2
+7b0f e294
+7b11 8fce
+7b18 e298
+7b19 e299
+7b1b 934a
+7b1e e29a
+7b20 8a7d
+7b25 9079
+7b26 9584
+7b28 e29c
+7b2c 91e6
+7b33 e297
+7b35 e29b
+7b36 e29d
+7b39 8df9
+7b45 e2a4
+7b46 954d
+7b48 94a4
+7b49 9399
+7b4b 8bd8
+7b4c e2a3
+7b4d e2a1
+7b4f 94b3
+7b50 e29e
+7b51 927d
+7b52 939b
+7b54 939a
+7b56 8df4
+7b5d e2b6
+7b65 e2a6
+7b67 e2a8
+7b6c e2ab
+7b6e e2ac
+7b70 e2a9
+7b71 e2aa
+7b74 e2a7
+7b75 e2a5
+7b7a e29f
+7b86 95cd
+7b87 89d3
+7b8b e2b3
+7b8d e2b0
+7b8f e2b5
+7b92 e2b4
+7b94 9493
+7b95 96a5
+7b97 8e5a
+7b98 e2ae
+7b99 e2b7
+7b9a e2b2
+7b9c e2b1
+7b9d e2ad
+7b9e fb88
+7b9f e2af
+7ba1 8ac7
+7baa 925c
+7bad 90fb
+7bb1 94a0
+7bb4 e2bc
+7bb8 94a2
+7bc0 90df
+7bc1 e2b9
+7bc4 94cd
+7bc6 e2bd
+7bc7 95d1
+7bc9 927a
+7bcb e2b8
+7bcc e2ba
+7bcf e2bb
+7bdd e2be
+7be0 8ec2
+7be4 93c4
+7be5 e2c3
+7be6 e2c2
+7be9 e2bf
+7bed 9855
+7bf3 e2c8
+7bf6 e2cc
+7bf7 e2c9
+7c00 e2c5
+7c07 e2c6
+7c0d e2cb
+7c11 e2c0
+7c12 99d3
+7c13 e2c7
+7c14 e2c1
+7c17 e2ca
+7c1f e2d0
+7c21 8ac8
+7c23 e2cd
+7c27 e2ce
+7c2a e2cf
+7c2b e2d2
+7c37 e2d1
+7c38 94f4
+7c3d e2d3
+7c3e 97fa
+7c3f 95eb
+7c40 e2d8
+7c43 e2d5
+7c4c e2d4
+7c4d 90d0
+7c4f e2d7
+7c50 e2d9
+7c54 e2d6
+7c56 e2dd
+7c58 e2da
+7c5f e2db
+7c60 e2c4
+7c64 e2dc
+7c65 e2de
+7c6c e2df
+7c73 95c4
+7c75 e2e0
+7c7e 96e0
+7c81 8bcc
+7c82 8c48
+7c83 e2e1
+7c89 95b2
+7c8b 9088
+7c8d 96ae
+7c90 e2e2
+7c92 97b1
+7c95 9494
+7c97 9165
+7c98 9453
+7c9b 8f6c
+7c9f 88be
+7ca1 e2e7
+7ca2 e2e5
+7ca4 e2e3
+7ca5 8a9f
+7ca7 8fcf
+7ca8 e2e8
+7cab e2e6
+7cad e2e4
+7cae e2ec
+7cb1 e2eb
+7cb2 e2ea
+7cb3 e2e9
+7cb9 e2ed
+7cbd e2ee
+7cbe 90b8
+7cc0 e2ef
+7cc2 e2f1
+7cc5 e2f0
+7cca 8cd0
+7cce 9157
+7cd2 e2f3
+7cd6 939c
+7cd8 e2f2
+7cdc e2f4
+7cde 95b3
+7cdf 918c
+7ce0 8d66
+7ce2 e2f5
+7ce7 97c6
+7cef e2f7
+7cf2 e2f8
+7cf4 e2f9
+7cf6 e2fa
+7cf8 8e85
+7cfa e2fb
+7cfb 8c6e
+7cfe 8b8a
+7d00 8b49
+7d02 e340
+7d04 96f1
+7d05 8d67
+7d06 e2fc
+7d0a e343
+7d0b 96e4
+7d0d 945b
+7d10 9552
+7d14 8f83
+7d15 e342
+7d17 8ed1
+7d18 8d68
+7d19 8e86
+7d1a 8b89
+7d1b 95b4
+7d1c e341
+7d20 9166
+7d21 9661
+7d22 8df5
+7d2b 8e87
+7d2c 92db
+7d2e e346
+7d2f 97dd
+7d30 8dd7
+7d32 e347
+7d33 9061
+7d35 e349
+7d39 8fd0
+7d3a 8dae
+7d3f e348
+7d42 8f49
+7d43 8cbc
+7d44 9167
+7d45 e344
+7d46 e34a
+7d48 fb8a
+7d4b e345
+7d4c 8c6f
+7d4e e34d
+7d4f e351
+7d50 8c8b
+7d56 e34c
+7d5b e355
+7d5c fb8b
+7d5e 8d69
+7d61 978d
+7d62 88ba
+7d63 e352
+7d66 8b8b
+7d68 e34f
+7d6e e350
+7d71 939d
+7d72 e34e
+7d73 e34b
+7d75 8a47
+7d76 90e2
+7d79 8ca6
+7d7d e357
+7d89 e354
+7d8f e356
+7d93 e353
+7d99 8c70
+7d9a 91b1
+7d9b e358
+7d9c 918e
+7d9f e365
+7da0 fb8d
+7da2 e361
+7da3 e35b
+7dab e35f
+7dac 8ef8
+7dad 88db
+7dae e35a
+7daf e362
+7db0 e366
+7db1 8d6a
+7db2 96d4
+7db4 92d4
+7db5 e35c
+7db7 fb8c
+7db8 e364
+7dba e359
+7dbb 925d
+7dbd e35e
+7dbe 88bb
+7dbf 96c8
+7dc7 e35d
+7dca 8bd9
+7dcb 94ea
+7dcf 918d
+7dd1 97ce
+7dd2 8f8f
+7dd5 e38e
+7dd6 fb8e
+7dd8 e367
+7dda 90fc
+7ddc e363
+7ddd e368
+7dde e36a
+7de0 92f7
+7de1 e36d
+7de4 e369
+7de8 95d2
+7de9 8ac9
+7dec 96c9
+7def 88dc
+7df2 e36c
+7df4 97fb
+7dfb e36b
+7e01 898f
+7e04 93ea
+7e05 e36e
+7e09 e375
+7e0a e36f
+7e0b e376
+7e12 e372
+7e1b 949b
+7e1e 8ec8
+7e1f e374
+7e21 e371
+7e22 e377
+7e23 e370
+7e26 8f63
+7e2b 9644
+7e2e 8f6b
+7e31 e373
+7e32 e380
+7e35 e37b
+7e37 e37e
+7e39 e37c
+7e3a e381
+7e3b e37a
+7e3d e360
+7e3e 90d1
+7e41 94c9
+7e43 e37d
+7e46 e378
+7e4a 9140
+7e4b 8c71
+7e4d 8f4a
+7e52 fb8f
+7e54 9044
+7e55 9155
+7e56 e384
+7e59 e386
+7e5a e387
+7e5d e383
+7e5e e385
+7e66 e379
+7e67 e382
+7e69 e38a
+7e6a e389
+7e6d 969a
+7e70 8c4a
+7e79 e388
+7e7b e38c
+7e7c e38b
+7e7d e38f
+7e7f e391
+7e82 8e5b
+7e83 e38d
+7e88 e392
+7e89 e393
+7e8a fa5c
+7e8c e394
+7e8e e39a
+7e8f 935a
+7e90 e396
+7e92 e395
+7e93 e397
+7e94 e398
+7e96 e399
+7e9b e39b
+7e9c e39c
+7f36 8aca
+7f38 e39d
+7f3a e39e
+7f45 e39f
+7f47 fb90
+7f4c e3a0
+7f4d e3a1
+7f4e e3a2
+7f50 e3a3
+7f51 e3a4
+7f54 e3a6
+7f55 e3a5
+7f58 e3a7
+7f5f e3a8
+7f60 e3a9
+7f67 e3ac
+7f68 e3aa
+7f69 e3ab
+7f6a 8ddf
+7f6b 8c72
+7f6e 9275
+7f70 94b1
+7f72 8f90
+7f75 946c
+7f77 94eb
+7f78 e3ad
+7f79 9ceb
+7f82 e3ae
+7f83 e3b0
+7f85 9785
+7f86 e3af
+7f87 e3b2
+7f88 e3b1
+7f8a 9772
+7f8c e3b3
+7f8e 94fc
+7f94 e3b4
+7f9a e3b7
+7f9d e3b6
+7f9e e3b5
+7fa1 fb91
+7fa3 e3b8
+7fa4 8c51
+7fa8 9141
+7fa9 8b60
+7fae e3bc
+7faf e3b9
+7fb2 e3ba
+7fb6 e3bd
+7fb8 e3be
+7fb9 e3bb
+7fbd 8948
+7fc1 89a5
+7fc5 e3c0
+7fc6 e3c1
+7fca e3c2
+7fcc 9782
+7fd2 8f4b
+7fd4 e3c4
+7fd5 e3c3
+7fe0 9089
+7fe1 e3c5
+7fe6 e3c6
+7fe9 e3c7
+7feb 8ae3
+7ff0 8acb
+7ff3 e3c8
+7ff9 e3c9
+7ffb 967c
+7ffc 9783
+8000 9773
+8001 9856
+8003 8d6c
+8004 e3cc
+8005 8ed2
+8006 e3cb
+800b e3cd
+800c 8ea7
+8010 91cf
+8012 e3ce
+8015 8d6b
+8017 96d5
+8018 e3cf
+8019 e3d0
+801c e3d1
+8021 e3d2
+8028 e3d3
+8033 8ea8
+8036 96eb
+803b e3d5
+803d 925e
+803f e3d4
+8046 e3d7
+804a e3d6
+8052 e3d8
+8056 90b9
+8058 e3d9
+805a e3da
+805e 95b7
+805f e3db
+8061 918f
+8062 e3dc
+8068 e3dd
+806f 97fc
+8070 e3e0
+8072 e3df
+8073 e3de
+8074 92ae
+8076 e3e1
+8077 9045
+8079 e3e2
+807d e3e3
+807e 9857
+807f e3e4
+8084 e3e5
+8085 e3e7
+8086 e3e6
+8087 94a3
+8089 93f7
+808b 985d
+808c 94a7
+8093 e3e9
+8096 8fd1
+8098 9549
+809a e3ea
+809b e3e8
+809d 8acc
+80a1 8cd2
+80a2 8e88
+80a5 94ec
+80a9 8ca8
+80aa 9662
+80ac e3ed
+80ad e3eb
+80af 8d6d
+80b1 8d6e
+80b2 88e7
+80b4 8de6
+80ba 9478
+80c3 88dd
+80c4 e3f2
+80c6 925f
+80cc 9477
+80ce 91d9
+80d6 e3f4
+80d9 e3f0
+80da e3f3
+80db e3ee
+80dd e3f1
+80de 9645
+80e1 8cd3
+80e4 88fb
+80e5 e3ef
+80ef e3f6
+80f1 e3f7
+80f4 93b7
+80f8 8bb9
+80fc e445
+80fd 945c
+8102 8e89
+8105 8bba
+8106 90c6
+8107 9865
+8108 96ac
+8109 e3f5
+810a 90d2
+811a 8b72
+811b e3f8
+8123 e3fa
+8129 e3f9
+812f e3fb
+8131 9245
+8133 945d
+8139 92af
+813e e442
+8146 e441
+814b e3fc
+814e 9074
+8150 9585
+8151 e444
+8153 e443
+8154 8d6f
+8155 9872
+815f e454
+8165 e448
+8166 e449
+816b 8eee
+816e e447
+8170 8d98
+8171 e446
+8174 e44a
+8178 92b0
+8179 95a0
+817a 9142
+817f 91da
+8180 e44e
+8182 e44f
+8183 e44b
+8188 e44c
+818a e44d
+818f 8d70
+8193 e455
+8195 e451
+819a 9586
+819c 968c
+819d 9547
+81a0 e450
+81a3 e453
+81a4 e452
+81a8 9663
+81a9 e456
+81b0 e457
+81b3 9156
+81b5 e458
+81b8 e45a
+81ba e45e
+81bd e45b
+81be e459
+81bf 945e
+81c0 e45c
+81c2 e45d
+81c6 89b0
+81c8 e464
+81c9 e45f
+81cd e460
+81d1 e461
+81d3 919f
+81d8 e463
+81d9 e462
+81da e465
+81df e466
+81e0 e467
+81e3 9062
+81e5 89e7
+81e7 e468
+81e8 97d5
+81ea 8ea9
+81ed 8f4c
+81f3 8e8a
+81f4 9276
+81fa e469
+81fb e46a
+81fc 8950
+81fe e46b
+8201 e46c
+8202 e46d
+8205 e46e
+8207 e46f
+8208 8bbb
+8209 9da8
+820a e470
+820c 90e3
+820d e471
+820e 8ec9
+8210 e472
+8212 98ae
+8216 e473
+8217 95dc
+8218 8ada
+821b 9143
+821c 8f77
+821e 9591
+821f 8f4d
+8229 e474
+822a 8d71
+822b e475
+822c 94ca
+822e e484
+8233 e477
+8235 91c7
+8236 9495
+8237 8cbd
+8238 e476
+8239 9144
+8240 e478
+8247 92f8
+8258 e47a
+8259 e479
+825a e47c
+825d e47b
+825f e47d
+8262 e480
+8264 e47e
+8266 8acd
+8268 e481
+826a e482
+826b e483
+826e 8daf
+826f 97c7
+8271 e485
+8272 9046
+8276 8990
+8277 e486
+8278 e487
+827e e488
+828b 88f0
+828d e489
+8292 e48a
+8299 9587
+829d 8ec5
+829f e48c
+82a5 8a48
+82a6 88b0
+82ab e48b
+82ac e48e
+82ad 946d
+82af 9063
+82b1 89d4
+82b3 9646
+82b8 8c7c
+82b9 8bda
+82bb e48d
+82bd 89e8
+82c5 8aa1
+82d1 8991
+82d2 e492
+82d3 97e8
+82d4 91db
+82d7 9563
+82d9 e49e
+82db 89d5
+82dc e49c
+82de e49a
+82df e491
+82e1 e48f
+82e3 e490
+82e5 8ee1
+82e6 8bea
+82e7 9297
+82eb 93cf
+82f1 8970
+82f3 e494
+82f4 e493
+82f9 e499
+82fa e495
+82fb e498
+8301 fb93
+8302 96ce
+8303 e497
+8304 89d6
+8305 8a9d
+8306 e49b
+8309 e49d
+830e 8c73
+8316 e4a1
+8317 e4aa
+8318 e4ab
+831c 88a9
+8323 e4b2
+8328 88ef
+832b e4a9
+832f e4a8
+8331 e4a3
+8332 e4a2
+8334 e4a0
+8335 e49f
+8336 9283
+8338 91f9
+8339 e4a5
+8340 e4a4
+8345 e4a7
+8349 9190
+834a 8c74
+834f 8960
+8350 e4a6
+8352 8d72
+8358 9191
+8362 fb94
+8373 e4b8
+8375 e4b9
+8377 89d7
+837b 89ac
+837c e4b6
+837f fb95
+8385 e4ac
+8387 e4b4
+8389 e4bb
+838a e4b5
+838e e4b3
+8393 e496
+8396 e4b1
+839a e4ad
+839e 8ace
+839f e4af
+83a0 e4ba
+83a2 e4b0
+83a8 e4bc
+83aa e4ae
+83ab 949c
+83b1 9789
+83b5 e4b7
+83bd e4cd
+83c1 e4c5
+83c5 909b
+83c7 fb96
+83ca 8b65
+83cc 8bdb
+83ce e4c0
+83d3 89d9
+83d6 8fd2
+83d8 e4c3
+83dc 8dd8
+83df 9370
+83e0 e4c8
+83e9 95ec
+83eb e4bf
+83ef 89d8
+83f0 8cd4
+83f1 9548
+83f2 e4c9
+83f4 e4bd
+83f6 fb97
+83f7 e4c6
+83fb e4d0
+83fd e4c1
+8403 e4c2
+8404 93b8
+8407 e4c7
+840b e4c4
+840c 9647
+840d e4ca
+840e 88de
+8413 e4be
+8420 e4cc
+8422 e4cb
+8429 948b
+842a e4d2
+842c e4dd
+8431 8a9e
+8435 e4e0
+8438 e4ce
+843c e4d3
+843d 978e
+8446 e4dc
+8448 fb98
+8449 9774
+844e 97a8
+8457 9298
+845b 8a8b
+8461 9592
+8462 e4e2
+8463 939f
+8466 88af
+8469 e4db
+846b e4d7
+846c 9192
+846d e4d1
+846e e4d9
+846f e4de
+8471 944b
+8475 88a8
+8477 e4d6
+8479 e4df
+847a 9598
+8482 e4da
+8484 e4d5
+848b 8fd3
+8490 8f4e
+8494 8eaa
+8499 96d6
+849c 9566
+849f e4e5
+84a1 e4ee
+84ad e4d8
+84b2 8a97
+84b4 fb99
+84b8 8ff6
+84b9 e4e3
+84bb e4e8
+84bc 9193
+84bf e4e4
+84c1 e4eb
+84c4 927e
+84c6 e4ec
+84c9 9775
+84ca e4e1
+84cb 8a57
+84cd e4e7
+84d0 e4ea
+84d1 96aa
+84d6 e4ed
+84d9 e4e6
+84da e4e9
+84dc fa60
+84ec 9648
+84ee 9840
+84f4 e4f1
+84fc e4f8
+84ff e4f0
+8500 8ec1
+8506 e4cf
+8511 95cc
+8513 96a0
+8514 e4f7
+8515 e4f6
+8517 e4f2
+8518 e4f3
+851a 8955
+851f e4f5
+8521 e4ef
+8526 92d3
+852c e4f4
+852d 88fc
+8535 91a0
+853d 95c1
+8540 e4f9
+8541 e540
+8543 94d7
+8548 e4fc
+8549 8fd4
+854a 8ec7
+854b e542
+854e 8bbc
+8553 fb9a
+8555 e543
+8557 9599
+8558 e4fb
+8559 fb9b
+855a e4d4
+8563 e4fa
+8568 986e
+8569 93a0
+856a 9593
+856b fb9c
+856d e54a
+8577 e550
+857e e551
+8580 e544
+8584 9496
+8587 e54e
+8588 e546
+858a e548
+8590 e552
+8591 e547
+8594 e54b
+8597 8992
+8599 93e3
+859b e54c
+859c e54f
+85a4 e545
+85a6 9145
+85a8 e549
+85a9 8e46
+85aa 9064
+85ab 8c4f
+85ac 96f2
+85ae 96f7
+85af 8f92
+85b0 fb9e
+85b9 e556
+85ba e554
+85c1 986d
+85c9 e553
+85cd 9795
+85cf e555
+85d0 e557
+85d5 e558
+85dc e55b
+85dd e559
+85e4 93a1
+85e5 e55a
+85e9 94cb
+85ea e54d
+85f7 8f93
+85f9 e55c
+85fa e561
+85fb 9194
+85fe e560
+8602 e541
+8606 e562
+8607 9168
+860a e55d
+860b e55f
+8613 e55e
+8616 9f50
+8617 9f41
+861a e564
+8622 e563
+862d 9796
+862f e1ba
+8630 e565
+863f e566
+864d e567
+864e 8cd5
+8650 8b73
+8654 e569
+8655 997c
+865a 8b95
+865c 97b8
+865e 8bf1
+865f e56a
+8667 e56b
+866b 928e
+8671 e56c
+8679 93f8
+867b 88b8
+868a 89e1
+868b e571
+868c e572
+8693 e56d
+8695 8e5c
+86a3 e56e
+86a4 9461
+86a9 e56f
+86aa e570
+86ab e57a
+86af e574
+86b0 e577
+86b6 e573
+86c4 e575
+86c6 e576
+86c7 8ed6
+86c9 e578
+86cb 9260
+86cd 8c75
+86ce 8a61
+86d4 e57b
+86d9 8a5e
+86db e581
+86de e57c
+86df e580
+86e4 94b8
+86e9 e57d
+86ec e57e
+86ed 9567
+86ee 94d8
+86ef e582
+86f8 91fb
+86f9 e58c
+86fb e588
+86fe 89e9
+8700 e586
+8702 9649
+8703 e587
+8706 e584
+8708 e585
+8709 e58a
+870a e58d
+870d e58b
+8711 e589
+8712 e583
+8718 9277
+871a e594
+871c 96a8
+8725 e592
+8729 e593
+8734 e58e
+8737 e590
+873b e591
+873f e58f
+8749 90e4
+874b 9858
+874c e598
+874e e599
+8753 e59f
+8755 9049
+8757 e59b
+8759 e59e
+875f e596
+8760 e595
+8763 e5a0
+8766 89da
+8768 e59c
+876a e5a1
+876e e59d
+8774 e59a
+8776 92b1
+8778 e597
+877f 9488
+8782 e5a5
+878d 975a
+879f e5a4
+87a2 e5a3
+87ab e5ac
+87af e5a6
+87b3 e5ae
+87ba 9786
+87bb e5b1
+87bd e5a8
+87c0 e5a9
+87c4 e5ad
+87c6 e5b0
+87c7 e5af
+87cb e5a7
+87d0 e5aa
+87d2 e5bb
+87e0 e5b4
+87ef e5b2
+87f2 e5b3
+87f6 e5b8
+87f7 e5b9
+87f9 8a49
+87fb 8b61
+87fe e5b7
+8805 e5a2
+8807 fba1
+880d e5b6
+880e e5ba
+880f e5b5
+8811 e5bc
+8815 e5be
+8816 e5bd
+8821 e5c0
+8822 e5bf
+8823 e579
+8827 e5c4
+8831 e5c1
+8836 e5c2
+8839 e5c3
+883b e5c5
+8840 8c8c
+8842 e5c7
+8844 e5c6
+8846 8f4f
+884c 8d73
+884d 9fa5
+8852 e5c8
+8853 8f70
+8857 8a58
+8859 e5c9
+885b 8971
+885d 8fd5
+885e e5ca
+8861 8d74
+8862 e5cb
+8863 88df
+8868 955c
+886b e5cc
+8870 908a
+8872 e5d3
+8875 e5d0
+8877 928f
+887d e5d1
+887e e5ce
+887f 8bdc
+8881 e5cd
+8882 e5d4
+8888 8c55
+888b 91dc
+888d e5da
+8892 e5d6
+8896 91b3
+8897 e5d5
+8899 e5d8
+889e e5cf
+88a2 e5d9
+88a4 e5db
+88ab 94ed
+88ae e5d7
+88b0 e5dc
+88b1 e5de
+88b4 8cd1
+88b5 e5d2
+88b7 88bf
+88bf e5dd
+88c1 8dd9
+88c2 97f4
+88c3 e5df
+88c4 e5e0
+88c5 9195
+88cf 97a0
+88d4 e5e1
+88d5 9754
+88d8 e5e2
+88d9 e5e3
+88dc 95e2
+88dd e5e4
+88df 8dbe
+88e1 97a1
+88e8 e5e9
+88f2 e5ea
+88f3 8fd6
+88f4 e5e8
+88f5 fba2
+88f8 9787
+88f9 e5e5
+88fc e5e7
+88fd 90bb
+88fe 909e
+8902 e5e6
+8904 e5eb
+8907 95a1
+890a e5ed
+890c e5ec
+8910 8a8c
+8912 964a
+8913 e5ee
+891c fa5d
+891d e5fa
+891e e5f0
+8925 e5f1
+892a e5f2
+892b e5f3
+8936 e5f7
+8938 e5f8
+893b e5f6
+8941 e5f4
+8943 e5ef
+8944 e5f5
+894c e5f9
+894d e8b5
+8956 89a6
+895e e5fc
+895f 8bdd
+8960 e5fb
+8964 e641
+8966 e640
+896a e643
+896d e642
+896f e644
+8972 8f50
+8974 e645
+8977 e646
+897e e647
+897f 90bc
+8981 9776
+8983 e648
+8986 95a2
+8987 9465
+8988 e649
+898a e64a
+898b 8ca9
+898f 8b4b
+8993 e64b
+8996 8e8b
+8997 9460
+8998 e64c
+899a 8a6f
+89a1 e64d
+89a6 e64f
+89a7 9797
+89a9 e64e
+89aa 9065
+89ac e650
+89af e651
+89b2 e652
+89b3 8acf
+89ba e653
+89bd e654
+89bf e655
+89c0 e656
+89d2 8a70
+89da e657
+89dc e658
+89dd e659
+89e3 89f0
+89e6 9047
+89e7 e65a
+89f4 e65b
+89f8 e65c
+8a00 8cbe
+8a02 92f9
+8a03 e65d
+8a08 8c76
+8a0a 9075
+8a0c e660
+8a0e 93a2
+8a10 e65f
+8a12 fba3
+8a13 8c50
+8a16 e65e
+8a17 91f5
+8a18 8b4c
+8a1b e661
+8a1d e662
+8a1f 8fd7
+8a23 8c8d
+8a25 e663
+8a2a 964b
+8a2d 90dd
+8a31 8b96
+8a33 96f3
+8a34 9169
+8a36 e664
+8a37 fba4
+8a3a 9066
+8a3b 9290
+8a3c 8fd8
+8a41 e665
+8a46 e668
+8a48 e669
+8a50 8dbc
+8a51 91c0
+8a52 e667
+8a54 8fd9
+8a55 955d
+8a5b e666
+8a5e 8e8c
+8a60 8972
+8a62 e66d
+8a63 8c77
+8a66 8e8e
+8a69 8e8d
+8a6b 986c
+8a6c e66c
+8a6d e66b
+8a6e 9146
+8a70 8b6c
+8a71 9862
+8a72 8a59
+8a73 8fda
+8a79 fba5
+8a7c e66a
+8a82 e66f
+8a84 e670
+8a85 e66e
+8a87 8cd6
+8a89 975f
+8a8c 8e8f
+8a8d 9446
+8a91 e673
+8a93 90be
+8a95 9261
+8a98 9755
+8a9a e676
+8a9e 8cea
+8aa0 90bd
+8aa1 e672
+8aa3 e677
+8aa4 8ceb
+8aa5 e674
+8aa6 e675
+8aa7 fba6
+8aa8 e671
+8aac 90e0
+8aad 93c7
+8ab0 924e
+8ab2 89db
+8ab9 94ee
+8abc 8b62
+8abe fba7
+8abf 92b2
+8ac2 e67a
+8ac4 e678
+8ac7 926b
+8acb 90bf
+8acc 8ad0
+8acd e679
+8acf 907a
+8ad2 97c8
+8ad6 985f
+8ada e67b
+8adb e687
+8adc 92b3
+8ade e686
+8adf fba8
+8ae0 e683
+8ae1 e68b
+8ae2 e684
+8ae4 e680
+8ae6 92fa
+8ae7 e67e
+8aeb e67c
+8aed 9740
+8aee 8e90
+8af1 e681
+8af3 e67d
+8af6 fbaa
+8af7 e685
+8af8 8f94
+8afa 8cbf
+8afe 91f8
+8b00 9664
+8b01 8979
+8b02 88e0
+8b04 93a3
+8b07 e689
+8b0c e688
+8b0e 93e4
+8b10 e68d
+8b14 e682
+8b16 e68c
+8b17 e68e
+8b19 8caa
+8b1a e68a
+8b1b 8d75
+8b1d 8ed3
+8b20 e68f
+8b21 9777
+8b26 e692
+8b28 e695
+8b2b e693
+8b2c 9554
+8b33 e690
+8b39 8bde
+8b3e e694
+8b41 e696
+8b49 e69a
+8b4c e697
+8b4e e699
+8b4f e698
+8b53 fbab
+8b56 e69b
+8b58 8eaf
+8b5a e69d
+8b5b e69c
+8b5c 9588
+8b5f e69f
+8b66 8c78
+8b6b e69e
+8b6c e6a0
+8b6f e6a1
+8b70 8b63
+8b71 e3bf
+8b72 8ff7
+8b74 e6a2
+8b77 8cec
+8b7d e6a3
+8b7f fbac
+8b80 e6a4
+8b83 8e5d
+8b8a 9dcc
+8b8c e6a5
+8b8e e6a6
+8b90 8f51
+8b92 e6a7
+8b93 e6a8
+8b96 e6a9
+8b99 e6aa
+8b9a e6ab
+8c37 924a
+8c3a e6ac
+8c3f e6ae
+8c41 e6ad
+8c46 93a4
+8c48 e6af
+8c4a 964c
+8c4c e6b0
+8c4e e6b1
+8c50 e6b2
+8c55 e6b3
+8c5a 93d8
+8c61 8fdb
+8c62 e6b4
+8c6a 8d8b
+8c6b 98ac
+8c6c e6b5
+8c78 e6b6
+8c79 955e
+8c7a e6b7
+8c7c e6bf
+8c82 e6b8
+8c85 e6ba
+8c89 e6b9
+8c8a e6bb
+8c8c 9665
+8c8d e6bc
+8c8e e6bd
+8c94 e6be
+8c98 e6c0
+8c9d 8a4c
+8c9e 92e5
+8ca0 9589
+8ca1 8de0
+8ca2 8d76
+8ca7 956e
+8ca8 89dd
+8ca9 94cc
+8caa e6c3
+8cab 8ad1
+8cac 90d3
+8cad e6c2
+8cae e6c7
+8caf 9299
+8cb0 96e1
+8cb2 e6c5
+8cb3 e6c6
+8cb4 8b4d
+8cb6 e6c8
+8cb7 9483
+8cb8 91dd
+8cbb 94ef
+8cbc 935c
+8cbd e6c4
+8cbf 9666
+8cc0 89ea
+8cc1 e6ca
+8cc2 9847
+8cc3 92c0
+8cc4 9864
+8cc7 8e91
+8cc8 e6c9
+8cca 91af
+8ccd e6da
+8cce 9147
+8cd1 93f6
+8cd3 956f
+8cda e6cd
+8cdb 8e5e
+8cdc 8e92
+8cde 8fdc
+8ce0 9485
+8ce2 8cab
+8ce3 e6cc
+8ce4 e6cb
+8ce6 958a
+8cea 8ebf
+8ced 9371
+8cf0 fbad
+8cf4 fbae
+8cfa e6cf
+8cfb e6d0
+8cfc 8d77
+8cfd e6ce
+8d04 e6d1
+8d05 e6d2
+8d07 e6d4
+8d08 91a1
+8d0a e6d3
+8d0b 8ae4
+8d0d e6d6
+8d0f e6d5
+8d10 e6d7
+8d12 fbaf
+8d13 e6d9
+8d14 e6db
+8d16 e6dc
+8d64 90d4
+8d66 8ecd
+8d67 e6dd
+8d6b 8a71
+8d6d e6de
+8d70 9196
+8d71 e6df
+8d73 e6e0
+8d74 958b
+8d76 fbb0
+8d77 8b4e
+8d81 e6e1
+8d85 92b4
+8d8a 897a
+8d99 e6e2
+8da3 8eef
+8da8 9096
+8db3 91ab
+8dba e6e5
+8dbe e6e4
+8dc2 e6e3
+8dcb e6eb
+8dcc e6e9
+8dcf e6e6
+8dd6 e6e8
+8dda e6e7
+8ddb e6ea
+8ddd 8b97
+8ddf e6ee
+8de1 90d5
+8de3 e6ef
+8de8 8cd7
+8dea e6ec
+8deb e6ed
+8def 9848
+8df3 92b5
+8df5 9148
+8dfc e6f0
+8dff e6f3
+8e08 e6f1
+8e09 e6f2
+8e0a 9778
+8e0f 93a5
+8e10 e6f6
+8e1d e6f4
+8e1e e6f5
+8e1f e6f7
+8e2a e748
+8e30 e6fa
+8e34 e6fb
+8e35 e6f9
+8e42 e6f8
+8e44 92fb
+8e47 e740
+8e48 e744
+8e49 e741
+8e4a e6fc
+8e4c e742
+8e50 e743
+8e55 e74a
+8e59 e745
+8e5f 90d6
+8e60 e747
+8e63 e749
+8e64 e746
+8e72 e74c
+8e74 8f52
+8e76 e74b
+8e7c e74d
+8e81 e74e
+8e84 e751
+8e85 e750
+8e87 e74f
+8e8a e753
+8e8b e752
+8e8d 96f4
+8e91 e755
+8e93 e754
+8e94 e756
+8e99 e757
+8ea1 e759
+8eaa e758
+8eab 9067
+8eac e75a
+8eaf 8beb
+8eb0 e75b
+8eb1 e75d
+8ebe e75e
+8ec5 e75f
+8ec6 e75c
+8ec8 e760
+8eca 8ed4
+8ecb e761
+8ecc 8b4f
+8ecd 8c52
+8ecf fbb2
+8ed2 8cac
+8edb e762
+8edf 93ee
+8ee2 935d
+8ee3 e763
+8eeb e766
+8ef8 8eb2
+8efb e765
+8efc e764
+8efd 8c79
+8efe e767
+8f03 8a72
+8f05 e769
+8f09 8dda
+8f0a e768
+8f0c e771
+8f12 e76b
+8f13 e76d
+8f14 95e3
+8f15 e76a
+8f19 e76c
+8f1b e770
+8f1c e76e
+8f1d 8b50
+8f1f e76f
+8f26 e772
+8f29 9479
+8f2a 97d6
+8f2f 8f53
+8f33 e773
+8f38 9741
+8f39 e775
+8f3b e774
+8f3e e778
+8f3f 9760
+8f42 e777
+8f44 8a8d
+8f45 e776
+8f46 e77b
+8f49 e77a
+8f4c e779
+8f4d 9351
+8f4e e77c
+8f57 e77d
+8f5c e77e
+8f5f 8d8c
+8f61 8c44
+8f62 e780
+8f63 e781
+8f64 e782
+8f9b 9068
+8f9c e783
+8f9e 8eab
+8f9f e784
+8fa3 e785
+8fa7 999f
+8fa8 999e
+8fad e786
+8fae e390
+8faf e787
+8fb0 9243
+8fb1 904a
+8fb2 945f
+8fb7 e788
+8fba 95d3
+8fbb 92d2
+8fbc 8d9e
+8fbf 9248
+8fc2 8949
+8fc4 9698
+8fc5 9076
+8fce 8c7d
+8fd1 8bdf
+8fd4 95d4
+8fda e789
+8fe2 e78b
+8fe5 e78a
+8fe6 89de
+8fe9 93f4
+8fea e78c
+8feb 9497
+8fed 9352
+8fef e78d
+8ff0 8f71
+8ff4 e78f
+8ff7 96c0
+8ff8 e79e
+8ff9 e791
+8ffa e792
+8ffd 92c7
+9000 91de
+9001 9197
+9003 93a6
+9005 e790
+9006 8b74
+900b e799
+900d e796
+900e e7a3
+900f 93a7
+9010 9280
+9011 e793
+9013 92fc
+9014 9372
+9015 e794
+9016 e798
+9017 9080
+9019 9487
+901a 92ca
+901d 90c0
+901e e797
+901f 91ac
+9020 91a2
+9021 e795
+9022 88a7
+9023 9841
+9027 e79a
+902e 91df
+9031 8f54
+9032 9069
+9035 e79c
+9036 e79b
+9038 88ed
+9039 e79d
+903c 954e
+903e e7a5
+9041 93d9
+9042 908b
+9045 9278
+9047 8bf6
+9049 e7a4
+904a 9756
+904b 895e
+904d 95d5
+904e 89df
+904f e79f
+9050 e7a0
+9051 e7a1
+9052 e7a2
+9053 93b9
+9054 9242
+9055 88e1
+9056 e7a6
+9058 e7a7
+9059 eaa1
+905c 91bb
+905e e7a8
+9060 8993
+9061 916b
+9063 8cad
+9065 9779
+9067 fbb5
+9068 e7a9
+9069 934b
+906d 9198
+906e 8ed5
+906f e7aa
+9072 e7ad
+9075 8f85
+9076 e7ab
+9077 914a
+9078 9149
+907a 88e2
+907c 97c9
+907d e7af
+907f 94f0
+9080 e7b1
+9081 e7b0
+9082 e7ae
+9083 e284
+9084 8ad2
+9087 e78e
+9089 e7b3
+908a e7b2
+908f e7b4
+9091 9757
+90a3 93df
+90a6 964d
+90a8 e7b5
+90aa 8ed7
+90af e7b6
+90b1 e7b7
+90b5 e7b8
+90b8 9340
+90c1 88e8
+90ca 8d78
+90ce 9859
+90db e7bc
+90de fbb6
+90e1 8c53
+90e2 e7b9
+90e4 e7ba
+90e8 9594
+90ed 8a73
+90f5 9758
+90f7 8bbd
+90fd 9373
+9102 e7bd
+9112 e7be
+9115 fbb8
+9119 e7bf
+9127 fbb9
+912d 9341
+9130 e7c1
+9132 e7c0
+9149 93d1
+914a e7c2
+914b 8f55
+914c 8ede
+914d 947a
+914e 9291
+9152 8ef0
+9154 908c
+9156 e7c3
+9158 e7c4
+9162 907c
+9163 e7c5
+9165 e7c6
+9169 e7c7
+916a 978f
+916c 8f56
+9172 e7c9
+9173 e7c8
+9175 8d79
+9177 8d93
+9178 8e5f
+9182 e7cc
+9187 8f86
+9189 e7cb
+918b e7ca
+918d 91e7
+9190 8ced
+9192 90c1
+9197 94ae
+919c 8f58
+91a2 e7cd
+91a4 8fdd
+91aa e7d0
+91ab e7ce
+91af e7cf
+91b4 e7d2
+91b5 e7d1
+91b8 8ff8
+91ba e7d3
+91c0 e7d4
+91c1 e7d5
+91c6 94ce
+91c7 8dd1
+91c8 8edf
+91c9 e7d6
+91cb e7d7
+91cc 97a2
+91cd 8f64
+91ce 96ec
+91cf 97ca
+91d0 e7d8
+91d1 8be0
+91d6 e7d9
+91d7 fbbb
+91d8 9342
+91da fbba
+91db e7dc
+91dc 8a98
+91dd 906a
+91de fbbc
+91df e7da
+91e1 e7db
+91e3 92de
+91e4 fbbf
+91e5 fbc0
+91e6 9674
+91e7 8bfa
+91ed fbbd
+91ee fbbe
+91f5 e7de
+91f6 e7df
+91fc e7dd
+91ff e7e1
+9206 fbc1
+920a fbc3
+920d 93dd
+920e 8a62
+9210 fbc2
+9211 e7e5
+9214 e7e2
+9215 e7e4
+921e e7e0
+9229 e86e
+922c e7e3
+9234 97e9
+9237 8cd8
+9239 fbca
+923a fbc4
+923c fbc6
+923f e7ed
+9240 fbc5
+9244 9353
+9245 e7e8
+9248 e7eb
+9249 e7e9
+924b e7ee
+924e fbc7
+9250 e7ef
+9251 fbc9
+9257 e7e7
+9259 fbc8
+925a e7f4
+925b 8994
+925e e7e6
+9262 94ab
+9264 e7ea
+9266 8fde
+9267 fbcb
+9271 8d7a
+9277 fbcd
+9278 fbce
+927e 9667
+9280 8be2
+9283 8f65
+9285 93ba
+9288 fa5f
+9291 914c
+9293 e7f2
+9295 e7ec
+9296 e7f1
+9298 96c1
+929a 92b6
+929b e7f3
+929c e7f0
+92a7 fbcc
+92ad 914b
+92b7 e7f7
+92b9 e7f6
+92cf e7f5
+92d0 fbd2
+92d2 964e
+92d3 fbd6
+92d5 fbd4
+92d7 fbd0
+92d9 fbd1
+92e0 fbd5
+92e4 8f9b
+92e7 fbcf
+92e9 e7f8
+92ea 95dd
+92ed 8973
+92f2 9565
+92f3 9292
+92f8 8b98
+92f9 fa65
+92fa e7fa
+92fb fbd9
+92fc 8d7c
+92ff fbdc
+9302 fbde
+9306 8e4b
+930f e7f9
+9310 908d
+9318 908e
+9319 e840
+931a e842
+931d fbdd
+931e fbdb
+9320 8ff9
+9321 fbd8
+9322 e841
+9323 e843
+9325 fbd7
+9326 8bd1
+9328 9564
+932b 8ee0
+932c 9842
+932e e7fc
+932f 8df6
+9332 985e
+9335 e845
+933a e844
+933b e846
+9344 e7fb
+9348 fa5e
+934b 93e7
+934d 9374
+9354 92d5
+9356 e84b
+9357 fbe0
+935b 9262
+935c e847
+9360 e848
+936c 8c4c
+936e e84a
+9370 fbdf
+9375 8cae
+937c e849
+937e 8fdf
+938c 8a99
+9394 e84f
+9396 8dbd
+9397 9199
+939a 92c8
+93a4 fbe1
+93a7 8a5a
+93ac e84d
+93ad e84e
+93ae 92c1
+93b0 e84c
+93b9 e850
+93c3 e856
+93c6 fbe2
+93c8 e859
+93d0 e858
+93d1 934c
+93d6 e851
+93d7 e852
+93d8 e855
+93dd e857
+93de fbe3
+93e1 8bbe
+93e4 e85a
+93e5 e854
+93e8 e853
+93f8 fbe4
+9403 e85e
+9407 e85f
+9410 e860
+9413 e85d
+9414 e85c
+9418 8fe0
+9419 93a8
+941a e85b
+9421 e864
+942b e862
+9431 fbe5
+9435 e863
+9436 e861
+9438 91f6
+943a e865
+9441 e866
+9444 e868
+9445 fbe6
+9448 fbe7
+9451 8ad3
+9452 e867
+9453 96f8
+945a e873
+945b e869
+945e e86c
+9460 e86a
+9462 e86b
+946a e86d
+9470 e86f
+9475 e870
+9477 e871
+947c e874
+947d e872
+947e e875
+947f e877
+9481 e876
+9577 92b7
+9580 96e5
+9582 e878
+9583 914d
+9587 e879
+9589 95c2
+958a e87a
+958b 8a4a
+958f 895b
+9591 8ad5
+9592 fbe8
+9593 8ad4
+9594 e87b
+9596 e87c
+9598 e87d
+9599 e87e
+95a0 e880
+95a2 8ad6
+95a3 8a74
+95a4 8d7d
+95a5 94b4
+95a7 e882
+95a8 e881
+95ad e883
+95b2 897b
+95b9 e886
+95bb e885
+95bc e884
+95be e887
+95c3 e88a
+95c7 88c5
+95ca e888
+95cc e88c
+95cd e88b
+95d4 e88e
+95d5 e88d
+95d6 e88f
+95d8 93ac
+95dc e890
+95e1 e891
+95e2 e893
+95e5 e892
+961c 958c
+9621 e894
+9628 e895
+962a 8de3
+962e e896
+962f e897
+9632 9668
+963b 916a
+963f 88a2
+9640 91c9
+9642 e898
+9644 958d
+964b e89b
+964c e899
+964d 8d7e
+964f e89a
+9650 8cc0
+965b 95c3
+965c e89d
+965d e89f
+965e e89e
+965f e8a0
+9662 8940
+9663 9077
+9664 8f9c
+9665 8ad7
+9666 e8a1
+966a 9486
+966c e8a3
+9670 8941
+9672 e8a2
+9673 92c2
+9675 97cb
+9676 93a9
+9677 e89c
+9678 97a4
+967a 8caf
+967d 977a
+9685 8bf7
+9686 97b2
+9688 8c47
+968a 91e0
+968b e440
+968d e8a4
+968e 8a4b
+968f 908f
+9694 8a75
+9695 e8a6
+9697 e8a7
+9698 e8a5
+9699 8c84
+969b 8ddb
+969c 8fe1
+969d fbeb
+96a0 8942
+96a3 97d7
+96a7 e8a9
+96a8 e7ac
+96aa e8a8
+96af fbec
+96b0 e8ac
+96b1 e8aa
+96b2 e8ab
+96b4 e8ad
+96b6 e8ae
+96b7 97ea
+96b8 e8af
+96b9 e8b0
+96bb 90c7
+96bc 94b9
+96c0 909d
+96c1 8ae5
+96c4 9759
+96c5 89eb
+96c6 8f57
+96c7 8cd9
+96c9 e8b3
+96cb e8b2
+96cc 8e93
+96cd e8b4
+96ce e8b1
+96d1 8e47
+96d5 e8b8
+96d6 e5ab
+96d9 99d4
+96db 9097
+96dc e8b6
+96e2 97a3
+96e3 93ef
+96e8 894a
+96ea 90e1
+96eb 8eb4
+96f0 95b5
+96f2 895f
+96f6 97eb
+96f7 978b
+96f9 e8b9
+96fb 9364
+9700 8ef9
+9704 e8ba
+9706 e8bb
+9707 906b
+9708 e8bc
+970a 97ec
+970d e8b7
+970e e8be
+970f e8c0
+9711 e8bf
+9713 e8bd
+9716 e8c1
+9719 e8c2
+971c 919a
+971e 89e0
+9724 e8c3
+9727 96b6
+972a e8c4
+9730 e8c5
+9732 9849
+9733 fbed
+9738 9e50
+9739 e8c6
+973b fbee
+973d e8c7
+973e e8c8
+9742 e8cc
+9743 fbef
+9744 e8c9
+9746 e8ca
+9748 e8cb
+9749 e8cd
+974d fbf0
+974f fbf1
+9751 fbf2
+9752 90c2
+9755 fbf3
+9756 96f5
+9759 90c3
+975c e8ce
+975e 94f1
+9760 e8cf
+9761 ea72
+9762 96ca
+9764 e8d0
+9766 e8d1
+9768 e8d2
+9769 8a76
+976b e8d4
+976d 9078
+9771 e8d5
+9774 8c43
+9779 e8d6
+977a e8da
+977c e8d8
+9781 e8d9
+9784 8a93
+9785 e8d7
+9786 e8db
+978b e8dc
+978d 88c6
+978f e8dd
+9790 e8de
+9798 8fe2
+979c e8df
+97a0 8b66
+97a3 e8e2
+97a6 e8e1
+97a8 e8e0
+97ab e691
+97ad 95da
+97b3 e8e3
+97b4 e8e4
+97c3 e8e5
+97c6 e8e6
+97c8 e8e7
+97cb e8e8
+97d3 8ad8
+97dc e8e9
+97ed e8ea
+97ee 9442
+97f2 e8ec
+97f3 89b9
+97f5 e8ef
+97f6 e8ee
+97fb 8943
+97ff 8bbf
+9801 95c5
+9802 92b8
+9803 8da0
+9805 8d80
+9806 8f87
+9808 907b
+980c e8f1
+980f e8f0
+9810 9761
+9811 8ae6
+9812 94d0
+9813 93da
+9817 909c
+9818 97cc
+981a 8c7a
+9821 e8f4
+9824 e8f3
+982c 966a
+982d 93aa
+9834 896f
+9837 e8f5
+9838 e8f2
+983b 9570
+983c 978a
+983d e8f6
+9846 e8f7
+984b e8f9
+984c 91e8
+984d 8a7a
+984e 8a7b
+984f e8f8
+9854 8ae7
+9855 8cb0
+9857 fbf4
+9858 8ae8
+985b 935e
+985e 97de
+9865 fbf5
+9867 8cda
+986b e8fa
+986f e8fb
+9870 e8fc
+9871 e940
+9873 e942
+9874 e941
+98a8 9597
+98aa e943
+98af e944
+98b1 e945
+98b6 e946
+98c3 e948
+98c4 e947
+98c6 e949
+98db 94f2
+98dc e3ca
+98df 9048
+98e2 8b51
+98e9 e94a
+98eb e94b
+98ed 99aa
+98ee 9f5a
+98ef 94d1
+98f2 88f9
+98f4 88b9
+98fc 8e94
+98fd 964f
+98fe 8ffc
+9903 e94c
+9905 96dd
+9909 e94d
+990a 977b
+990c 8961
+9910 8e60
+9912 e94e
+9913 89ec
+9914 e94f
+9918 e950
+991d e952
+991e e953
+9920 e955
+9921 e951
+9924 e954
+9927 fbf8
+9928 8ad9
+992c e956
+992e e957
+993d e958
+993e e959
+9942 e95a
+9945 e95c
+9949 e95b
+994b e95e
+994c e961
+9950 e95d
+9951 e95f
+9952 e960
+9955 e962
+9957 8bc0
+9996 8ef1
+9997 e963
+9998 e964
+9999 8d81
+999e fbfa
+99a5 e965
+99a8 8a5d
+99ac 946e
+99ad e966
+99ae e967
+99b3 9279
+99b4 93e9
+99bc e968
+99c1 949d
+99c4 91ca
+99c5 8977
+99c6 8bec
+99c8 8bed
+99d0 9293
+99d1 e96d
+99d2 8bee
+99d5 89ed
+99d8 e96c
+99db e96a
+99dd e96b
+99df e969
+99e2 e977
+99ed e96e
+99ee e96f
+99f1 e970
+99f2 e971
+99f8 e973
+99fb e972
+99ff 8f78
+9a01 e974
+9a05 e976
+9a0e 8b52
+9a0f e975
+9a12 919b
+9a13 8cb1
+9a19 e978
+9a28 91cb
+9a2b e979
+9a30 93ab
+9a37 e97a
+9a3e e980
+9a40 e97d
+9a42 e97c
+9a43 e97e
+9a45 e97b
+9a4d e982
+9a4e fbfb
+9a55 e981
+9a57 e984
+9a5a 8bc1
+9a5b e983
+9a5f e985
+9a62 e986
+9a64 e988
+9a65 e987
+9a69 e989
+9a6a e98b
+9a6b e98a
+9aa8 8d9c
+9aad e98c
+9ab0 e98d
+9ab8 8a5b
+9abc e98e
+9ac0 e98f
+9ac4 9091
+9acf e990
+9ad1 e991
+9ad3 e992
+9ad4 e993
+9ad8 8d82
+9ad9 fbfc
+9adc fc40
+9ade e994
+9adf e995
+9ae2 e996
+9ae3 e997
+9ae6 e998
+9aea 94af
+9aeb e99a
+9aed 9545
+9aee e99b
+9aef e999
+9af1 e99d
+9af4 e99c
+9af7 e99e
+9afb e99f
+9b06 e9a0
+9b18 e9a1
+9b1a e9a2
+9b1f e9a3
+9b22 e9a4
+9b23 e9a5
+9b25 e9a6
+9b27 e9a7
+9b28 e9a8
+9b29 e9a9
+9b2a e9aa
+9b2e e9ab
+9b2f e9ac
+9b31 9f54
+9b32 e9ad
+9b3b e2f6
+9b3c 8b53
+9b41 8a40
+9b42 8db0
+9b43 e9af
+9b44 e9ae
+9b45 96a3
+9b4d e9b1
+9b4e e9b2
+9b4f e9b0
+9b51 e9b3
+9b54 9682
+9b58 e9b4
+9b5a 8b9b
+9b6f 9844
+9b72 fc42
+9b74 e9b5
+9b75 fc41
+9b83 e9b7
+9b8e 88bc
+9b8f fc43
+9b91 e9b8
+9b92 95a9
+9b93 e9b6
+9b96 e9b9
+9b97 e9ba
+9b9f e9bb
+9ba0 e9bc
+9ba8 e9bd
+9baa 968e
+9bab 8e4c
+9bad 8df8
+9bae 914e
+9bb1 fc44
+9bb4 e9be
+9bb9 e9c1
+9bbb fc45
+9bc0 e9bf
+9bc6 e9c2
+9bc9 8cef
+9bca e9c0
+9bcf e9c3
+9bd1 e9c4
+9bd2 e9c5
+9bd4 e9c9
+9bd6 8e49
+9bdb 91e2
+9be1 e9ca
+9be2 e9c7
+9be3 e9c6
+9be4 e9c8
+9be8 8c7e
+9bf0 e9ce
+9bf1 e9cd
+9bf2 e9cc
+9bf5 88b1
+9c00 fc46
+9c04 e9d8
+9c06 e9d4
+9c08 e9d5
+9c09 e9d1
+9c0a e9d7
+9c0c e9d3
+9c0d 8a82
+9c10 986b
+9c12 e9d6
+9c13 e9d2
+9c14 e9d0
+9c15 e9cf
+9c1b e9da
+9c21 e9dd
+9c24 e9dc
+9c25 e9db
+9c2d 9568
+9c2e e9d9
+9c2f 88f1
+9c30 e9de
+9c32 e9e0
+9c39 8a8f
+9c3a e9cb
+9c3b 8956
+9c3e e9e2
+9c46 e9e1
+9c47 e9df
+9c48 924c
+9c52 9690
+9c57 97d8
+9c5a e9e3
+9c60 e9e4
+9c67 e9e5
+9c76 e9e6
+9c78 e9e7
+9ce5 92b9
+9ce7 e9e8
+9ce9 94b5
+9ceb e9ed
+9cec e9e9
+9cf0 e9ea
+9cf3 9650
+9cf4 96c2
+9cf6 93ce
+9d03 e9ee
+9d06 e9ef
+9d07 93bc
+9d08 e9ec
+9d09 e9eb
+9d0e 89a8
+9d12 e9f7
+9d15 e9f6
+9d1b 8995
+9d1f e9f4
+9d23 e9f3
+9d26 e9f1
+9d28 8a9b
+9d2a e9f0
+9d2b 8eb0
+9d2c 89a7
+9d3b 8d83
+9d3e e9fa
+9d3f e9f9
+9d41 e9f8
+9d44 e9f5
+9d46 e9fb
+9d48 e9fc
+9d50 ea44
+9d51 ea43
+9d59 ea45
+9d5c 894c
+9d5d ea40
+9d5e ea41
+9d60 8d94
+9d61 96b7
+9d64 ea42
+9d6b fc48
+9d6c 9651
+9d6f ea4a
+9d70 fc47
+9d72 ea46
+9d7a ea4b
+9d87 ea48
+9d89 ea47
+9d8f 8c7b
+9d9a ea4c
+9da4 ea4d
+9da9 ea4e
+9dab ea49
+9daf e9f2
+9db2 ea4f
+9db4 92df
+9db8 ea53
+9dba ea54
+9dbb ea52
+9dc1 ea51
+9dc2 ea57
+9dc4 ea50
+9dc6 ea55
+9dcf ea56
+9dd3 ea59
+9dd9 ea58
+9de6 ea5b
+9ded ea5c
+9def ea5d
+9df2 9868
+9df8 ea5a
+9df9 91e9
+9dfa 8deb
+9dfd ea5e
+9e19 fc4a
+9e1a ea5f
+9e1b ea60
+9e1e ea61
+9e75 ea62
+9e78 8cb2
+9e79 ea63
+9e7d ea64
+9e7f 8ead
+9e81 ea65
+9e88 ea66
+9e8b ea67
+9e8c ea68
+9e91 ea6b
+9e92 ea69
+9e93 985b
+9e95 ea6a
+9e97 97ed
+9e9d ea6c
+9e9f 97d9
+9ea5 ea6d
+9ea6 949e
+9ea9 ea6e
+9eaa ea70
+9ead ea71
+9eb8 ea6f
+9eb9 8d8d
+9eba 96cb
+9ebb 9683
+9ebc 9bf5
+9ebe 9f80
+9ebf 969b
+9ec4 89a9
+9ecc ea73
+9ecd 8b6f
+9ece ea74
+9ecf ea75
+9ed0 ea76
+9ed1 fc4b
+9ed2 8d95
+9ed4 ea77
+9ed8 e0d2
+9ed9 96d9
+9edb 91e1
+9edc ea78
+9edd ea7a
+9ede ea79
+9ee0 ea7b
+9ee5 ea7c
+9ee8 ea7d
+9eef ea7e
+9ef4 ea80
+9ef6 ea81
+9ef7 ea82
+9ef9 ea83
+9efb ea84
+9efc ea85
+9efd ea86
+9f07 ea87
+9f08 ea88
+9f0e 9343
+9f13 8cdb
+9f15 ea8a
+9f20 916c
+9f21 ea8b
+9f2c ea8c
+9f3b 9540
+9f3e ea8d
+9f4a ea8e
+9f4b e256
+9f4e e6d8
+9f4f e8eb
+9f52 ea8f
+9f54 ea90
+9f5f ea92
+9f60 ea93
+9f61 ea94
+9f62 97ee
+9f63 ea91
+9f66 ea95
+9f67 ea96
+9f6a ea98
+9f6c ea97
+9f72 ea9a
+9f76 ea9b
+9f77 ea99
+9f8d 97b4
+9f95 ea9c
+9f9c ea9d
+9f9d e273
+9fa0 ea9e
+e000 f040
+e001 f041
+e002 f042
+e003 f043
+e004 f044
+e005 f045
+e006 f046
+e007 f047
+e008 f048
+e009 f049
+e00a f04a
+e00b f04b
+e00c f04c
+e00d f04d
+e00e f04e
+e00f f04f
+e010 f050
+e011 f051
+e012 f052
+e013 f053
+e014 f054
+e015 f055
+e016 f056
+e017 f057
+e018 f058
+e019 f059
+e01a f05a
+e01b f05b
+e01c f05c
+e01d f05d
+e01e f05e
+e01f f05f
+e020 f060
+e021 f061
+e022 f062
+e023 f063
+e024 f064
+e025 f065
+e026 f066
+e027 f067
+e028 f068
+e029 f069
+e02a f06a
+e02b f06b
+e02c f06c
+e02d f06d
+e02e f06e
+e02f f06f
+e030 f070
+e031 f071
+e032 f072
+e033 f073
+e034 f074
+e035 f075
+e036 f076
+e037 f077
+e038 f078
+e039 f079
+e03a f07a
+e03b f07b
+e03c f07c
+e03d f07d
+e03e f07e
+e03f f080
+e040 f081
+e041 f082
+e042 f083
+e043 f084
+e044 f085
+e045 f086
+e046 f087
+e047 f088
+e048 f089
+e049 f08a
+e04a f08b
+e04b f08c
+e04c f08d
+e04d f08e
+e04e f08f
+e04f f090
+e050 f091
+e051 f092
+e052 f093
+e053 f094
+e054 f095
+e055 f096
+e056 f097
+e057 f098
+e058 f099
+e059 f09a
+e05a f09b
+e05b f09c
+e05c f09d
+e05d f09e
+e05e f09f
+e05f f0a0
+e060 f0a1
+e061 f0a2
+e062 f0a3
+e063 f0a4
+e064 f0a5
+e065 f0a6
+e066 f0a7
+e067 f0a8
+e068 f0a9
+e069 f0aa
+e06a f0ab
+e06b f0ac
+e06c f0ad
+e06d f0ae
+e06e f0af
+e06f f0b0
+e070 f0b1
+e071 f0b2
+e072 f0b3
+e073 f0b4
+e074 f0b5
+e075 f0b6
+e076 f0b7
+e077 f0b8
+e078 f0b9
+e079 f0ba
+e07a f0bb
+e07b f0bc
+e07c f0bd
+e07d f0be
+e07e f0bf
+e07f f0c0
+e080 f0c1
+e081 f0c2
+e082 f0c3
+e083 f0c4
+e084 f0c5
+e085 f0c6
+e086 f0c7
+e087 f0c8
+e088 f0c9
+e089 f0ca
+e08a f0cb
+e08b f0cc
+e08c f0cd
+e08d f0ce
+e08e f0cf
+e08f f0d0
+e090 f0d1
+e091 f0d2
+e092 f0d3
+e093 f0d4
+e094 f0d5
+e095 f0d6
+e096 f0d7
+e097 f0d8
+e098 f0d9
+e099 f0da
+e09a f0db
+e09b f0dc
+e09c f0dd
+e09d f0de
+e09e f0df
+e09f f0e0
+e0a0 f0e1
+e0a1 f0e2
+e0a2 f0e3
+e0a3 f0e4
+e0a4 f0e5
+e0a5 f0e6
+e0a6 f0e7
+e0a7 f0e8
+e0a8 f0e9
+e0a9 f0ea
+e0aa f0eb
+e0ab f0ec
+e0ac f0ed
+e0ad f0ee
+e0ae f0ef
+e0af f0f0
+e0b0 f0f1
+e0b1 f0f2
+e0b2 f0f3
+e0b3 f0f4
+e0b4 f0f5
+e0b5 f0f6
+e0b6 f0f7
+e0b7 f0f8
+e0b8 f0f9
+e0b9 f0fa
+e0ba f0fb
+e0bb f0fc
+e0bc f140
+e0bd f141
+e0be f142
+e0bf f143
+e0c0 f144
+e0c1 f145
+e0c2 f146
+e0c3 f147
+e0c4 f148
+e0c5 f149
+e0c6 f14a
+e0c7 f14b
+e0c8 f14c
+e0c9 f14d
+e0ca f14e
+e0cb f14f
+e0cc f150
+e0cd f151
+e0ce f152
+e0cf f153
+e0d0 f154
+e0d1 f155
+e0d2 f156
+e0d3 f157
+e0d4 f158
+e0d5 f159
+e0d6 f15a
+e0d7 f15b
+e0d8 f15c
+e0d9 f15d
+e0da f15e
+e0db f15f
+e0dc f160
+e0dd f161
+e0de f162
+e0df f163
+e0e0 f164
+e0e1 f165
+e0e2 f166
+e0e3 f167
+e0e4 f168
+e0e5 f169
+e0e6 f16a
+e0e7 f16b
+e0e8 f16c
+e0e9 f16d
+e0ea f16e
+e0eb f16f
+e0ec f170
+e0ed f171
+e0ee f172
+e0ef f173
+e0f0 f174
+e0f1 f175
+e0f2 f176
+e0f3 f177
+e0f4 f178
+e0f5 f179
+e0f6 f17a
+e0f7 f17b
+e0f8 f17c
+e0f9 f17d
+e0fa f17e
+e0fb f180
+e0fc f181
+e0fd f182
+e0fe f183
+e0ff f184
+e100 f185
+e101 f186
+e102 f187
+e103 f188
+e104 f189
+e105 f18a
+e106 f18b
+e107 f18c
+e108 f18d
+e109 f18e
+e10a f18f
+e10b f190
+e10c f191
+e10d f192
+e10e f193
+e10f f194
+e110 f195
+e111 f196
+e112 f197
+e113 f198
+e114 f199
+e115 f19a
+e116 f19b
+e117 f19c
+e118 f19d
+e119 f19e
+e11a f19f
+e11b f1a0
+e11c f1a1
+e11d f1a2
+e11e f1a3
+e11f f1a4
+e120 f1a5
+e121 f1a6
+e122 f1a7
+e123 f1a8
+e124 f1a9
+e125 f1aa
+e126 f1ab
+e127 f1ac
+e128 f1ad
+e129 f1ae
+e12a f1af
+e12b f1b0
+e12c f1b1
+e12d f1b2
+e12e f1b3
+e12f f1b4
+e130 f1b5
+e131 f1b6
+e132 f1b7
+e133 f1b8
+e134 f1b9
+e135 f1ba
+e136 f1bb
+e137 f1bc
+e138 f1bd
+e139 f1be
+e13a f1bf
+e13b f1c0
+e13c f1c1
+e13d f1c2
+e13e f1c3
+e13f f1c4
+e140 f1c5
+e141 f1c6
+e142 f1c7
+e143 f1c8
+e144 f1c9
+e145 f1ca
+e146 f1cb
+e147 f1cc
+e148 f1cd
+e149 f1ce
+e14a f1cf
+e14b f1d0
+e14c f1d1
+e14d f1d2
+e14e f1d3
+e14f f1d4
+e150 f1d5
+e151 f1d6
+e152 f1d7
+e153 f1d8
+e154 f1d9
+e155 f1da
+e156 f1db
+e157 f1dc
+e158 f1dd
+e159 f1de
+e15a f1df
+e15b f1e0
+e15c f1e1
+e15d f1e2
+e15e f1e3
+e15f f1e4
+e160 f1e5
+e161 f1e6
+e162 f1e7
+e163 f1e8
+e164 f1e9
+e165 f1ea
+e166 f1eb
+e167 f1ec
+e168 f1ed
+e169 f1ee
+e16a f1ef
+e16b f1f0
+e16c f1f1
+e16d f1f2
+e16e f1f3
+e16f f1f4
+e170 f1f5
+e171 f1f6
+e172 f1f7
+e173 f1f8
+e174 f1f9
+e175 f1fa
+e176 f1fb
+e177 f1fc
+e178 f240
+e179 f241
+e17a f242
+e17b f243
+e17c f244
+e17d f245
+e17e f246
+e17f f247
+e180 f248
+e181 f249
+e182 f24a
+e183 f24b
+e184 f24c
+e185 f24d
+e186 f24e
+e187 f24f
+e188 f250
+e189 f251
+e18a f252
+e18b f253
+e18c f254
+e18d f255
+e18e f256
+e18f f257
+e190 f258
+e191 f259
+e192 f25a
+e193 f25b
+e194 f25c
+e195 f25d
+e196 f25e
+e197 f25f
+e198 f260
+e199 f261
+e19a f262
+e19b f263
+e19c f264
+e19d f265
+e19e f266
+e19f f267
+e1a0 f268
+e1a1 f269
+e1a2 f26a
+e1a3 f26b
+e1a4 f26c
+e1a5 f26d
+e1a6 f26e
+e1a7 f26f
+e1a8 f270
+e1a9 f271
+e1aa f272
+e1ab f273
+e1ac f274
+e1ad f275
+e1ae f276
+e1af f277
+e1b0 f278
+e1b1 f279
+e1b2 f27a
+e1b3 f27b
+e1b4 f27c
+e1b5 f27d
+e1b6 f27e
+e1b7 f280
+e1b8 f281
+e1b9 f282
+e1ba f283
+e1bb f284
+e1bc f285
+e1bd f286
+e1be f287
+e1bf f288
+e1c0 f289
+e1c1 f28a
+e1c2 f28b
+e1c3 f28c
+e1c4 f28d
+e1c5 f28e
+e1c6 f28f
+e1c7 f290
+e1c8 f291
+e1c9 f292
+e1ca f293
+e1cb f294
+e1cc f295
+e1cd f296
+e1ce f297
+e1cf f298
+e1d0 f299
+e1d1 f29a
+e1d2 f29b
+e1d3 f29c
+e1d4 f29d
+e1d5 f29e
+e1d6 f29f
+e1d7 f2a0
+e1d8 f2a1
+e1d9 f2a2
+e1da f2a3
+e1db f2a4
+e1dc f2a5
+e1dd f2a6
+e1de f2a7
+e1df f2a8
+e1e0 f2a9
+e1e1 f2aa
+e1e2 f2ab
+e1e3 f2ac
+e1e4 f2ad
+e1e5 f2ae
+e1e6 f2af
+e1e7 f2b0
+e1e8 f2b1
+e1e9 f2b2
+e1ea f2b3
+e1eb f2b4
+e1ec f2b5
+e1ed f2b6
+e1ee f2b7
+e1ef f2b8
+e1f0 f2b9
+e1f1 f2ba
+e1f2 f2bb
+e1f3 f2bc
+e1f4 f2bd
+e1f5 f2be
+e1f6 f2bf
+e1f7 f2c0
+e1f8 f2c1
+e1f9 f2c2
+e1fa f2c3
+e1fb f2c4
+e1fc f2c5
+e1fd f2c6
+e1fe f2c7
+e1ff f2c8
+e200 f2c9
+e201 f2ca
+e202 f2cb
+e203 f2cc
+e204 f2cd
+e205 f2ce
+e206 f2cf
+e207 f2d0
+e208 f2d1
+e209 f2d2
+e20a f2d3
+e20b f2d4
+e20c f2d5
+e20d f2d6
+e20e f2d7
+e20f f2d8
+e210 f2d9
+e211 f2da
+e212 f2db
+e213 f2dc
+e214 f2dd
+e215 f2de
+e216 f2df
+e217 f2e0
+e218 f2e1
+e219 f2e2
+e21a f2e3
+e21b f2e4
+e21c f2e5
+e21d f2e6
+e21e f2e7
+e21f f2e8
+e220 f2e9
+e221 f2ea
+e222 f2eb
+e223 f2ec
+e224 f2ed
+e225 f2ee
+e226 f2ef
+e227 f2f0
+e228 f2f1
+e229 f2f2
+e22a f2f3
+e22b f2f4
+e22c f2f5
+e22d f2f6
+e22e f2f7
+e22f f2f8
+e230 f2f9
+e231 f2fa
+e232 f2fb
+e233 f2fc
+e234 f340
+e235 f341
+e236 f342
+e237 f343
+e238 f344
+e239 f345
+e23a f346
+e23b f347
+e23c f348
+e23d f349
+e23e f34a
+e23f f34b
+e240 f34c
+e241 f34d
+e242 f34e
+e243 f34f
+e244 f350
+e245 f351
+e246 f352
+e247 f353
+e248 f354
+e249 f355
+e24a f356
+e24b f357
+e24c f358
+e24d f359
+e24e f35a
+e24f f35b
+e250 f35c
+e251 f35d
+e252 f35e
+e253 f35f
+e254 f360
+e255 f361
+e256 f362
+e257 f363
+e258 f364
+e259 f365
+e25a f366
+e25b f367
+e25c f368
+e25d f369
+e25e f36a
+e25f f36b
+e260 f36c
+e261 f36d
+e262 f36e
+e263 f36f
+e264 f370
+e265 f371
+e266 f372
+e267 f373
+e268 f374
+e269 f375
+e26a f376
+e26b f377
+e26c f378
+e26d f379
+e26e f37a
+e26f f37b
+e270 f37c
+e271 f37d
+e272 f37e
+e273 f380
+e274 f381
+e275 f382
+e276 f383
+e277 f384
+e278 f385
+e279 f386
+e27a f387
+e27b f388
+e27c f389
+e27d f38a
+e27e f38b
+e27f f38c
+e280 f38d
+e281 f38e
+e282 f38f
+e283 f390
+e284 f391
+e285 f392
+e286 f393
+e287 f394
+e288 f395
+e289 f396
+e28a f397
+e28b f398
+e28c f399
+e28d f39a
+e28e f39b
+e28f f39c
+e290 f39d
+e291 f39e
+e292 f39f
+e293 f3a0
+e294 f3a1
+e295 f3a2
+e296 f3a3
+e297 f3a4
+e298 f3a5
+e299 f3a6
+e29a f3a7
+e29b f3a8
+e29c f3a9
+e29d f3aa
+e29e f3ab
+e29f f3ac
+e2a0 f3ad
+e2a1 f3ae
+e2a2 f3af
+e2a3 f3b0
+e2a4 f3b1
+e2a5 f3b2
+e2a6 f3b3
+e2a7 f3b4
+e2a8 f3b5
+e2a9 f3b6
+e2aa f3b7
+e2ab f3b8
+e2ac f3b9
+e2ad f3ba
+e2ae f3bb
+e2af f3bc
+e2b0 f3bd
+e2b1 f3be
+e2b2 f3bf
+e2b3 f3c0
+e2b4 f3c1
+e2b5 f3c2
+e2b6 f3c3
+e2b7 f3c4
+e2b8 f3c5
+e2b9 f3c6
+e2ba f3c7
+e2bb f3c8
+e2bc f3c9
+e2bd f3ca
+e2be f3cb
+e2bf f3cc
+e2c0 f3cd
+e2c1 f3ce
+e2c2 f3cf
+e2c3 f3d0
+e2c4 f3d1
+e2c5 f3d2
+e2c6 f3d3
+e2c7 f3d4
+e2c8 f3d5
+e2c9 f3d6
+e2ca f3d7
+e2cb f3d8
+e2cc f3d9
+e2cd f3da
+e2ce f3db
+e2cf f3dc
+e2d0 f3dd
+e2d1 f3de
+e2d2 f3df
+e2d3 f3e0
+e2d4 f3e1
+e2d5 f3e2
+e2d6 f3e3
+e2d7 f3e4
+e2d8 f3e5
+e2d9 f3e6
+e2da f3e7
+e2db f3e8
+e2dc f3e9
+e2dd f3ea
+e2de f3eb
+e2df f3ec
+e2e0 f3ed
+e2e1 f3ee
+e2e2 f3ef
+e2e3 f3f0
+e2e4 f3f1
+e2e5 f3f2
+e2e6 f3f3
+e2e7 f3f4
+e2e8 f3f5
+e2e9 f3f6
+e2ea f3f7
+e2eb f3f8
+e2ec f3f9
+e2ed f3fa
+e2ee f3fb
+e2ef f3fc
+e2f0 f440
+e2f1 f441
+e2f2 f442
+e2f3 f443
+e2f4 f444
+e2f5 f445
+e2f6 f446
+e2f7 f447
+e2f8 f448
+e2f9 f449
+e2fa f44a
+e2fb f44b
+e2fc f44c
+e2fd f44d
+e2fe f44e
+e2ff f44f
+e300 f450
+e301 f451
+e302 f452
+e303 f453
+e304 f454
+e305 f455
+e306 f456
+e307 f457
+e308 f458
+e309 f459
+e30a f45a
+e30b f45b
+e30c f45c
+e30d f45d
+e30e f45e
+e30f f45f
+e310 f460
+e311 f461
+e312 f462
+e313 f463
+e314 f464
+e315 f465
+e316 f466
+e317 f467
+e318 f468
+e319 f469
+e31a f46a
+e31b f46b
+e31c f46c
+e31d f46d
+e31e f46e
+e31f f46f
+e320 f470
+e321 f471
+e322 f472
+e323 f473
+e324 f474
+e325 f475
+e326 f476
+e327 f477
+e328 f478
+e329 f479
+e32a f47a
+e32b f47b
+e32c f47c
+e32d f47d
+e32e f47e
+e32f f480
+e330 f481
+e331 f482
+e332 f483
+e333 f484
+e334 f485
+e335 f486
+e336 f487
+e337 f488
+e338 f489
+e339 f48a
+e33a f48b
+e33b f48c
+e33c f48d
+e33d f48e
+e33e f48f
+e33f f490
+e340 f491
+e341 f492
+e342 f493
+e343 f494
+e344 f495
+e345 f496
+e346 f497
+e347 f498
+e348 f499
+e349 f49a
+e34a f49b
+e34b f49c
+e34c f49d
+e34d f49e
+e34e f49f
+e34f f4a0
+e350 f4a1
+e351 f4a2
+e352 f4a3
+e353 f4a4
+e354 f4a5
+e355 f4a6
+e356 f4a7
+e357 f4a8
+e358 f4a9
+e359 f4aa
+e35a f4ab
+e35b f4ac
+e35c f4ad
+e35d f4ae
+e35e f4af
+e35f f4b0
+e360 f4b1
+e361 f4b2
+e362 f4b3
+e363 f4b4
+e364 f4b5
+e365 f4b6
+e366 f4b7
+e367 f4b8
+e368 f4b9
+e369 f4ba
+e36a f4bb
+e36b f4bc
+e36c f4bd
+e36d f4be
+e36e f4bf
+e36f f4c0
+e370 f4c1
+e371 f4c2
+e372 f4c3
+e373 f4c4
+e374 f4c5
+e375 f4c6
+e376 f4c7
+e377 f4c8
+e378 f4c9
+e379 f4ca
+e37a f4cb
+e37b f4cc
+e37c f4cd
+e37d f4ce
+e37e f4cf
+e37f f4d0
+e380 f4d1
+e381 f4d2
+e382 f4d3
+e383 f4d4
+e384 f4d5
+e385 f4d6
+e386 f4d7
+e387 f4d8
+e388 f4d9
+e389 f4da
+e38a f4db
+e38b f4dc
+e38c f4dd
+e38d f4de
+e38e f4df
+e38f f4e0
+e390 f4e1
+e391 f4e2
+e392 f4e3
+e393 f4e4
+e394 f4e5
+e395 f4e6
+e396 f4e7
+e397 f4e8
+e398 f4e9
+e399 f4ea
+e39a f4eb
+e39b f4ec
+e39c f4ed
+e39d f4ee
+e39e f4ef
+e39f f4f0
+e3a0 f4f1
+e3a1 f4f2
+e3a2 f4f3
+e3a3 f4f4
+e3a4 f4f5
+e3a5 f4f6
+e3a6 f4f7
+e3a7 f4f8
+e3a8 f4f9
+e3a9 f4fa
+e3aa f4fb
+e3ab f4fc
+e3ac f540
+e3ad f541
+e3ae f542
+e3af f543
+e3b0 f544
+e3b1 f545
+e3b2 f546
+e3b3 f547
+e3b4 f548
+e3b5 f549
+e3b6 f54a
+e3b7 f54b
+e3b8 f54c
+e3b9 f54d
+e3ba f54e
+e3bb f54f
+e3bc f550
+e3bd f551
+e3be f552
+e3bf f553
+e3c0 f554
+e3c1 f555
+e3c2 f556
+e3c3 f557
+e3c4 f558
+e3c5 f559
+e3c6 f55a
+e3c7 f55b
+e3c8 f55c
+e3c9 f55d
+e3ca f55e
+e3cb f55f
+e3cc f560
+e3cd f561
+e3ce f562
+e3cf f563
+e3d0 f564
+e3d1 f565
+e3d2 f566
+e3d3 f567
+e3d4 f568
+e3d5 f569
+e3d6 f56a
+e3d7 f56b
+e3d8 f56c
+e3d9 f56d
+e3da f56e
+e3db f56f
+e3dc f570
+e3dd f571
+e3de f572
+e3df f573
+e3e0 f574
+e3e1 f575
+e3e2 f576
+e3e3 f577
+e3e4 f578
+e3e5 f579
+e3e6 f57a
+e3e7 f57b
+e3e8 f57c
+e3e9 f57d
+e3ea f57e
+e3eb f580
+e3ec f581
+e3ed f582
+e3ee f583
+e3ef f584
+e3f0 f585
+e3f1 f586
+e3f2 f587
+e3f3 f588
+e3f4 f589
+e3f5 f58a
+e3f6 f58b
+e3f7 f58c
+e3f8 f58d
+e3f9 f58e
+e3fa f58f
+e3fb f590
+e3fc f591
+e3fd f592
+e3fe f593
+e3ff f594
+e400 f595
+e401 f596
+e402 f597
+e403 f598
+e404 f599
+e405 f59a
+e406 f59b
+e407 f59c
+e408 f59d
+e409 f59e
+e40a f59f
+e40b f5a0
+e40c f5a1
+e40d f5a2
+e40e f5a3
+e40f f5a4
+e410 f5a5
+e411 f5a6
+e412 f5a7
+e413 f5a8
+e414 f5a9
+e415 f5aa
+e416 f5ab
+e417 f5ac
+e418 f5ad
+e419 f5ae
+e41a f5af
+e41b f5b0
+e41c f5b1
+e41d f5b2
+e41e f5b3
+e41f f5b4
+e420 f5b5
+e421 f5b6
+e422 f5b7
+e423 f5b8
+e424 f5b9
+e425 f5ba
+e426 f5bb
+e427 f5bc
+e428 f5bd
+e429 f5be
+e42a f5bf
+e42b f5c0
+e42c f5c1
+e42d f5c2
+e42e f5c3
+e42f f5c4
+e430 f5c5
+e431 f5c6
+e432 f5c7
+e433 f5c8
+e434 f5c9
+e435 f5ca
+e436 f5cb
+e437 f5cc
+e438 f5cd
+e439 f5ce
+e43a f5cf
+e43b f5d0
+e43c f5d1
+e43d f5d2
+e43e f5d3
+e43f f5d4
+e440 f5d5
+e441 f5d6
+e442 f5d7
+e443 f5d8
+e444 f5d9
+e445 f5da
+e446 f5db
+e447 f5dc
+e448 f5dd
+e449 f5de
+e44a f5df
+e44b f5e0
+e44c f5e1
+e44d f5e2
+e44e f5e3
+e44f f5e4
+e450 f5e5
+e451 f5e6
+e452 f5e7
+e453 f5e8
+e454 f5e9
+e455 f5ea
+e456 f5eb
+e457 f5ec
+e458 f5ed
+e459 f5ee
+e45a f5ef
+e45b f5f0
+e45c f5f1
+e45d f5f2
+e45e f5f3
+e45f f5f4
+e460 f5f5
+e461 f5f6
+e462 f5f7
+e463 f5f8
+e464 f5f9
+e465 f5fa
+e466 f5fb
+e467 f5fc
+e468 f640
+e469 f641
+e46a f642
+e46b f643
+e46c f644
+e46d f645
+e46e f646
+e46f f647
+e470 f648
+e471 f649
+e472 f64a
+e473 f64b
+e474 f64c
+e475 f64d
+e476 f64e
+e477 f64f
+e478 f650
+e479 f651
+e47a f652
+e47b f653
+e47c f654
+e47d f655
+e47e f656
+e47f f657
+e480 f658
+e481 f659
+e482 f65a
+e483 f65b
+e484 f65c
+e485 f65d
+e486 f65e
+e487 f65f
+e488 f660
+e489 f661
+e48a f662
+e48b f663
+e48c f664
+e48d f665
+e48e f666
+e48f f667
+e490 f668
+e491 f669
+e492 f66a
+e493 f66b
+e494 f66c
+e495 f66d
+e496 f66e
+e497 f66f
+e498 f670
+e499 f671
+e49a f672
+e49b f673
+e49c f674
+e49d f675
+e49e f676
+e49f f677
+e4a0 f678
+e4a1 f679
+e4a2 f67a
+e4a3 f67b
+e4a4 f67c
+e4a5 f67d
+e4a6 f67e
+e4a7 f680
+e4a8 f681
+e4a9 f682
+e4aa f683
+e4ab f684
+e4ac f685
+e4ad f686
+e4ae f687
+e4af f688
+e4b0 f689
+e4b1 f68a
+e4b2 f68b
+e4b3 f68c
+e4b4 f68d
+e4b5 f68e
+e4b6 f68f
+e4b7 f690
+e4b8 f691
+e4b9 f692
+e4ba f693
+e4bb f694
+e4bc f695
+e4bd f696
+e4be f697
+e4bf f698
+e4c0 f699
+e4c1 f69a
+e4c2 f69b
+e4c3 f69c
+e4c4 f69d
+e4c5 f69e
+e4c6 f69f
+e4c7 f6a0
+e4c8 f6a1
+e4c9 f6a2
+e4ca f6a3
+e4cb f6a4
+e4cc f6a5
+e4cd f6a6
+e4ce f6a7
+e4cf f6a8
+e4d0 f6a9
+e4d1 f6aa
+e4d2 f6ab
+e4d3 f6ac
+e4d4 f6ad
+e4d5 f6ae
+e4d6 f6af
+e4d7 f6b0
+e4d8 f6b1
+e4d9 f6b2
+e4da f6b3
+e4db f6b4
+e4dc f6b5
+e4dd f6b6
+e4de f6b7
+e4df f6b8
+e4e0 f6b9
+e4e1 f6ba
+e4e2 f6bb
+e4e3 f6bc
+e4e4 f6bd
+e4e5 f6be
+e4e6 f6bf
+e4e7 f6c0
+e4e8 f6c1
+e4e9 f6c2
+e4ea f6c3
+e4eb f6c4
+e4ec f6c5
+e4ed f6c6
+e4ee f6c7
+e4ef f6c8
+e4f0 f6c9
+e4f1 f6ca
+e4f2 f6cb
+e4f3 f6cc
+e4f4 f6cd
+e4f5 f6ce
+e4f6 f6cf
+e4f7 f6d0
+e4f8 f6d1
+e4f9 f6d2
+e4fa f6d3
+e4fb f6d4
+e4fc f6d5
+e4fd f6d6
+e4fe f6d7
+e4ff f6d8
+e500 f6d9
+e501 f6da
+e502 f6db
+e503 f6dc
+e504 f6dd
+e505 f6de
+e506 f6df
+e507 f6e0
+e508 f6e1
+e509 f6e2
+e50a f6e3
+e50b f6e4
+e50c f6e5
+e50d f6e6
+e50e f6e7
+e50f f6e8
+e510 f6e9
+e511 f6ea
+e512 f6eb
+e513 f6ec
+e514 f6ed
+e515 f6ee
+e516 f6ef
+e517 f6f0
+e518 f6f1
+e519 f6f2
+e51a f6f3
+e51b f6f4
+e51c f6f5
+e51d f6f6
+e51e f6f7
+e51f f6f8
+e520 f6f9
+e521 f6fa
+e522 f6fb
+e523 f6fc
+e524 f740
+e525 f741
+e526 f742
+e527 f743
+e528 f744
+e529 f745
+e52a f746
+e52b f747
+e52c f748
+e52d f749
+e52e f74a
+e52f f74b
+e530 f74c
+e531 f74d
+e532 f74e
+e533 f74f
+e534 f750
+e535 f751
+e536 f752
+e537 f753
+e538 f754
+e539 f755
+e53a f756
+e53b f757
+e53c f758
+e53d f759
+e53e f75a
+e53f f75b
+e540 f75c
+e541 f75d
+e542 f75e
+e543 f75f
+e544 f760
+e545 f761
+e546 f762
+e547 f763
+e548 f764
+e549 f765
+e54a f766
+e54b f767
+e54c f768
+e54d f769
+e54e f76a
+e54f f76b
+e550 f76c
+e551 f76d
+e552 f76e
+e553 f76f
+e554 f770
+e555 f771
+e556 f772
+e557 f773
+e558 f774
+e559 f775
+e55a f776
+e55b f777
+e55c f778
+e55d f779
+e55e f77a
+e55f f77b
+e560 f77c
+e561 f77d
+e562 f77e
+e563 f780
+e564 f781
+e565 f782
+e566 f783
+e567 f784
+e568 f785
+e569 f786
+e56a f787
+e56b f788
+e56c f789
+e56d f78a
+e56e f78b
+e56f f78c
+e570 f78d
+e571 f78e
+e572 f78f
+e573 f790
+e574 f791
+e575 f792
+e576 f793
+e577 f794
+e578 f795
+e579 f796
+e57a f797
+e57b f798
+e57c f799
+e57d f79a
+e57e f79b
+e57f f79c
+e580 f79d
+e581 f79e
+e582 f79f
+e583 f7a0
+e584 f7a1
+e585 f7a2
+e586 f7a3
+e587 f7a4
+e588 f7a5
+e589 f7a6
+e58a f7a7
+e58b f7a8
+e58c f7a9
+e58d f7aa
+e58e f7ab
+e58f f7ac
+e590 f7ad
+e591 f7ae
+e592 f7af
+e593 f7b0
+e594 f7b1
+e595 f7b2
+e596 f7b3
+e597 f7b4
+e598 f7b5
+e599 f7b6
+e59a f7b7
+e59b f7b8
+e59c f7b9
+e59d f7ba
+e59e f7bb
+e59f f7bc
+e5a0 f7bd
+e5a1 f7be
+e5a2 f7bf
+e5a3 f7c0
+e5a4 f7c1
+e5a5 f7c2
+e5a6 f7c3
+e5a7 f7c4
+e5a8 f7c5
+e5a9 f7c6
+e5aa f7c7
+e5ab f7c8
+e5ac f7c9
+e5ad f7ca
+e5ae f7cb
+e5af f7cc
+e5b0 f7cd
+e5b1 f7ce
+e5b2 f7cf
+e5b3 f7d0
+e5b4 f7d1
+e5b5 f7d2
+e5b6 f7d3
+e5b7 f7d4
+e5b8 f7d5
+e5b9 f7d6
+e5ba f7d7
+e5bb f7d8
+e5bc f7d9
+e5bd f7da
+e5be f7db
+e5bf f7dc
+e5c0 f7dd
+e5c1 f7de
+e5c2 f7df
+e5c3 f7e0
+e5c4 f7e1
+e5c5 f7e2
+e5c6 f7e3
+e5c7 f7e4
+e5c8 f7e5
+e5c9 f7e6
+e5ca f7e7
+e5cb f7e8
+e5cc f7e9
+e5cd f7ea
+e5ce f7eb
+e5cf f7ec
+e5d0 f7ed
+e5d1 f7ee
+e5d2 f7ef
+e5d3 f7f0
+e5d4 f7f1
+e5d5 f7f2
+e5d6 f7f3
+e5d7 f7f4
+e5d8 f7f5
+e5d9 f7f6
+e5da f7f7
+e5db f7f8
+e5dc f7f9
+e5dd f7fa
+e5de f7fb
+e5df f7fc
+e5e0 f840
+e5e1 f841
+e5e2 f842
+e5e3 f843
+e5e4 f844
+e5e5 f845
+e5e6 f846
+e5e7 f847
+e5e8 f848
+e5e9 f849
+e5ea f84a
+e5eb f84b
+e5ec f84c
+e5ed f84d
+e5ee f84e
+e5ef f84f
+e5f0 f850
+e5f1 f851
+e5f2 f852
+e5f3 f853
+e5f4 f854
+e5f5 f855
+e5f6 f856
+e5f7 f857
+e5f8 f858
+e5f9 f859
+e5fa f85a
+e5fb f85b
+e5fc f85c
+e5fd f85d
+e5fe f85e
+e5ff f85f
+e600 f860
+e601 f861
+e602 f862
+e603 f863
+e604 f864
+e605 f865
+e606 f866
+e607 f867
+e608 f868
+e609 f869
+e60a f86a
+e60b f86b
+e60c f86c
+e60d f86d
+e60e f86e
+e60f f86f
+e610 f870
+e611 f871
+e612 f872
+e613 f873
+e614 f874
+e615 f875
+e616 f876
+e617 f877
+e618 f878
+e619 f879
+e61a f87a
+e61b f87b
+e61c f87c
+e61d f87d
+e61e f87e
+e61f f880
+e620 f881
+e621 f882
+e622 f883
+e623 f884
+e624 f885
+e625 f886
+e626 f887
+e627 f888
+e628 f889
+e629 f88a
+e62a f88b
+e62b f88c
+e62c f88d
+e62d f88e
+e62e f88f
+e62f f890
+e630 f891
+e631 f892
+e632 f893
+e633 f894
+e634 f895
+e635 f896
+e636 f897
+e637 f898
+e638 f899
+e639 f89a
+e63a f89b
+e63b f89c
+e63c f89d
+e63d f89e
+e63e f89f
+e63f f8a0
+e640 f8a1
+e641 f8a2
+e642 f8a3
+e643 f8a4
+e644 f8a5
+e645 f8a6
+e646 f8a7
+e647 f8a8
+e648 f8a9
+e649 f8aa
+e64a f8ab
+e64b f8ac
+e64c f8ad
+e64d f8ae
+e64e f8af
+e64f f8b0
+e650 f8b1
+e651 f8b2
+e652 f8b3
+e653 f8b4
+e654 f8b5
+e655 f8b6
+e656 f8b7
+e657 f8b8
+e658 f8b9
+e659 f8ba
+e65a f8bb
+e65b f8bc
+e65c f8bd
+e65d f8be
+e65e f8bf
+e65f f8c0
+e660 f8c1
+e661 f8c2
+e662 f8c3
+e663 f8c4
+e664 f8c5
+e665 f8c6
+e666 f8c7
+e667 f8c8
+e668 f8c9
+e669 f8ca
+e66a f8cb
+e66b f8cc
+e66c f8cd
+e66d f8ce
+e66e f8cf
+e66f f8d0
+e670 f8d1
+e671 f8d2
+e672 f8d3
+e673 f8d4
+e674 f8d5
+e675 f8d6
+e676 f8d7
+e677 f8d8
+e678 f8d9
+e679 f8da
+e67a f8db
+e67b f8dc
+e67c f8dd
+e67d f8de
+e67e f8df
+e67f f8e0
+e680 f8e1
+e681 f8e2
+e682 f8e3
+e683 f8e4
+e684 f8e5
+e685 f8e6
+e686 f8e7
+e687 f8e8
+e688 f8e9
+e689 f8ea
+e68a f8eb
+e68b f8ec
+e68c f8ed
+e68d f8ee
+e68e f8ef
+e68f f8f0
+e690 f8f1
+e691 f8f2
+e692 f8f3
+e693 f8f4
+e694 f8f5
+e695 f8f6
+e696 f8f7
+e697 f8f8
+e698 f8f9
+e699 f8fa
+e69a f8fb
+e69b f8fc
+e69c f940
+e69d f941
+e69e f942
+e69f f943
+e6a0 f944
+e6a1 f945
+e6a2 f946
+e6a3 f947
+e6a4 f948
+e6a5 f949
+e6a6 f94a
+e6a7 f94b
+e6a8 f94c
+e6a9 f94d
+e6aa f94e
+e6ab f94f
+e6ac f950
+e6ad f951
+e6ae f952
+e6af f953
+e6b0 f954
+e6b1 f955
+e6b2 f956
+e6b3 f957
+e6b4 f958
+e6b5 f959
+e6b6 f95a
+e6b7 f95b
+e6b8 f95c
+e6b9 f95d
+e6ba f95e
+e6bb f95f
+e6bc f960
+e6bd f961
+e6be f962
+e6bf f963
+e6c0 f964
+e6c1 f965
+e6c2 f966
+e6c3 f967
+e6c4 f968
+e6c5 f969
+e6c6 f96a
+e6c7 f96b
+e6c8 f96c
+e6c9 f96d
+e6ca f96e
+e6cb f96f
+e6cc f970
+e6cd f971
+e6ce f972
+e6cf f973
+e6d0 f974
+e6d1 f975
+e6d2 f976
+e6d3 f977
+e6d4 f978
+e6d5 f979
+e6d6 f97a
+e6d7 f97b
+e6d8 f97c
+e6d9 f97d
+e6da f97e
+e6db f980
+e6dc f981
+e6dd f982
+e6de f983
+e6df f984
+e6e0 f985
+e6e1 f986
+e6e2 f987
+e6e3 f988
+e6e4 f989
+e6e5 f98a
+e6e6 f98b
+e6e7 f98c
+e6e8 f98d
+e6e9 f98e
+e6ea f98f
+e6eb f990
+e6ec f991
+e6ed f992
+e6ee f993
+e6ef f994
+e6f0 f995
+e6f1 f996
+e6f2 f997
+e6f3 f998
+e6f4 f999
+e6f5 f99a
+e6f6 f99b
+e6f7 f99c
+e6f8 f99d
+e6f9 f99e
+e6fa f99f
+e6fb f9a0
+e6fc f9a1
+e6fd f9a2
+e6fe f9a3
+e6ff f9a4
+e700 f9a5
+e701 f9a6
+e702 f9a7
+e703 f9a8
+e704 f9a9
+e705 f9aa
+e706 f9ab
+e707 f9ac
+e708 f9ad
+e709 f9ae
+e70a f9af
+e70b f9b0
+e70c f9b1
+e70d f9b2
+e70e f9b3
+e70f f9b4
+e710 f9b5
+e711 f9b6
+e712 f9b7
+e713 f9b8
+e714 f9b9
+e715 f9ba
+e716 f9bb
+e717 f9bc
+e718 f9bd
+e719 f9be
+e71a f9bf
+e71b f9c0
+e71c f9c1
+e71d f9c2
+e71e f9c3
+e71f f9c4
+e720 f9c5
+e721 f9c6
+e722 f9c7
+e723 f9c8
+e724 f9c9
+e725 f9ca
+e726 f9cb
+e727 f9cc
+e728 f9cd
+e729 f9ce
+e72a f9cf
+e72b f9d0
+e72c f9d1
+e72d f9d2
+e72e f9d3
+e72f f9d4
+e730 f9d5
+e731 f9d6
+e732 f9d7
+e733 f9d8
+e734 f9d9
+e735 f9da
+e736 f9db
+e737 f9dc
+e738 f9dd
+e739 f9de
+e73a f9df
+e73b f9e0
+e73c f9e1
+e73d f9e2
+e73e f9e3
+e73f f9e4
+e740 f9e5
+e741 f9e6
+e742 f9e7
+e743 f9e8
+e744 f9e9
+e745 f9ea
+e746 f9eb
+e747 f9ec
+e748 f9ed
+e749 f9ee
+e74a f9ef
+e74b f9f0
+e74c f9f1
+e74d f9f2
+e74e f9f3
+e74f f9f4
+e750 f9f5
+e751 f9f6
+e752 f9f7
+e753 f9f8
+e754 f9f9
+e755 f9fa
+e756 f9fb
+e757 f9fc
+f929 fae0
+f9dc fbe9
+fa0e fa90
+fa0f fa9b
+fa10 fa9c
+fa11 fab1
+fa12 fad8
+fa13 fae8
+fa14 faea
+fa15 fb58
+fa16 fb5e
+fa17 fb75
+fa18 fb7d
+fa19 fb7e
+fa1a fb80
+fa1b fb82
+fa1c fb86
+fa1d fb89
+fa1e fb92
+fa1f fb9d
+fa20 fb9f
+fa21 fba0
+fa22 fba9
+fa23 fbb1
+fa24 fbb3
+fa25 fbb4
+fa26 fbb7
+fa27 fbd3
+fa28 fbda
+fa29 fbea
+fa2a fbf6
+fa2b fbf7
+fa2c fbf9
+fa2d fc49
+ff01 8149
+ff02 fa57
+ff03 8194
+ff04 8190
+ff05 8193
+ff06 8195
+ff07 fa56
+ff08 8169
+ff09 816a
+ff0a 8196
+ff0b 817b
+ff0c 8143
+ff0d 817c
+ff0e 8144
+ff0f 815e
+ff10 824f
+ff11 8250
+ff12 8251
+ff13 8252
+ff14 8253
+ff15 8254
+ff16 8255
+ff17 8256
+ff18 8257
+ff19 8258
+ff1a 8146
+ff1b 8147
+ff1c 8183
+ff1d 8181
+ff1e 8184
+ff1f 8148
+ff20 8197
+ff21 8260
+ff22 8261
+ff23 8262
+ff24 8263
+ff25 8264
+ff26 8265
+ff27 8266
+ff28 8267
+ff29 8268
+ff2a 8269
+ff2b 826a
+ff2c 826b
+ff2d 826c
+ff2e 826d
+ff2f 826e
+ff30 826f
+ff31 8270
+ff32 8271
+ff33 8272
+ff34 8273
+ff35 8274
+ff36 8275
+ff37 8276
+ff38 8277
+ff39 8278
+ff3a 8279
+ff3b 816d
+ff3c 815f
+ff3d 816e
+ff3e 814f
+ff3f 8151
+ff40 814d
+ff41 8281
+ff42 8282
+ff43 8283
+ff44 8284
+ff45 8285
+ff46 8286
+ff47 8287
+ff48 8288
+ff49 8289
+ff4a 828a
+ff4b 828b
+ff4c 828c
+ff4d 828d
+ff4e 828e
+ff4f 828f
+ff50 8290
+ff51 8291
+ff52 8292
+ff53 8293
+ff54 8294
+ff55 8295
+ff56 8296
+ff57 8297
+ff58 8298
+ff59 8299
+ff5a 829a
+ff5b 816f
+ff5c 8162
+ff5d 8170
+ff5e 8160
+ff61 a1
+ff62 a2
+ff63 a3
+ff64 a4
+ff65 a5
+ff66 a6
+ff67 a7
+ff68 a8
+ff69 a9
+ff6a aa
+ff6b ab
+ff6c ac
+ff6d ad
+ff6e ae
+ff6f af
+ff70 b0
+ff71 b1
+ff72 b2
+ff73 b3
+ff74 b4
+ff75 b5
+ff76 b6
+ff77 b7
+ff78 b8
+ff79 b9
+ff7a ba
+ff7b bb
+ff7c bc
+ff7d bd
+ff7e be
+ff7f bf
+ff80 c0
+ff81 c1
+ff82 c2
+ff83 c3
+ff84 c4
+ff85 c5
+ff86 c6
+ff87 c7
+ff88 c8
+ff89 c9
+ff8a ca
+ff8b cb
+ff8c cc
+ff8d cd
+ff8e ce
+ff8f cf
+ff90 d0
+ff91 d1
+ff92 d2
+ff93 d3
+ff94 d4
+ff95 d5
+ff96 d6
+ff97 d7
+ff98 d8
+ff99 d9
+ff9a da
+ff9b db
+ff9c dc
+ff9d dd
+ff9e de
+ff9f df
+ffe0 8191
+ffe1 8192
+ffe2 81ca
+ffe3 8150
+ffe4 fa55
+ffe5 818f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/nio/charset/spi/FooCharset.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+import java.nio.charset.Charset;
+import java.nio.charset.CharsetDecoder;
+import java.nio.charset.CharsetEncoder;
+
+
+public class FooCharset
+    extends Charset
+{
+
+    public FooCharset() {
+        super("FOO",
+              new String[] { "FOO-1", "FOO-2" });
+    }
+
+    public boolean contains(Charset cs) {
+        return (cs instanceof FooCharset);
+    }
+
+    public CharsetDecoder newDecoder() { return null; }
+    public CharsetEncoder newEncoder() { return null; }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/nio/charset/spi/FooProvider.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+import java.util.*;
+import java.nio.charset.*;
+import java.nio.charset.spi.*;
+
+
+public class FooProvider
+    extends CharsetProvider
+{
+
+    public FooProvider() {}
+
+    public Iterator charsets() {
+        return Collections.singleton(new FooCharset()).iterator();
+    }
+
+    public Charset charsetForName(String charsetName) {
+        if (charsetName.equalsIgnoreCase("FOO"))
+            return new FooCharset();
+        return null;
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/nio/charset/spi/Test.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,92 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+import java.io.*;
+import java.nio.charset.*;
+import java.util.*;
+
+
+public class Test {
+
+    private static PrintStream out = System.err;
+    private static final SortedMap available = Charset.availableCharsets();
+
+    private static void fail(String csn, String msg) {
+        throw new RuntimeException(csn + ": " + msg);
+    }
+
+    private static void testPositive(String csn) {
+        if (!Charset.isSupported(csn))
+            fail(csn, "Not supported");
+
+        Charset cs = Charset.forName(csn);
+        out.println(csn + " --> " + cs.getClass().getName());
+        out.println("  " + cs.name() + " " + cs.aliases());
+
+        if (!available.containsKey(cs.name()))
+            fail(csn, "Not in available charsets: " + available.keySet());
+        if (!((Charset)available.get(cs.name())).equals(cs))
+            fail(csn, "Available charset != looked-up charset");
+
+        if (csn.equalsIgnoreCase("FOO")) {
+            if (!(cs instanceof FooCharset))
+                fail(csn, "instanceof failed");
+        }
+    }
+
+    private static void testNegative(String csn) {
+        if (Charset.isSupported(csn))
+            fail(csn, "Supported");
+        if (available.containsKey(csn))
+            fail(csn, "Available");
+        try {
+            Charset.forName(csn);
+        } catch (UnsupportedCharsetException x) {
+            out.println(csn + " not supported, as expected");
+            return;
+        }
+        fail(csn, "Lookup succeeded");
+    }
+
+    public static void main(String [] args) {
+
+        out.println("Default: "
+                    + new InputStreamReader(System.in).getEncoding());
+
+        out.print("Available:");
+        for (Iterator i = available.keySet().iterator(); i.hasNext();)
+            out.print(" " + (String)i.next());
+        out.println();
+
+        for (int i = 0; i < args.length; i++) {
+            String a = args[i];
+            boolean not = a.startsWith("!");
+            String csn = (not ? a.substring(1) : a);
+            if (not)
+                testNegative(csn);
+            else
+                testPositive(csn);
+        }
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/nio/charset/spi/basic.sh	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,127 @@
+#!/bin/sh
+
+#
+# Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+# 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+# CA 95054 USA or visit www.sun.com if you need additional information or
+# have any questions.
+#
+
+# @test
+# @bug 4429040 4591027 4814743
+# @summary Unit test for charset providers
+#
+# @build Test FooCharset FooProvider
+# @run shell basic.sh
+# @run shell basic.sh ja_JP.eucJP
+# @run shell basic.sh tr_TR
+#
+
+# Command-line usage: sh basic.sh /path/to/build [locale]
+
+if [ -z "$TESTJAVA" ]; then
+  if [ $# -lt 1 ]; then exit 1; fi
+  TESTJAVA=$1; shift
+  TESTSRC=`pwd`
+  TESTCLASSES=`pwd`
+fi
+
+JAVA=$TESTJAVA/bin/java
+JAR=$TESTJAVA/bin/jar
+
+JARD=`pwd`/x.jar
+EXTD=`pwd`/x.ext
+TESTD=`pwd`/x.test
+
+CSS='US-ASCII 8859_1 iso-ir-6 UTF-16 windows-1252 !BAR cp1252'
+
+
+if [ \! -d $EXTD ]; then
+    # Initialize
+    echo Initializing...
+    rm -rf $JARD $EXTD $TESTD
+    mkdir -p $JARD/META-INF/services x.ext
+    echo FooProvider \
+      >$JARD/META-INF/services/java.nio.charset.spi.CharsetProvider
+    cp $TESTCLASSES/FooProvider.class $TESTCLASSES/FooCharset.class $JARD
+    mkdir $TESTD
+    cp $TESTCLASSES/Test.class $TESTD
+    (cd $JARD; $JAR -cf $EXTD/test.jar *)
+fi
+
+if [ $# -gt 0 ]; then
+    # Use locale specified on command line, if it's supported
+    L="$1"
+    shift
+    s=`uname -s`
+    if [ $s != Linux -a $s != SunOS ]; then
+      echo "$L: Locales not supported on this system, skipping..."
+      exit 0
+    fi
+    if [ "x`locale -a | grep $L`" != "x$L" ]; then
+      echo "$L: Locale not supported, skipping..."
+      exit 0
+    fi
+    LC_ALL=$L; export LC_ALL
+fi
+
+TMP=${TMP:-$TEMP}; TMP=${TMP:-/tmp}
+cd $TMP
+
+case `uname` in
+  SunOS | Linux ) CPS=':' ;;
+  Windows* )      CPS=';' ;;
+  *)              echo "Unknown platform: `uname`"; exit 1 ;;
+esac
+
+failures=0
+for where in ext app; do
+  for security in none minimal-policy cp-policy; do
+    echo '';
+    echo "LC_ALL=$LC_ALL where=$where security=$security"
+    av=''
+    if [ $where = ext ]; then
+      av="$av -cp $TESTD -Djava.ext.dirs=$EXTD";
+    else
+      av="$av -cp $TESTD$CPS$EXTD/test.jar";
+    fi
+    case $security in
+      none)          css="$CSS FOO";;
+      # Minimal policy in this case is more or less carbon copy of jre default
+      # security policy and doesn't give explicit runtime permission
+      # for user provided runtime loadable charsets
+      minimal-policy)  css="$CSS !FOO";
+		     av="$av -Djava.security.manager -Djava.security.policy==$TESTSRC/default-pol";;
+      cp-policy)     css="$CSS FOO";
+		     av="$av -Djava.security.manager
+		         -Djava.security.policy==$TESTSRC/charsetProvider.sp";;
+    esac
+    if (set -x; $JAVA $av Test $css) 2>&1; then
+      continue;
+    else
+      failures=`expr $failures + 1`
+    fi
+  done
+done
+
+echo ''
+if [ $failures -gt 0 ];
+  then echo "$failures cases failed";
+  else echo "All cases passed"; fi
+exit $failures
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/nio/charset/spi/charsetProvider.sp	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,5 @@
+//
+
+grant { 
+    permission java.lang.RuntimePermission "charsetProvider";
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/nio/charset/spi/default-pol	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,48 @@
+
+// Standard extensions get all permissions by default
+
+grant codeBase "file:${java.home}/lib/ext/*" {
+	permission java.security.AllPermission;
+};
+
+// default permissions granted to all domains
+
+grant { 
+	// Allows any thread to stop itself using the java.lang.Thread.stop()
+	// method that takes no argument.
+	// Note that this permission is granted by default only to remain
+	// backwards compatible.
+	// It is strongly recommended that you either remove this permission
+	// from this policy file or further restrict it to code sources
+	// that you specify, because Thread.stop() is potentially unsafe.
+	// See "http://java.sun.com/notes" for more information.
+	permission java.lang.RuntimePermission "stopThread";
+
+	// allows anyone to listen on un-privileged ports
+	permission java.net.SocketPermission "localhost:1024-", "listen";
+
+	// "standard" properies that can be read by anyone
+
+	permission java.util.PropertyPermission "java.version", "read";
+	permission java.util.PropertyPermission "java.vendor", "read";
+	permission java.util.PropertyPermission "java.vendor.url", "read";
+	permission java.util.PropertyPermission "java.class.version", "read";
+	permission java.util.PropertyPermission "os.name", "read";
+	permission java.util.PropertyPermission "os.version", "read";
+	permission java.util.PropertyPermission "os.arch", "read";
+	permission java.util.PropertyPermission "file.separator", "read";
+	permission java.util.PropertyPermission "path.separator", "read";
+	permission java.util.PropertyPermission "line.separator", "read";
+
+	permission java.util.PropertyPermission "java.specification.version", "read";
+	permission java.util.PropertyPermission "java.specification.vendor", "read";
+	permission java.util.PropertyPermission "java.specification.name", "read";
+
+	permission java.util.PropertyPermission "java.vm.specification.version", "read";
+	permission java.util.PropertyPermission "java.vm.specification.vendor", "read";
+	permission java.util.PropertyPermission "java.vm.specification.name", "read";
+	permission java.util.PropertyPermission "java.vm.version", "read";
+	permission java.util.PropertyPermission "java.vm.vendor", "read";
+	permission java.util.PropertyPermission "java.vm.name", "read";
+};
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/text/Collator/Bug5047314.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,84 @@
+/*
+ * Copyright (c) 2009 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/*
+ * @test
+ * @bug 5047314
+ * @summary verify that compare() and getCollationKey() don't go into an infinite loop for unfinished Thai/Lao text.
+ * @run main/timeout=60 Bug5047314
+ */
+import java.text.Collator;
+import java.util.Locale;
+
+public class Bug5047314 {
+
+    private static Collator colLao = Collator.getInstance(new Locale("lo"));
+    private static Collator colThai = Collator.getInstance(new Locale("th"));
+
+    private static String[] textLao = {
+        "\u0ec0", "\u0ec1", "\u0ec2", "\u0ec3", "\u0ec4"
+    };
+    private static String[] textThai = {
+        "\u0e40", "\u0e41", "\u0e42", "\u0e43", "\u0e44"
+    };
+
+    public static void main(String[] args) {
+        testLao1();
+        testLao2();
+        testThai1();
+        testThai2();
+    }
+
+    private static void testLao1() {
+        System.out.print("Test(Lao 1) .... ");
+        for (int i = 0; i < textLao.length; i++) {
+            colLao.compare(textLao[i], textLao[i]);
+        }
+        System.out.println("Passed.");
+    }
+
+    private static void testLao2() {
+        System.out.print("Test(Lao 2) .... ");
+        for (int i = 0; i < textLao.length; i++) {
+            colLao.compare(textLao[i], textLao[i]);
+        }
+        System.out.println("Passed.");
+    }
+
+    private static void testThai1() {
+        System.out.print("Test(Thai 1) .... ");
+        for (int i = 0; i < textThai.length; i++) {
+            colThai.compare(textThai[i], textThai[i]);
+        }
+        System.out.println("Passed.");
+    }
+
+    private static void testThai2() {
+        System.out.print("Test(Thai 2) .... ");
+        for (int i = 0; i < textThai.length; i++) {
+            colThai.getCollationKey(textThai[i]);
+        }
+        System.out.println("Passed.");
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/util/TimeZone/TimeZoneDatePermissionCheck.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,42 @@
+/* Testcase for PR381 Stackoverflow error with security manager, signed jars
+ * and -Djava.security.debug set.
+ * Copyright (c) 2009, Red Hat Inc.
+ * 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.  Sun designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+import java.util.Date;
+
+/**
+ * Test class. Create a test keystore and dummy cert, create a jar file to
+ * sign with the test class in it. Sign it run it with the security manager
+ * on, plus accesscontroller debugging, will go into infinite recursion
+ * trying to get enough permissions for printing Date of failing
+ * certificate, unless fix is applied.
+ */
+public class TimeZoneDatePermissionCheck
+{
+  public static void main(String[] args)
+  {
+    System.out.println(new Date());
+  }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/util/TimeZone/TimeZoneDatePermissionCheck.sh	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,58 @@
+# Testcase for PR381 Stackoverflow error with security manager, signed jars
+# and -Djava.security.debug set.
+#
+# Copyright (c) 2009, Red Hat Inc.
+#
+# This code is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+# 
+# 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 for more details.
+# 
+# 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.
+#
+# @test
+# @bug 6584033
+# @summary Stackoverflow error with security manager, signed jars and debug.
+# @build TimeZoneDatePermissionCheck
+# @run shell TimeZoneDatePermissionCheck.sh
+
+# Set default if not run under jtreg from test dir itself
+if [ "${TESTCLASSES}" = "" ] ; then
+  TESTCLASSES="."
+fi
+if [ "${TESTJAVA}" = "" ] ; then
+  TESTJAVA=/usr
+fi
+
+# create a test keystore and dummy cert
+rm -f ${TESTCLASSES}/timezonedatetest.store
+${TESTJAVA}/bin/keytool -genkeypair -alias testcert \
+  -keystore ${TESTCLASSES}/timezonedatetest.store \
+  -storepass testpass -validity 360 \
+  -dname "cn=Mark Wildebeest, ou=FreeSoft, o=Red Hat, c=NL" \
+  -keypass testpass
+
+# create a jar file to sign with the test class in it.
+rm -f ${TESTCLASSES}/timezonedatetest.jar
+${TESTJAVA}/bin/jar cf \
+  ${TESTCLASSES}/timezonedatetest.jar \
+  -C ${TESTCLASSES} TimeZoneDatePermissionCheck.class
+
+# sign it
+${TESTJAVA}/bin/jarsigner \
+  -keystore ${TESTCLASSES}/timezonedatetest.store \
+  -storepass testpass ${TESTCLASSES}/timezonedatetest.jar testcert
+
+# run it with the security manager on, plus accesscontroller debugging
+# will go into infinite recursion trying to get enough permissions for
+# printing Date of failing certificate unless fix is applied.
+${TESTJAVA}/bin/java -Djava.security.manager \
+  -Djava.security.debug=access,failure,policy \
+  -cp ${TESTCLASSES}/timezonedatetest.jar TimeZoneDatePermissionCheck
--- a/jdk/test/java/util/regex/RegExTest.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/test/java/util/regex/RegExTest.java	Fri Feb 19 15:13:37 2010 -0800
@@ -32,7 +32,7 @@
  * 4872664 4803179 4892980 4900747 4945394 4938995 4979006 4994840 4997476
  * 5013885 5003322 4988891 5098443 5110268 6173522 4829857 5027748 6376940
  * 6358731 6178785 6284152 6231989 6497148 6486934 6233084 6504326 6635133
- * 6350801 6676425 6878475
+ * 6350801 6676425 6878475 6919132
  */
 
 import java.util.regex.*;
@@ -134,6 +134,7 @@
         toMatchResultTest();
         surrogatesInClassTest();
         namedGroupCaptureTest();
+        nonBmpClassComplementTest();
 
         if (failure)
             throw new RuntimeException("Failure in the RE handling.");
@@ -365,7 +366,6 @@
         m.find();
         if (!m.hitEnd())
             failCount++;
-
         report("hitEnd from a Slice");
     }
 
@@ -3514,4 +3514,29 @@
                           null);
         report("NamedGroupCapture");
     }
+
+    // This is for bug 6969132
+    private static void nonBmpClassComplementTest() throws Exception {
+        Pattern p = Pattern.compile("\\P{Lu}");
+        Matcher m = p.matcher(new String(new int[] {0x1d400}, 0, 1));
+        if (m.find() && m.start() == 1)
+            failCount++;
+
+        // from a unicode category
+        p = Pattern.compile("\\P{Lu}");
+        m = p.matcher(new String(new int[] {0x1d400}, 0, 1));
+        if (m.find())
+            failCount++;
+        if (!m.hitEnd())
+            failCount++;
+
+        // block
+        p = Pattern.compile("\\P{InMathematicalAlphanumericSymbols}");
+        m = p.matcher(new String(new int[] {0x1d400}, 0, 1));
+        if (m.find() && m.start() == 1)
+            failCount++;
+
+        report("NonBmpClassComplement");
+    }
+
 }
--- a/jdk/test/java/util/zip/ZipFile/ReadZip.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/jdk/test/java/util/zip/ZipFile/ReadZip.java	Fri Feb 19 15:13:37 2010 -0800
@@ -22,7 +22,7 @@
  */
 
 /* @test
-   @bug 4241361 4842702 4985614 6646605 5032358
+   @bug 4241361 4842702 4985614 6646605 5032358 6923692
    @summary Make sure we can read a zip file.
  */
 
@@ -59,7 +59,7 @@
         FileInputStream fis = new FileInputStream(
                                    new File(System.getProperty("test.src", "."),
                                             "input.zip"));
-        File newZip = new File(System.getProperty("test.src", "."),
+        File newZip = new File(System.getProperty("test.dir", "."),
                                "input2.zip");
         FileOutputStream fos = new FileOutputStream(newZip);
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/MultiUIDefaults/4300666/bug4300666.html	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,28 @@
+<!--
+ Copyright 2007 Sun Microsystems, Inc.  All Rights Reserved.
+ 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ CA 95054 USA or visit www.sun.com if you need additional information or
+ have any questions.
+-->
+ 
+<html>
+<body>
+<applet  code="bug4300666.class" width=200 height=200></applet>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/MultiUIDefaults/4300666/bug4300666.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/* @test
+   @bug 4300666
+   @summary Printing UIDefaults throws NoSuchElementExcept
+   @author Andrey Pikalev
+   @run applet bug4300666.html
+*/
+
+import javax.swing.*;
+
+
+public class bug4300666 extends JApplet {
+
+    public void init() {
+        UIDefaults d = UIManager.getDefaults();
+        d.toString();
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/MultiUIDefaults/4331767/bug4331767.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,94 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/* @test
+   @bug 4331767
+   @summary Tests that custom implementation of UIDefaults.getUIError() is
+            called when an UI error occurs
+   @author Peter Zhelezniakov
+   @run main bug4331767
+*/
+import javax.swing.*;
+import javax.swing.plaf.metal.MetalLookAndFeel;
+import java.util.Locale;
+
+public class bug4331767
+{
+    private static boolean passed = false;
+
+    public static void main(String[] argv) {
+        try {
+            UIManager.setLookAndFeel(new BrokenLookAndFeel());
+        } catch (Exception e) {
+            throw new Error("Failed to set BrokenLookAndFeel, cannot test", e);
+        }
+
+        // This should call BrokenUIDefaults.getUIError()
+        new JButton();
+
+        if (!passed) {
+            throw new RuntimeException("Failed: Custom getUIError() not called");
+        }
+    }
+
+    static class BrokenUIDefaults extends UIDefaults {
+        UIDefaults defaults;
+
+        public BrokenUIDefaults(UIDefaults def) {
+            defaults = def;
+        }
+
+        public Object get(Object key) {
+            if ("ButtonUI".equals(key)) {
+                System.err.println("[II]  Called BrokenUIDefaults.get(Object)");
+                return "a nonexistent class";
+            }
+            return defaults.get(key);
+        }
+
+        public Object get(Object key, Locale l) {
+            if ("ButtonUI".equals(key)) {
+                System.err.println("[II]  Called BrokenUIDefaults.get(Object, Locale)");
+                return "a nonexistent class";
+            }
+            return defaults.get(key, l);
+        }
+
+        protected void getUIError(String msg) {
+            System.err.println("[II]  BrokenUIDefaults.getUIError() called, test passes");
+            passed = true;
+        }
+    }
+
+    static class BrokenLookAndFeel extends MetalLookAndFeel {
+        UIDefaults defaults;
+
+        public BrokenLookAndFeel() {
+            defaults = new BrokenUIDefaults(super.getDefaults());
+        }
+
+        public UIDefaults getDefaults() {
+            return defaults;
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/MultiUIDefaults/Test6860438.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,98 @@
+/*
+ * Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/* @test
+   @bug 6860438
+   @summary Tests various MultiUIDefaults methods
+   @author Peter Zhelezniakov
+   @run main Test6860438
+*/
+
+import java.util.Enumeration;
+import java.util.Map.Entry;
+import java.util.Set;
+import javax.swing.UIManager;
+
+public class Test6860438
+{
+    static final String KEY = "Test6860438.key";
+    static final String VALUE = "Test6860438.value";
+
+    void check(Object key, Object value, boolean present, int size) {
+        check(UIManager.get(key) == value, "UIManager.get()");
+        check(UIManager.getDefaults().size() == size, "MultiUIDefaults.size()");
+
+        checkEnumeration(UIManager.getDefaults().keys(),
+                key, present, "MultiUIDefaults.keys()");
+        checkEnumeration(UIManager.getDefaults().elements(),
+                value, present, "MultiUIDefaults.elements()");
+
+        // check MultiUIDefaults.entrySet()
+        boolean found = false;
+        Set<Entry<Object, Object>> entries = UIManager.getDefaults().entrySet();
+        for (Entry<Object, Object> e: entries) {
+            if (e.getKey() == key) {
+                check(e.getValue() == value, "MultiUIDefaults.entrySet()");
+                found = true;
+            }
+        }
+        check(found == present, "MultiUIDefaults.entrySet()");
+    }
+
+    void checkEnumeration(Enumeration<Object> e, Object elem,
+            boolean present, String error) {
+        boolean found = false;
+        while (e.hasMoreElements()) {
+            if (e.nextElement() == elem) {
+                found = true;
+            }
+        }
+        check(found == present, error);
+    }
+
+    void check(boolean condition, String methodName) {
+        if (! condition) {
+            throw new RuntimeException(methodName + " failed");
+        }
+    }
+
+    void test() {
+        int size = UIManager.getDefaults().size();
+
+        // create a new value, size increases
+        UIManager.getLookAndFeelDefaults().put(KEY, VALUE);
+        check(KEY, VALUE, true, size + 1);
+
+        // override the value, size remains the same
+        UIManager.put(KEY, VALUE);
+        check(KEY, VALUE, true, size + 1);
+
+        // remove the value, size decreases
+        UIManager.getDefaults().remove(KEY);
+        check(KEY, null, false, size);
+    }
+
+    public static void main(String[] args) {
+        new Test6860438().test();
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/plaf/nimbus/ColorCustomizationTest.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,165 @@
+/*
+ * Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/* @test
+   @bug 6860433
+   @summary Tests variuos techniques of Nimbus color customization
+   @author Peter Zhelezniakov
+   @run main ColorCustomizationTest
+*/
+
+import javax.swing.JLabel;
+import javax.swing.SwingUtilities;
+import javax.swing.UIDefaults;
+import javax.swing.UIManager;
+import java.awt.Color;
+import java.awt.Graphics;
+import java.awt.image.BufferedImage;
+import javax.swing.UnsupportedLookAndFeelException;
+import javax.swing.plaf.ColorUIResource;
+import javax.swing.plaf.nimbus.NimbusLookAndFeel;
+import javax.swing.plaf.synth.Region;
+
+public class ColorCustomizationTest
+{
+    final static int WIDTH = 200;
+    final static int HEIGHT = 100;
+
+    static NimbusLookAndFeel nimbus;
+
+    final JLabel label;
+    final Graphics g;
+
+    ColorCustomizationTest() {
+        label = new JLabel();
+        label.setSize(200, 100);
+
+        g = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_ARGB).getGraphics();
+    }
+
+    public static void main(String[] args) throws Exception {
+        nimbus = new NimbusLookAndFeel();
+        try {
+            UIManager.setLookAndFeel(nimbus);
+        } catch (UnsupportedLookAndFeelException e) {
+            throw new Error("Unable to set Nimbus LAF");
+        }
+        SwingUtilities.invokeAndWait(new Runnable() {
+            @Override public void run() {
+                new ColorCustomizationTest().test();
+            }
+        });
+    }
+
+    void check(Color c) {
+        SwingUtilities.updateComponentTreeUI(label);
+        label.paint(g);
+        if (label.getBackground().getRGB() != c.getRGB()) {
+            System.err.println("Color mismatch!");
+            System.err.println("   found: " + label.getBackground());
+            System.err.println("   expected: " + c);
+            throw new RuntimeException("Test failed");
+        }
+    }
+
+    void test() {
+        testOverrides();
+        testInheritance();
+        testNames();
+        testBaseColor();
+    }
+
+    void testOverrides() {
+        Color defaultColor = label.getBackground();
+
+        // override default background
+        UIDefaults defs = new UIDefaults();
+        defs.put("Label.background", new ColorUIResource(Color.RED));
+        label.putClientProperty("Nimbus.Overrides", defs);
+        check(Color.RED);
+
+        // change overriding color
+        defs = new UIDefaults();
+        defs.put("Label.background", new ColorUIResource(Color.GREEN));
+        label.putClientProperty("Nimbus.Overrides", defs);
+        check(Color.GREEN);
+
+        // remove override
+        label.putClientProperty("Nimbus.Overrides", null);
+        check(defaultColor);
+    }
+
+    void testInheritance() {
+        Color defaultColor = label.getBackground();
+
+        // more specific setting is in global defaults
+        UIManager.put("Label[Enabled].background", new ColorUIResource(Color.RED));
+
+        // less specific one is in overrides
+        UIDefaults defs = new UIDefaults();
+        defs.put("Label.background", new ColorUIResource(Color.GREEN));
+
+        // global wins
+        label.putClientProperty("Nimbus.Overrides", defs);
+        check(Color.RED);
+
+        // now override wins
+        label.putClientProperty("Nimbus.Overrides.InheritDefaults", false);
+        check(Color.GREEN);
+
+        // global is back
+        label.putClientProperty("Nimbus.Overrides.InheritDefaults", true);
+        check(Color.RED);
+
+        // back to default color
+        UIManager.put("Label[Enabled].background", null);
+        label.putClientProperty("Nimbus.Overrides.InheritDefaults", false);
+        label.putClientProperty("Nimbus.Overrides", null);
+        check(defaultColor);
+    }
+
+    void testNames() {
+        Color defaultColor = label.getBackground();
+
+        UIManager.put("\"BlueLabel\"[Enabled].background",
+                new ColorUIResource(Color.BLUE));
+        UIManager.put("\"RedLabel\"[Enabled].background",
+                new ColorUIResource(Color.RED));
+        nimbus.register(Region.LABEL, "\"BlueLabel\"");
+        nimbus.register(Region.LABEL, "\"RedLabel\"");
+
+        label.setName("BlueLabel");
+        check(Color.BLUE);
+        label.setName("RedLabel");
+        check(Color.RED);
+
+        // remove name, color goes back to default
+        label.setName(null);
+        check(defaultColor);
+    }
+
+    void testBaseColor() {
+        UIManager.put("control", Color.GREEN);
+        check(Color.GREEN);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/security/krb5/ktab/KeyTabIndex.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+/*
+ * @test
+ * @bug 6919610
+ * @summary KeyTabInputStream uses static field for per-instance value
+ */
+import sun.security.krb5.PrincipalName;
+import sun.security.krb5.internal.ktab.KeyTab;
+
+public class KeyTabIndex {
+    public static void main(String[] args) throws Exception {
+        KeyTab kt = KeyTab.create("ktab");
+        // Two entries with very different length, so that it's easy to
+        // observice the abnormal change of "index" field.
+        kt.addEntry(new PrincipalName(
+                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@A"),
+                "x".toCharArray(), 1);
+        kt.addEntry(new PrincipalName("a@A"), "x".toCharArray(), 1);
+        kt.save();
+        Runnable t = new Runnable() {
+            @Override
+            public void run() {
+                KeyTab.getInstance("ktab").getClass();
+            }
+        };
+        KeyTab.refresh();
+        for (int i=0; i<10; i++) {
+            new Thread(t).start();
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/security/tools/keytool/file-in-help.sh	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,53 @@
+#
+# Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+# 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+# CA 95054 USA or visit www.sun.com if you need additional information or
+# have any questions.
+#
+
+# @test
+# @bug 6922482
+# @summary keytool's help on -file always shows 'output file'
+#
+
+if [ "${TESTJAVA}" = "" ] ; then
+  JAVAC_CMD=`which javac`
+  TESTJAVA=`dirname $JAVAC_CMD`/..
+fi
+
+# set platform-dependent variables
+OS=`uname -s`
+case "$OS" in
+  Windows_* )
+    FS="\\"
+    ;;
+  * )
+    FS="/"
+    ;;
+esac
+
+LANG=C
+$TESTJAVA${FS}bin${FS}keytool -printcertreq -help 2> h1 || exit 1
+$TESTJAVA${FS}bin${FS}keytool -exportcert -help 2> h2 || exit 2
+
+grep "input file" h1 || exit 3
+grep "output file" h2 || exit 4
+
+exit 0
+
--- a/langtools/.hgtags	Fri Feb 12 19:58:10 2010 +0300
+++ b/langtools/.hgtags	Fri Feb 19 15:13:37 2010 -0800
@@ -55,3 +55,6 @@
 acc1e40a5874ebf32bebcb6ada565b3b40b7461c jdk7-b78
 ac5b4c5644ce54585e5287563dde2b006fa664f4 jdk7-b79
 f0074aa48d4e2a4c03c92b9c4f880679fea0306c jdk7-b80
+cfabfcf9f110ef896cbdd382903d20eefbceefe0 jdk7-b81
+47003a3622f6a17756ab0338bfa8a43e36549e99 jdk7-b82
+c9f4ae1f1480e89aaf7e72173184089d9cea397a jdk7-b83
--- a/langtools/src/share/classes/com/sun/tools/classfile/ClassWriter.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/langtools/src/share/classes/com/sun/tools/classfile/ClassWriter.java	Fri Feb 19 15:13:37 2010 -0800
@@ -744,6 +744,7 @@
                 out.writeByte(p.type_index);
                 break;
             case CLASS_LITERAL:
+            case CLASS_LITERAL_GENERIC_OR_ARRAY:
                 out.writeShort(p.offset);
                 break;
             // method parameter: not specified
--- a/langtools/src/share/classes/com/sun/tools/classfile/ExtendedAnnotation.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/langtools/src/share/classes/com/sun/tools/classfile/ExtendedAnnotation.java	Fri Feb 19 15:13:37 2010 -0800
@@ -123,11 +123,14 @@
          // Class extends and implements clauses
         case CLASS_EXTENDS:
         case CLASS_EXTENDS_GENERIC_OR_ARRAY:
-            position.type_index = cr.readUnsignedByte();
+            int in = cr.readUnsignedShort();
+            if (in == 0xFFFF)
+                in = -1;
+            position.type_index = in;
             break;
         // throws
         case THROWS:
-            position.type_index = cr.readUnsignedByte();
+            position.type_index = cr.readUnsignedShort();
             break;
         case CLASS_LITERAL:
         case CLASS_LITERAL_GENERIC_OR_ARRAY:
@@ -213,11 +216,11 @@
          // Class extends and implements clauses
         case CLASS_EXTENDS:
         case CLASS_EXTENDS_GENERIC_OR_ARRAY:
-            n += 1; // type_index
+            n += 2; // type_index
             break;
         // throws
         case THROWS:
-            n += 1; // type_index
+            n += 2; // type_index
             break;
         case CLASS_LITERAL:
         case CLASS_LITERAL_GENERIC_OR_ARRAY:
@@ -264,18 +267,18 @@
         public int offset = -1;
 
         // For locals.
-        public int[] lvarOffset = new int[] { -1 };
-        public int[] lvarLength = new int[] { -1 };
-        public int[] lvarIndex = new int[] { -1 };
+        public int[] lvarOffset = null;
+        public int[] lvarLength = null;
+        public int[] lvarIndex = null;
 
         // For type parameter bound
-        public int bound_index = -1;
+        public int bound_index = Integer.MIN_VALUE;
 
         // For type parameter and method parameter
-        public int parameter_index = -1;
+        public int parameter_index = Integer.MIN_VALUE;
 
         // For class extends, implements, and throws classes
-        public int type_index = -2;
+        public int type_index = Integer.MIN_VALUE;
 
         // For wildcards
         public Position wildcard_position = null;
--- a/langtools/src/share/classes/com/sun/tools/javac/code/Flags.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/langtools/src/share/classes/com/sun/tools/javac/code/Flags.java	Fri Feb 19 15:13:37 2010 -0800
@@ -113,6 +113,7 @@
     public static final int ENUM         = 1<<14;
 
     public static final int StandardFlags = 0x0fff;
+    public static final int ModifierFlags = StandardFlags & ~INTERFACE;
 
     // Because the following access flags are overloaded with other
     // bit positions, we translate them when reading and writing class
--- a/langtools/src/share/classes/com/sun/tools/javac/code/Symbol.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/langtools/src/share/classes/com/sun/tools/javac/code/Symbol.java	Fri Feb 19 15:13:37 2010 -0800
@@ -657,6 +657,11 @@
 
         public List<Attribute.Compound> getAnnotationMirrors() {
             if (completer != null) complete();
+            if (package_info != null && package_info.completer != null) {
+                package_info.complete();
+                if (attributes_field.isEmpty())
+                    attributes_field = package_info.attributes_field;
+            }
             assert attributes_field != null;
             return attributes_field;
         }
--- a/langtools/src/share/classes/com/sun/tools/javac/code/TypeAnnotationPosition.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/langtools/src/share/classes/com/sun/tools/javac/code/TypeAnnotationPosition.java	Fri Feb 19 15:13:37 2010 -0800
@@ -49,18 +49,18 @@
     public int offset = -1;
 
     // For locals. arrays same length
-    public int[] lvarOffset = new int[] { -1 };
-    public int[] lvarLength = new int[] { -1 };
-    public int[] lvarIndex = new int[] { -1 };
+    public int[] lvarOffset = null;
+    public int[] lvarLength = null;
+    public int[] lvarIndex = null;
 
     // For type parameter bound
-    public int bound_index = -1;
+    public int bound_index = Integer.MIN_VALUE;
 
     // For type parameter and method parameter
-    public int parameter_index = -1;
+    public int parameter_index = Integer.MIN_VALUE;
 
     // For class extends, implements, and throws classes
-    public int type_index = -2;
+    public int type_index = Integer.MIN_VALUE;
 
     // For wildcards
     public TypeAnnotationPosition wildcard_position = null;
@@ -139,6 +139,7 @@
             sb.append(type_index);
             break;
         case CLASS_LITERAL:
+        case CLASS_LITERAL_GENERIC_OR_ARRAY:
             sb.append(", offset = ");
             sb.append(offset);
             break;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/src/share/classes/com/sun/tools/javac/code/TypeAnnotations.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,400 @@
+/*
+ * Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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.  Sun designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+package com.sun.tools.javac.code;
+
+import javax.lang.model.element.ElementKind;
+
+import com.sun.tools.javac.code.Symbol.VarSymbol;
+import com.sun.tools.javac.tree.JCTree;
+import com.sun.tools.javac.tree.TreeInfo;
+import com.sun.tools.javac.tree.TreeScanner;
+import com.sun.tools.javac.tree.JCTree.*;
+import com.sun.tools.javac.util.Context;
+import com.sun.tools.javac.util.List;
+import com.sun.tools.javac.util.ListBuffer;
+
+/**
+ * Contains operations specific to processing type annotations
+ */
+public class TypeAnnotations {
+    private static final Context.Key<TypeAnnotations> key
+        = new Context.Key<TypeAnnotations>();
+
+    public static TypeAnnotations instance(Context context) {
+        TypeAnnotations instance = context.get(key);
+        if (instance == null)
+            instance = new TypeAnnotations(context);
+        return instance;
+    }
+
+    protected TypeAnnotations(Context context) {
+        context.put(key, this);
+    }
+
+    public void taFillAndLift(JCClassDecl tree, boolean visitBodies) {
+        new TypeAnnotationPositions().scan(tree);
+        new TypeAnnotationLift().scan(tree);
+    }
+
+    private static class TypeAnnotationPositions extends TreeScanner {
+
+        private ListBuffer<JCTree> frames = ListBuffer.lb();
+        private void push(JCTree t) { frames = frames.prepend(t); }
+        private JCTree pop() { return frames.next(); }
+        private JCTree peek2() { return frames.toList().tail.head; }
+
+        @Override
+        public void scan(JCTree tree) {
+            push(tree);
+            super.scan(tree);
+            pop();
+        }
+
+        private boolean inClass = false;
+
+        @Override
+        public void visitClassDef(JCClassDecl tree) {
+           if (!inClass) {
+               // Do not recurse into nested and inner classes since
+               // TransTypes.visitClassDef makes an invocation for each class
+               // separately.
+               inClass = true;
+               try {
+                   super.visitClassDef(tree);
+               } finally {
+                   inClass = false;
+               }
+           }
+        }
+
+        private TypeAnnotationPosition resolveFrame(JCTree tree, JCTree frame,
+                List<JCTree> path, TypeAnnotationPosition p) {
+            switch (frame.getKind()) {
+                case TYPE_CAST:
+                    p.type = TargetType.TYPECAST;
+                    p.pos = frame.pos;
+                    return p;
+
+                case INSTANCE_OF:
+                    p.type = TargetType.INSTANCEOF;
+                    p.pos = frame.pos;
+                    return p;
+
+                case NEW_CLASS:
+                    p.type = TargetType.NEW;
+                    p.pos = frame.pos;
+                    return p;
+
+                case NEW_ARRAY:
+                    p.type = TargetType.NEW;
+                    p.pos = frame.pos;
+                    return p;
+
+                case CLASS:
+                    p.pos = frame.pos;
+                    if (((JCClassDecl)frame).extending == tree) {
+                        p.type = TargetType.CLASS_EXTENDS;
+                        p.type_index = -1;
+                    } else if (((JCClassDecl)frame).implementing.contains(tree)) {
+                        p.type = TargetType.CLASS_EXTENDS;
+                        p.type_index = ((JCClassDecl)frame).implementing.indexOf(tree);
+                    } else if (((JCClassDecl)frame).typarams.contains(tree)) {
+                        p.type = TargetType.CLASS_TYPE_PARAMETER;
+                        p.parameter_index = ((JCClassDecl)frame).typarams.indexOf(tree);
+                    } else
+                        throw new AssertionError();
+                    return p;
+
+                case METHOD: {
+                    JCMethodDecl frameMethod = (JCMethodDecl)frame;
+                    p.pos = frame.pos;
+                    if (frameMethod.receiverAnnotations.contains(tree))
+                        p.type = TargetType.METHOD_RECEIVER;
+                    else if (frameMethod.thrown.contains(tree)) {
+                        p.type = TargetType.THROWS;
+                        p.type_index = frameMethod.thrown.indexOf(tree);
+                    } else if (((JCMethodDecl)frame).restype == tree) {
+                        p.type = TargetType.METHOD_RETURN_GENERIC_OR_ARRAY;
+                    } else if (frameMethod.typarams.contains(tree)) {
+                        p.type = TargetType.METHOD_TYPE_PARAMETER;
+                        p.parameter_index = frameMethod.typarams.indexOf(tree);
+                    } else
+                        throw new AssertionError();
+                    return p;
+                }
+                case MEMBER_SELECT: {
+                    JCFieldAccess fieldFrame = (JCFieldAccess)frame;
+                    if ("class".contentEquals(fieldFrame.name)) {
+                        p.type = TargetType.CLASS_LITERAL;
+                        p.pos = TreeInfo.innermostType(fieldFrame.selected).pos;
+                    } else
+                        throw new AssertionError();
+                    return p;
+                }
+                case PARAMETERIZED_TYPE: {
+                    TypeAnnotationPosition nextP;
+                    if (((JCTypeApply)frame).clazz == tree)
+                        nextP = p; // generic: RAW; noop
+                    else if (((JCTypeApply)frame).arguments.contains(tree))
+                        p.location = p.location.prepend(
+                                ((JCTypeApply)frame).arguments.indexOf(tree));
+                    else
+                        throw new AssertionError();
+
+                    List<JCTree> newPath = path.tail;
+                    return resolveFrame(newPath.head, newPath.tail.head, newPath, p);
+                }
+
+                case ARRAY_TYPE: {
+                    p.location = p.location.prepend(0);
+                    List<JCTree> newPath = path.tail;
+                    return resolveFrame(newPath.head, newPath.tail.head, newPath, p);
+                }
+
+                case TYPE_PARAMETER:
+                    if (path.tail.tail.head.getTag() == JCTree.CLASSDEF) {
+                        JCClassDecl clazz = (JCClassDecl)path.tail.tail.head;
+                        p.type = TargetType.CLASS_TYPE_PARAMETER_BOUND;
+                        p.parameter_index = clazz.typarams.indexOf(path.tail.head);
+                        p.bound_index = ((JCTypeParameter)frame).bounds.indexOf(tree);
+                    } else if (path.tail.tail.head.getTag() == JCTree.METHODDEF) {
+                        JCMethodDecl method = (JCMethodDecl)path.tail.tail.head;
+                        p.type = TargetType.METHOD_TYPE_PARAMETER_BOUND;
+                        p.parameter_index = method.typarams.indexOf(path.tail.head);
+                        p.bound_index = ((JCTypeParameter)frame).bounds.indexOf(tree);
+                    } else
+                        throw new AssertionError();
+                    p.pos = frame.pos;
+                    return p;
+
+                case VARIABLE:
+                    VarSymbol v = ((JCVariableDecl)frame).sym;
+                    p.pos = frame.pos;
+                    switch (v.getKind()) {
+                        case LOCAL_VARIABLE:
+                            p.type = TargetType.LOCAL_VARIABLE; break;
+                        case FIELD:
+                            p.type = TargetType.FIELD_GENERIC_OR_ARRAY; break;
+                        case PARAMETER:
+                            p.type = TargetType.METHOD_PARAMETER_GENERIC_OR_ARRAY;
+                            p.parameter_index = methodParamIndex(path, frame);
+                            break;
+                        default: throw new AssertionError();
+                    }
+                    return p;
+
+                case ANNOTATED_TYPE: {
+                    List<JCTree> newPath = path.tail;
+                    return resolveFrame(newPath.head, newPath.tail.head,
+                            newPath, p);
+                }
+
+                case METHOD_INVOCATION: {
+                    JCMethodInvocation invocation = (JCMethodInvocation)frame;
+                    if (!invocation.typeargs.contains(tree))
+                        throw new AssertionError("{" + tree + "} is not an argument in the invocation: " + invocation);
+                    p.type = TargetType.METHOD_TYPE_ARGUMENT;
+                    p.pos = invocation.pos;
+                    p.type_index = invocation.typeargs.indexOf(tree);
+                    return p;
+                }
+
+                case EXTENDS_WILDCARD:
+                case SUPER_WILDCARD: {
+                    p.type = TargetType.WILDCARD_BOUND;
+                    List<JCTree> newPath = path.tail;
+
+                    TypeAnnotationPosition wildcard =
+                        resolveFrame(newPath.head, newPath.tail.head, newPath,
+                                new TypeAnnotationPosition());
+                    if (!wildcard.location.isEmpty())
+                        wildcard.type = wildcard.type.getGenericComplement();
+                    p.wildcard_position = wildcard;
+                    p.pos = frame.pos;
+                    return p;
+                }
+            }
+            return p;
+        }
+
+        private void setTypeAnnotationPos(List<JCTypeAnnotation> annotations, TypeAnnotationPosition position) {
+            for (JCTypeAnnotation anno : annotations) {
+                anno.annotation_position = position;
+                anno.attribute_field.position = position;
+            }
+        }
+
+        @Override
+        public void visitNewArray(JCNewArray tree) {
+            findPosition(tree, tree, tree.annotations);
+            int dimAnnosCount = tree.dimAnnotations.size();
+
+            // handle annotations associated with dimentions
+            for (int i = 0; i < dimAnnosCount; ++i) {
+                TypeAnnotationPosition p = new TypeAnnotationPosition();
+                p.type = TargetType.NEW_GENERIC_OR_ARRAY;
+                p.pos = tree.pos;
+                p.location = p.location.append(i);
+                setTypeAnnotationPos(tree.dimAnnotations.get(i), p);
+            }
+
+            // handle "free" annotations
+            int i = dimAnnosCount == 0 ? 0 : dimAnnosCount - 1;
+            JCExpression elemType = tree.elemtype;
+            while (elemType != null) {
+                if (elemType.getTag() == JCTree.ANNOTATED_TYPE) {
+                    JCAnnotatedType at = (JCAnnotatedType)elemType;
+                    TypeAnnotationPosition p = new TypeAnnotationPosition();
+                    p.type = TargetType.NEW_GENERIC_OR_ARRAY;
+                    p.pos = tree.pos;
+                    p.location = p.location.append(i);
+                    setTypeAnnotationPos(at.annotations, p);
+                    elemType = at.underlyingType;
+                } else if (elemType.getTag() == JCTree.TYPEARRAY) {
+                    ++i;
+                    elemType = ((JCArrayTypeTree)elemType).elemtype;
+                } else
+                    break;
+            }
+
+            // find annotations locations of initializer elements
+            scan(tree.elems);
+        }
+
+        @Override
+        public void visitAnnotatedType(JCAnnotatedType tree) {
+            findPosition(tree, peek2(), tree.annotations);
+            super.visitAnnotatedType(tree);
+        }
+
+        @Override
+        public void visitMethodDef(JCMethodDecl tree) {
+            TypeAnnotationPosition p = new TypeAnnotationPosition();
+            p.type = TargetType.METHOD_RECEIVER;
+            setTypeAnnotationPos(tree.receiverAnnotations, p);
+            super.visitMethodDef(tree);
+        }
+        @Override
+        public void visitTypeParameter(JCTypeParameter tree) {
+            findPosition(tree, peek2(), tree.annotations);
+            super.visitTypeParameter(tree);
+        }
+
+        void findPosition(JCTree tree, JCTree frame, List<JCTypeAnnotation> annotations) {
+            if (!annotations.isEmpty()) {
+                TypeAnnotationPosition p =
+                        resolveFrame(tree, frame, frames.toList(),
+                                new TypeAnnotationPosition());
+                if (!p.location.isEmpty())
+                    p.type = p.type.getGenericComplement();
+                setTypeAnnotationPos(annotations, p);
+            }
+        }
+
+        private int methodParamIndex(List<JCTree> path, JCTree param) {
+            List<JCTree> curr = path;
+            if (curr.head != param)
+                curr = path.tail;
+            JCMethodDecl method = (JCMethodDecl)curr.tail.head;
+            return method.params.indexOf(param);
+        }
+    }
+
+    private static class TypeAnnotationLift extends TreeScanner {
+        List<Attribute.TypeCompound> recordedTypeAnnotations = List.nil();
+
+        boolean isInner = false;
+        @Override
+        public void visitClassDef(JCClassDecl tree) {
+            if (isInner) {
+                // tree is an inner class tree.  stop now.
+                // TransTypes.visitClassDef makes an invocation for each class
+                // separately.
+                return;
+            }
+            isInner = true;
+            List<Attribute.TypeCompound> prevTAs = recordedTypeAnnotations;
+            recordedTypeAnnotations = List.nil();
+            try {
+                super.visitClassDef(tree);
+            } finally {
+                tree.sym.typeAnnotations = tree.sym.typeAnnotations.appendList(recordedTypeAnnotations);
+                recordedTypeAnnotations = prevTAs;
+            }
+        }
+
+        @Override
+        public void visitMethodDef(JCMethodDecl tree) {
+            List<Attribute.TypeCompound> prevTAs = recordedTypeAnnotations;
+            recordedTypeAnnotations = List.nil();
+            try {
+                super.visitMethodDef(tree);
+            } finally {
+                tree.sym.typeAnnotations = tree.sym.typeAnnotations.appendList(recordedTypeAnnotations);
+                recordedTypeAnnotations = prevTAs;
+            }
+        }
+
+        @Override
+        public void visitVarDef(JCVariableDecl tree) {
+            List<Attribute.TypeCompound> prevTAs = recordedTypeAnnotations;
+            recordedTypeAnnotations = List.nil();
+            ElementKind kind = tree.sym.getKind();
+            if (kind == ElementKind.LOCAL_VARIABLE && tree.mods.annotations.nonEmpty()) {
+                // need to lift the annotations
+                TypeAnnotationPosition position = new TypeAnnotationPosition();
+                position.pos = tree.pos;
+                position.type = TargetType.LOCAL_VARIABLE;
+                for (Attribute.Compound attribute : tree.sym.attributes_field) {
+                    Attribute.TypeCompound tc =
+                        new Attribute.TypeCompound(attribute.type, attribute.values, position);
+                    recordedTypeAnnotations = recordedTypeAnnotations.append(tc);
+                }
+            }
+            try {
+                super.visitVarDef(tree);
+            } finally {
+                if (kind.isField() || kind == ElementKind.LOCAL_VARIABLE)
+                    tree.sym.typeAnnotations = tree.sym.typeAnnotations.appendList(recordedTypeAnnotations);
+                recordedTypeAnnotations = kind.isField() ? prevTAs : prevTAs.appendList(recordedTypeAnnotations);
+            }
+        }
+
+        @Override
+        public void visitApply(JCMethodInvocation tree) {
+            scan(tree.meth);
+            scan(tree.typeargs);
+            scan(tree.args);
+        }
+
+        public void visitAnnotation(JCAnnotation tree) {
+            if (tree instanceof JCTypeAnnotation)
+                recordedTypeAnnotations = recordedTypeAnnotations.append(((JCTypeAnnotation)tree).attribute_field);
+            super.visitAnnotation(tree);
+        }
+    }
+
+}
--- a/langtools/src/share/classes/com/sun/tools/javac/comp/Check.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Check.java	Fri Feb 19 15:13:37 2010 -0800
@@ -2047,7 +2047,7 @@
             Symbol m = TreeInfo.symbol(assign.lhs);
             if (m == null || m.type.isErroneous()) continue;
             if (!members.remove(m))
-                log.error(arg.pos(), "duplicate.annotation.member.value",
+                log.error(assign.lhs.pos(), "duplicate.annotation.member.value",
                           m.name, a.type);
             if (assign.rhs.getTag() == ANNOTATION)
                 validateAnnotation((JCAnnotation)assign.rhs);
--- a/langtools/src/share/classes/com/sun/tools/javac/comp/Enter.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Enter.java	Fri Feb 19 15:13:37 2010 -0800
@@ -100,6 +100,7 @@
     MemberEnter memberEnter;
     Types types;
     Lint lint;
+    Names names;
     JavaFileManager fileManager;
 
     private final Todo todo;
@@ -123,6 +124,7 @@
         types = Types.instance(context);
         annotate = Annotate.instance(context);
         lint = Lint.instance(context);
+        names = Names.instance(context);
 
         predefClassDef = make.ClassDef(
             make.Modifiers(PUBLIC),
@@ -308,6 +310,17 @@
                     }
                 }
             }
+
+            for (Symbol q = tree.packge; q != null && q.kind == PCK; q = q.owner)
+                q.flags_field |= EXISTS;
+
+            Name name = names.package_info;
+            ClassSymbol c = reader.enterClass(name, tree.packge);
+            c.flatname = names.fromString(tree.packge + "." + name);
+            c.sourcefile = tree.sourcefile;
+            c.completer = null;
+            c.members_field = new Scope(c);
+            tree.packge.package_info = c;
         }
         classEnter(tree.defs, env);
         if (addEnv) {
--- a/langtools/src/share/classes/com/sun/tools/javac/comp/Lower.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Lower.java	Fri Feb 19 15:13:37 2010 -0800
@@ -1994,19 +1994,14 @@
                                                tree.packageAnnotations),
                                 name, List.<JCTypeParameter>nil(),
                                 null, List.<JCExpression>nil(), List.<JCTree>nil());
-            ClassSymbol c = reader.enterClass(name, tree.packge);
-            c.flatname = names.fromString(tree.packge + "." + name);
-            c.sourcefile = tree.sourcefile;
-            c.completer = null;
-            c.members_field = new Scope(c);
-            c.flags_field = flags;
+            ClassSymbol c = tree.packge.package_info;
+            c.flags_field |= flags;
             c.attributes_field = tree.packge.attributes_field;
             ClassType ctype = (ClassType) c.type;
             ctype.supertype_field = syms.objectType;
             ctype.interfaces_field = List.nil();
             packageAnnotationsClass.sym = c;
 
-
             translated.append(packageAnnotationsClass);
         }
     }
--- a/langtools/src/share/classes/com/sun/tools/javac/comp/MemberEnter.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/langtools/src/share/classes/com/sun/tools/javac/comp/MemberEnter.java	Fri Feb 19 15:13:37 2010 -0800
@@ -1065,11 +1065,6 @@
             super.visitNewArray(tree);
         }
         @Override
-        public void visitApply(JCMethodInvocation tree) {
-            super.visitApply(tree);
-            scan(tree.typeargs);
-        }
-        @Override
         public void visitMethodDef(JCMethodDecl tree) {
             annotate(tree, tree.receiverAnnotations);
             super.visitMethodDef(tree);
--- a/langtools/src/share/classes/com/sun/tools/javac/comp/TransTypes.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/langtools/src/share/classes/com/sun/tools/javac/comp/TransTypes.java	Fri Feb 19 15:13:37 2010 -0800
@@ -61,8 +61,6 @@
         return instance;
     }
 
-    private boolean debugJSR308;
-
     private Names names;
     private Log log;
     private Symtab syms;
@@ -71,6 +69,7 @@
     private boolean allowEnums;
     private Types types;
     private final Resolve resolve;
+    private final TypeAnnotations typeAnnotations;
 
     /**
      * Flag to indicate whether or not to generate bridge methods.
@@ -92,7 +91,7 @@
         types = Types.instance(context);
         make = TreeMaker.instance(context);
         resolve = Resolve.instance(context);
-        debugJSR308 = Options.instance(context).get("TA:trans") != null;
+        typeAnnotations = TypeAnnotations.instance(context);
     }
 
     /** A hashtable mapping bridge methods to the methods they override after
@@ -440,8 +439,7 @@
     }
 
     public void visitClassDef(JCClassDecl tree) {
-        new TypeAnnotationPositions().scan(tree);
-        new TypeAnnotationLift().scan(tree);
+        typeAnnotations.taFillAndLift(tree, true);
         translateClass(tree.sym);
         result = tree;
     }
@@ -801,359 +799,4 @@
         pt = null;
         return translate(cdef, null);
     }
-
-    private class TypeAnnotationPositions extends TreeScanner {
-
-        private ListBuffer<JCTree> frames = ListBuffer.lb();
-        private void push(JCTree t) { frames = frames.prepend(t); }
-        private JCTree pop() { return frames.next(); }
-        private JCTree peek() { return frames.first(); }
-        private JCTree peek2() { return frames.toList().tail.head; }
-
-        @Override
-        public void scan(JCTree tree) {
-            push(tree);
-            super.scan(tree);
-            pop();
-        }
-
-        private boolean inClass = false;
-
-        @Override
-        public void visitClassDef(JCClassDecl tree) {
-           if (!inClass) {
-               // Do not recurse into nested and inner classes since
-               // TransTypes.visitClassDef makes an invocation for each class
-               // separately.
-               inClass = true;
-               try {
-                   super.visitClassDef(tree);
-               } finally {
-                   inClass = false;
-               }
-           }
-        }
-
-        private TypeAnnotationPosition resolveFrame(JCTree tree, JCTree frame,
-                List<JCTree> path, TypeAnnotationPosition p) {
-            switch (frame.getKind()) {
-                case TYPE_CAST:
-                    p.type = TargetType.TYPECAST;
-                    p.pos = frame.pos;
-                    return p;
-
-                case INSTANCE_OF:
-                    p.type = TargetType.INSTANCEOF;
-                    p.pos = frame.pos;
-                    return p;
-
-                case NEW_CLASS:
-                    p.type = TargetType.NEW;
-                    p.pos = frame.pos;
-                    return p;
-
-                case NEW_ARRAY:
-                    p.type = TargetType.NEW;
-                    p.pos = frame.pos;
-                    return p;
-
-                case CLASS:
-                    p.pos = frame.pos;
-                    if (((JCClassDecl)frame).extending == tree) {
-                        p.type = TargetType.CLASS_EXTENDS;
-                        p.type_index = -1;
-                    } else if (((JCClassDecl)frame).implementing.contains(tree)) {
-                        p.type = TargetType.CLASS_EXTENDS;
-                        p.type_index = ((JCClassDecl)frame).implementing.indexOf(tree);
-                    } else if (((JCClassDecl)frame).typarams.contains(tree)) {
-                        p.type = TargetType.CLASS_TYPE_PARAMETER;
-                        p.parameter_index = ((JCClassDecl)frame).typarams.indexOf(tree);
-                    } else
-                        throw new AssertionError();
-                    return p;
-
-                case METHOD: {
-                    JCMethodDecl frameMethod = (JCMethodDecl)frame;
-                    p.pos = frame.pos;
-                    if (frameMethod.receiverAnnotations.contains(tree))
-                        p.type = TargetType.METHOD_RECEIVER;
-                    else if (frameMethod.thrown.contains(tree)) {
-                        p.type = TargetType.THROWS;
-                        p.type_index = frameMethod.thrown.indexOf(tree);
-                    } else if (((JCMethodDecl)frame).restype == tree) {
-                        p.type = TargetType.METHOD_RETURN_GENERIC_OR_ARRAY;
-                    } else if (frameMethod.typarams.contains(tree)) {
-                        p.type = TargetType.METHOD_TYPE_PARAMETER;
-                        p.parameter_index = frameMethod.typarams.indexOf(tree);
-                    } else
-                        throw new AssertionError();
-                    return p;
-                }
-                case MEMBER_SELECT: {
-                    JCFieldAccess fieldFrame = (JCFieldAccess)frame;
-                    if (fieldFrame.name == names._class) {
-                        p.type = TargetType.CLASS_LITERAL;
-                        if (fieldFrame.selected instanceof JCAnnotatedType) {
-                            p.pos = TreeInfo.typeIn(fieldFrame).pos;
-                        } else if (fieldFrame.selected instanceof JCArrayTypeTree) {
-                            p.pos = fieldFrame.selected.pos;
-                        }
-                    } else
-                        throw new AssertionError();
-                    return p;
-                }
-                case PARAMETERIZED_TYPE: {
-                    TypeAnnotationPosition nextP;
-                    if (((JCTypeApply)frame).clazz == tree)
-                        nextP = p; // generic: RAW; noop
-                    else if (((JCTypeApply)frame).arguments.contains(tree))
-                        p.location = p.location.prepend(
-                                ((JCTypeApply)frame).arguments.indexOf(tree));
-                    else
-                        throw new AssertionError();
-
-                    List<JCTree> newPath = path.tail;
-                    return resolveFrame(newPath.head, newPath.tail.head, newPath, p);
-                }
-
-                case ARRAY_TYPE: {
-                    p.location = p.location.prepend(0);
-                    List<JCTree> newPath = path.tail;
-                    return resolveFrame(newPath.head, newPath.tail.head, newPath, p);
-                }
-
-                case TYPE_PARAMETER:
-                    if (path.tail.tail.head.getTag() == JCTree.CLASSDEF) {
-                        JCClassDecl clazz = (JCClassDecl)path.tail.tail.head;
-                        p.type = TargetType.CLASS_TYPE_PARAMETER_BOUND;
-                        p.parameter_index = clazz.typarams.indexOf(path.tail.head);
-                        p.bound_index = ((JCTypeParameter)frame).bounds.indexOf(tree);
-                    } else if (path.tail.tail.head.getTag() == JCTree.METHODDEF) {
-                        JCMethodDecl method = (JCMethodDecl)path.tail.tail.head;
-                        p.type = TargetType.METHOD_TYPE_PARAMETER_BOUND;
-                        p.parameter_index = method.typarams.indexOf(path.tail.head);
-                        p.bound_index = ((JCTypeParameter)frame).bounds.indexOf(tree);
-                    } else
-                        throw new AssertionError();
-                    p.pos = frame.pos;
-                    return p;
-
-                case VARIABLE:
-                    VarSymbol v = ((JCVariableDecl)frame).sym;
-                    p.pos = frame.pos;
-                    switch (v.getKind()) {
-                        case LOCAL_VARIABLE:
-                            p.type = TargetType.LOCAL_VARIABLE; break;
-                        case FIELD:
-                            p.type = TargetType.FIELD_GENERIC_OR_ARRAY; break;
-                        case PARAMETER:
-                            p.type = TargetType.METHOD_PARAMETER_GENERIC_OR_ARRAY;
-                            p.parameter_index = methodParamIndex(path, frame);
-                            break;
-                        default: throw new AssertionError();
-                    }
-                    return p;
-
-                case ANNOTATED_TYPE: {
-                    List<JCTree> newPath = path.tail;
-                    return resolveFrame(newPath.head, newPath.tail.head,
-                            newPath, p);
-                }
-
-                case METHOD_INVOCATION: {
-                    JCMethodInvocation invocation = (JCMethodInvocation)frame;
-                    if (!invocation.typeargs.contains(tree))
-                        throw new AssertionError("{" + tree + "} is not an argument in the invocation: " + invocation);
-                    p.type = TargetType.METHOD_TYPE_ARGUMENT;
-                    p.pos = invocation.pos;
-                    p.type_index = invocation.typeargs.indexOf(tree);
-                    return p;
-                }
-
-                case EXTENDS_WILDCARD:
-                case SUPER_WILDCARD: {
-                    p.type = TargetType.WILDCARD_BOUND;
-                    List<JCTree> newPath = path.tail;
-
-                    TypeAnnotationPosition wildcard =
-                        resolveFrame(newPath.head, newPath.tail.head, newPath,
-                                new TypeAnnotationPosition());
-                    if (!wildcard.location.isEmpty())
-                        wildcard.type = wildcard.type.getGenericComplement();
-                    p.wildcard_position = wildcard;
-                    p.pos = frame.pos;
-                    return p;
-                }
-            }
-            return p;
-        }
-
-        @Override
-        public void visitApply(JCMethodInvocation tree) {
-            scan(tree.meth);
-            scan(tree.typeargs);
-            scan(tree.args);
-        }
-
-        private void setTypeAnnotationPos(List<JCTypeAnnotation> annotations, TypeAnnotationPosition position) {
-            for (JCTypeAnnotation anno : annotations) {
-                anno.annotation_position = position;
-                anno.attribute_field.position = position;
-            }
-        }
-
-        @Override
-        public void visitNewArray(JCNewArray tree) {
-            findPosition(tree, tree, tree.annotations);
-            int dimAnnosCount = tree.dimAnnotations.size();
-
-            // handle annotations associated with dimentions
-            for (int i = 0; i < dimAnnosCount; ++i) {
-                TypeAnnotationPosition p = new TypeAnnotationPosition();
-                p.type = TargetType.NEW_GENERIC_OR_ARRAY;
-                p.pos = tree.pos;
-                p.location = p.location.append(i);
-                setTypeAnnotationPos(tree.dimAnnotations.get(i), p);
-            }
-
-            // handle "free" annotations
-            int i = dimAnnosCount == 0 ? 0 : dimAnnosCount - 1;
-            JCExpression elemType = tree.elemtype;
-            while (elemType != null) {
-                if (elemType.getTag() == JCTree.ANNOTATED_TYPE) {
-                    JCAnnotatedType at = (JCAnnotatedType)elemType;
-                    TypeAnnotationPosition p = new TypeAnnotationPosition();
-                    p.type = TargetType.NEW_GENERIC_OR_ARRAY;
-                    p.pos = tree.pos;
-                    p.location = p.location.append(i);
-                    setTypeAnnotationPos(at.annotations, p);
-                    elemType = at.underlyingType;
-                } else if (elemType.getTag() == JCTree.TYPEARRAY) {
-                    ++i;
-                    elemType = ((JCArrayTypeTree)elemType).elemtype;
-                } else
-                    break;
-            }
-
-            // find annotations locations of initializer elements
-            scan(tree.elems);
-        }
-
-        @Override
-        public void visitAnnotatedType(JCAnnotatedType tree) {
-            findPosition(tree, peek2(), tree.annotations);
-            super.visitAnnotatedType(tree);
-        }
-
-        @Override
-        public void visitMethodDef(JCMethodDecl tree) {
-            TypeAnnotationPosition p = new TypeAnnotationPosition();
-            p.type = TargetType.METHOD_RECEIVER;
-            setTypeAnnotationPos(tree.receiverAnnotations, p);
-            super.visitMethodDef(tree);
-        }
-        @Override
-        public void visitTypeParameter(JCTypeParameter tree) {
-            findPosition(tree, peek2(), tree.annotations);
-            super.visitTypeParameter(tree);
-        }
-
-        void findPosition(JCTree tree, JCTree frame, List<JCTypeAnnotation> annotations) {
-            if (!annotations.isEmpty()) {
-                TypeAnnotationPosition p =
-                        resolveFrame(tree, frame, frames.toList(),
-                                new TypeAnnotationPosition());
-                if (!p.location.isEmpty())
-                    p.type = p.type.getGenericComplement();
-                setTypeAnnotationPos(annotations, p);
-                if (debugJSR308) {
-                    System.out.println("trans: " + tree);
-                    System.out.println("  target: " + p);
-                }
-            }
-        }
-
-        private int methodParamIndex(List<JCTree> path, JCTree param) {
-            List<JCTree> curr = path;
-            if (curr.head != param)
-                curr = path.tail;
-            JCMethodDecl method = (JCMethodDecl)curr.tail.head;
-            return method.params.indexOf(param);
-        }
-    }
-
-    private class TypeAnnotationLift extends TreeScanner {
-        List<Attribute.TypeCompound> recordedTypeAnnotations = List.nil();
-
-        boolean isInner = false;
-        @Override
-        public void visitClassDef(JCClassDecl tree) {
-            if (isInner) {
-                // tree is an inner class tree.  stop now.
-                // TransTypes.visitClassDef makes an invocation for each class
-                // seperately.
-                return;
-            }
-            isInner = true;
-            List<Attribute.TypeCompound> prevTAs = recordedTypeAnnotations;
-            recordedTypeAnnotations = List.nil();
-            try {
-                super.visitClassDef(tree);
-            } finally {
-                tree.sym.typeAnnotations = tree.sym.typeAnnotations.appendList(recordedTypeAnnotations);
-                recordedTypeAnnotations = prevTAs;
-            }
-        }
-
-        @Override
-        public void visitMethodDef(JCMethodDecl tree) {
-            List<Attribute.TypeCompound> prevTAs = recordedTypeAnnotations;
-            recordedTypeAnnotations = List.nil();
-            try {
-                super.visitMethodDef(tree);
-            } finally {
-                tree.sym.typeAnnotations = tree.sym.typeAnnotations.appendList(recordedTypeAnnotations);
-                recordedTypeAnnotations = prevTAs;
-            }
-        }
-
-        @Override
-        public void visitVarDef(JCVariableDecl tree) {
-            List<Attribute.TypeCompound> prevTAs = recordedTypeAnnotations;
-            recordedTypeAnnotations = List.nil();
-            ElementKind kind = tree.sym.getKind();
-            if (kind == ElementKind.LOCAL_VARIABLE && tree.mods.annotations.nonEmpty()) {
-                // need to lift the annotations
-                TypeAnnotationPosition position = new TypeAnnotationPosition();
-                position.pos = tree.pos;
-                position.type = TargetType.LOCAL_VARIABLE;
-                for (Attribute.Compound attribute : tree.sym.attributes_field) {
-                    Attribute.TypeCompound tc =
-                        new Attribute.TypeCompound(attribute.type, attribute.values, position);
-                    recordedTypeAnnotations = recordedTypeAnnotations.append(tc);
-                }
-            }
-            try {
-                super.visitVarDef(tree);
-            } finally {
-                if (kind.isField() || kind == ElementKind.LOCAL_VARIABLE)
-                    tree.sym.typeAnnotations = tree.sym.typeAnnotations.appendList(recordedTypeAnnotations);
-                recordedTypeAnnotations = kind.isField() ? prevTAs : prevTAs.appendList(recordedTypeAnnotations);
-            }
-        }
-
-        @Override
-        public void visitApply(JCMethodInvocation tree) {
-            scan(tree.meth);
-            scan(tree.typeargs);
-            scan(tree.args);
-        }
-
-        public void visitAnnotation(JCAnnotation tree) {
-            if (tree instanceof JCTypeAnnotation)
-                recordedTypeAnnotations = recordedTypeAnnotations.append(((JCTypeAnnotation)tree).attribute_field);
-            super.visitAnnotation(tree);
-        }
-    }
-
 }
--- a/langtools/src/share/classes/com/sun/tools/javac/jvm/ClassReader.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/langtools/src/share/classes/com/sun/tools/javac/jvm/ClassReader.java	Fri Feb 19 15:13:37 2010 -0800
@@ -1425,11 +1425,11 @@
          // Class extends and implements clauses
         case CLASS_EXTENDS:
         case CLASS_EXTENDS_GENERIC_OR_ARRAY:
-            position.type_index = nextByte();
+            position.type_index = nextChar();
             break;
         // throws
         case THROWS:
-            position.type_index = nextByte();
+            position.type_index = nextChar();
             break;
         case CLASS_LITERAL:
         case CLASS_LITERAL_GENERIC_OR_ARRAY:
--- a/langtools/src/share/classes/com/sun/tools/javac/jvm/ClassWriter.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/langtools/src/share/classes/com/sun/tools/javac/jvm/ClassWriter.java	Fri Feb 19 15:13:37 2010 -0800
@@ -965,11 +965,11 @@
          // Class extends and implements clauses
         case CLASS_EXTENDS:
         case CLASS_EXTENDS_GENERIC_OR_ARRAY:
-            databuf.appendByte(p.type_index);
+            databuf.appendChar(p.type_index);
             break;
         // throws
         case THROWS:
-            databuf.appendByte(p.type_index);
+            databuf.appendChar(p.type_index);
             break;
         case CLASS_LITERAL:
         case CLASS_LITERAL_GENERIC_OR_ARRAY:
--- a/langtools/src/share/classes/com/sun/tools/javac/jvm/Code.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/langtools/src/share/classes/com/sun/tools/javac/jvm/Code.java	Fri Feb 19 15:13:37 2010 -0800
@@ -1926,9 +1926,9 @@
         for (Attribute.TypeCompound ta : lv.sym.typeAnnotations) {
             TypeAnnotationPosition p = ta.position;
             while (p != null) {
-                p.lvarOffset[0] = (int)lv.start_pc;
-                p.lvarLength[0] = (int)lv.length;
-                p.lvarIndex[0] = (int)lv.reg;
+                p.lvarOffset = new int[] { (int)lv.start_pc };
+                p.lvarLength = new int[] { (int)lv.length };
+                p.lvarIndex = new int[] { (int)lv.reg };
                 p.isValidOffset = true;
                 p = p.wildcard_position;
             }
--- a/langtools/src/share/classes/com/sun/tools/javac/jvm/Gen.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/langtools/src/share/classes/com/sun/tools/javac/jvm/Gen.java	Fri Feb 19 15:13:37 2010 -0800
@@ -1714,7 +1714,7 @@
         for (Attribute.TypeCompound ta : meth.typeAnnotations) {
             if (ta.position.pos == treePos) {
                 ta.position.offset = code.cp;
-                ta.position.lvarOffset[0] = code.cp;
+                ta.position.lvarOffset = new int[] { code.cp };
                 ta.position.isValidOffset = true;
             }
         }
@@ -1726,7 +1726,7 @@
         for (Attribute.TypeCompound ta : meth.owner.typeAnnotations) {
             if (ta.position.pos == treePos) {
                 ta.position.offset = code.cp;
-                ta.position.lvarOffset[0] = code.cp;
+                ta.position.lvarOffset = new int[] { code.cp };
                 ta.position.isValidOffset = true;
             }
         }
@@ -1738,7 +1738,7 @@
             for (Attribute.TypeCompound ta : s.typeAnnotations) {
                 if (ta.position.pos == treePos) {
                     ta.position.offset = code.cp;
-                    ta.position.lvarOffset[0] = code.cp;
+                    ta.position.lvarOffset = new int[] { code.cp };
                     ta.position.isValidOffset = true;
                 }
             }
@@ -2158,6 +2158,11 @@
             code.emitop2(ldc2, makeRef(tree.pos(), tree.selected.type));
             result = items.makeStackItem(pt);
             return;
+        } else if (tree.name == names.TYPE) {
+            // Set the annotation positions for primitive class literals
+            // (e.g. int.class) which have been converted to TYPE field
+            // access on the corresponding boxed type (e.g. Integer.TYPE).
+            setTypeAnnotationPositions(tree.pos);
         }
 
         Symbol ssym = TreeInfo.symbol(tree.selected);
--- a/langtools/src/share/classes/com/sun/tools/javac/parser/JavacParser.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/langtools/src/share/classes/com/sun/tools/javac/parser/JavacParser.java	Fri Feb 19 15:13:37 2010 -0800
@@ -761,23 +761,28 @@
         JCExpression[] odStack = newOdStack();
         List<Token[]> savedOp = opStackSupply.elems;
         Token[] opStack = newOpStack();
+        List<int[]> savedPos = posStackSupply.elems;
+        int[] posStack = newPosStack();
         // optimization, was odStack = new Tree[...]; opStack = new Tree[...];
         int top = 0;
         odStack[0] = t;
         int startPos = S.pos();
         Token topOp = ERROR;
+        int topOpPos = Position.NOPOS;
         while (prec(S.token()) >= minprec) {
+            posStack[top] = topOpPos;
             opStack[top] = topOp;
             top++;
             topOp = S.token();
-            int pos = S.pos();
+            topOpPos = S.pos();
             S.nextToken();
-            odStack[top] = topOp == INSTANCEOF ? parseType() : term3();
+            odStack[top] = (topOp == INSTANCEOF) ? parseType() : term3();
             while (top > 0 && prec(topOp) >= prec(S.token())) {
-                odStack[top-1] = makeOp(pos, topOp, odStack[top-1],
+                odStack[top-1] = makeOp(topOpPos, topOp, odStack[top-1],
                                         odStack[top]);
                 top--;
                 topOp = opStack[top];
+                topOpPos = posStack[top];
             }
         }
         assert top == 0;
@@ -792,6 +797,7 @@
 
         odStackSupply.elems = savedOd; // optimization
         opStackSupply.elems = savedOp; // optimization
+        posStackSupply.elems = savedPos; // optimization
         return t;
     }
 //where
@@ -845,6 +851,7 @@
          */
         ListBuffer<JCExpression[]> odStackSupply = new ListBuffer<JCExpression[]>();
         ListBuffer<Token[]> opStackSupply = new ListBuffer<Token[]>();
+        ListBuffer<int[]> posStackSupply = new ListBuffer<int[]>();
 
         private JCExpression[] newOdStack() {
             if (odStackSupply.elems == odStackSupply.last)
@@ -862,6 +869,14 @@
             return opStack;
         }
 
+        private int[] newPosStack() {
+            if (posStackSupply.elems == posStackSupply.last)
+                posStackSupply.append(new int[infixPrecedenceLevels + 1]);
+            int[] posStack = posStackSupply.elems.head;
+            posStackSupply.elems = posStackSupply.elems.tail;
+            return posStack;
+        }
+
     /** Expression3    = PrefixOp Expression3
      *                 | "(" Expr | TypeNoParams ")" Expression3
      *                 | Primary {Selector} {PostfixOp}
@@ -939,7 +954,7 @@
                             args.append(typeArgument());
                         }
                         accept(GT);
-                        t = F.at(pos1).TypeApply(t, args.toList());
+                        t = toP(F.at(pos1).TypeApply(t, args.toList()));
                         checkGenerics();
                         while (S.token() == DOT) {
                             S.nextToken();
@@ -950,7 +965,8 @@
                         t = bracketsOpt(toP(t));
                     } else if ((mode & EXPR) != 0) {
                         mode = EXPR;
-                        t = F.at(pos1).Binary(op, t, term2Rest(t1, TreeInfo.shiftPrec));
+                        JCExpression e = term2Rest(t1, TreeInfo.shiftPrec);
+                        t = F.at(pos1).Binary(op, t, e);
                         t = termRest(term1Rest(term2Rest(t, TreeInfo.orPrec)));
                     } else {
                         accept(GT);
@@ -998,7 +1014,8 @@
         case SUPER:
             if ((mode & EXPR) != 0) {
                 mode = EXPR;
-                t = to(superSuffix(typeArgs, F.at(pos).Ident(names._super)));
+                t = to(F.at(pos).Ident(names._super));
+                t = superSuffix(typeArgs, t);
                 typeArgs = null;
             } else return illegal();
             break;
@@ -1380,13 +1397,15 @@
         S.nextToken();
         JCExpression result;
         if (S.token() == EXTENDS) {
-            TypeBoundKind t = to(F.at(S.pos()).TypeBoundKind(BoundKind.EXTENDS));
+            TypeBoundKind t = to(F.at(pos).TypeBoundKind(BoundKind.EXTENDS));
             S.nextToken();
-            result = F.at(pos).Wildcard(t, parseType());
+            JCExpression bound = parseType();
+            result = F.at(pos).Wildcard(t, bound);
         } else if (S.token() == SUPER) {
-            TypeBoundKind t = to(F.at(S.pos()).TypeBoundKind(BoundKind.SUPER));
+            TypeBoundKind t = to(F.at(pos).TypeBoundKind(BoundKind.SUPER));
             S.nextToken();
-            result = F.at(pos).Wildcard(t, parseType());
+            JCExpression bound = parseType();
+            result = F.at(pos).Wildcard(t, bound);
         } else if (S.token() == IDENTIFIER) {
             //error recovery
             reportSyntaxError(S.prevEndPos(), "expected3",
@@ -1396,7 +1415,7 @@
             JCIdent id = toP(F.at(S.pos()).Ident(ident()));
             result = F.at(pos).Erroneous(List.<JCTree>of(wc, id));
         } else {
-            TypeBoundKind t = F.at(Position.NOPOS).TypeBoundKind(BoundKind.UNBOUND);
+            TypeBoundKind t = toP(F.at(pos).TypeBoundKind(BoundKind.UNBOUND));
             result = toP(F.at(pos).Wildcard(t, null));
         }
         if (!annotations.isEmpty())
@@ -2117,14 +2136,21 @@
         return modifiersOpt(null);
     }
     JCModifiers modifiersOpt(JCModifiers partial) {
-        long flags = (partial == null) ? 0 : partial.flags;
+        long flags;
+        ListBuffer<JCAnnotation> annotations = new ListBuffer<JCAnnotation>();
+        int pos;
+        if (partial == null) {
+            flags = 0;
+            pos = S.pos();
+        } else {
+            flags = partial.flags;
+            annotations.appendList(partial.annotations);
+            pos = partial.pos;
+        }
         if (S.deprecatedFlag()) {
             flags |= Flags.DEPRECATED;
             S.resetDeprecatedFlag();
         }
-        ListBuffer<JCAnnotation> annotations = new ListBuffer<JCAnnotation>();
-        if (partial != null) annotations.appendList(partial.annotations);
-        int pos = S.pos();
         int lastPos = Position.NOPOS;
     loop:
         while (true) {
@@ -2150,12 +2176,12 @@
             if (flag == Flags.ANNOTATION) {
                 checkAnnotations();
                 if (S.token() != INTERFACE) {
-                JCAnnotation ann = annotation(lastPos, AnnotationKind.DEFAULT_ANNO);
-                // if first modifier is an annotation, set pos to annotation's.
-                if (flags == 0 && annotations.isEmpty())
-                    pos = ann.pos;
-                annotations.append(ann);
-                lastPos = ann.pos;
+                    JCAnnotation ann = annotation(lastPos, AnnotationKind.DEFAULT_ANNO);
+                    // if first modifier is an annotation, set pos to annotation's.
+                    if (flags == 0 && annotations.isEmpty())
+                        pos = ann.pos;
+                    annotations.append(ann);
+                    lastPos = ann.pos;
                     flag = 0;
                 }
             }
@@ -2169,7 +2195,7 @@
 
         /* A modifiers tree with no modifier tokens or annotations
          * has no text position. */
-        if (flags == 0 && annotations.isEmpty())
+        if ((flags & Flags.ModifierFlags) == 0 && annotations.isEmpty())
             pos = Position.NOPOS;
 
         JCModifiers mods = F.at(pos).Modifiers(flags, annotations.toList());
@@ -2226,7 +2252,8 @@
             if (t1.getTag() == JCTree.IDENT && S.token() == EQ) {
                 int pos = S.pos();
                 accept(EQ);
-                return toP(F.at(pos).Assign(t1, annotationValue()));
+                JCExpression v = annotationValue();
+                return toP(F.at(pos).Assign(t1, v));
             } else {
                 return t1;
             }
@@ -2543,10 +2570,9 @@
         }
 
         List<JCTree> defs = enumBody(name);
-        JCModifiers newMods =
-            F.at(mods.pos).Modifiers(mods.flags|Flags.ENUM, mods.annotations);
+        mods.flags |= Flags.ENUM;
         JCClassDecl result = toP(F.at(pos).
-            ClassDef(newMods, name, List.<JCTypeParameter>nil(),
+            ClassDef(mods, name, List.<JCTypeParameter>nil(),
                 null, implementing, defs));
         attach(result, dc);
         return result;
@@ -2695,16 +2721,8 @@
             } else {
                 pos = S.pos();
                 List<JCTypeParameter> typarams = typeParametersOpt();
-                // Hack alert:  if there are type arguments but no Modifiers, the start
-                // position will be lost unless we set the Modifiers position.  There
-                // should be an AST node for type parameters (BugId 5005090).
-                if (typarams.length() > 0 && mods.pos == Position.NOPOS) {
-                    mods.pos = pos;
-                }
-
                 List<JCAnnotation> annosAfterParams = annotationsOpt(AnnotationKind.DEFAULT_ANNO);
 
-                Token token = S.token();
                 Name name = S.name();
                 pos = S.pos();
                 JCExpression type;
@@ -2715,7 +2733,11 @@
                     type = to(F.at(pos).TypeIdent(TypeTags.VOID));
                     S.nextToken();
                 } else {
-                    mods.annotations = mods.annotations.appendList(annosAfterParams);
+                    if (annosAfterParams.nonEmpty()) {
+                        mods.annotations = mods.annotations.appendList(annosAfterParams);
+                        if (mods.pos == Position.NOPOS)
+                            mods.pos = mods.annotations.head.pos;
+                    }
                     // method returns types are un-annotated types
                     type = unannotatedType();
                 }
@@ -2813,6 +2835,7 @@
                 }
             }
         }
+
         JCMethodDecl result =
             toP(F.at(pos).MethodDef(mods, name, type, typarams,
                                     params, receiverAnnotations, thrown,
--- a/langtools/src/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/langtools/src/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java	Fri Feb 19 15:13:37 2010 -0800
@@ -67,6 +67,7 @@
 import com.sun.tools.javac.tree.JCTree.*;
 import com.sun.tools.javac.util.Abort;
 import com.sun.tools.javac.util.Context;
+import com.sun.tools.javac.util.Convert;
 import com.sun.tools.javac.util.List;
 import com.sun.tools.javac.util.ListBuffer;
 import com.sun.tools.javac.util.Log;
@@ -893,14 +894,20 @@
                         errorStatus = true;
                         break runAround;
                     } else {
-                        ListBuffer<ClassSymbol> classes = enterNewClassFiles(currentContext);
+                        List<ClassSymbol> newClasses = enterNewClassFiles(currentContext);
                         compiler.enterTrees(roots);
 
                         // annotationsPresentInSource =
                         // collector.findAnnotations(parsedFiles);
-                        classes.appendList(getTopLevelClasses(parsedFiles));
-                        topLevelClasses  = classes.toList();
-                        packageInfoFiles = getPackageInfoFiles(parsedFiles);
+                        ListBuffer<ClassSymbol> tlc = new ListBuffer<ClassSymbol>();
+                        tlc.appendList(getTopLevelClasses(parsedFiles));
+                        tlc.appendList(getTopLevelClassesFromClasses(newClasses));
+                        topLevelClasses  = tlc.toList();
+
+                        ListBuffer<PackageSymbol> pif = new ListBuffer<PackageSymbol>();
+                        pif.appendList(getPackageInfoFiles(parsedFiles));
+                        pif.appendList(getPackageInfoFilesFromClasses(newClasses));
+                        packageInfoFiles = pif.toList();
 
                         annotationsPresent = new LinkedHashSet<TypeElement>();
                         for (ClassSymbol classSym : topLevelClasses)
@@ -1026,20 +1033,30 @@
         }
     }
 
-    private ListBuffer<ClassSymbol> enterNewClassFiles(Context currentContext) {
+    private List<ClassSymbol> enterNewClassFiles(Context currentContext) {
         ClassReader reader = ClassReader.instance(currentContext);
         Names names = Names.instance(currentContext);
-        ListBuffer<ClassSymbol> list = new ListBuffer<ClassSymbol>();
+        List<ClassSymbol> list = List.nil();
 
         for (Map.Entry<String,JavaFileObject> entry : filer.getGeneratedClasses().entrySet()) {
             Name name = names.fromString(entry.getKey());
             JavaFileObject file = entry.getValue();
             if (file.getKind() != JavaFileObject.Kind.CLASS)
                 throw new AssertionError(file);
-            ClassSymbol cs = reader.enterClass(name, file);
-            list.append(cs);
+            ClassSymbol cs;
+            if (isPkgInfo(file, JavaFileObject.Kind.CLASS)) {
+                Name packageName = Convert.packagePart(name);
+                PackageSymbol p = reader.enterPackage(packageName);
+                if (p.package_info == null)
+                    p.package_info = reader.enterClass(Convert.shortName(name), p);
+                cs = p.package_info;
+                if (cs.classfile == null)
+                    cs.classfile = file;
+            } else
+                cs = reader.enterClass(name, file);
+            list = list.prepend(cs);
         }
-        return list;
+        return list.reverse();
     }
 
     /**
@@ -1066,18 +1083,44 @@
         return classes.reverse();
     }
 
+    private List<ClassSymbol> getTopLevelClassesFromClasses(List<? extends ClassSymbol> syms) {
+        List<ClassSymbol> classes = List.nil();
+        for (ClassSymbol sym : syms) {
+            if (!isPkgInfo(sym)) {
+                classes = classes.prepend(sym);
+            }
+        }
+        return classes.reverse();
+    }
+
     private List<PackageSymbol> getPackageInfoFiles(List<? extends JCCompilationUnit> units) {
         List<PackageSymbol> packages = List.nil();
         for (JCCompilationUnit unit : units) {
-            boolean isPkgInfo = unit.sourcefile.isNameCompatible("package-info",
-                                                                 JavaFileObject.Kind.SOURCE);
-            if (isPkgInfo) {
+            if (isPkgInfo(unit.sourcefile, JavaFileObject.Kind.SOURCE)) {
                 packages = packages.prepend(unit.packge);
             }
         }
         return packages.reverse();
     }
 
+    private List<PackageSymbol> getPackageInfoFilesFromClasses(List<? extends ClassSymbol> syms) {
+        List<PackageSymbol> packages = List.nil();
+        for (ClassSymbol sym : syms) {
+            if (isPkgInfo(sym)) {
+                packages = packages.prepend((PackageSymbol) sym.owner);
+            }
+        }
+        return packages.reverse();
+    }
+
+    private boolean isPkgInfo(JavaFileObject fo, JavaFileObject.Kind kind) {
+        return fo.isNameCompatible("package-info", kind);
+    }
+
+    private boolean isPkgInfo(ClassSymbol sym) {
+        return isPkgInfo(sym.classfile, JavaFileObject.Kind.CLASS) && (sym.packge().package_info == sym);
+    }
+
     private Context contextForNextRound(Context context, boolean shareNames)
         throws IOException
     {
@@ -1252,10 +1295,6 @@
                 node.sym = null;
                 super.visitIdent(node);
             }
-            public void visitApply(JCMethodInvocation node) {
-                scan(node.typeargs);
-                super.visitApply(node);
-            }
         };
 
 
--- a/langtools/src/share/classes/com/sun/tools/javac/tree/TreeInfo.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/langtools/src/share/classes/com/sun/tools/javac/tree/TreeInfo.java	Fri Feb 19 15:13:37 2010 -0800
@@ -307,8 +307,18 @@
         case(JCTree.POSTINC):
         case(JCTree.POSTDEC):
             return getStartPos(((JCUnary) tree).arg);
-        case(JCTree.ANNOTATED_TYPE):
-            return getStartPos(((JCAnnotatedType) tree).underlyingType);
+        case(JCTree.ANNOTATED_TYPE): {
+            JCAnnotatedType node = (JCAnnotatedType) tree;
+            if (node.annotations.nonEmpty())
+                return getStartPos(node.annotations.head);
+            return getStartPos(node.underlyingType);
+        }
+        case(JCTree.NEWCLASS): {
+            JCNewClass node = (JCNewClass)tree;
+            if (node.encl != null)
+                return getStartPos(node.encl);
+            break;
+        }
         case(JCTree.VARDEF): {
             JCVariableDecl node = (JCVariableDecl)tree;
             if (node.mods.pos != Position.NOPOS) {
@@ -406,6 +416,8 @@
             return getEndPos(((JCUnary) tree).arg, endPositions);
         case(JCTree.WHILELOOP):
             return getEndPos(((JCWhileLoop) tree).body, endPositions);
+        case(JCTree.ANNOTATED_TYPE):
+            return getEndPos(((JCAnnotatedType) tree).underlyingType, endPositions);
         case(JCTree.ERRONEOUS): {
             JCErroneous node = (JCErroneous)tree;
             if (node.errs != null && node.errs.nonEmpty())
--- a/langtools/src/share/classes/com/sun/tools/javac/tree/TreeMaker.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/langtools/src/share/classes/com/sun/tools/javac/tree/TreeMaker.java	Fri Feb 19 15:13:37 2010 -0800
@@ -480,7 +480,7 @@
 
     public JCModifiers Modifiers(long flags, List<JCAnnotation> annotations) {
         JCModifiers tree = new JCModifiers(flags, annotations);
-        boolean noFlags = (flags & Flags.StandardFlags) == 0;
+        boolean noFlags = (flags & Flags.ModifierFlags) == 0;
         tree.pos = (noFlags && annotations.isEmpty()) ? Position.NOPOS : pos;
         return tree;
     }
--- a/langtools/src/share/classes/com/sun/tools/javac/tree/TreeScanner.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/langtools/src/share/classes/com/sun/tools/javac/tree/TreeScanner.java	Fri Feb 19 15:13:37 2010 -0800
@@ -193,6 +193,7 @@
     }
 
     public void visitApply(JCMethodInvocation tree) {
+        scan(tree.typeargs);
         scan(tree.meth);
         scan(tree.args);
     }
@@ -200,6 +201,7 @@
     public void visitNewClass(JCNewClass tree) {
         scan(tree.encl);
         scan(tree.clazz);
+        scan(tree.typeargs);
         scan(tree.args);
         scan(tree.def);
     }
--- a/langtools/src/share/classes/com/sun/tools/javap/AnnotationWriter.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/langtools/src/share/classes/com/sun/tools/javap/AnnotationWriter.java	Fri Feb 19 15:13:37 2010 -0800
@@ -162,6 +162,7 @@
             print(pos.type_index);
             break;
         case CLASS_LITERAL:
+        case CLASS_LITERAL_GENERIC_OR_ARRAY:
             if (showOffsets) {
                 print(", offset=");
                 print(pos.offset);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/T6654037.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,76 @@
+/*
+ * Copyright 2008-2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/*
+ * @test
+ * @bug 6654037
+ * @summary JCTree.pos may be incorrect for BinaryTrees
+ */
+
+import com.sun.source.tree.BinaryTree;
+import com.sun.source.tree.ClassTree;
+import com.sun.source.tree.CompilationUnitTree;
+import com.sun.source.tree.MethodTree;
+import com.sun.source.tree.VariableTree;
+import com.sun.tools.javac.api.JavacTaskImpl;
+import com.sun.tools.javac.tree.JCTree;
+import java.net.URI;
+import java.util.Arrays;
+import javax.tools.JavaCompiler;
+import javax.tools.JavaFileObject;
+import javax.tools.SimpleJavaFileObject;
+import javax.tools.ToolProvider;
+
+public class T6654037 {
+
+    public static void main(String[] args) throws Exception {
+        final String bootPath = System.getProperty("sun.boot.class.path"); //NOI18N
+        final JavaCompiler tool = ToolProvider.getSystemJavaCompiler();
+        assert tool != null;
+
+        String code = "package test; public class Test {private void test() {Object o = null; boolean b = o != null && o instanceof String;} private Test() {}}";
+
+        JavacTaskImpl ct = (JavacTaskImpl) tool.getTask(null, null, null, Arrays.asList("-bootclasspath", bootPath, "-Xjcov"), null, Arrays.asList(new MyFileObject(code)));
+        CompilationUnitTree cut = ct.parse().iterator().next();
+        ClassTree clazz = (ClassTree) cut.getTypeDecls().get(0);
+        MethodTree method = (MethodTree) clazz.getMembers().get(0);
+        VariableTree condSt = (VariableTree) method.getBody().getStatements().get(1);
+        BinaryTree cond = (BinaryTree) condSt.getInitializer();
+        JCTree condJC = (JCTree) cond;
+
+        if (condJC.pos != 93)
+            throw new IllegalStateException("Unexpected position=" + condJC.pos);
+    }
+
+    static class MyFileObject extends SimpleJavaFileObject {
+        private String text;
+        public MyFileObject(String text) {
+            super(URI.create("myfo:/Test.java"), JavaFileObject.Kind.SOURCE);
+            this.text = text;
+        }
+        @Override
+        public CharSequence getCharContent(boolean ignoreEncodingErrors) {
+            return text;
+        }
+    }
+}
--- a/langtools/test/tools/javac/generics/diamond/neg/Neg01.out	Fri Feb 12 19:58:10 2010 +0300
+++ b/langtools/test/tools/javac/generics/diamond/neg/Neg01.out	Fri Feb 19 15:13:37 2010 -0800
@@ -1,31 +1,31 @@
 Neg01.java:18:15: compiler.err.not.within.bounds: java.lang.String
 Neg01.java:18:37: compiler.err.cant.apply.diamond: X, (compiler.misc.no.conforming.instance.exists: X, Neg01<X>, Neg01<java.lang.String>)
-Neg01.java:19:25: compiler.err.not.within.bounds: ? extends java.lang.String
+Neg01.java:19:15: compiler.err.not.within.bounds: ? extends java.lang.String
 Neg01.java:19:47: compiler.err.cant.apply.diamond: X, (compiler.misc.no.unique.maximal.instance.exists: X, java.lang.String,java.lang.Number)
 Neg01.java:20:23: compiler.err.cant.resolve.location.args: kindname.constructor, Neg01, , java.lang.String, kindname.class, Neg01<java.lang.Number>
-Neg01.java:21:23: compiler.err.not.within.bounds: ? super java.lang.String
+Neg01.java:21:15: compiler.err.not.within.bounds: ? super java.lang.String
 Neg01.java:21:45: compiler.err.cant.apply.diamond: X, (compiler.misc.no.conforming.instance.exists: X, Neg01<X>, Neg01<? super java.lang.String>)
 Neg01.java:23:15: compiler.err.not.within.bounds: java.lang.String
 Neg01.java:23:37: compiler.err.cant.apply.diamond: X, (compiler.misc.no.conforming.instance.exists: X, Neg01<X>, Neg01<java.lang.String>)
-Neg01.java:24:25: compiler.err.not.within.bounds: ? extends java.lang.String
+Neg01.java:24:15: compiler.err.not.within.bounds: ? extends java.lang.String
 Neg01.java:24:47: compiler.err.cant.apply.diamond: X, (compiler.misc.no.unique.maximal.instance.exists: X, java.lang.String,java.lang.Number)
 Neg01.java:25:23: compiler.err.cant.resolve.location.args: kindname.constructor, Neg01, , java.lang.String, kindname.class, Neg01<java.lang.Number>
 Neg01.java:25:38: compiler.err.cant.resolve.location.args: kindname.constructor, Neg01, , , kindname.class, Neg01<java.lang.Number>
-Neg01.java:26:23: compiler.err.not.within.bounds: ? super java.lang.String
+Neg01.java:26:15: compiler.err.not.within.bounds: ? super java.lang.String
 Neg01.java:26:45: compiler.err.cant.apply.diamond: X, (compiler.misc.no.conforming.instance.exists: X, Neg01<X>, Neg01<? super java.lang.String>)
 Neg01.java:28:15: compiler.err.not.within.bounds: java.lang.String
 Neg01.java:28:37: compiler.err.cant.apply.diamond: X, (compiler.misc.no.conforming.instance.exists: X, Neg01<X>, Neg01<java.lang.String>)
-Neg01.java:29:25: compiler.err.not.within.bounds: ? extends java.lang.String
+Neg01.java:29:15: compiler.err.not.within.bounds: ? extends java.lang.String
 Neg01.java:29:48: compiler.err.cant.apply.diamond: X, (compiler.misc.no.unique.maximal.instance.exists: X, java.lang.String,java.lang.Number)
 Neg01.java:30:24: compiler.err.cant.resolve.location.args: kindname.constructor, Neg01, , java.lang.String,java.lang.String, kindname.class, Neg01<java.lang.Number>
 Neg01.java:31:9: compiler.err.cant.resolve.location: kindname.class, Foo, , , kindname.class, Neg01<X>
 Neg01.java:31:35: compiler.err.cant.resolve.location.args: kindname.constructor, Neg01, , java.lang.String,java.lang.String, kindname.class, Neg01<java.lang.Number>
 Neg01.java:33:15: compiler.err.not.within.bounds: java.lang.String
 Neg01.java:33:38: compiler.err.cant.apply.diamond: X, (compiler.misc.no.conforming.instance.exists: X, Neg01<X>, Neg01<java.lang.String>)
-Neg01.java:34:25: compiler.err.not.within.bounds: ? extends java.lang.String
+Neg01.java:34:15: compiler.err.not.within.bounds: ? extends java.lang.String
 Neg01.java:34:48: compiler.err.cant.apply.diamond: X, (compiler.misc.no.unique.maximal.instance.exists: X, java.lang.String,java.lang.Number)
 Neg01.java:35:24: compiler.err.cant.resolve.location.args: kindname.constructor, Neg01, , java.lang.String,java.lang.String, kindname.class, Neg01<java.lang.Number>
 Neg01.java:35:43: compiler.err.cant.resolve.location.args: kindname.constructor, Neg01, , , kindname.class, Neg01<java.lang.Number>
-Neg01.java:36:23: compiler.err.not.within.bounds: ? super java.lang.String
+Neg01.java:36:15: compiler.err.not.within.bounds: ? super java.lang.String
 Neg01.java:36:46: compiler.err.cant.apply.diamond: X, (compiler.misc.no.conforming.instance.exists: X, Neg01<X>, Neg01<? super java.lang.String>)
 30 errors
--- a/langtools/test/tools/javac/generics/diamond/neg/Neg02.out	Fri Feb 12 19:58:10 2010 +0300
+++ b/langtools/test/tools/javac/generics/diamond/neg/Neg02.out	Fri Feb 19 15:13:37 2010 -0800
@@ -1,61 +1,61 @@
 Neg02.java:19:13: compiler.err.not.within.bounds: java.lang.String
 Neg02.java:19:33: compiler.err.cant.apply.diamond: X, (compiler.misc.no.conforming.instance.exists: X, Neg02.Foo<X>, Neg02.Foo<java.lang.String>)
-Neg02.java:20:23: compiler.err.not.within.bounds: ? extends java.lang.String
+Neg02.java:20:13: compiler.err.not.within.bounds: ? extends java.lang.String
 Neg02.java:20:43: compiler.err.cant.apply.diamond: X, (compiler.misc.no.unique.maximal.instance.exists: X, java.lang.String,java.lang.Number)
 Neg02.java:21:21: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , java.lang.String, kindname.class, Neg02.Foo<java.lang.Number>
-Neg02.java:22:21: compiler.err.not.within.bounds: ? super java.lang.String
+Neg02.java:22:13: compiler.err.not.within.bounds: ? super java.lang.String
 Neg02.java:22:41: compiler.err.cant.apply.diamond: X, (compiler.misc.no.conforming.instance.exists: X, Neg02.Foo<X>, Neg02.Foo<? super java.lang.String>)
 Neg02.java:24:13: compiler.err.not.within.bounds: java.lang.String
 Neg02.java:24:33: compiler.err.cant.apply.diamond: X, (compiler.misc.no.conforming.instance.exists: X, Neg02.Foo<X>, Neg02.Foo<java.lang.String>)
-Neg02.java:25:23: compiler.err.not.within.bounds: ? extends java.lang.String
+Neg02.java:25:13: compiler.err.not.within.bounds: ? extends java.lang.String
 Neg02.java:25:43: compiler.err.cant.apply.diamond: X, (compiler.misc.no.unique.maximal.instance.exists: X, java.lang.String,java.lang.Number)
 Neg02.java:26:21: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , java.lang.String, kindname.class, Neg02.Foo<java.lang.Number>
 Neg02.java:26:34: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , , kindname.class, Neg02.Foo<java.lang.Number>
-Neg02.java:27:21: compiler.err.not.within.bounds: ? super java.lang.String
+Neg02.java:27:13: compiler.err.not.within.bounds: ? super java.lang.String
 Neg02.java:27:41: compiler.err.cant.apply.diamond: X, (compiler.misc.no.conforming.instance.exists: X, Neg02.Foo<X>, Neg02.Foo<? super java.lang.String>)
 Neg02.java:29:13: compiler.err.not.within.bounds: java.lang.String
 Neg02.java:29:33: compiler.err.cant.apply.diamond: X, (compiler.misc.no.conforming.instance.exists: X, Neg02.Foo<X>, Neg02.Foo<java.lang.String>)
-Neg02.java:30:23: compiler.err.not.within.bounds: ? extends java.lang.String
+Neg02.java:30:13: compiler.err.not.within.bounds: ? extends java.lang.String
 Neg02.java:30:44: compiler.err.cant.apply.diamond: X, (compiler.misc.no.unique.maximal.instance.exists: X, java.lang.String,java.lang.Number)
 Neg02.java:31:22: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , java.lang.String,java.lang.String, kindname.class, Neg02.Foo<java.lang.Number>
-Neg02.java:32:21: compiler.err.not.within.bounds: ? super java.lang.String
+Neg02.java:32:13: compiler.err.not.within.bounds: ? super java.lang.String
 Neg02.java:32:42: compiler.err.cant.apply.diamond: X, (compiler.misc.no.conforming.instance.exists: X, Neg02.Foo<X>, Neg02.Foo<? super java.lang.String>)
 Neg02.java:34:13: compiler.err.not.within.bounds: java.lang.String
 Neg02.java:34:34: compiler.err.cant.apply.diamond: X, (compiler.misc.no.conforming.instance.exists: X, Neg02.Foo<X>, Neg02.Foo<java.lang.String>)
-Neg02.java:35:23: compiler.err.not.within.bounds: ? extends java.lang.String
+Neg02.java:35:13: compiler.err.not.within.bounds: ? extends java.lang.String
 Neg02.java:35:44: compiler.err.cant.apply.diamond: X, (compiler.misc.no.unique.maximal.instance.exists: X, java.lang.String,java.lang.Number)
 Neg02.java:36:22: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , java.lang.String,java.lang.String, kindname.class, Neg02.Foo<java.lang.Number>
 Neg02.java:36:39: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , , kindname.class, Neg02.Foo<java.lang.Number>
-Neg02.java:37:21: compiler.err.not.within.bounds: ? super java.lang.String
+Neg02.java:37:13: compiler.err.not.within.bounds: ? super java.lang.String
 Neg02.java:37:42: compiler.err.cant.apply.diamond: X, (compiler.misc.no.conforming.instance.exists: X, Neg02.Foo<X>, Neg02.Foo<? super java.lang.String>)
 Neg02.java:41:13: compiler.err.not.within.bounds: java.lang.String
 Neg02.java:41:39: compiler.err.cant.apply.diamond: X, (compiler.misc.no.conforming.instance.exists: X, Neg02.Foo<X>, Neg02.Foo<java.lang.String>)
-Neg02.java:42:23: compiler.err.not.within.bounds: ? extends java.lang.String
+Neg02.java:42:13: compiler.err.not.within.bounds: ? extends java.lang.String
 Neg02.java:42:49: compiler.err.cant.apply.diamond: X, (compiler.misc.no.unique.maximal.instance.exists: X, java.lang.String,java.lang.Number)
 Neg02.java:43:21: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , java.lang.String, kindname.class, Neg02.Foo<java.lang.Number>
-Neg02.java:44:21: compiler.err.not.within.bounds: ? super java.lang.String
+Neg02.java:44:13: compiler.err.not.within.bounds: ? super java.lang.String
 Neg02.java:44:47: compiler.err.cant.apply.diamond: X, (compiler.misc.no.conforming.instance.exists: X, Neg02.Foo<X>, Neg02.Foo<? super java.lang.String>)
 Neg02.java:46:13: compiler.err.not.within.bounds: java.lang.String
 Neg02.java:46:39: compiler.err.cant.apply.diamond: X, (compiler.misc.no.conforming.instance.exists: X, Neg02.Foo<X>, Neg02.Foo<java.lang.String>)
-Neg02.java:47:23: compiler.err.not.within.bounds: ? extends java.lang.String
+Neg02.java:47:13: compiler.err.not.within.bounds: ? extends java.lang.String
 Neg02.java:47:49: compiler.err.cant.apply.diamond: X, (compiler.misc.no.unique.maximal.instance.exists: X, java.lang.String,java.lang.Number)
 Neg02.java:48:21: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , java.lang.String, kindname.class, Neg02.Foo<java.lang.Number>
 Neg02.java:48:40: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , , kindname.class, Neg02.Foo<java.lang.Number>
-Neg02.java:49:21: compiler.err.not.within.bounds: ? super java.lang.String
+Neg02.java:49:13: compiler.err.not.within.bounds: ? super java.lang.String
 Neg02.java:49:47: compiler.err.cant.apply.diamond: X, (compiler.misc.no.conforming.instance.exists: X, Neg02.Foo<X>, Neg02.Foo<? super java.lang.String>)
 Neg02.java:51:13: compiler.err.not.within.bounds: java.lang.String
 Neg02.java:51:39: compiler.err.cant.apply.diamond: X, (compiler.misc.no.conforming.instance.exists: X, Neg02.Foo<X>, Neg02.Foo<java.lang.String>)
-Neg02.java:52:23: compiler.err.not.within.bounds: ? extends java.lang.String
+Neg02.java:52:13: compiler.err.not.within.bounds: ? extends java.lang.String
 Neg02.java:52:50: compiler.err.cant.apply.diamond: X, (compiler.misc.no.unique.maximal.instance.exists: X, java.lang.String,java.lang.Number)
 Neg02.java:53:22: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , java.lang.String,java.lang.String, kindname.class, Neg02.Foo<java.lang.Number>
-Neg02.java:54:21: compiler.err.not.within.bounds: ? super java.lang.String
+Neg02.java:54:13: compiler.err.not.within.bounds: ? super java.lang.String
 Neg02.java:54:48: compiler.err.cant.apply.diamond: X, (compiler.misc.no.conforming.instance.exists: X, Neg02.Foo<X>, Neg02.Foo<? super java.lang.String>)
 Neg02.java:56:13: compiler.err.not.within.bounds: java.lang.String
 Neg02.java:56:40: compiler.err.cant.apply.diamond: X, (compiler.misc.no.conforming.instance.exists: X, Neg02.Foo<X>, Neg02.Foo<java.lang.String>)
-Neg02.java:57:23: compiler.err.not.within.bounds: ? extends java.lang.String
+Neg02.java:57:13: compiler.err.not.within.bounds: ? extends java.lang.String
 Neg02.java:57:50: compiler.err.cant.apply.diamond: X, (compiler.misc.no.unique.maximal.instance.exists: X, java.lang.String,java.lang.Number)
 Neg02.java:58:22: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , java.lang.String,java.lang.String, kindname.class, Neg02.Foo<java.lang.Number>
 Neg02.java:58:45: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , , kindname.class, Neg02.Foo<java.lang.Number>
-Neg02.java:59:21: compiler.err.not.within.bounds: ? super java.lang.String
+Neg02.java:59:13: compiler.err.not.within.bounds: ? super java.lang.String
 Neg02.java:59:48: compiler.err.cant.apply.diamond: X, (compiler.misc.no.conforming.instance.exists: X, Neg02.Foo<X>, Neg02.Foo<? super java.lang.String>)
 60 errors
--- a/langtools/test/tools/javac/generics/diamond/neg/Neg03.out	Fri Feb 12 19:58:10 2010 +0300
+++ b/langtools/test/tools/javac/generics/diamond/neg/Neg03.out	Fri Feb 19 15:13:37 2010 -0800
@@ -1,91 +1,91 @@
 Neg03.java:19:13: compiler.err.not.within.bounds: java.lang.String
 Neg03.java:19:33: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Neg03<U>.Foo<V>, Neg03<U>.Foo<java.lang.String>)
-Neg03.java:20:23: compiler.err.not.within.bounds: ? extends java.lang.String
+Neg03.java:20:13: compiler.err.not.within.bounds: ? extends java.lang.String
 Neg03.java:20:43: compiler.err.cant.apply.diamond: V, (compiler.misc.no.unique.maximal.instance.exists: V, java.lang.String,java.lang.Number)
 Neg03.java:21:21: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , java.lang.String, kindname.class, Neg03<U>.Foo<java.lang.Number>
-Neg03.java:22:21: compiler.err.not.within.bounds: ? super java.lang.String
+Neg03.java:22:13: compiler.err.not.within.bounds: ? super java.lang.String
 Neg03.java:22:41: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Neg03<U>.Foo<V>, Neg03<U>.Foo<? super java.lang.String>)
 Neg03.java:24:13: compiler.err.not.within.bounds: java.lang.String
 Neg03.java:24:33: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Neg03<U>.Foo<V>, Neg03<U>.Foo<java.lang.String>)
-Neg03.java:25:23: compiler.err.not.within.bounds: ? extends java.lang.String
+Neg03.java:25:13: compiler.err.not.within.bounds: ? extends java.lang.String
 Neg03.java:25:43: compiler.err.cant.apply.diamond: V, (compiler.misc.no.unique.maximal.instance.exists: V, java.lang.String,java.lang.Number)
 Neg03.java:26:21: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , java.lang.String, kindname.class, Neg03<U>.Foo<java.lang.Number>
 Neg03.java:26:34: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , , kindname.class, Neg03<U>.Foo<java.lang.Number>
-Neg03.java:27:21: compiler.err.not.within.bounds: ? super java.lang.String
+Neg03.java:27:13: compiler.err.not.within.bounds: ? super java.lang.String
 Neg03.java:27:41: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Neg03<U>.Foo<V>, Neg03<U>.Foo<? super java.lang.String>)
 Neg03.java:29:13: compiler.err.not.within.bounds: java.lang.String
 Neg03.java:29:33: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Neg03<U>.Foo<V>, Neg03<U>.Foo<java.lang.String>)
-Neg03.java:30:23: compiler.err.not.within.bounds: ? extends java.lang.String
+Neg03.java:30:13: compiler.err.not.within.bounds: ? extends java.lang.String
 Neg03.java:30:44: compiler.err.cant.apply.diamond: V, (compiler.misc.no.unique.maximal.instance.exists: V, java.lang.String,java.lang.Number)
 Neg03.java:31:22: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , java.lang.String,java.lang.String, kindname.class, Neg03<U>.Foo<java.lang.Number>
-Neg03.java:32:21: compiler.err.not.within.bounds: ? super java.lang.String
+Neg03.java:32:13: compiler.err.not.within.bounds: ? super java.lang.String
 Neg03.java:32:42: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Neg03<U>.Foo<V>, Neg03<U>.Foo<? super java.lang.String>)
 Neg03.java:34:13: compiler.err.not.within.bounds: java.lang.String
 Neg03.java:34:34: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Neg03<U>.Foo<V>, Neg03<U>.Foo<java.lang.String>)
-Neg03.java:35:23: compiler.err.not.within.bounds: ? extends java.lang.String
+Neg03.java:35:13: compiler.err.not.within.bounds: ? extends java.lang.String
 Neg03.java:35:44: compiler.err.cant.apply.diamond: V, (compiler.misc.no.unique.maximal.instance.exists: V, java.lang.String,java.lang.Number)
 Neg03.java:36:22: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , java.lang.String,java.lang.String, kindname.class, Neg03<U>.Foo<java.lang.Number>
 Neg03.java:36:39: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , , kindname.class, Neg03<U>.Foo<java.lang.Number>
-Neg03.java:37:21: compiler.err.not.within.bounds: ? super java.lang.String
+Neg03.java:37:13: compiler.err.not.within.bounds: ? super java.lang.String
 Neg03.java:37:42: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Neg03<U>.Foo<V>, Neg03<U>.Foo<? super java.lang.String>)
 Neg03.java:41:13: compiler.err.not.within.bounds: java.lang.String
 Neg03.java:41:42: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Neg03<U>.Foo<V>, Neg03<U>.Foo<java.lang.String>)
-Neg03.java:42:23: compiler.err.not.within.bounds: ? extends java.lang.String
+Neg03.java:42:13: compiler.err.not.within.bounds: ? extends java.lang.String
 Neg03.java:42:52: compiler.err.cant.apply.diamond: V, (compiler.misc.no.unique.maximal.instance.exists: V, java.lang.String,java.lang.Number)
 Neg03.java:43:21: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , java.lang.String, kindname.class, Neg03<U>.Foo<java.lang.Number>
-Neg03.java:44:21: compiler.err.not.within.bounds: ? super java.lang.String
+Neg03.java:44:13: compiler.err.not.within.bounds: ? super java.lang.String
 Neg03.java:44:50: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Neg03<U>.Foo<V>, Neg03<U>.Foo<? super java.lang.String>)
 Neg03.java:46:13: compiler.err.not.within.bounds: java.lang.String
 Neg03.java:46:42: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Neg03<U>.Foo<V>, Neg03<U>.Foo<java.lang.String>)
-Neg03.java:47:23: compiler.err.not.within.bounds: ? extends java.lang.String
+Neg03.java:47:13: compiler.err.not.within.bounds: ? extends java.lang.String
 Neg03.java:47:52: compiler.err.cant.apply.diamond: V, (compiler.misc.no.unique.maximal.instance.exists: V, java.lang.String,java.lang.Number)
 Neg03.java:48:21: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , java.lang.String, kindname.class, Neg03<U>.Foo<java.lang.Number>
 Neg03.java:48:43: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , , kindname.class, Neg03<U>.Foo<java.lang.Number>
-Neg03.java:49:21: compiler.err.not.within.bounds: ? super java.lang.String
+Neg03.java:49:13: compiler.err.not.within.bounds: ? super java.lang.String
 Neg03.java:49:50: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Neg03<U>.Foo<V>, Neg03<U>.Foo<? super java.lang.String>)
 Neg03.java:51:13: compiler.err.not.within.bounds: java.lang.String
 Neg03.java:51:42: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Neg03<U>.Foo<V>, Neg03<U>.Foo<java.lang.String>)
-Neg03.java:52:23: compiler.err.not.within.bounds: ? extends java.lang.String
+Neg03.java:52:13: compiler.err.not.within.bounds: ? extends java.lang.String
 Neg03.java:52:53: compiler.err.cant.apply.diamond: V, (compiler.misc.no.unique.maximal.instance.exists: V, java.lang.String,java.lang.Number)
 Neg03.java:53:22: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , java.lang.String,java.lang.String, kindname.class, Neg03<U>.Foo<java.lang.Number>
-Neg03.java:54:21: compiler.err.not.within.bounds: ? super java.lang.String
+Neg03.java:54:13: compiler.err.not.within.bounds: ? super java.lang.String
 Neg03.java:54:51: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Neg03<U>.Foo<V>, Neg03<U>.Foo<? super java.lang.String>)
 Neg03.java:56:13: compiler.err.not.within.bounds: java.lang.String
 Neg03.java:56:43: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Neg03<U>.Foo<V>, Neg03<U>.Foo<java.lang.String>)
-Neg03.java:57:23: compiler.err.not.within.bounds: ? extends java.lang.String
+Neg03.java:57:13: compiler.err.not.within.bounds: ? extends java.lang.String
 Neg03.java:57:53: compiler.err.cant.apply.diamond: V, (compiler.misc.no.unique.maximal.instance.exists: V, java.lang.String,java.lang.Number)
 Neg03.java:58:22: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , java.lang.String,java.lang.String, kindname.class, Neg03<U>.Foo<java.lang.Number>
 Neg03.java:58:48: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , , kindname.class, Neg03<U>.Foo<java.lang.Number>
-Neg03.java:59:21: compiler.err.not.within.bounds: ? super java.lang.String
+Neg03.java:59:13: compiler.err.not.within.bounds: ? super java.lang.String
 Neg03.java:59:51: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Neg03<U>.Foo<V>, Neg03<U>.Foo<? super java.lang.String>)
 Neg03.java:63:13: compiler.err.not.within.bounds: java.lang.String
 Neg03.java:63:28: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Neg03<U>.Foo<V>, Neg03<U>.Foo<java.lang.String>)
-Neg03.java:64:23: compiler.err.not.within.bounds: ? extends java.lang.String
+Neg03.java:64:13: compiler.err.not.within.bounds: ? extends java.lang.String
 Neg03.java:64:38: compiler.err.cant.apply.diamond: V, (compiler.misc.no.unique.maximal.instance.exists: V, java.lang.String,java.lang.Number)
 Neg03.java:65:23: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , java.lang.String, kindname.class, Neg03<U>.Foo<java.lang.Number>
-Neg03.java:66:21: compiler.err.not.within.bounds: ? super java.lang.String
+Neg03.java:66:13: compiler.err.not.within.bounds: ? super java.lang.String
 Neg03.java:66:36: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Neg03<U>.Foo<V>, Neg03<U>.Foo<? super java.lang.String>)
 Neg03.java:68:13: compiler.err.not.within.bounds: java.lang.String
 Neg03.java:68:28: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Neg03<U>.Foo<V>, Neg03<U>.Foo<java.lang.String>)
-Neg03.java:69:23: compiler.err.not.within.bounds: ? extends java.lang.String
+Neg03.java:69:13: compiler.err.not.within.bounds: ? extends java.lang.String
 Neg03.java:69:38: compiler.err.cant.apply.diamond: V, (compiler.misc.no.unique.maximal.instance.exists: V, java.lang.String,java.lang.Number)
 Neg03.java:70:23: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , java.lang.String, kindname.class, Neg03<U>.Foo<java.lang.Number>
 Neg03.java:70:36: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , , kindname.class, Neg03<U>.Foo<java.lang.Number>
-Neg03.java:71:21: compiler.err.not.within.bounds: ? super java.lang.String
+Neg03.java:71:13: compiler.err.not.within.bounds: ? super java.lang.String
 Neg03.java:71:36: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Neg03<U>.Foo<V>, Neg03<U>.Foo<? super java.lang.String>)
 Neg03.java:73:13: compiler.err.not.within.bounds: java.lang.String
 Neg03.java:73:28: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Neg03<U>.Foo<V>, Neg03<U>.Foo<java.lang.String>)
-Neg03.java:74:23: compiler.err.not.within.bounds: ? extends java.lang.String
+Neg03.java:74:13: compiler.err.not.within.bounds: ? extends java.lang.String
 Neg03.java:74:39: compiler.err.cant.apply.diamond: V, (compiler.misc.no.unique.maximal.instance.exists: V, java.lang.String,java.lang.Number)
 Neg03.java:75:24: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , java.lang.String,java.lang.String, kindname.class, Neg03<U>.Foo<java.lang.Number>
-Neg03.java:76:21: compiler.err.not.within.bounds: ? super java.lang.String
+Neg03.java:76:13: compiler.err.not.within.bounds: ? super java.lang.String
 Neg03.java:76:37: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Neg03<U>.Foo<V>, Neg03<U>.Foo<? super java.lang.String>)
 Neg03.java:78:13: compiler.err.not.within.bounds: java.lang.String
 Neg03.java:78:29: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Neg03<U>.Foo<V>, Neg03<U>.Foo<java.lang.String>)
-Neg03.java:79:23: compiler.err.not.within.bounds: ? extends java.lang.String
+Neg03.java:79:13: compiler.err.not.within.bounds: ? extends java.lang.String
 Neg03.java:79:39: compiler.err.cant.apply.diamond: V, (compiler.misc.no.unique.maximal.instance.exists: V, java.lang.String,java.lang.Number)
 Neg03.java:80:24: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , java.lang.String,java.lang.String, kindname.class, Neg03<U>.Foo<java.lang.Number>
 Neg03.java:80:41: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , , kindname.class, Neg03<U>.Foo<java.lang.Number>
-Neg03.java:81:21: compiler.err.not.within.bounds: ? super java.lang.String
+Neg03.java:81:13: compiler.err.not.within.bounds: ? super java.lang.String
 Neg03.java:81:37: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Neg03<U>.Foo<V>, Neg03<U>.Foo<? super java.lang.String>)
 90 errors
--- a/langtools/test/tools/javac/generics/diamond/neg/Neg04.out	Fri Feb 12 19:58:10 2010 +0300
+++ b/langtools/test/tools/javac/generics/diamond/neg/Neg04.out	Fri Feb 19 15:13:37 2010 -0800
@@ -1,31 +1,31 @@
 Neg04.java:18:13: compiler.err.not.within.bounds: java.lang.String
 Neg04.java:18:33: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Foo<V>, Foo<java.lang.String>)
-Neg04.java:19:23: compiler.err.not.within.bounds: ? extends java.lang.String
+Neg04.java:19:13: compiler.err.not.within.bounds: ? extends java.lang.String
 Neg04.java:19:43: compiler.err.cant.apply.diamond: V, (compiler.misc.no.unique.maximal.instance.exists: V, java.lang.String,java.lang.Number)
 Neg04.java:20:21: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , java.lang.String, kindname.class, Foo<java.lang.Number>
-Neg04.java:21:21: compiler.err.not.within.bounds: ? super java.lang.String
+Neg04.java:21:13: compiler.err.not.within.bounds: ? super java.lang.String
 Neg04.java:21:41: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Foo<V>, Foo<? super java.lang.String>)
 Neg04.java:23:13: compiler.err.not.within.bounds: java.lang.String
 Neg04.java:23:33: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Foo<V>, Foo<java.lang.String>)
-Neg04.java:24:23: compiler.err.not.within.bounds: ? extends java.lang.String
+Neg04.java:24:13: compiler.err.not.within.bounds: ? extends java.lang.String
 Neg04.java:24:43: compiler.err.cant.apply.diamond: V, (compiler.misc.no.unique.maximal.instance.exists: V, java.lang.String,java.lang.Number)
 Neg04.java:25:21: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , java.lang.String, kindname.class, Foo<java.lang.Number>
 Neg04.java:25:34: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , , kindname.class, Foo<java.lang.Number>
-Neg04.java:26:21: compiler.err.not.within.bounds: ? super java.lang.String
+Neg04.java:26:13: compiler.err.not.within.bounds: ? super java.lang.String
 Neg04.java:26:41: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Foo<V>, Foo<? super java.lang.String>)
 Neg04.java:28:13: compiler.err.not.within.bounds: java.lang.String
 Neg04.java:28:33: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Foo<V>, Foo<java.lang.String>)
-Neg04.java:29:23: compiler.err.not.within.bounds: ? extends java.lang.String
+Neg04.java:29:13: compiler.err.not.within.bounds: ? extends java.lang.String
 Neg04.java:29:44: compiler.err.cant.apply.diamond: V, (compiler.misc.no.unique.maximal.instance.exists: V, java.lang.String,java.lang.Number)
 Neg04.java:30:22: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , java.lang.String,java.lang.String, kindname.class, Foo<java.lang.Number>
-Neg04.java:31:21: compiler.err.not.within.bounds: ? super java.lang.String
+Neg04.java:31:13: compiler.err.not.within.bounds: ? super java.lang.String
 Neg04.java:31:42: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Foo<V>, Foo<? super java.lang.String>)
 Neg04.java:33:13: compiler.err.not.within.bounds: java.lang.String
 Neg04.java:33:34: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Foo<V>, Foo<java.lang.String>)
-Neg04.java:34:23: compiler.err.not.within.bounds: ? extends java.lang.String
+Neg04.java:34:13: compiler.err.not.within.bounds: ? extends java.lang.String
 Neg04.java:34:44: compiler.err.cant.apply.diamond: V, (compiler.misc.no.unique.maximal.instance.exists: V, java.lang.String,java.lang.Number)
 Neg04.java:35:22: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , java.lang.String,java.lang.String, kindname.class, Foo<java.lang.Number>
 Neg04.java:35:39: compiler.err.cant.resolve.location.args: kindname.constructor, Foo, , , kindname.class, Foo<java.lang.Number>
-Neg04.java:36:21: compiler.err.not.within.bounds: ? super java.lang.String
+Neg04.java:36:13: compiler.err.not.within.bounds: ? super java.lang.String
 Neg04.java:36:42: compiler.err.cant.apply.diamond: V, (compiler.misc.no.conforming.instance.exists: V, Foo<V>, Foo<? super java.lang.String>)
 30 errors
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/processing/6499119/ClassProcessor.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,132 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+import java.io.*;
+import java.util.*;
+import javax.annotation.processing.*;
+import javax.lang.model.element.*;
+import javax.lang.model.SourceVersion;
+import javax.tools.Diagnostic.Kind;
+
+/*
+ * @test
+ * @bug 6499119
+ * @summary Created package-info class file modeled improperly
+ * @compile ClassProcessor.java package-info.java
+ * @compile/process -cp . -processor ClassProcessor -Akind=java  java.lang.Object
+ * @compile/process -cp . -processor ClassProcessor -Akind=class java.lang.Object
+ */
+
+@SupportedOptions({ "gen", "expect" })
+@SupportedAnnotationTypes({"*"})
+public class ClassProcessor extends AbstractProcessor {
+    int round = 1;
+
+    public SourceVersion getSupportedSourceVersion() {
+        return SourceVersion.latest();
+    }
+
+    public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
+        if (round == 1) {
+            System.out.println("-- Round 1 --");
+            createPackageFile();
+        } else if (round == 2) {
+            boolean found_foo_A = false;
+            System.out.println("-- Round 2 --");
+            for(Element e: roundEnv.getRootElements()) {
+                System.out.println("ElementKind: " + e.getKind());
+                System.out.println("Modifiers:   " + e.getModifiers());
+                System.out.println("Annotations: " + e.getAnnotationMirrors());
+                if (e.getAnnotationMirrors().toString().equals("@foo.A")) {
+                    found_foo_A = true;
+                    checkEqual("ElementKind", e.getKind().toString(), "PACKAGE");
+                    checkEqual("Modifiers",   e.getModifiers().toString(), "[]");
+                }
+            }
+            if (!found_foo_A)
+                error("did not find @foo.A");
+        }
+        round++;
+        return true;
+    }
+
+    private void createPackageFile() {
+        Filer filer = processingEnv.getFiler();
+
+        String kind = processingEnv.getOptions().get("kind");
+
+        File pkgInfo;
+        if (kind.equals("java"))
+            pkgInfo = new File(System.getProperty("test.src"),     "package-info.java");
+        else
+            pkgInfo = new File(System.getProperty("test.classes"), "foo/package-info.class");
+
+        byte[] bytes = new byte[(int) pkgInfo.length()];
+        DataInputStream in = null;
+        try {
+            in = new DataInputStream(new FileInputStream(pkgInfo));
+            in.readFully(bytes);
+        } catch (IOException ioe) {
+            error("Couldn't read package info file: " + ioe);
+        } finally {
+            if(in != null) {
+                try {
+                    in.close();
+                } catch (IOException e) {
+                    error("InputStream closing failed: " + e);
+                }
+            }
+        }
+
+        OutputStream out = null;
+        try {
+            if (kind.equals("java"))
+                out = filer.createSourceFile("foo.package-info").openOutputStream();
+            else
+                out = filer.createClassFile("foo.package-info").openOutputStream();
+            out.write(bytes, 0, bytes.length);
+        } catch (IOException ioe) {
+            error("Couldn't create package info file: " + ioe);
+        } finally {
+            if(out != null) {
+                try {
+                    out.close();
+                } catch (IOException e) {
+                    error("OutputStream closing failed: " + e);
+                }
+            }
+        }
+    }
+
+    private void checkEqual(String label, String actual, String expect) {
+        if (!actual.equals(expect)) {
+            error("Unexpected value for " + label + "; actual=" + actual + ", expected=" + expect);
+        }
+    }
+
+    private void error(String msg) {
+        Messager messager = processingEnv.getMessager();
+        messager.printMessage(Kind.ERROR, msg);
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/processing/6499119/package-info.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,27 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+@A package foo;
+
+@interface A {}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/processing/T6920317.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,462 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/*
+ * @test
+ * @bug 6920317
+ * @summary package-info.java file has to be specified on the javac cmdline, else it will not be avail
+ */
+
+import java.io.*;
+import java.util.*;
+import javax.annotation.processing.*;
+import javax.lang.model.*;
+import javax.lang.model.element.*;
+import javax.lang.model.util.*;
+import javax.tools.*;
+
+/**
+ * The test exercises different ways of providing annotations for a package.
+ * Each way provides an annotation with a unique argument. For each test
+ * case, the test verifies that the annotation with the correct argument is
+ * found by the compiler.
+ */
+public class T6920317 {
+    public static void main(String... args) throws Exception {
+        new T6920317().run(args);
+    }
+
+    // Used to describe properties of files to be put on command line, source path, class path
+    enum Kind {
+        /** File is not used. */
+        NONE,
+        /** File is used. */
+        OLD,
+        /** Only applies to files on classpath/sourcepath, when there is another file on the
+         *  other path of type OLD, in which case, this file must be newer than the other one. */
+        NEW,
+        /** Only applies to files on classpath/sourcepath, when there is no file in any other
+         *  location, in which case, this file will be generated by the annotation processor. */
+        GEN
+    }
+
+    void run(String... args) throws Exception {
+        // if no args given, all test cases are run
+        // if args given, they indicate the test cases to be run
+        for (int i = 0; i < args.length; i++) {
+            tests.add(Integer.valueOf(args[i]));
+        }
+
+        setup();
+
+        // Run tests for all combinations of files on command line, source path and class path.
+        // Invalid combinations are skipped in the test method
+        for (Kind cmdLine: EnumSet.of(Kind.NONE, Kind.OLD)) {
+            for (Kind srcPath: Kind.values()) {
+                for (Kind clsPath: Kind.values()) {
+                    try {
+                        test(cmdLine, srcPath, clsPath);
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                        error("Exception " + e);
+                        // uncomment to stop on first failed test case
+                        // throw e;
+                    }
+                }
+            }
+        }
+
+        if (errors > 0)
+            throw new Exception(errors + " errors occurred");
+    }
+
+    /** One time setup for files and directories to be used in the various test cases. */
+    void setup() throws Exception {
+        // Annotation used in test cases to annotate package. This file is
+        // given on the command line in test cases.
+        test_java = writeFile("Test.java", "package p; @interface Test { String value(); }");
+        // Compile the annotation for use later in setup
+        File tmpClasses = new File("tmp.classes");
+        compile(tmpClasses, new String[] { }, test_java);
+
+        // package-info file to use on the command line when requied
+        cl_pkgInfo_java = writeFile("cl/p/package-info.java", "@Test(\"CL\") package p;");
+
+        // source path containing package-info
+        sp_old = new File("src.old");
+        writeFile("src.old/p/package-info.java", "@Test(\"SP_OLD\") package p;");
+
+        // class path containing package-info
+        cp_old = new File("classes.old");
+        compile(cp_old, new String[] { "-classpath", tmpClasses.getPath() },
+                writeFile("tmp.old/p/package-info.java", "@Test(\"CP_OLD\") package p;"));
+
+        // source path containing package-info which is newer than the one in cp-old
+        sp_new = new File("src.new");
+        File old_class = new File(cp_old, "p/package-info.class");
+        writeFile("src.new/p/package-info.java", "@Test(\"SP_NEW\") package p;", old_class);
+
+        // class path containing package-info which is newer than the one in sp-old
+        cp_new = new File("classes.new");
+        File old_java = new File(sp_old, "p/package-info.java");
+        compile(cp_new, new String[] { "-classpath", tmpClasses.getPath() },
+                writeFile("tmp.new/p/package-info.java", "@Test(\"CP_NEW\") package p;", old_java));
+
+        // directory containing package-info.java to be "generated" later by annotation processor
+        sp_gen = new File("src.gen");
+        writeFile("src.gen/p/package-info.java", "@Test(\"SP_GEN\") package p;");
+
+        // directory containing package-info.class to be "generated" later by annotation processor
+        cp_gen = new File("classes.gen");
+        compile(cp_gen, new String[] { "-classpath", tmpClasses.getPath() },
+                writeFile("tmp.gen/p/package-info.java", "@Test(\"CP_GEN\") package p;"));
+    }
+
+    void test(Kind cl, Kind sp, Kind cp) throws Exception {
+        if (skip(cl, sp, cp))
+            return;
+
+        ++count;
+        // if test cases specified, skip this test case if not selected
+        if (tests.size() > 0 && !tests.contains(count))
+            return;
+
+        System.err.println("Test " + count + " cl:" + cl + " sp:" + sp + " cp:" + cp);
+
+        // test specific tmp directory
+        File test_tmp = new File("tmp.test" + count);
+        test_tmp.mkdirs();
+
+        // build up list of options and files to be compiled
+        List<String> opts = new ArrayList<String>();
+        List<File> files = new ArrayList<File>();
+
+        // expected value for annotation
+        String expect = null;
+
+        opts.add("-processorpath");
+        opts.add(System.getProperty("test.classes"));
+        opts.add("-processor");
+        opts.add(Processor.class.getName());
+        opts.add("-proc:only");
+        opts.add("-d");
+        opts.add(test_tmp.getPath());
+        //opts.add("-verbose");
+        files.add(test_java);
+
+        /*
+         * Analyze each of cl, cp, sp, building up the options and files to
+         * be compiled, and determining the expected outcome fo the test case.
+         */
+
+        // command line file: either omitted or given
+        if (cl == Kind.OLD) {
+            files.add(cl_pkgInfo_java);
+            // command line files always supercede files on paths
+            expect = "CL";
+        }
+
+        // source path:
+        switch (sp) {
+        case NONE:
+            break;
+
+        case OLD:
+            opts.add("-sourcepath");
+            opts.add(sp_old.getPath());
+            if (expect == null && cp == Kind.NONE) {
+                assert cl == Kind.NONE && cp == Kind.NONE;
+                expect = "SP_OLD";
+            }
+            break;
+
+        case NEW:
+            opts.add("-sourcepath");
+            opts.add(sp_new.getPath());
+            if (expect == null) {
+                assert cl == Kind.NONE && cp == Kind.OLD;
+                expect = "SP_NEW";
+            }
+            break;
+
+        case GEN:
+            opts.add("-Agen=" + new File(sp_gen, "p/package-info.java"));
+            assert cl == Kind.NONE && cp == Kind.NONE;
+            expect = "SP_GEN";
+            break;
+        }
+
+        // class path:
+        switch (cp) {
+        case NONE:
+            break;
+
+        case OLD:
+            opts.add("-classpath");
+            opts.add(cp_old.getPath());
+            if (expect == null && sp == Kind.NONE) {
+                assert cl == Kind.NONE && sp == Kind.NONE;
+                expect = "CP_OLD";
+            }
+            break;
+
+        case NEW:
+            opts.add("-classpath");
+            opts.add(cp_new.getPath());
+            if (expect == null) {
+                assert cl == Kind.NONE && sp == Kind.OLD;
+                expect = "CP_NEW";
+            }
+            break;
+
+        case GEN:
+            opts.add("-Agen=" + new File(cp_gen, "p/package-info.class"));
+            assert cl == Kind.NONE && sp == Kind.NONE;
+            expect = "CP_GEN";
+            break;
+        }
+
+        // pass expected value to annotation processor
+        assert expect != null;
+        opts.add("-Aexpect=" + expect);
+
+        // compile the files with the options that have been built up
+        compile(opts, files);
+    }
+
+    /**
+     * Return true if this combination of parameters does not identify a useful test case.
+     */
+    boolean skip(Kind cl, Kind sp, Kind cp) {
+        // skip if no package files required
+        if (cl == Kind.NONE && sp == Kind.NONE && cp == Kind.NONE)
+            return true;
+
+        // skip if both sp and sp are OLD, since results may be indeterminate
+        if (sp == Kind.OLD && cp == Kind.OLD)
+            return true;
+
+        // skip if sp or cp is NEW but the other is not OLD
+        if ((sp == Kind.NEW && cp != Kind.OLD) || (cp == Kind.NEW && sp != Kind.OLD))
+            return true;
+
+        // only use GEN if no other package-info files present
+        if (sp == Kind.GEN && !(cl == Kind.NONE && cp == Kind.NONE) ||
+            cp == Kind.GEN && !(cl == Kind.NONE && sp == Kind.NONE)) {
+            return true;
+        }
+
+        // remaining combinations are valid
+        return false;
+    }
+
+    /** Write a file with a given body. */
+    File writeFile(String path, String body) throws Exception {
+        File f = new File(path);
+        if (f.getParentFile() != null)
+            f.getParentFile().mkdirs();
+        Writer out = new FileWriter(path);
+        try {
+            out.write(body);
+        } finally {
+            out.close();
+        }
+        return f;
+    }
+
+    /** Write a file with a given body, ensuring that the file is newer than a reference file. */
+    File writeFile(String path, String body, File ref) throws Exception {
+        for (int i = 0; i < 5; i++) {
+            File f = writeFile(path, body);
+            if (f.lastModified() > ref.lastModified())
+                return f;
+            Thread.sleep(2000);
+        }
+        throw new Exception("cannot create file " + path + " newer than " + ref);
+    }
+
+    /** Compile a file to a given directory, with options provided. */
+    void compile(File dir, String[] opts, File src) throws Exception {
+        dir.mkdirs();
+        List<String> opts2 = new ArrayList<String>();
+        opts2.addAll(Arrays.asList("-d", dir.getPath()));
+        opts2.addAll(Arrays.asList(opts));
+        compile(opts2, Collections.singletonList(src));
+    }
+
+    /** Compile files with options provided. */
+    void compile(List<String> opts, List<File> files) throws Exception {
+        System.err.println("javac: " + opts + " " + files);
+        List<String> args = new ArrayList<String>();
+        args.addAll(opts);
+        for (File f: files)
+            args.add(f.getPath());
+        StringWriter sw = new StringWriter();
+        PrintWriter pw = new PrintWriter(sw);
+        int rc = com.sun.tools.javac.Main.compile(args.toArray(new String[args.size()]), pw);
+        pw.flush();
+        if (sw.getBuffer().length() > 0)
+            System.err.println(sw.toString());
+        if (rc != 0)
+            throw new Exception("compilation failed: rc=" + rc);
+    }
+
+    /** Report an error. */
+    void error(String msg) {
+        System.err.println("Error: " + msg);
+        errors++;
+    }
+
+    /** Test case counter. */
+    int count;
+
+    /** Number of errors found. */
+    int errors;
+
+    /** Optional set of test cases to be run; empty implies all test cases. */
+    Set<Integer> tests = new HashSet<Integer>();
+
+    /*  Files created by setup. */
+    File test_java;
+    File sp_old;
+    File sp_new;
+    File sp_gen;
+    File cp_old;
+    File cp_new;
+    File cp_gen;
+    File cl_pkgInfo_java;
+
+    /** Annotation processor used to verify the expected value for the
+        package annotations found by javac. */
+    @SupportedOptions({ "gen", "expect" })
+    @SupportedAnnotationTypes({"*"})
+    public static class Processor extends AbstractProcessor {
+        public SourceVersion getSupportedSourceVersion() {
+            return SourceVersion.latest();
+        }
+
+        public boolean process(Set<? extends TypeElement> annots, RoundEnvironment renv) {
+            round++;
+            System.err.println("Round " + round + " annots:" + annots + " rootElems:" + renv.getRootElements());
+
+            // if this is the first round and the gen option is given, use the filer to create
+            // a copy of the file specified by the gen option.
+            String gen = getOption("gen");
+            if (round == 1 && gen != null) {
+                try {
+                    Filer filer = processingEnv.getFiler();
+                    JavaFileObject f;
+                    if (gen.endsWith(".java"))
+                        f = filer.createSourceFile("p.package-info");
+                    else
+                        f = filer.createClassFile("p.package-info");
+                    System.err.println("copy " + gen + " to " + f.getName());
+                    write(f, read(new File(gen)));
+                } catch (IOException e) {
+                    error("Cannot create package-info file: " + e);
+                }
+            }
+
+            // if annotation processing is complete, verify the package annotation
+            // found by the compiler.
+            if (renv.processingOver()) {
+                System.err.println("final round");
+                Elements eu = processingEnv.getElementUtils();
+                TypeElement te = eu.getTypeElement("p.Test");
+                PackageElement pe = eu.getPackageOf(te);
+                System.err.println("final: te:" + te + " pe:" + pe);
+                List<? extends AnnotationMirror> annos = pe.getAnnotationMirrors();
+                System.err.println("final: annos:" + annos);
+                if (annos.size() == 1) {
+                    String expect = "@" + te + "(\"" + getOption("expect") + "\")";
+                    String actual = annos.get(0).toString();
+                    checkEqual("package annotations", actual, expect);
+                } else {
+                    error("Wrong number of annotations found: (" + annos.size() + ") " + annos);
+                }
+            }
+
+            return true;
+        }
+
+        /** Get an option given to the annotation processor. */
+        String getOption(String name) {
+            return processingEnv.getOptions().get(name);
+        }
+
+        /** Read a file. */
+        byte[] read(File file) {
+            byte[] bytes = new byte[(int) file.length()];
+            DataInputStream in = null;
+            try {
+                in = new DataInputStream(new FileInputStream(file));
+                in.readFully(bytes);
+            } catch (IOException e) {
+                error("Error reading file: " + e);
+            } finally {
+                if (in != null) {
+                    try {
+                        in.close();
+                    } catch (IOException e) {
+                        error("Error closing file: " + e);
+                    }
+                }
+            }
+            return  bytes;
+        }
+
+        /** Write a file. */
+        void write(JavaFileObject file, byte[] bytes) {
+            OutputStream out = null;
+            try {
+                out = file.openOutputStream();
+                out.write(bytes, 0, bytes.length);
+            } catch (IOException e) {
+                error("Error writing file: " + e);
+            } finally {
+                if (out != null) {
+                    try {
+                        out.close();
+                    } catch (IOException e) {
+                        error("Error closing file: " + e);
+                    }
+                }
+            }
+        }
+
+        /** Check two strings are equal, and report an error if they are not. */
+        private void checkEqual(String label, String actual, String expect) {
+            if (!actual.equals(expect)) {
+                error("Unexpected value for " + label + "; actual=" + actual + ", expected=" + expect);
+            }
+        }
+
+        /** Report an error to the annotation processing system. */
+        void error(String msg) {
+            Messager messager = processingEnv.getMessager();
+            messager.printMessage(Diagnostic.Kind.ERROR, msg);
+        }
+
+        int round;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/tree/T6923080.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/*
+ * This file is not a regular test, but is processed by ./TreeScannerTest.java,
+ * which verifies the operation of the javac TreeScanner.
+ * @bug 6923080
+ * @summary TreeScanner.visitNewClass should scan tree.typeargs
+ */
+class T6923080 {
+    void test() {
+        C c = new <Integer>C();  // exercises TreeScanner.visitNewClass
+        Object o = c.<Float>m(); // exercises TreeScanner.visitApply
+    }
+
+    static class C {
+        <T> C()   { }
+        <T> T m() { return null; }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/tree/TreeScannerTest.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,387 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+
+/**
+ * Utility and test program to check javac's internal TreeScanner class.
+ * The program can be run standalone, or as a jtreg test.  For info on
+ * command line args, run program with no args.
+ *
+ * <p>
+ * jtreg: Note that by using the -r switch in the test description below, this test
+ * will process all java files in the langtools/test directory, thus implicitly
+ * covering any new language features that may be tested in this test suite.
+ */
+
+/*
+ * @test
+ * @bug 6923080
+ * @summary TreeScanner.visitNewClass should scan tree.typeargs
+ * @run main TreeScannerTest -q -r .
+ */
+
+import java.io.*;
+import java.lang.reflect.*;
+import java.util.*;
+import javax.tools.*;
+
+import com.sun.source.tree.CompilationUnitTree;
+import com.sun.source.util.JavacTask;
+import com.sun.tools.javac.api.JavacTool;
+import com.sun.tools.javac.tree.*;
+import com.sun.tools.javac.tree.JCTree.*;
+import com.sun.tools.javac.util.List;
+
+public class TreeScannerTest {
+    /**
+     * Main entry point.
+     * If test.src is set, program runs in jtreg mode, and will throw an Error
+     * if any errors arise, otherwise System.exit will be used. In jtreg mode,
+     * the default base directory for file args is the value of ${test.src}.
+     * In jtreg mode, the -r option can be given to change the default base
+     * directory to the root test directory.
+     */
+    public static void main(String... args) {
+        String testSrc = System.getProperty("test.src");
+        File baseDir = (testSrc == null) ? null : new File(testSrc);
+        boolean ok = new TreeScannerTest().run(baseDir, args);
+        if (!ok) {
+            if (testSrc != null)  // jtreg mode
+                throw new Error("failed");
+            else
+                System.exit(1);
+        }
+    }
+
+    /**
+     * Run the program. A base directory can be provided for file arguments.
+     * In jtreg mode, the -r option can be given to change the default base
+     * directory to the test root directory. For other options, see usage().
+     * @param baseDir base directory for any file arguments.
+     * @param args command line args
+     * @return true if successful or in gui mode
+     */
+    boolean run(File baseDir, String... args) {
+        if (args.length == 0) {
+            usage(System.out);
+            return true;
+        }
+
+        ArrayList<File> files = new ArrayList<File>();
+        for (int i = 0; i < args.length; i++) {
+            String arg = args[i];
+            if (arg.equals("-q"))
+                quiet = true;
+            else if (arg.equals("-v"))
+                verbose = true;
+            else if (arg.equals("-r")) {
+                File d = baseDir;
+                while (!new File(d, "TEST.ROOT").exists()) {
+                    d = d.getParentFile();
+                    if (d == null)
+                        throw new Error("cannot find TEST.ROOT");
+                }
+                baseDir = d;
+            }
+            else if (arg.startsWith("-"))
+                throw new Error("unknown option: " + arg);
+            else {
+                while (i < args.length)
+                    files.add(new File(baseDir, args[i++]));
+            }
+        }
+
+        for (File file: files) {
+            if (file.exists())
+                test(file);
+            else
+                error("File not found: " + file);
+        }
+
+        if (fileCount != 1)
+            System.err.println(fileCount + " files read");
+        if (errors > 0)
+            System.err.println(errors + " errors");
+
+        return (errors == 0);
+    }
+
+    /**
+     * Print command line help.
+     * @param out output stream
+     */
+    void usage(PrintStream out) {
+        out.println("Usage:");
+        out.println("  java TreeScannerTest options... files...");
+        out.println("");
+        out.println("where options include:");
+        out.println("-q        Quiet: don't report on inapplicable files");
+        out.println("-v        Verbose: report on files as they are being read");
+        out.println("");
+        out.println("files may be directories or files");
+        out.println("directories will be scanned recursively");
+        out.println("non java files, or java files which cannot be parsed, will be ignored");
+        out.println("");
+    }
+
+    /**
+     * Test a file. If the file is a directory, it will be recursively scanned
+     * for java files.
+     * @param file the file or directory to test
+     */
+    void test(File file) {
+        if (file.isDirectory()) {
+            for (File f: file.listFiles()) {
+                test(f);
+            }
+            return;
+        }
+
+        if (file.isFile() && file.getName().endsWith(".java")) {
+            try {
+                if (verbose)
+                    System.err.println(file);
+                fileCount++;
+                ScanTester t = new ScanTester();
+                t.test(read(file));
+            } catch (ParseException e) {
+                if (!quiet) {
+                    error("Error parsing " + file + "\n" + e.getMessage());
+                }
+            } catch (IOException e) {
+                error("Error reading " + file + ": " + e);
+            }
+            return;
+        }
+
+        if (!quiet)
+            error("File " + file + " ignored");
+    }
+
+    /**
+     * Read a file.
+     * @param file the file to be read
+     * @return the tree for the content of the file
+     * @throws IOException if any IO errors occur
+     * @throws TreePosTest.ParseException if any errors occur while parsing the file
+     */
+    JCCompilationUnit read(File file) throws IOException, ParseException {
+        StringWriter sw = new StringWriter();
+        PrintWriter pw = new PrintWriter(sw);
+        Reporter r = new Reporter(pw);
+        JavacTool tool = JavacTool.create();
+        StandardJavaFileManager fm = tool.getStandardFileManager(r, null, null);
+        Iterable<? extends JavaFileObject> files = fm.getJavaFileObjects(file);
+        JavacTask task = tool.getTask(pw, fm, r, Collections.<String>emptyList(), null, files);
+        Iterable<? extends CompilationUnitTree> trees = task.parse();
+        pw.flush();
+        if (r.errors > 0)
+            throw new ParseException(sw.toString());
+        Iterator<? extends CompilationUnitTree> iter = trees.iterator();
+        if (!iter.hasNext())
+            throw new Error("no trees found");
+        JCCompilationUnit t = (JCCompilationUnit) iter.next();
+        if (iter.hasNext())
+            throw new Error("too many trees found");
+        return t;
+    }
+
+    /**
+     * Report an error. When the program is complete, the program will either
+     * exit or throw an Error if any errors have been reported.
+     * @param msg the error message
+     */
+    void error(String msg) {
+        System.err.println(msg);
+        errors++;
+    }
+
+    /**
+     *  Report an error for a specific tree node.
+     *  @param file the source file for the tree
+     *  @param t    the tree node
+     *  @param label an indication of the error
+     */
+    void error(JavaFileObject file, JCTree t, String msg) {
+        error(file.getName() + ":" + getLine(file, t) + ": " + msg + " " + trim(t, 64));
+    }
+
+    /**
+     * Get a trimmed string for a tree node, with normalized white space and limited length.
+     */
+    String trim(JCTree t, int len) {
+        String s = t.toString().replaceAll("[\r\n]+", " ").replaceAll(" +", " ");
+        return (s.length() < len) ? s : s.substring(0, len);
+    }
+
+    /** Number of files that have been analyzed. */
+    int fileCount;
+    /** Number of errors reported. */
+    int errors;
+    /** Flag: don't report irrelevant files. */
+    boolean quiet;
+    /** Flag: report files as they are processed. */
+    boolean verbose;
+
+    /**
+     * Main class for testing operation of tree scanner.
+     * The set of nodes found by the scanner are compared
+     * against the set of nodes found by reflection.
+     */
+    private class ScanTester extends TreeScanner {
+        /** Main entry method for the class. */
+        void test(JCCompilationUnit tree) {
+            sourcefile = tree.sourcefile;
+            found = new HashSet<JCTree>();
+            scan(tree);
+            expect = new HashSet<JCTree>();
+            reflectiveScan(tree);
+            if (found.equals(expect))
+                return;
+
+            error("Differences found for " + tree.sourcefile.getName());
+
+            if (found.size() != expect.size())
+                error("Size mismatch; found: " + found.size() + ", expected: " + expect.size());
+
+            Set<JCTree> missing = new HashSet<JCTree>();
+            missing.addAll(expect);
+            missing.removeAll(found);
+            for (JCTree t: missing)
+                error(tree.sourcefile, t, "missing");
+
+            Set<JCTree> excess = new HashSet<JCTree>();
+            excess.addAll(found);
+            excess.removeAll(expect);
+            for (JCTree t: excess)
+                error(tree.sourcefile, t, "unexpected");
+        }
+
+        /** Record all tree nodes found by scanner. */
+        @Override
+        public void scan(JCTree tree) {
+            if (tree == null)
+                return;
+            System.err.println("FOUND: " + tree.getTag() + " " + trim(tree, 64));
+            found.add(tree);
+            super.scan(tree);
+        }
+
+        /** record all tree nodes found by reflection. */
+        public void reflectiveScan(Object o) {
+            if (o == null)
+                return;
+            if (o instanceof JCTree) {
+                JCTree tree = (JCTree) o;
+                System.err.println("EXPECT: " + tree.getTag() + " " + trim(tree, 64));
+                expect.add(tree);
+                for (Field f: getFields(tree)) {
+                    try {
+                        //System.err.println("FIELD: " + f.getName());
+                        reflectiveScan(f.get(tree));
+                    } catch (IllegalAccessException e) {
+                        error(e.toString());
+                    }
+                }
+            } else if (o instanceof List) {
+                List<?> list = (List<?>) o;
+                for (Object item: list)
+                    reflectiveScan(item);
+            } else
+                error("unexpected item: " + o);
+        }
+
+        JavaFileObject sourcefile;
+        Set<JCTree> found;
+        Set<JCTree> expect;
+    }
+
+    /**
+     * Thrown when errors are found parsing a java file.
+     */
+    private static class ParseException extends Exception {
+        ParseException(String msg) {
+            super(msg);
+        }
+    }
+
+    /**
+     * DiagnosticListener to report diagnostics and count any errors that occur.
+     */
+    private static class Reporter implements DiagnosticListener<JavaFileObject> {
+        Reporter(PrintWriter out) {
+            this.out = out;
+        }
+
+        public void report(Diagnostic<? extends JavaFileObject> diagnostic) {
+            out.println(diagnostic);
+            switch (diagnostic.getKind()) {
+                case ERROR:
+                    errors++;
+            }
+        }
+        int errors;
+        PrintWriter out;
+    }
+
+    /**
+     * Get the set of fields for a tree node that may contain child tree nodes.
+     * These are the fields that are subtypes of JCTree or List.
+     * The results are cached, based on the tree's tag.
+     */
+    Set<Field> getFields(JCTree tree) {
+        Set<Field> fields = map.get(tree.getTag());
+        if (fields == null) {
+            fields = new HashSet<Field>();
+            for (Field f: tree.getClass().getFields()) {
+                Class<?> fc = f.getType();
+                if (JCTree.class.isAssignableFrom(fc) || List.class.isAssignableFrom(fc))
+                    fields.add(f);
+            }
+            map.put(tree.getTag(), fields);
+        }
+        return fields;
+    }
+    // where
+    Map<Integer, Set<Field>> map = new HashMap<Integer,Set<Field>>();
+
+    /** Get the line number for the primary position for a tree.
+     * The code is intended to be simple, although not necessarily efficient.
+     * However, note that a file manager such as JavacFileManager is likely
+     * to cache the results of file.getCharContent, avoiding the need to read
+     * the bits from disk each time this method is called.
+     */
+    int getLine(JavaFileObject file, JCTree tree) {
+        try {
+            CharSequence cs = file.getCharContent(true);
+            int line = 1;
+            for (int i = 0; i < tree.pos; i++) {
+                if (cs.charAt(i) == '\n') // jtreg tests always use Unix line endings
+                    line++;
+            }
+            return line;
+        } catch (IOException e) {
+            return -1;
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/treeannotests/AnnoTreeTests.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/*
+ * @test
+ * @build DA TA Test TestProcessor
+ * @compile -proc:only -processor TestProcessor AnnoTreeTests.java
+ */
+
+@Test(6)
+class AnnoTreeTests {
+    // primitive types
+    @DA("int") int i1;
+    int i2 = (@TA("int") int) 0;
+
+    // simple array types
+    @DA("int[]") int[] a1;
+    int @TA("int") [] a2;
+    int[] a3 = (@TA("int[]") int[]) a1;
+    int[] a4 = (int @TA("int") []) a1;
+
+    // multi-dimensional array types
+    // (still to come)
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/treeannotests/DA.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+import java.lang.annotation.*;
+import static java.lang.annotation.ElementType.*;
+
+/**
+ * Annotation used by TestProcessor to indicate the expected type
+ * of the declaration to which the annotation is attached.
+ * These annotations are expected to be found in the modifiers
+ * field on ClassDef, MethodDef and VarDef nodes.
+ */
+@Target({FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE})
+@interface DA {
+    String value();
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/treeannotests/TA.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+import java.lang.annotation.*;
+import static java.lang.annotation.ElementType.*;
+
+/**
+ * Annotation used by TestProcessor to indicate the expected type
+ * to which the annotation is attached.
+ * These annotations are expected to be found in AnnotatedType nodes.
+ */
+@Target({TYPE_USE, TYPE_PARAMETER})
+@interface TA {
+    String value();
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/treeannotests/Test.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,32 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/**
+ * Annotation used by TestProcessor to indicate the expected number of
+ * @DA and @TA annotations in the source tree to which the Test annotation
+ * is attached.
+ */
+@interface Test {
+    int value();
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/treeannotests/TestProcessor.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,302 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+import java.io.*;
+import java.util.*;
+import javax.annotation.processing.*;
+import javax.lang.model.*;
+import javax.lang.model.element.*;
+import javax.lang.model.util.*;
+import javax.tools.*;
+
+import com.sun.source.util.*;
+import com.sun.tools.javac.code.BoundKind;
+import com.sun.tools.javac.tree.JCTree.*;
+import com.sun.tools.javac.tree.TreeScanner;
+import com.sun.tools.javac.tree.*;
+import com.sun.tools.javac.util.List;
+
+/**
+ * Test processor used to check test programs using the @Test, @DA, and @TA
+ * annotations.
+ *
+ * The processor looks for elements annotated with @Test, and analyzes the
+ * syntax trees for those elements. Within such trees, the processor looks
+ * for the DA annotations on decls and TA annotations on types.
+ * The value of these annotations should be a simple string rendition of
+ * the tree node to which it is attached.
+ * The expected number of annotations is given by the parameter to the
+ * @Test annotation itself.
+ */
+@SupportedAnnotationTypes({"Test"})
+public class TestProcessor extends AbstractProcessor {
+    public SourceVersion getSupportedSourceVersion() {
+        return SourceVersion.latest();
+    }
+
+    /** Process trees for elements annotated with the @Test(n) annotation. */
+    public boolean process(Set<? extends TypeElement> annos, RoundEnvironment renv) {
+        if (renv.processingOver())
+            return true;
+
+        Elements elements = processingEnv.getElementUtils();
+        Trees trees = Trees.instance(processingEnv);
+
+        TypeElement testAnno = elements.getTypeElement("Test");
+        for (Element elem: renv.getElementsAnnotatedWith(testAnno)) {
+            System.err.println("ELEM: " + elem);
+            int count = getValue(getAnnoMirror(elem, testAnno), Integer.class);
+            System.err.println("count: " + count);
+            TreePath p = trees.getPath(elem);
+            JavaFileObject file = p.getCompilationUnit().getSourceFile();
+            JCTree tree = (JCTree) p.getLeaf();
+            System.err.println("tree: " + tree);
+            new TestScanner(file).check(tree, count);
+        }
+        return true;
+    }
+
+    /** Get the AnnotationMirror on an element for a given annotation. */
+    AnnotationMirror getAnnoMirror(Element e, TypeElement anno) {
+        Types types = processingEnv.getTypeUtils();
+        for (AnnotationMirror m: e.getAnnotationMirrors()) {
+            if (types.isSameType(m.getAnnotationType(), anno.asType()))
+                return m;
+        }
+        return null;
+    }
+
+    /** Get the value of the value element of an annotation mirror. */
+    <T> T getValue(AnnotationMirror m, Class<T> type) {
+        for (Map.Entry<? extends ExecutableElement,? extends AnnotationValue> e: m.getElementValues().entrySet()) {
+            ExecutableElement ee = e.getKey();
+            if (ee.getSimpleName().contentEquals("value")) {
+                AnnotationValue av = e.getValue();
+                return type.cast(av.getValue());
+            }
+        }
+        return null;
+    }
+
+    /** Report an error to the annotation processing system. */
+    void error(String msg) {
+        Messager messager = processingEnv.getMessager();
+        messager.printMessage(Diagnostic.Kind.ERROR, msg);
+    }
+
+    /** Report an error to the annotation processing system. */
+    void error(JavaFileObject file, JCTree tree, String msg) {
+        // need better API for reporting tree position errors to the messager
+        Messager messager = processingEnv.getMessager();
+        String text = file.getName() + ":" + getLine(file, tree) + ": " + msg;
+        messager.printMessage(Diagnostic.Kind.ERROR, text);
+    }
+
+    /** Get the line number for the primary position for a tree.
+     * The code is intended to be simple, although not necessarily efficient.
+     * However, note that a file manager such as JavacFileManager is likely
+     * to cache the results of file.getCharContent, avoiding the need to read
+     * the bits from disk each time this method is called.
+     */
+    int getLine(JavaFileObject file, JCTree tree) {
+        try {
+            CharSequence cs = file.getCharContent(true);
+            int line = 1;
+            for (int i = 0; i < tree.pos; i++) {
+                if (cs.charAt(i) == '\n') // jtreg tests always use Unix line endings
+                    line++;
+            }
+            return line;
+        } catch (IOException e) {
+            return -1;
+        }
+    }
+
+    /** Scan a tree, looking for @DA and @TA annotations, and verifying that such
+     * annotations are attached to the expected tree node matching the string
+     * parameter of the annotation.
+     */
+    class TestScanner extends TreeScanner {
+        /** Create a scanner for a given file. */
+        TestScanner(JavaFileObject file) {
+            this.file = file;
+        }
+
+        /** Check the annotations in a given tree. */
+        void check(JCTree tree, int expectCount) {
+            foundCount = 0;
+            scan(tree);
+            if (foundCount != expectCount)
+                error(file, tree, "Wrong number of annotations found: " + foundCount + ", expected: " + expectCount);
+        }
+
+        /** Check @DA annotations on a class declaration. */
+        @Override
+        public void visitClassDef(JCClassDecl tree) {
+            super.visitClassDef(tree);
+            check(tree.mods.annotations, "DA", tree);
+        }
+
+        /** Check @DA annotations on a method declaration. */
+        @Override
+        public void visitMethodDef(JCMethodDecl tree) {
+            super.visitMethodDef(tree);
+            check(tree.mods.annotations, "DA", tree);
+        }
+
+        /** Check @DA annotations on a field, parameter or local variable declaration. */
+        @Override
+        public void visitVarDef(JCVariableDecl tree) {
+            super.visitVarDef(tree);
+            check(tree.mods.annotations, "DA", tree);
+        }
+
+        /** Check @TA annotations on a type. */
+        public void visitAnnotatedType(JCAnnotatedType tree) {
+            super.visitAnnotatedType(tree);
+            check(tree.annotations, "TA", tree);
+        }
+
+        /** Check to see if a list of annotations contains a named annotation, and
+         * if so, verify the annotation is expected by comparing the value of the
+         * annotation's argument against the string rendition of the reference tree
+         * node.
+         * @param annos the list of annotations to be checked
+         * @param name  the name of the annotation to be checked
+         * @param tree  the tree against which to compare the annotations's argument
+         */
+        void check(List<? extends JCAnnotation> annos, String name, JCTree tree) {
+            for (List<? extends JCAnnotation> l = annos; l.nonEmpty(); l = l.tail) {
+                JCAnnotation anno = l.head;
+                if (anno.annotationType.toString().equals(name) && (anno.args.size() == 1)) {
+                    String expect = getStringValue(anno.args.head);
+                    foundCount++;
+                    System.err.println("found: " + name + " " + expect);
+                    String found = new TypePrinter().print(tree);
+                    if (!found.equals(expect))
+                        error(file, anno, "Unexpected result: expected: \"" + expect + "\", found: \"" + found + "\"");
+                }
+            }
+        }
+
+        /** Get the string value of an annotation argument, which is given by the
+         * expression <i>name</i>=<i>value</i>.
+         */
+        String getStringValue(JCExpression e) {
+            if (e.getTag() == JCTree.ASSIGN)  {
+                JCAssign a = (JCAssign) e;
+                JCExpression rhs = a.rhs;
+                if (rhs.getTag() == JCTree.LITERAL) {
+                    JCLiteral l = (JCLiteral) rhs;
+                    return (String) l.value;
+                }
+            }
+            throw new IllegalArgumentException(e.toString());
+        }
+
+        /** The file for the tree. Used to locate errors. */
+        JavaFileObject file;
+        /** The number of annotations that have been found. @see #check */
+        int foundCount;
+    }
+
+    /** Convert a type or decl tree to a reference string used by the @DA and @TA annotations. */
+    class TypePrinter extends Visitor {
+        /** Convert a type or decl tree to a string. */
+        String print(JCTree tree) {
+            if (tree == null)
+                return null;
+            tree.accept(this);
+            return result;
+        }
+
+        String print(List<? extends JCTree> list) {
+            return print(list, ", ");
+        }
+
+        String print(List<? extends JCTree> list, String sep) {
+            StringBuilder sb = new StringBuilder();
+            if (list.nonEmpty()) {
+                sb.append(print(list.head));
+                for (List<? extends JCTree> l = list.tail; l.nonEmpty(); l = l.tail) {
+                    sb.append(sep);
+                    sb.append(print(l.head));
+                }
+            }
+            return sb.toString();
+        }
+
+        @Override
+        public void visitClassDef(JCClassDecl tree) {
+            result = tree.name.toString();
+        }
+
+        @Override
+        public void visitMethodDef(JCMethodDecl tree) {
+            result = tree.name.toString();
+        }
+
+        @Override
+        public void visitVarDef(JCVariableDecl tree) {
+            tree.vartype.accept(this);
+        }
+
+        @Override
+        public void visitAnnotatedType(JCAnnotatedType tree) {
+            tree.underlyingType.accept(this);
+        }
+
+        @Override
+        public void visitTypeIdent(JCPrimitiveTypeTree tree) {
+            result = tree.toString();
+        }
+
+        @Override
+        public void visitTypeArray(JCArrayTypeTree tree) {
+            result = print(tree.elemtype) + "[]";
+        }
+
+        @Override
+        public void visitTypeApply(JCTypeApply tree) {
+            result = print(tree.clazz) + "<" + print(tree.arguments) + ">";
+        }
+
+        @Override
+        public void visitTypeParameter(JCTypeParameter tree) {
+            if (tree.bounds.isEmpty())
+                result = tree.name.toString();
+            else
+                result = tree.name + " extends " + print(tree.bounds, "&");
+        }
+
+        @Override
+        public void visitWildcard(JCWildcard tree) {
+            if (tree.kind.kind == BoundKind.UNBOUND)
+                result = tree.kind.toString();
+            else
+                result = tree.kind + " " + print(tree.inner);
+        }
+
+        private String result;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/treepostests/TreePosTest.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,752 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.EventQueue;
+import java.awt.Font;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Rectangle;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.nio.charset.Charset;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JComboBox;
+import javax.swing.JComponent;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+import javax.swing.JTextField;
+import javax.swing.SwingUtilities;
+import javax.swing.event.CaretEvent;
+import javax.swing.event.CaretListener;
+import javax.swing.text.BadLocationException;
+import javax.swing.text.DefaultHighlighter;
+import javax.swing.text.Highlighter;
+import javax.tools.Diagnostic;
+import javax.tools.DiagnosticListener;
+import javax.tools.JavaFileObject;
+import javax.tools.StandardJavaFileManager;
+
+import com.sun.source.tree.CompilationUnitTree;
+import com.sun.source.util.JavacTask;
+import com.sun.tools.javac.api.JavacTool;
+import com.sun.tools.javac.code.Flags;
+import com.sun.tools.javac.tree.JCTree;
+import com.sun.tools.javac.tree.JCTree.JCCompilationUnit;
+import com.sun.tools.javac.tree.JCTree.JCNewClass;
+import com.sun.tools.javac.tree.JCTree.JCVariableDecl;
+import com.sun.tools.javac.tree.TreeInfo;
+import com.sun.tools.javac.tree.TreeScanner;
+
+import static com.sun.tools.javac.util.Position.NOPOS;
+
+/**
+ * Utility and test program to check validity of tree positions for tree nodes.
+ * The program can be run standalone, or as a jtreg test.  In standalone mode,
+ * errors can be displayed in a gui viewer. For info on command line args,
+ * run program with no args.
+ *
+ * <p>
+ * jtreg: Note that by using the -r switch in the test description below, this test
+ * will process all java files in the langtools/test directory, thus implicitly
+ * covering any new language features that may be tested in this test suite.
+ */
+
+/*
+ * @test
+ * @bug 6919889
+ * @summary assorted position errors in compiler syntax trees
+ * @run main TreePosTest -q -r -ef ./tools/javac/typeAnnotations -ef ./tools/javap/typeAnnotations  .
+ */
+public class TreePosTest {
+    /**
+     * Main entry point.
+     * If test.src is set, program runs in jtreg mode, and will throw an Error
+     * if any errors arise, otherwise System.exit will be used, unless the gui
+     * viewer is being used. In jtreg mode, the default base directory for file
+     * args is the value of ${test.src}. In jtreg mode, the -r option can be
+     * given to change the default base directory to the root test directory.
+     */
+    public static void main(String... args) {
+        String testSrc = System.getProperty("test.src");
+        File baseDir = (testSrc == null) ? null : new File(testSrc);
+        boolean ok = new TreePosTest().run(baseDir, args);
+        if (!ok) {
+            if (testSrc != null)  // jtreg mode
+                throw new Error("failed");
+            else
+                System.exit(1);
+        }
+    }
+
+    /**
+     * Run the program. A base directory can be provided for file arguments.
+     * In jtreg mode, the -r option can be given to change the default base
+     * directory to the test root directory. For other options, see usage().
+     * @param baseDir base directory for any file arguments.
+     * @param args command line args
+     * @return true if successful or in gui mode
+     */
+    boolean run(File baseDir, String... args) {
+        if (args.length == 0) {
+            usage(System.out);
+            return true;
+        }
+
+        List<File> files = new ArrayList<File>();
+        for (int i = 0; i < args.length; i++) {
+            String arg = args[i];
+            if (arg.equals("-encoding") && i + 1 < args.length)
+                encoding = args[++i];
+            else if (arg.equals("-gui"))
+                gui = true;
+            else if (arg.equals("-q"))
+                quiet = true;
+            else if (arg.equals("-v"))
+                verbose = true;
+            else if (arg.equals("-t") && i + 1 < args.length)
+                tags.add(args[++i]);
+            else if (arg.equals("-ef") && i + 1 < args.length)
+                excludeFiles.add(new File(baseDir, args[++i]));
+            else if (arg.equals("-r")) {
+                if (excludeFiles.size() > 0)
+                    throw new Error("-r must be used before -ef");
+                File d = baseDir;
+                while (!new File(d, "TEST.ROOT").exists()) {
+                    d = d.getParentFile();
+                    if (d == null)
+                        throw new Error("cannot find TEST.ROOT");
+                }
+                baseDir = d;
+            }
+            else if (arg.startsWith("-"))
+                throw new Error("unknown option: " + arg);
+            else {
+                while (i < args.length)
+                    files.add(new File(baseDir, args[i++]));
+            }
+        }
+
+        for (File file: files) {
+            if (file.exists())
+                test(file);
+            else
+                error("File not found: " + file);
+        }
+
+        if (fileCount != 1)
+            System.err.println(fileCount + " files read");
+        if (errors > 0)
+            System.err.println(errors + " errors");
+
+        return (gui || errors == 0);
+    }
+
+    /**
+     * Print command line help.
+     * @param out output stream
+     */
+    void usage(PrintStream out) {
+        out.println("Usage:");
+        out.println("  java TreePosTest options... files...");
+        out.println("");
+        out.println("where options include:");
+        out.println("-gui      Display returns in a GUI viewer");
+        out.println("-q        Quiet: don't report on inapplicable files");
+        out.println("-v        Verbose: report on files as they are being read");
+        out.println("-t tag    Limit checks to tree nodes with this tag");
+        out.println("          Can be repeated if desired");
+        out.println("-ef file  Exclude file or directory");
+        out.println("");
+        out.println("files may be directories or files");
+        out.println("directories will be scanned recursively");
+        out.println("non java files, or java files which cannot be parsed, will be ignored");
+        out.println("");
+    }
+
+    /**
+     * Test a file. If the file is a directory, it will be recursively scanned
+     * for java files.
+     * @param file the file or directory to test
+     */
+    void test(File file) {
+        if (excludeFiles.contains(file)) {
+            if (!quiet)
+                error("File " + file + " excluded");
+            return;
+        }
+
+        if (file.isDirectory()) {
+            for (File f: file.listFiles()) {
+                test(f);
+            }
+            return;
+        }
+
+        if (file.isFile() && file.getName().endsWith(".java")) {
+            try {
+                if (verbose)
+                    System.err.println(file);
+                fileCount++;
+                PosTester p = new PosTester();
+                p.test(read(file));
+            } catch (ParseException e) {
+                if (!quiet) {
+                    error("Error parsing " + file + "\n" + e.getMessage());
+                }
+            } catch (IOException e) {
+                error("Error reading " + file + ": " + e);
+            }
+            return;
+        }
+
+        if (!quiet)
+            error("File " + file + " ignored");
+    }
+
+    /**
+     * Read a file.
+     * @param file the file to be read
+     * @return the tree for the content of the file
+     * @throws IOException if any IO errors occur
+     * @throws TreePosTest.ParseException if any errors occur while parsing the file
+     */
+    JCCompilationUnit read(File file) throws IOException, ParseException {
+        StringWriter sw = new StringWriter();
+        PrintWriter pw = new PrintWriter(sw);
+        Reporter r = new Reporter(pw);
+        JavacTool tool = JavacTool.create();
+        Charset cs = (encoding == null ? null : Charset.forName(encoding));
+        StandardJavaFileManager fm = tool.getStandardFileManager(r, null, null);
+        Iterable<? extends JavaFileObject> files = fm.getJavaFileObjects(file);
+        JavacTask task = tool.getTask(pw, fm, r, Collections.<String>emptyList(), null, files);
+        Iterable<? extends CompilationUnitTree> trees = task.parse();
+        pw.flush();
+        if (r.errors > 0)
+            throw new ParseException(sw.toString());
+        Iterator<? extends CompilationUnitTree> iter = trees.iterator();
+        if (!iter.hasNext())
+            throw new Error("no trees found");
+        JCCompilationUnit t = (JCCompilationUnit) iter.next();
+        if (iter.hasNext())
+            throw new Error("too many trees found");
+        return t;
+    }
+
+    /**
+     * Report an error. When the program is complete, the program will either
+     * exit or throw an Error if any errors have been reported.
+     * @param msg the error message
+     */
+    void error(String msg) {
+        System.err.println(msg);
+        errors++;
+    }
+
+    /** Number of files that have been analyzed. */
+    int fileCount;
+    /** Number of errors reported. */
+    int errors;
+    /** Flag: don't report irrelevant files. */
+    boolean quiet;
+    /** Flag: report files as they are processed. */
+    boolean verbose;
+    /** Flag: show errors in GUI viewer. */
+    boolean gui;
+    /** Option: encoding for test files. */
+    String encoding;
+    /** The GUI viewer for errors. */
+    Viewer viewer;
+    /** The set of tags for tree nodes to be analyzed; if empty, all tree nodes
+     * are analyzed. */
+    Set<String> tags = new HashSet<String>();
+    /** Set of files and directories to be excluded from analysis. */
+    Set<File> excludeFiles = new HashSet<File>();
+    /** Table of printable names for tree tag values. */
+    TagNames tagNames = new TagNames();
+
+    /**
+     * Main class for testing assertions concerning tree positions for tree nodes.
+     */
+    private class PosTester extends TreeScanner {
+        void test(JCCompilationUnit tree) {
+            sourcefile = tree.sourcefile;
+            endPosTable = tree.endPositions;
+            encl = new Info();
+            tree.accept(this);
+        }
+
+        @Override
+        public void scan(JCTree tree) {
+            if (tree == null)
+                return;
+
+            Info self = new Info(tree, endPosTable);
+            if (check(self)) {
+                // Modifiers nodes are present throughout the tree even where
+                // there is no corresponding source text.
+                // Redundant semicolons in a class definition can cause empty
+                // initializer blocks with no positions.
+                if ((self.tag == JCTree.MODIFIERS || self.tag == JCTree.BLOCK)
+                        && self.pos == NOPOS) {
+                    // If pos is NOPOS, so should be the start and end positions
+                    check("start == NOPOS", encl, self, self.start == NOPOS);
+                    check("end == NOPOS", encl, self, self.end == NOPOS);
+                } else {
+                    // For this node, start , pos, and endpos should be all defined
+                    check("start != NOPOS", encl, self, self.start != NOPOS);
+                    check("pos != NOPOS", encl, self, self.pos != NOPOS);
+                    check("end != NOPOS", encl, self, self.end != NOPOS);
+                    // The following should normally be ordered
+                    // encl.start <= start <= pos <= end <= encl.end
+                    // In addition, the position of the enclosing node should be
+                    // within this node.
+                    // The primary exceptions are for array type nodes, because of the
+                    // need to support legacy syntax:
+                    //    e.g.    int a[];    int[] b[];    int f()[] { return null; }
+                    // and because of inconsistent nesting of left and right of
+                    // array declarations:
+                    //    e.g.    int[][] a = new int[2][];
+                    check("encl.start <= start", encl, self, encl.start <= self.start);
+                    check("start <= pos", encl, self, self.start <= self.pos);
+                    if (!(self.tag == JCTree.TYPEARRAY
+                            && (encl.tag == JCTree.VARDEF || encl.tag == JCTree.TYPEARRAY))) {
+                        check("encl.pos <= start || end <= encl.pos",
+                                encl, self, encl.pos <= self.start || self.end <= encl.pos);
+                    }
+                    check("pos <= end", encl, self, self.pos <= self.end);
+                    if (!(self.tag == JCTree.TYPEARRAY && encl.tag == JCTree.TYPEARRAY)) {
+                        check("end <= encl.end", encl, self, self.end <= encl.end);
+                    }
+                }
+            }
+
+            Info prevEncl = encl;
+            encl = self;
+            tree.accept(this);
+            encl = prevEncl;
+        }
+
+        @Override
+        public void visitVarDef(JCVariableDecl tree) {
+            // enum member declarations are desugared in the parser and have
+            // ill-defined semantics for tree positions, so for now, we
+            // skip the synthesized bits and just check parts which came from
+            // the original source text
+            if ((tree.mods.flags & Flags.ENUM) != 0) {
+                scan(tree.mods);
+                if (tree.init != null) {
+                    if (tree.init.getTag() == JCTree.NEWCLASS) {
+                        JCNewClass init = (JCNewClass) tree.init;
+                        if (init.args != null && init.args.nonEmpty()) {
+                            scan(init.args);
+                        }
+                        if (init.def != null && init.def.defs != null) {
+                            scan(init.def.defs);
+                        }
+                    }
+                }
+            } else
+                super.visitVarDef(tree);
+        }
+
+        boolean check(Info x) {
+            return tags.size() == 0 || tags.contains(tagNames.get(x.tag));
+        }
+
+        void check(String label, Info encl, Info self, boolean ok) {
+            if (!ok) {
+                if (gui) {
+                    if (viewer == null)
+                        viewer = new Viewer();
+                    viewer.addEntry(sourcefile, label, encl, self);
+                }
+
+                String s = self.tree.toString();
+                String msg = sourcefile.getName() + ": " + label + ": " +
+                        "encl:" + encl + " this:" + self + "\n" +
+                        s.substring(0, Math.min(80, s.length())).replaceAll("[\r\n]+", " ");
+                error(msg);
+            }
+        }
+
+        JavaFileObject sourcefile;
+        Map<JCTree, Integer> endPosTable;
+        Info encl;
+
+    }
+
+    /**
+     * Utility class providing easy access to position and other info for a tree node.
+     */
+    private class Info {
+        Info() {
+            tree = null;
+            tag = JCTree.ERRONEOUS;
+            start = 0;
+            pos = 0;
+            end = Integer.MAX_VALUE;
+        }
+
+        Info(JCTree tree, Map<JCTree, Integer> endPosTable) {
+            this.tree = tree;
+            tag = tree.getTag();
+            start = TreeInfo.getStartPos(tree);
+            pos = tree.pos;
+            end = TreeInfo.getEndPos(tree, endPosTable);
+        }
+
+        @Override
+        public String toString() {
+            return tagNames.get(tree.getTag()) + "[start:" + start + ",pos:" + pos + ",end:" + end + "]";
+        }
+
+        final JCTree tree;
+        final int tag;
+        final int start;
+        final int pos;
+        final int end;
+    }
+
+    /**
+     * Names for tree tags.
+     * javac does not provide an API to convert tag values to strings, so this class uses
+     * reflection to determine names of public static final int values in JCTree.
+     */
+    private static class TagNames {
+        String get(int tag) {
+            if (map == null) {
+                map = new HashMap<Integer, String>();
+                Class c = JCTree.class;
+                for (Field f : c.getDeclaredFields()) {
+                    if (f.getType().equals(int.class)) {
+                        int mods = f.getModifiers();
+                        if (Modifier.isPublic(mods) && Modifier.isStatic(mods) && Modifier.isFinal(mods)) {
+                            try {
+                                map.put(f.getInt(null), f.getName());
+                            } catch (IllegalAccessException e) {
+                            }
+                        }
+                    }
+                }
+            }
+            String name = map.get(tag);
+            return (name == null) ? "??" : name;
+        }
+
+        private Map<Integer, String> map;
+    }
+
+    /**
+     * Thrown when errors are found parsing a java file.
+     */
+    private static class ParseException extends Exception {
+        ParseException(String msg) {
+            super(msg);
+        }
+    }
+
+    /**
+     * DiagnosticListener to report diagnostics and count any errors that occur.
+     */
+    private static class Reporter implements DiagnosticListener<JavaFileObject> {
+        Reporter(PrintWriter out) {
+            this.out = out;
+        }
+
+        public void report(Diagnostic<? extends JavaFileObject> diagnostic) {
+            out.println(diagnostic);
+            switch (diagnostic.getKind()) {
+                case ERROR:
+                    errors++;
+            }
+        }
+        int errors;
+        PrintWriter out;
+    }
+
+    /**
+     * GUI viewer for issues found by TreePosTester. The viewer provides a drop
+     * down list for selecting error conditions, a header area providing details
+     * about an error, and a text area with the ranges of text highlighted as
+     * appropriate.
+     */
+    private class Viewer extends JFrame {
+        /**
+         * Create a viewer.
+         */
+        Viewer() {
+            initGUI();
+        }
+
+        /**
+         * Add another entry to the list of errors.
+         * @param file The file containing the error
+         * @param check The condition that was being tested, and which failed
+         * @param encl the enclosing tree node
+         * @param self the tree node containing the error
+         */
+        void addEntry(JavaFileObject file, String check, Info encl, Info self) {
+            Entry e = new Entry(file, check, encl, self);
+            DefaultComboBoxModel m = (DefaultComboBoxModel) entries.getModel();
+            m.addElement(e);
+            if (m.getSize() == 1)
+                entries.setSelectedItem(e);
+        }
+
+        /**
+         * Initialize the GUI window.
+         */
+        private void initGUI() {
+            JPanel head = new JPanel(new GridBagLayout());
+            GridBagConstraints lc = new GridBagConstraints();
+            GridBagConstraints fc = new GridBagConstraints();
+            fc.anchor = GridBagConstraints.WEST;
+            fc.fill = GridBagConstraints.HORIZONTAL;
+            fc.gridwidth = GridBagConstraints.REMAINDER;
+
+            entries = new JComboBox();
+            entries.addActionListener(new ActionListener() {
+                public void actionPerformed(ActionEvent e) {
+                    showEntry((Entry) entries.getSelectedItem());
+                }
+            });
+            fc.insets.bottom = 10;
+            head.add(entries, fc);
+            fc.insets.bottom = 0;
+            head.add(new JLabel("check:"), lc);
+            head.add(checkField = createTextField(80), fc);
+            fc.fill = GridBagConstraints.NONE;
+            head.add(setBackground(new JLabel("encl:"), enclColor), lc);
+            head.add(enclPanel = new InfoPanel(), fc);
+            head.add(setBackground(new JLabel("self:"), selfColor), lc);
+            head.add(selfPanel = new InfoPanel(), fc);
+            add(head, BorderLayout.NORTH);
+
+            body = new JTextArea();
+            body.setFont(Font.decode(Font.MONOSPACED));
+            body.addCaretListener(new CaretListener() {
+                public void caretUpdate(CaretEvent e) {
+                    int dot = e.getDot();
+                    int mark = e.getMark();
+                    if (dot == mark)
+                        statusText.setText("dot: " + dot);
+                    else
+                        statusText.setText("dot: " + dot + ", mark:" + mark);
+                }
+            });
+            JScrollPane p = new JScrollPane(body,
+                    JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
+                    JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+            p.setPreferredSize(new Dimension(640, 480));
+            add(p, BorderLayout.CENTER);
+
+            statusText = createTextField(80);
+            add(statusText, BorderLayout.SOUTH);
+
+            pack();
+            setLocationRelativeTo(null); // centered on screen
+            setVisible(true);
+            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+        }
+
+        /** Show an entry that has been selected. */
+        private void showEntry(Entry e) {
+            try {
+                // update simple fields
+                setTitle(e.file.getName());
+                checkField.setText(e.check);
+                enclPanel.setInfo(e.encl);
+                selfPanel.setInfo(e.self);
+                // show file text with highlights
+                body.setText(e.file.getCharContent(true).toString());
+                Highlighter highlighter = body.getHighlighter();
+                highlighter.removeAllHighlights();
+                addHighlight(highlighter, e.encl, enclColor);
+                addHighlight(highlighter, e.self, selfColor);
+                scroll(body, getMinPos(enclPanel.info, selfPanel.info));
+            } catch (IOException ex) {
+                body.setText("Cannot read " + e.file.getName() + ": " + e);
+            }
+        }
+
+        /** Create a test field. */
+        private JTextField createTextField(int width) {
+            JTextField f = new JTextField(width);
+            f.setEditable(false);
+            f.setBorder(null);
+            return f;
+        }
+
+        /** Add a highlighted region based on the positions in an Info object. */
+        private void addHighlight(Highlighter h, Info info, Color c) {
+            int start = info.start;
+            int end = info.end;
+            if (start == -1 && end == -1)
+                return;
+            if (start == -1)
+                start = end;
+            if (end == -1)
+                end = start;
+            try {
+                h.addHighlight(info.start, info.end,
+                        new DefaultHighlighter.DefaultHighlightPainter(c));
+                if (info.pos != -1) {
+                    Color c2 = new Color(c.getRed(), c.getGreen(), c.getBlue(), (int)(.4f * 255)); // 40%
+                    h.addHighlight(info.pos, info.pos + 1,
+                        new DefaultHighlighter.DefaultHighlightPainter(c2));
+                }
+            } catch (BadLocationException e) {
+                e.printStackTrace();
+            }
+        }
+
+        /** Get the minimum valid position in a set of info objects. */
+        private int getMinPos(Info... values) {
+            int i = Integer.MAX_VALUE;
+            for (Info info: values) {
+                if (info.start >= 0) i = Math.min(i, info.start);
+                if (info.pos   >= 0) i = Math.min(i, info.pos);
+                if (info.end   >= 0) i = Math.min(i, info.end);
+            }
+            return (i == Integer.MAX_VALUE) ? 0 : i;
+        }
+
+        /** Set the background on a component. */
+        private JComponent setBackground(JComponent comp, Color c) {
+            comp.setOpaque(true);
+            comp.setBackground(c);
+            return comp;
+        }
+
+        /** Scroll a text area to display a given position near the middle of the visible area. */
+        private void scroll(final JTextArea t, final int pos) {
+            // Using invokeLater appears to give text a chance to sort itself out
+            // before the scroll happens; otherwise scrollRectToVisible doesn't work.
+            // Maybe there's a better way to sync with the text...
+            EventQueue.invokeLater(new Runnable() {
+                public void run() {
+                    try {
+                        Rectangle r = t.modelToView(pos);
+                        JScrollPane p = (JScrollPane) SwingUtilities.getAncestorOfClass(JScrollPane.class, t);
+                        r.y = Math.max(0, r.y - p.getHeight() * 2 / 5);
+                        r.height += p.getHeight() * 4 / 5;
+                        t.scrollRectToVisible(r);
+                    } catch (BadLocationException ignore) {
+                    }
+                }
+            });
+        }
+
+        private JComboBox entries;
+        private JTextField checkField;
+        private InfoPanel enclPanel;
+        private InfoPanel selfPanel;
+        private JTextArea body;
+        private JTextField statusText;
+
+        private Color selfColor = new Color(0.f, 1.f, 0.f, 0.2f); // 20% green
+        private Color enclColor = new Color(1.f, 0.f, 0.f, 0.2f); // 20% red
+
+        /** Panel to display an Info object. */
+        private class InfoPanel extends JPanel {
+            InfoPanel() {
+                add(tagName = createTextField(20));
+                add(new JLabel("start:"));
+                add(addListener(start = createTextField(6)));
+                add(new JLabel("pos:"));
+                add(addListener(pos = createTextField(6)));
+                add(new JLabel("end:"));
+                add(addListener(end = createTextField(6)));
+            }
+
+            void setInfo(Info info) {
+                this.info = info;
+                tagName.setText(tagNames.get(info.tag));
+                start.setText(String.valueOf(info.start));
+                pos.setText(String.valueOf(info.pos));
+                end.setText(String.valueOf(info.end));
+            }
+
+            JTextField addListener(final JTextField f) {
+                f.addMouseListener(new MouseAdapter() {
+                    @Override
+                    public void mouseClicked(MouseEvent e) {
+                        body.setCaretPosition(Integer.valueOf(f.getText()));
+                        body.getCaret().setVisible(true);
+                    }
+                });
+                return f;
+            }
+
+            Info info;
+            JTextField tagName;
+            JTextField start;
+            JTextField pos;
+            JTextField end;
+        }
+
+        /** Object to record information about an error to be displayed. */
+        private class Entry {
+            Entry(JavaFileObject file, String check, Info encl, Info self) {
+                this.file = file;
+                this.check = check;
+                this.encl = encl;
+                this.self= self;
+            }
+
+            @Override
+            public String toString() {
+                return file.getName() + " " + check + " " + getMinPos(encl, self);
+            }
+
+            final JavaFileObject file;
+            final String check;
+            final Info encl;
+            final Info self;
+        }
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/typeAnnotations/classfile/DeadCode.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,181 @@
+/*
+ * Copyright 2009-2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+import java.io.*;
+import java.net.URL;
+import java.util.List;
+
+import com.sun.tools.classfile.*;
+
+/*
+ * @test
+ * @bug 6917130
+ * @summary test that optimized away annotations are not emited to classfile
+ */
+
+public class DeadCode {
+    public static void main(String[] args) throws Exception {
+        new DeadCode().run();
+    }
+
+    public void run() throws Exception {
+        ClassFile cf = getClassFile("DeadCode$Test.class");
+        test(cf);
+        for (Field f : cf.fields) {
+            test(cf, f);
+        }
+        for (Method m: cf.methods) {
+            test(cf, m);
+        }
+
+        countAnnotations();
+
+        if (errors > 0)
+            throw new Exception(errors + " errors found");
+        System.out.println("PASSED");
+    }
+
+    ClassFile getClassFile(String name) throws IOException, ConstantPoolException {
+        URL url = getClass().getResource(name);
+        InputStream in = url.openStream();
+        try {
+            return ClassFile.read(in);
+        } finally {
+            in.close();
+        }
+    }
+
+    /************ Helper annotations counting methods ******************/
+    void test(ClassFile cf) {
+        test(cf, Attribute.RuntimeVisibleTypeAnnotations, true);
+        test(cf, Attribute.RuntimeInvisibleTypeAnnotations, false);
+    }
+
+    void test(ClassFile cf, Method m) {
+        test(cf, m, Attribute.RuntimeVisibleTypeAnnotations, true);
+        test(cf, m, Attribute.RuntimeInvisibleTypeAnnotations, false);
+    }
+
+    void test(ClassFile cf, Field m) {
+        test(cf, m, Attribute.RuntimeVisibleTypeAnnotations, true);
+        test(cf, m, Attribute.RuntimeInvisibleTypeAnnotations, false);
+    }
+
+    // test the result of Attributes.getIndex according to expectations
+    // encoded in the method's name
+    void test(ClassFile cf, String name, boolean visible) {
+        int index = cf.attributes.getIndex(cf.constant_pool, name);
+        if (index != -1) {
+            Attribute attr = cf.attributes.get(index);
+            assert attr instanceof RuntimeTypeAnnotations_attribute;
+            RuntimeTypeAnnotations_attribute tAttr = (RuntimeTypeAnnotations_attribute)attr;
+            all += tAttr.annotations.length;
+            if (visible)
+                visibles += tAttr.annotations.length;
+            else
+                invisibles += tAttr.annotations.length;
+        }
+    }
+
+    // test the result of Attributes.getIndex according to expectations
+    // encoded in the method's name
+    void test(ClassFile cf, Method m, String name, boolean visible) {
+        int index = m.attributes.getIndex(cf.constant_pool, name);
+        if (index != -1) {
+            Attribute attr = m.attributes.get(index);
+            assert attr instanceof RuntimeTypeAnnotations_attribute;
+            RuntimeTypeAnnotations_attribute tAttr = (RuntimeTypeAnnotations_attribute)attr;
+            all += tAttr.annotations.length;
+            if (visible)
+                visibles += tAttr.annotations.length;
+            else
+                invisibles += tAttr.annotations.length;
+        }
+    }
+
+    // test the result of Attributes.getIndex according to expectations
+    // encoded in the method's name
+    void test(ClassFile cf, Field m, String name, boolean visible) {
+        int index = m.attributes.getIndex(cf.constant_pool, name);
+        if (index != -1) {
+            Attribute attr = m.attributes.get(index);
+            assert attr instanceof RuntimeTypeAnnotations_attribute;
+            RuntimeTypeAnnotations_attribute tAttr = (RuntimeTypeAnnotations_attribute)attr;
+            all += tAttr.annotations.length;
+            if (visible)
+                visibles += tAttr.annotations.length;
+            else
+                invisibles += tAttr.annotations.length;
+        }
+    }
+
+    void countAnnotations() {
+        int expected_all = expected_visibles + expected_invisibles;
+
+        if (expected_all != all) {
+            errors++;
+            System.err.println("expected " + expected_all
+                    + " annotations but found " + all);
+        }
+
+        if (expected_visibles != visibles) {
+            errors++;
+            System.err.println("expected " + expected_visibles
+                    + " visibles annotations but found " + visibles);
+        }
+
+        if (expected_invisibles != invisibles) {
+            errors++;
+            System.err.println("expected " + expected_invisibles
+                    + " invisibles annotations but found " + invisibles);
+        }
+
+    }
+
+    int errors;
+    int all;
+    int visibles;
+    int invisibles;
+
+    /*********************** Test class *************************/
+    static int expected_invisibles = 1;
+    static int expected_visibles = 0;
+    static class Test {
+        @interface A {}
+
+        void test() {
+            List<? extends @A Object> o = null;
+            o.toString();
+
+            @A String m;
+            if (false) {
+                @A String a;
+                @A String b = "m";
+                b.toString();
+                List<? extends @A Object> c = null;
+                c.toString();
+            }
+        }
+    }
+
+}
--- a/langtools/test/tools/javac/typeAnnotations/failures/common/arrayclass/DuplicateAnnotationValue.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/langtools/test/tools/javac/typeAnnotations/failures/common/arrayclass/DuplicateAnnotationValue.java	Fri Feb 19 15:13:37 2010 -0800
@@ -1,6 +1,6 @@
 /*
  * @test /nodynamiccopyright/
- * @bug 6843077
+ * @bug 6843077 6919944
  * @summary check for duplicate annotation values
  * @author Mahmood Ali
  * @compile/fail/ref=DuplicateAnnotationValue.out -XDrawDiagnostics -source 1.7 DuplicateAnnotationValue.java
--- a/langtools/test/tools/javac/typeAnnotations/failures/common/arrayclass/DuplicateAnnotationValue.out	Fri Feb 12 19:58:10 2010 +0300
+++ b/langtools/test/tools/javac/typeAnnotations/failures/common/arrayclass/DuplicateAnnotationValue.out	Fri Feb 19 15:13:37 2010 -0800
@@ -1,2 +1,2 @@
-DuplicateAnnotationValue.java:10:45: compiler.err.duplicate.annotation.member.value: value, A
+DuplicateAnnotationValue.java:10:37: compiler.err.duplicate.annotation.member.value: value, A
 1 error
--- a/langtools/test/tools/javac/typeAnnotations/failures/common/arrays/DuplicateAnnotationValue.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/langtools/test/tools/javac/typeAnnotations/failures/common/arrays/DuplicateAnnotationValue.java	Fri Feb 19 15:13:37 2010 -0800
@@ -1,6 +1,6 @@
 /*
  * @test /nodynamiccopyright/
- * @bug 6843077
+ * @bug 6843077 6919944
  * @summary check for duplicate annotation values
  * @author Mahmood Ali
  * @compile/fail/ref=DuplicateAnnotationValue.out -XDrawDiagnostics -source 1.7 DuplicateAnnotationValue.java
--- a/langtools/test/tools/javac/typeAnnotations/failures/common/arrays/DuplicateAnnotationValue.out	Fri Feb 12 19:58:10 2010 +0300
+++ b/langtools/test/tools/javac/typeAnnotations/failures/common/arrays/DuplicateAnnotationValue.out	Fri Feb 19 15:13:37 2010 -0800
@@ -1,2 +1,2 @@
-DuplicateAnnotationValue.java:10:34: compiler.err.duplicate.annotation.member.value: value, A
+DuplicateAnnotationValue.java:10:26: compiler.err.duplicate.annotation.member.value: value, A
 1 error
--- a/langtools/test/tools/javac/typeAnnotations/failures/common/innertypeparams/DuplicateAnnotationValue.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/langtools/test/tools/javac/typeAnnotations/failures/common/innertypeparams/DuplicateAnnotationValue.java	Fri Feb 19 15:13:37 2010 -0800
@@ -1,6 +1,6 @@
 /*
  * @test /nodynamiccopyright/
- * @bug 6843077
+ * @bug 6843077 6919944
  * @summary check for duplicate annotation values for type parameter
  * @author Mahmood Ali
  * @compile/fail/ref=DuplicateAnnotationValue.out -XDrawDiagnostics -source 1.7 DuplicateAnnotationValue.java
--- a/langtools/test/tools/javac/typeAnnotations/failures/common/innertypeparams/DuplicateAnnotationValue.out	Fri Feb 12 19:58:10 2010 +0300
+++ b/langtools/test/tools/javac/typeAnnotations/failures/common/innertypeparams/DuplicateAnnotationValue.out	Fri Feb 19 15:13:37 2010 -0800
@@ -1,2 +1,2 @@
-DuplicateAnnotationValue.java:10:39: compiler.err.duplicate.annotation.member.value: value, A
+DuplicateAnnotationValue.java:10:31: compiler.err.duplicate.annotation.member.value: value, A
 1 error
--- a/langtools/test/tools/javac/typeAnnotations/failures/common/newarray/DuplicateAnnotationValue.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/langtools/test/tools/javac/typeAnnotations/failures/common/newarray/DuplicateAnnotationValue.java	Fri Feb 19 15:13:37 2010 -0800
@@ -1,6 +1,6 @@
 /*
  * @test /nodynamiccopyright/
- * @bug 6843077
+ * @bug 6843077 6919944
  * @summary check for duplicate annotation values
  * @author Mahmood Ali
  * @compile/fail/ref=DuplicateAnnotationValue.out -XDrawDiagnostics -source 1.7 DuplicateAnnotationValue.java
--- a/langtools/test/tools/javac/typeAnnotations/failures/common/newarray/DuplicateAnnotationValue.out	Fri Feb 12 19:58:10 2010 +0300
+++ b/langtools/test/tools/javac/typeAnnotations/failures/common/newarray/DuplicateAnnotationValue.out	Fri Feb 19 15:13:37 2010 -0800
@@ -1,2 +1,2 @@
-DuplicateAnnotationValue.java:10:51: compiler.err.duplicate.annotation.member.value: value, A
+DuplicateAnnotationValue.java:10:43: compiler.err.duplicate.annotation.member.value: value, A
 1 error
--- a/langtools/test/tools/javac/typeAnnotations/failures/common/parambounds/DuplicateAnnotationValue.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/langtools/test/tools/javac/typeAnnotations/failures/common/parambounds/DuplicateAnnotationValue.java	Fri Feb 19 15:13:37 2010 -0800
@@ -1,6 +1,6 @@
 /*
  * @test /nodynamiccopyright/
- * @bug 6843077
+ * @bug 6843077 6919944
  * @summary check for duplicate annotation values for type parameter
  * @author Mahmood Ali
  * @compile/fail/ref=DuplicateAnnotationValue.out -XDrawDiagnostics -source 1.7 DuplicateAnnotationValue.java
--- a/langtools/test/tools/javac/typeAnnotations/failures/common/parambounds/DuplicateAnnotationValue.out	Fri Feb 12 19:58:10 2010 +0300
+++ b/langtools/test/tools/javac/typeAnnotations/failures/common/parambounds/DuplicateAnnotationValue.out	Fri Feb 19 15:13:37 2010 -0800
@@ -1,2 +1,2 @@
-DuplicateAnnotationValue.java:8:64: compiler.err.duplicate.annotation.member.value: value, A
+DuplicateAnnotationValue.java:8:56: compiler.err.duplicate.annotation.member.value: value, A
 1 error
--- a/langtools/test/tools/javac/typeAnnotations/failures/common/receiver/DuplicateAnnotationValue.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/langtools/test/tools/javac/typeAnnotations/failures/common/receiver/DuplicateAnnotationValue.java	Fri Feb 19 15:13:37 2010 -0800
@@ -1,6 +1,6 @@
 /*
  * @test /nodynamiccopyright/
- * @bug 6843077
+ * @bug 6843077 6919944
  * @summary check for duplicate annotation values in receiver
  * @author Mahmood Ali
  * @compile/fail/ref=DuplicateAnnotationValue.out -XDrawDiagnostics -source 1.7 DuplicateAnnotationValue.java
--- a/langtools/test/tools/javac/typeAnnotations/failures/common/receiver/DuplicateAnnotationValue.out	Fri Feb 12 19:58:10 2010 +0300
+++ b/langtools/test/tools/javac/typeAnnotations/failures/common/receiver/DuplicateAnnotationValue.out	Fri Feb 19 15:13:37 2010 -0800
@@ -1,2 +1,2 @@
-DuplicateAnnotationValue.java:9:37: compiler.err.duplicate.annotation.member.value: value, A
+DuplicateAnnotationValue.java:9:29: compiler.err.duplicate.annotation.member.value: value, A
 1 error
--- a/langtools/test/tools/javac/typeAnnotations/failures/common/typeArgs/DuplicateAnnotationValue.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/langtools/test/tools/javac/typeAnnotations/failures/common/typeArgs/DuplicateAnnotationValue.java	Fri Feb 19 15:13:37 2010 -0800
@@ -1,6 +1,6 @@
 /*
  * @test /nodynamiccopyright/
- * @bug 6843077
+ * @bug 6843077 6919944
  * @summary check for duplicate annotation values for type parameter
  * @author Mahmood Ali
  * @compile/fail/ref=DuplicateAnnotationValue.out -XDrawDiagnostics -source 1.7 DuplicateAnnotationValue.java
--- a/langtools/test/tools/javac/typeAnnotations/failures/common/typeArgs/DuplicateAnnotationValue.out	Fri Feb 12 19:58:10 2010 +0300
+++ b/langtools/test/tools/javac/typeAnnotations/failures/common/typeArgs/DuplicateAnnotationValue.out	Fri Feb 19 15:13:37 2010 -0800
@@ -1,2 +1,2 @@
-DuplicateAnnotationValue.java:9:50: compiler.err.duplicate.annotation.member.value: value, A
+DuplicateAnnotationValue.java:9:42: compiler.err.duplicate.annotation.member.value: value, A
 1 error
--- a/langtools/test/tools/javac/typeAnnotations/failures/common/typeparams/DuplicateAnnotationValue.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/langtools/test/tools/javac/typeAnnotations/failures/common/typeparams/DuplicateAnnotationValue.java	Fri Feb 19 15:13:37 2010 -0800
@@ -1,6 +1,6 @@
 /*
  * @test /nodynamiccopyright/
- * @bug 6843077
+ * @bug 6843077 6919944
  * @summary check for duplicate annotation values for type parameter
  * @author Mahmood Ali
  * @compile/fail/ref=DuplicateAnnotationValue.out -XDrawDiagnostics -source 1.7 DuplicateAnnotationValue.java
--- a/langtools/test/tools/javac/typeAnnotations/failures/common/typeparams/DuplicateAnnotationValue.out	Fri Feb 12 19:58:10 2010 +0300
+++ b/langtools/test/tools/javac/typeAnnotations/failures/common/typeparams/DuplicateAnnotationValue.out	Fri Feb 19 15:13:37 2010 -0800
@@ -1,2 +1,2 @@
-DuplicateAnnotationValue.java:8:54: compiler.err.duplicate.annotation.member.value: value, A
+DuplicateAnnotationValue.java:8:46: compiler.err.duplicate.annotation.member.value: value, A
 1 error
--- a/langtools/test/tools/javac/typeAnnotations/failures/common/wildcards/DuplicateAnnotationValue.java	Fri Feb 12 19:58:10 2010 +0300
+++ b/langtools/test/tools/javac/typeAnnotations/failures/common/wildcards/DuplicateAnnotationValue.java	Fri Feb 19 15:13:37 2010 -0800
@@ -1,6 +1,6 @@
 /*
  * @test /nodynamiccopyright/
- * @bug 6843077
+ * @bug 6843077 6919944
  * @summary check for duplicate annotation values for type parameter
  * @author Mahmood Ali
  * @compile/fail/ref=DuplicateAnnotationValue.out -XDrawDiagnostics -source 1.7 DuplicateAnnotationValue.java
--- a/langtools/test/tools/javac/typeAnnotations/failures/common/wildcards/DuplicateAnnotationValue.out	Fri Feb 12 19:58:10 2010 +0300
+++ b/langtools/test/tools/javac/typeAnnotations/failures/common/wildcards/DuplicateAnnotationValue.out	Fri Feb 19 15:13:37 2010 -0800
@@ -1,2 +1,2 @@
-DuplicateAnnotationValue.java:9:50: compiler.err.duplicate.annotation.member.value: value, A
+DuplicateAnnotationValue.java:9:42: compiler.err.duplicate.annotation.member.value: value, A
 1 error
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javap/typeAnnotations/ArrayClassLiterals2.java	Fri Feb 19 15:13:37 2010 -0800
@@ -0,0 +1,82 @@
+/*
+ * Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/*
+ * @test
+ * @bug 6918625
+ * @summary javap dumps type information of array class literals
+ */
+
+import java.io.*;
+
+public class ArrayClassLiterals2 {
+    public static void main(String[] args) throws Exception {
+        new ArrayClassLiterals2().run();
+    }
+
+    public void run() throws IOException {
+        File classFile = new File(System.getProperty("test.classes"), "ArrayClassLiterals2$Test.class");
+
+        verify(classFile,
+               "RuntimeInvisibleTypeAnnotations:",
+               "CLASS_LITERAL_GENERIC_OR_ARRAY"
+               );
+
+        if (errors > 0)
+            throw new Error(errors + " found.");
+    }
+
+    String javap(File f) {
+        StringWriter sw = new StringWriter();
+        PrintWriter out = new PrintWriter(sw);
+        int rc = com.sun.tools.javap.Main.run(new String[] { "-v", f.getPath() }, out);
+        if (rc != 0)
+            throw new Error("javap failed. rc=" + rc);
+        out.close();
+        return sw.toString();
+    }
+
+    void verify(File classFile, String... expects) {
+        String output = javap(classFile);
+        for (String expect: expects) {
+            if (output.indexOf(expect)< 0)
+                error(expect + " not found");
+        }
+    }
+
+    void error(String msg) {
+        System.err.println(msg);
+        errors++;
+    }
+
+    int errors;
+
+
+    /*********************** Test class *************************/
+    static class Test {
+        @interface A { }
+        void test() {
+            Object a = @A String @A [] @A [].class;
+        }
+    }
+}